FP_BCC

Calcul du caractère de contrôle de bloc

Cette instruction FP calcule le caractère de contrôle de blocs de données (BCC) selon la méthode de calcul spécifiée par s1_Control. Les données sont spécifiées par l’adresse de départ s2_Start et le nombre d’octets n_Bytes. Le BCC est sauvegardé dans la zone de 16 bits spécifiée par d.

Paramètres

Entrée

s1_Control (WORD, INT, UINT)

Méthode de calcul

s2_Start (WORD, INT, UINT)

Adresse de départ

n_Bytes (WORD, INT, UINT)

Nombre d’octets

Sortie

d (WORD, INT, UINT)

Caractère de contrôle de bloc

Remarques

Paramétrer le code de contrôle s1_Control

  1.  (1) Méthode de calcul

    0 : Addition (SYS_BCC_CALCULATION_METHOD_ADD)

    1 : Soustraction (SYS_BCC_CALCULATION_METHOD_SUB)

    2 : OU exclusif (SYS_BCC_CALCULATION_METHOD_XOR)

    16#A : CRC-16 (SYS_BCC_CALCULATION_METHOD_CRC16)

  2.  (2) Position de départ du calcul (octets à partir de s2_Start)

    16#0–16#F

  3.  (3) Position de départ de la sauvegarde (octets à partir de d)

    0 : Données binaires (1 octet)

    1 : Données ASCII (2 octets)

  4.  (4) Données à convertir

Drapeaux d’erreur

sys_bIsOperationErrorHold (passe à TRUE et reste TRUE)

Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.

sys_bIsOperationErrorNonHold (passe à TRUE pendant un cycle)

Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.

Exemple

En-tête du POU

Toutes les variables d’entrée et de sortie utilisées pour programmer cette fonction ont été déclarées dans l’en-tête du POU.Le même en-tête de POU est utilisé pour tous les langages de programmation.

	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

Corps du POU

Lorsque bStart devient TRUE, un calcul du caractère de contrôle de bloc est exécuté sur sASCII_String. La méthode de calcul est OU exclusif. (Utilisez cette méthode lorsque de larges quantités de données sont transmises).

OU exclusif :

bvar_1

bvar_2

bvar_3

0

0

0

0

1

1

1

0

1

1

1

0

Les codes binaires des deux premiers caractères sont comparés l’un à l’autre pour générer le résultat de l’opération OU exclusif à 8 caractères. Ce résultat est ensuite comparé au code binaire du caractère suivant et ainsi de suite jusqu’au dernier caractère. Le dernier résultat OU exclusif est le caractère de contrôle des blocs de données.

Calcul BCC avec OU exclusif :

Corps en 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

Dans cet exemple, Adr_Of_VarOffs_I est utilisée pour créer un offset de 2 mots pour compenser l’en-tête de la chaîne de caractères. Avec LEN, le calcul BCC est exécuté sur l’intégralité de la chaîne de caractères.

Corps 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;

Modifié le : 2022-05-06Feedback on this pagePanasonic hotline