Prüfcode (Block Check Code) -Berechnung
Berechnet entsprechend der am Eingang s1_Control festgelegten Methode eine Prüfsumme (BCC-Block Check Code) über einen Speicherbereich, der über eine Anfangsadresse s2_Start und eine Anzahl von Bytes s3_Number definiert ist. Der Prüfcode (BCC) wird in das niederwertige Byte des Speicherregisters d geschrieben. (BCC ist ein Byte. Das höherwertige Byte von d ändert sich nicht.)
Eingang
Legt die Berechnungsmethode für den Prüfcode BCC fest:
0: Addition (SYS_BCC_CALCULATION_METHOD_ADD)
1: Subtraktion (SYS_BCC_CALCULATION_METHOD_SUB)
2: Exklusiv-ODER (SYS_BCC_CALCULATION_METHOD_XOR)
16#A: CRC-16 (SYS_BCC_CALCULATION_METHOD_CRC16)
Anfangsadresse für die Prüfsummenberechnung (BCC).
Legt die Anzahl der Bytes für die Prüfsummenberechnung fest.
Ausgang
Speicherregister für die Prüfsumme (BCC).
Wir empfehlen, anstelle von diesem F-Befehl den entsprechenden FP7-Befehl zu verwenden: FP_CRC, FP_BCC
Spezifikationen für den Steuercodes1_Control
0: Addition (SYS_BCC_CALCULATION_METHOD_ADD)
1: Subtraktion (SYS_BCC_CALCULATION_METHOD_SUB)
2: Exklusiv-ODER (SYS_BCC_CALCULATION_METHOD_XOR)
16#A: CRC-16 (SYS_BCC_CALCULATION_METHOD_CRC16)
0–F
Wenn als Berechnungsmethode CRC-16 angegeben ist, kann als Umwandlungswert kein ASCII-Code ausgewählt werden.
wenn die Anzahl der ausgewählten Bytes für die Sollwerte die Grenze des ausgewählten Datenbereichs überschreitet.
wenn die Anzahl der ausgewählten Bytes für die Sollwerte die Grenze des ausgewählten Datenbereichs überschreitet.
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
Start: BOOL:=FALSE;
(*activates the function*)
BCC_Calc_Method: INT:=2;
ASCII_String: STRING[32]:='%01#RCSX0000';
(*specifies the operation:
0: addition
1: subtraction
2:XOR*)
BCC: WORD:=0;
(*result after a 0->1 leading
edge from start: 10#172*)
END_VAR
Ein Blockprüfzeichen wird mit ASCII_String berechnet, wenn Start auf TRUE gesetzt wird. Als Berechnungsmethode wird Exklusiv-ODER verwendet. (Verwenden Sie diese Methode, wenn große Datenmengen übertragen werden.)
Wie die Prüfsumme (BCC) mit Hilfe der XOR-Verknüpfung berechnet wird:
bvar_1 |
bvar_2 |
bvar_3 |
![]() |
0 |
0 |
0 |
|
0 |
1 |
1 |
|
1 |
0 |
1 |
|
1 |
1 |
0 |
Der ASCII-BIN-Code der ersten beiden Zeichen wird miteinander verglichen, um ein XOR-Verknüpfungsergebnis mit 8 Zeichen Länge zu erhalten.
Signal für den Vergleich |
ASCII-BIN-Code |
% |
00100101 |
0 |
00110000 |
Ergebnis der XOR-Verknüpfung |
00010101 |
Dieses Ergebnis wird mit dem ASCII-BIN-Code des nächsten Zeichens verglichen, hier "1".
Signal für den Vergleich |
ASCII-BIN-Code |
Ergebnis der XOR-Verknüpfung |
00010101 |
1 |
00110001 |
Nächste XOR-Verknüpfung |
00100100 |
So wird bis zum letzten Zeichen verfahren.
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_F,F70_BCC!,Instance,26,1,34,7,,?DEN?Ds1_Control?Ds2_Start?Ds3_Number?AENO?Cd);
B(B_CONTACT,,Start,3,2,5,4,);
B(B_VARIN,,BCC_Calc_Method,24,3,26,5,);
B(B_F,Adr_Of_VarOffs_I!,Instance,16,5,25,9,,?D@'Var'?DOffs?CAdr);
B(B_VAROUT,,BCC,34,3,36,5,);
B(B_VARIN,,ASCII_String,11,4,13,6,);
B(B_VARIN,,2,14,7,16,9,);
B(B_F,LEN!,Instance,16,8,21,11,,?DIN?C);
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
IF start then
F70_BCC( s1_Control:= BCC_Calc_Methode,
s2_Start:= Adr_Of_VarOffs( Var:= ASCII_String,
Offs:= 2),
s3_Number:= LEN( ASCII_String),
d=> BCC);
END_IF;