Sommer Messtechnik CRC-16

Der CRC-16 (cyclic redundancy check) für die Datenübertragung von Sommer Messtechnik Geräten basiert auf dem ZMODEM-Protokoll. Beim Datenaustausch zwischen zwei Geräten berechnet das Empfangs-gerät den CRC-Wert. Dieser Wert wird mit dem CRC-Wert verglichen, der vom anderen Gerät gesendet wird, um zu überprüfen, ob die Daten korrekt übertragen wurden. Informationen zur Berechnung der CRC-16-Werte finden Sie in der Fachliteratur oder bei Sommer Messtechnik.

Sie können hier den CRC eines Befehls online berechnen.

Wenn Sie CRCs automatisch berechnen wollen, können Sie das folgende Verfahren in Ihrer Datenlogger- oder Controller-Software implementieren.

Der CRC-16 wird zeichenweise berechnet. Der Startwert für die erste CRC-16-Berechnung ist immer 0.

Die folgende Prozedur gibt den CRC-16-Wert eines einzelnen Zeichens zurück:

byte1 = CRC-16 Rechtsshift um 8 Bits

oberes Byte verschwindet

uint1 = c

neues Zeichen, oberes Byte = 0

uint2 = CRC-16 Linksshift um 8 Bits

unteres Byte = 0

uint3 = crc16tab[byte1]

Wert aus der CRC-16 Tabelle

Crc16 = uint3 (excl. or) uint2 (excl. or) uint1

 

Kopieren

Berechnung des CRC-16 in C/C++

crc16 = crc16tab[(unsigned char)(crc16>>8)] ^ (crc16<<8) ^ (unsigned int)(c);

Das Array crc16tab ist unter CRC-16-Array aufgeführt.

BEISPIEL

Befehl zur Abfrage von Messdaten #W0000$pt|4A29;

Das erste Zeichen ist #, das letzte |. Die CRC-16 des Befehls ist 4A29 und das Endzeichen ist ;.

Die CRC-16-Berechnung erfolgt sequentiell mit dem Startwert 0 für die erste CRC-16-Berechnung:

Position

Zeichenkette

CRC-16

Start

 

0000

0

#

0023

1

#W

2357

2

#W0

4331

3

#W00

4997

4

#W000

4EDD

5

#W0001

743B

6

#W0001$

0537

7

#W0001$p

67D5

8

#W0001$pt

C935

9

#W0001$pt|

7D19