Contrôle de redondance cyclique
Cette instruction FP calcule le caractère de contrôle de blocs de données (CRC) 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. La valeur CRC est sauvegardée dans la zone de 16 bits spécifiée par d.
Entrée
Méthode de calcul
Adresse de départ
Nombre d’octets
Sortie
Valeur CRC
Paramétrer le code de contrôle s1_Control
0 : CRC (SYS_CRC_CALCULATION_METHOD_CRC16)
1 : CRC-CCITT (SYS_CRC_CALCULATION_METHOD_CRC16_CCITT)
16#0–16#F
16#0–16#F
16#0 : Données binaires (1 octet)
Polynômes générateurs
CRC-16: x16 + x15 + x2 +1
CRC-CCITT: x16 + x12 + x5 +1
Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.
Si la méthode de calcul ou les données de conversion spécifiées par s1_Control sont en dehors de l’intervalle autorisé
Si la zone spécifiée à l’aide du modificateur d’adresse est en dehors des limites autorisées.
Si la méthode de calcul ou les données de conversion spécifiées par s1_Control sont en dehors de l’intervalle autorisé
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*)
wStartAddress: WORD:=16#1002;
iNumberBytes: INT:=22;
wCRC: WORD:=0;
iControlCode: INT:=16#00B0;
END_VAR
La fonction est exécutée lorsque la variable bStart est définie sur TRUE.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 7 ;
NETWORK_BODY
B(B_F,FP_CRC!,,10,1,17,7,,?DEN?Ds1_Control?Ds2_Start?Dn_Bytes?AENO?Cd);
B(B_CONTACT,,bStart,4,2,6,4,);
B(B_VARIN,,iControlCode,8,3,10,5,);
B(B_VARIN,,wStartAddress,8,4,10,6,);
B(B_VARIN,,iNumberBytes,8,5,10,7,);
B(B_VAROUT,,wCRC,17,3,19,5,);
L(1,3,4,3);
L(6,3,10,3);
L(1,0,1,7);
END_NETWORK_BODY
END_NET_WORK
END_BODY
FP_CRC(s1_Control := iControlCode,
s2_Start := wStartAddress,
n_Bytes := iNumberBytes,
d => wCRC);