Comparación de bloques de datos
Compara el contenido del bloque de datos especificado por s2_Start con el contenido del bloque de datos especificado por s3_Start según el contenido especificado por s1_Control si la entrada de trigger EN está a TRUE.
Entrada
código de control que especifica la posición y el número de bytes a comparar
área de inicio de los datos a comparar con s3_Start
área de inicio de los datos a comparar con s2_Start
Especificación del código de control s1_Control
Número de bytes a comparar
rango: 16#01–16#99 (BCD)
Posición del byte inicial del bloque de datos especificado por s2_Start
1: A partir del byte de mayor peso
0: A partir del byte de menor peso
Posición del byte inicial del bloque de datos especificado por s3_Start
1: A partir del byte de mayor peso
0: A partir del byte de menor peso
El resultado de la operación se almacena en el registro especial R900B. Si s2_Start=s3_Start, el registro especial está a ON.
La bandera sys_bIsEqual se actualiza cada vez que se ejecuta una instrucción de comparación. Por lo tanto, el programa que utilice la bandera R900B se debe ejecutar justo después de la instrucción F64_BCMP .
Las variables s1 y s2 tienen que ser del mismo tipo de datos.
Todas las variables de entrada y de salida utilizadas para la programación de esta función han sido declaradas en la Cabecera de la POU. Se utiliza la misma cabecera de la POU para todos los lenguajes de programación.
VAR
start: BOOL:=FALSE;
(*activates the function*)
ControlCode: WORD:=16#1106;
(*s2 starting from upper byte
s3 starting from upper byte
compare 6 bytes*)
DataBlock1: ARRAY [0..5] OF INT:=[6(1234)];
DataBlock2: ARRAY [0..5] OF INT:=[6(1234)];
equal_block: BOOL:=FALSE;
END_VAR
Cuando la variable start está ajustada a TRUE, se ejecuta la función.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 6 ;
NETWORK_BODY
B(B_CONTACT,,start,4,1,6,3,);
B(B_F,F64_BCMP!,Instance,10,0,18,6,,?DEN?Ds1_Control?Ds2_Start?Ds3_Start?AENO);
B(B_VARIN,,ControlCode,8,2,10,4,);
B(B_VARIN,,DataBlock1[0],8,3,10,5,);
B(B_VARIN,,DataBlock2[0],8,4,10,6,);
L(1,2,4,2);
L(6,2,10,2);
L(1,0,1,6);
END_NETWORK_BODY
END_NET_WORK
END_BODY
IF start then
F64_BCMP( s1_Control:= ControlCode,
s2_Start:= DataBlock1[0],
s3_Start:= DataBlock2[0]);
END_IF;