FP_BCC

Calcular el Chequeo Bloque Caracteres

Estas instrucciones FP calculan el Chequeo Bloque Caracteres (BCC) conforme al cálculo especificado por s1_Control. Los datos se especifican por la dirección de inicio s2_Start y el número de bytes n_Bytes. El BCC se guarda en el área de 16 bits especificada por d.

Parámetros

Entrada

s1_Control (WORD, INT, UINT)

Método de cálculo

s2_Start (WORD, INT, UINT)

Dirección de inicio

n_Bytes (WORD, INT, UINT)

Número de bytes

Salida

d (WORD, INT, UINT)

Chequeo Bloque Caracteres

Observaciones

Especificación del código de control  s1_Control

  1.  (1) Método de cálculo

    0: Suma (SYS_BCC_CALCULATION_METHOD_ADD)

    1: Sustracción (SYS_BCC_CALCULATION_METHOD_SUB)

    2: OR exclusiva (SYS_BCC_CALCULATION_METHOD_XOR)

    16#A: CRC-16 (SYS_BCC_CALCULATION_METHOD_CRC16)

  2.  (2) Posición inicial de cálculo (bytes de s2_Start)

    16#0–16#F

  3.  (3) Posición inicial de almacenamiento (bytes de d)

    0: Datos binarios (1 byte)

    1: Datos ASCII (2 bytes)

  4.  (4) Datos a convertir

Banderas de error

sys_bIsOperationErrorHold (pasa a TRUE y permanece TRUE)

si el área especificada utilizando el modificador índice supera el límite.

sys_bIsOperationErrorNonHold (pasa a TRUE para un ciclo de scan)

si el área especificada utilizando el modificador índice supera el límite.

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*)
		iBCC_Calc_Method: INT:=2;
		sASCII_String: STRING[32]:='%01#RCSX0000';
			(*specifies the operation:
0: addition
1: subtraction
2:XOR*)
		wBCC: WORD:=0;
			(*result after a 0->1 leading
edge from start: 10#172*)
	END_VAR

Cuerpo de la POU

Si bStart cambia a TRUE, se realiza un cálculo de Chequeo Bloque Caracteres en sASCII_String. El método de cálculo es OR exclusiva. (Utilice este método en caso de transmitirse grandes cantidades de datos).

OR exclusiva:

bvar_1

bvar_2

bvar_3

0

0

0

0

1

1

1

0

1

1

1

0

Los códigos binarios de los dos primeros caracteres se comparan entre sí para devolver un resultado de OR exclusiva de 8 caracteres. A continuación, este resultado se compara con el código binario del siguiente carácter y, así, sucesivamente hasta el último carácter. El último resultado de la OR exclusiva corresponde al Chequeo Bloque Caracteres.

Cálculo de BCC utilizando OR exclusiva:

  1.  (1) Código ASCII-HEXADECIMAL
  2.  (2) Código ASCII-BINARIO
  3.  (3) OR exclusiva (3)
  4.  (4) cálculo
  5.  (5) Chequeo Bloque Caracteres (BCC)
  6.  (6) El resultado del cálculo (16#1D) se guarda en d.

Cuerpo LD

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 11 ;
        NETWORK_BODY
B(B_CONTACT,,bStart,3,2,5,4,);
B(B_VARIN,,iBCC_Calc_Method,24,3,26,5,);
B(B_F,Adr_Of_VarOffs_I!,,16,5,25,9,,?D@'Var'?DOffs?CAdr);
B(B_VAROUT,,wBCC,33,3,35,5,);
B(B_VARIN,,sASCII_String,11,4,13,6,);
B(B_VARIN,,2,14,7,16,9,);
B(B_F,LEN!,,16,8,21,11,,?DIN?C);
B(B_F,FP_BCC!,,26,1,33,7,,?DEN?Ds1_Control?Ds2_Start?Dn_Bytes?AENO?Cd);
L(16,5,16,7);
L(13,5,16,5);
L(13,5,13,10);
L(13,10,16,10);
L(25,5,25,7);
L(25,5,26,5);
L(26,6,26,10);
L(21,10,26,10);
L(5,3,26,3);
L(1,3,3,3);
L(1,0,1,11);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

En este ejemplo se utiliza Adr_Of_VarOffs_I para crear un offset de 2 palabras para compensar el código de inicio de la cadena. Utilizando LEN, el cálculo de BCC se realiza en la cadena de datos completa.

Cuerpo en ST

IF bStart then
    FP_BCC(s1_Control := iBCC_Calc_Method,
           s2_Start := Adr_Of_VarOffs( Var:= sASCII_String, Offs:= 2),
           n_Bytes := LEN( sASCII_String),
           d => wBCC);
END_IF;

Modificado el: 2022-04-19Comentarios sobre esta páginaPanasonic hotline