FP_COMPARE_BLOCK

Comparación de bloques de datos

Compara el contenido del bloque de datos especificado por s3_StartBlock1 con el contenido del bloque de datos especificado por s4_StartBlock2 si la entrada de trigger EN es TRUE. s1_Control especifica las posiciones de los bytes, y n_Bytes el número de bytes.

Parámetros

Entrada

s1_Control (WORD, INT, UINT)

Código de control que especifica las posiciones de los bytes

n_Bytes (WORD, INT, UINT)

Número de bytes a comparar. Valores: 1–99

s3_StartBlock1 (WORD, INT, UINT)

Dirección de inicio del bloque de datos 1 a comparar con s4_StartBlock2

s4_StartBlock2 (WORD, INT, UINT)

Dirección de inicio del bloque de datos 2 a comparar con s3_StartBlock1

Salida

d_IsEqual (BOOL)

Comparar el resultado de la operación lógica

TRUE si s3_StartBlock1 = s4_StartBlock2

Observaciones

  • Especificación del código de control s1_Control

    1.  (1) Posición del byte inicial del bloque de datos especificado por s3_StartBlock1

      1: comienza por el byte de mayor peso

      0: comienza por el byte de menor peso

    2.  (2) Posición del byte inicial del bloque de datos especificado por s4_StartBlock2

      1: comienza por el byte de mayor peso

      0: comienza por el byte de menor peso

  • Las variables s3_StartBlock1 y s4_StartBlock2 tienen que ser del mismo tipo de datos.

Ejemplo

Cabecera de la POU

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
		bStart: BOOL:=FALSE;
			(*activates the function*)
		wControlCode: WORD:=16#11;
			(*s3 starting from upper byte
s4 starting from upper byte
compare 6 bytes*)
		iNumberOfBytes: INT:=6;
			(*number of bytes to be compared*)
		awDataBlock1: ARRAY [0..2] OF WORD:=[3(0)];
		aiDataBlock2: ARRAY [0..5] OF INT:=[6(1234)];
		bCompareResult: BOOL:=FALSE;
	END_VAR

Cuerpo de la POU

Cuando la variable bStart se encuentra a TRUE, se ejecuta la función.

Cuerpo LD

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 8 ;
        NETWORK_BODY
B(B_F,FP_COMPARE_BLOCK!,,13,1,24,8,,?DEN?Ds1_Control?Dn_Bytes?Ds3_StartBlock1?Ds4_StartBlock2?AENO?Cd_IsEqual);
B(B_CONTACT,,bStart,5,2,7,4,);
B(B_VARIN,,wControlCode,11,3,13,5,);
B(B_VARIN,,iNumberOfBytes,11,4,13,6,);
B(B_VARIN,,awDataBlock1[0],11,5,13,7,);
B(B_VARIN,,aiDataBlock2[0],11,6,13,8,);
B(B_VAROUT,,bCompareResult,24,3,26,5,);
L(1,3,5,3);
L(7,3,13,3);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Cuerpo en ST

If (bStart) then
    FP_COMPARE_BLOCK(s1_Control := wControlCode,
                     n_Bytes := iNumberOfBytes,
                     s3_StartBlock1[0] := awDataBlock1,
                     s4_StartBlock2[0] := aiDataBlock2,
                     d_IsEqual => bCompareResult);
End_if;

Modificado el: 2022-11-15Comentarios sobre esta páginaLínea directa de Panasonic