Zyklische Blockprüfung
Dieser FP-Befehl berechnet die zyklische Blockprüfung (CRC) entsprechend der durch s1_Control festgelegten Methode. Die Werte werden durch die Anfangsadresse s2_Start und die Anzahl der Bytes n_Bytes festgelegt. Der CRC-Wert wird in den Speicherbereich d geschrieben.
Eingang
Berechnungsmethode
Anfangsadresse
Anzahl der Bytes
Ausgang
CRC-Wert
Spezifikationen für den Steuercode 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: Binärwerte (1 Byte)
Generatorpolynome
CRC-16: x16 + x15 + x2 +1
CRC-CCITT: x16 + x12 + x5 +1
wenn der mit dem Index-Modifizierer definierte Bereich größer ist als der zulässige Bereich
wenn die durch s1_Control festgelegte Berechnungsmethode oder die Umwandlungswerte außerhalb des zulässigen Bereichs liegen
wenn der mit dem Index-Modifizierer definierte Bereich größer ist als der zulässige Bereich
wenn die durch s1_Control festgelegte Berechnungsmethode oder die Umwandlungswerte außerhalb des zulässigen Bereichs liegen
Im POE-Kopf werden alle Ein- und Ausgangsvariablen deklariert, die für die Programmierung dieser Funktion verwendet werden. Für alle Programmiersprachen wird der gleiche POE-Kopf verwendet.
VAR
bStart: BOOL:=FALSE;
(*activates the function*)
wStartAddress: WORD:=16#1002;
iNumberBytes: INT:=22;
wCRC: WORD:=0;
iControlCode: INT:=16#00B0;
END_VAR
Wenn die Variable bStart auf TRUE gesetzt wird, wird die Funktion ausgeführt.
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);