F70_BCC

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.)

Parameter

Eingang

s1_Control (INT)

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)

s2_Start (WORD, INT, UINT)

Anfangsadresse für die Prüfsummenberechnung (BCC).

s3_Number (INT)

Legt die Anzahl der Bytes für die Prüfsummenberechnung fest.

Ausgang

d (WORD, INT, UINT)

Speicherregister für die Prüfsumme (BCC).

Anmerkungen

Wir empfehlen, anstelle von diesem F-Befehl den entsprechenden FP7-Befehl zu verwenden: FP_CRC, FP_BCC

Spezifikationen für den Steuercodes1_Control

  1.  (1) Berechnungsmethode

    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)

  2.  (2) Startbyteposition für die Berechnung (Anzahl der Bytes ab s2)

    0–F

  3.  (3) Startbyteposition für das Speichern von Ergebnissen (Anzahl der Bytes ab d)
  4.  (4) Umwandlungswert
    • 0: Binärwerte (CRC: 2 Byte/Nicht-CRC: 1 byte)
    • 1: ASCII-Werte (2 Byte)
Anmerkung

Wenn als Berechnungsmethode CRC-16 angegeben ist, kann als Umwandlungswert kein ASCII-Code ausgewählt werden.

Fehleralarmmerker

sys_bIsOperationErrorHold (wird auf TRUE gesetzt und bleibt TRUE)

wenn die Anzahl der ausgewählten Bytes für die Sollwerte die Grenze des ausgewählten Datenbereichs überschreitet.

sys_bIsOperationErrorNonHold (wird für einen Zyklus auf TRUE gesetzt)

wenn die Anzahl der ausgewählten Bytes für die Sollwerte die Grenze des ausgewählten Datenbereichs überschreitet.

Beispiel

POE-Kopf

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

KOP-Rumpf

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

  1.  (1) ASCII-HEX-code
  2.  (2) ASCII-BIN-code
  3.  (3) Exklusiver ORing
  4.  (4) Berechnung
  5.  (5) Blockprüfzeichen (BCC)
  6.  (6) Das Ergebnis (16#1D) wird in d gespeichert.

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

ST-Rumpf

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;

Letzte Änderung am: 2022-04-19Feedback zu dieser SeitePanasonic Hotline