# LGF_CalcCRC32Advanced (FC / 3.1.0)

Übersicht

Autor: Siemens Industry Support

## Kurzbeschreibung

Die CRC-Berechnung wird für die Fehlererkennung bei der Datenübertragung verwendet. Das Ergebnis einer Berechnung liefert einen CRC-Wert über die gesendeten Daten. Der Empfänger erkennt eine fehlerhafte Übertragung aufgrund des ungleichen CRC-Werts. Die Funktion `LGF_CalcCRC32Advanced` verwendet als Generatorpolynom (Maske) 32 Bit sowie die Parameter `finalXorValue`, `reflectInput` und `reflectResult`.

### Baustein Schnittstelle

| LGF_CalcCRC32Advanced (FC) |
--- | --- | ---
DWord |  |  | initValue |  | Ret_Val |  |  | DWord
DWord |  |  | mask |  | error |  |  | Bool
DWord |  |  | finalXorValue |  | status |  |  | Word
Bool |  |  | reflectInput |  |  |  |  |
Bool |  |  | reflectResult |  |  |  |  |
UInt |  |  | noOfElements |  |  |  |  |
Array[*] of Byte |  |  | array |  |  | Array[*] of Byte

### Input Parameter

Bezeichner | Datentyp | Beschreibung
--- | --- | ---
initValue | DWord | Startwert, mit dem die Berechnung durchgeführt wird. Wenn keinen Startwert notwendig ist - 16#00 zuweisen.
mask | DWord | Generatorpolynom, mit dem die Berechnung durchgeführt wird. (Maske / CRC Polynom)
finalXorValue | DWord | Wert, mit dem am Ende eine weitere XOR-Operation durchgeführt wird
reflectInput | Bool | TRUE: wird die Reihenfolge der Bits innerhalb des Eingangsbytes gespiegelt. Aus der Reihenfolge 0…7 wird 7…0.
reflectResult | Bool | TRUE: wird die Reihenfolge der Bits innerhalb des Ergebnisses gespiegelt. Aus der Reihenfolge 0…7 wird 7…0.
noOfElements | UInt | Anzahl der Elemente, die in der CRC-Berechnung verwendet werden 0 = alle Elemente / das gesamte Array

### Output Parameter

Bezeichner | Datentyp | Beschreibung
--- | --- | ---
Ret_Val | DWord | Berechneter CRC-Wert (Rückgabewert der Funktion).
error | Bool | FALSE: Kein Fehler / TRUE: Während der Ausführung des FB ist ein Fehler aufgetreten
status | Word | 16#0000-16#7FFF: Status des FB / 16#8000-16#FFFF: Fehleridentifikation (siehe folgende Tabelle)

### In/Out Parameter

Bezeichner | Datentyp | Beschreibung
--- | --- | ---
array | Array[*] of Byte | Datenstrom, für den der CRC-Wert berechnet werden soll.

### Status & Error Meldungen

Code / Wert | Bezeichner / Beschreibung
--- | ---
16#0000 | STATUS_NO_ERROR Kein Fehler beim Aufruf der Funktion aufgetreten
16#8400 | ERR_NO_OF_ELEMENTS Fehler aufgrund eines undefinierten Zustands in der Zustandsmaschine

## Funktionsbeschreibung

Die Funktion berechnet aus einem beliebig großen Datenstrom den CRC-Wert. Der Datenstrom setzt sich aus den einzelnen Elementen des Arrays am Ein- / Ausgangsparameter `array` zusammen. Der Startwert `initValue` und das Generatorpolynom `mask` sind frei wählbar.

Über die booleschen Eingangsparameter `reflectInput` und `reflectResult` können Sie optional die Bits der Eingangsdaten bzw. des CRC-Werts spiegeln. Außerdem wird mit dem CRC-Wert am Ende und dem Wert `finalXorValue` eine XOR-Operation durchgeführt.

Mit dem Eingang `noOfELements` kann die gewünschte Anzahl an Elementen zur Berechnung vorgegeben werden, es gilt:

AnzahlElemente <= (ArrayObergrenze - ArrayUntergrenze + 1)

Hinweis
  Für die Berechnung der CRC-Werte stehen verschiedene Online-Tools zur Verfügung. Die Funktion des Bausteins wurde mit folgendem Online-Tool getestet, da es die Eingangsparameter `mask` (Polynom) und `initValue` (Initial Value) unterstützt:
  http://www.sunshine2k.de/coding/javascript/crc/crc_js.html

## Änderungshistorie

Version & Datum | Änderungsbeschreibung
--- | ---
| 1.0.0 | Siemens Industry Online Support
| 03.07.2018 | First released version
| 1.0.1 | Siemens Industry Online Support
| 17.08.2018 | Upgrade: TIA V15 Update 2
| 1.0.2 | Siemens Industry Online Support
| 23.11.2018 | Upgrade: TIA V15.1
| 1.0.3 | Simatic Systems Support
| 09.10.2019 | Code refactoring, comments added
| 3.0.0 | Simatic Systems Support
| 23.04.2020 | Set version to V3.0.0, harmonize the version of the whole library
| 3.0.1 | Simatic Systems Support
| 12.11.2020 | Insert documentation Assign default start values to optional inputs - `initValue`, `mask`, `finalXorValue`, `reflectInput`, `reflectResult`
| 3.1.0 | Simatic Systems Support
| 14.04.2023 | Add input `noOfElements` to assign length to be converted different from array size Add outputs `error` and `status` display a wrong assignment to `noOfElements`