# LGF_CalcCRC16 (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_CalcCRC16` verwendet als Generatorpolynom (Maske) 16 Bit.

### Baustein Schnittstelle

| LGF_CalcCRC16 (FC) |
--- | --- | ---
Word |  |  | initValue |  | Ret_Val |  |  | Word
Word |  |  | mask |  | error |  |  | Bool
UInt |  |  | noOfElements |  | status |  |  | Word
Array[*] of Byte |  |  | array |  |  | Array[*] of Byte

### Input Parameter

Bezeichner | Datentyp | Beschreibung
--- | --- | ---
initValue | Word | Startwert, mit dem die Berechnung durchgeführt wird. Wenn keinen Startwert notwendig ist - 16#00 zuweisen.
mask | Word | Generatorpolynom, mit dem die Berechnung durchgeführt wird. (Maske / CRC Polynom)
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 | Word | 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.

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`
| 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`