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 |
|
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.
Befehl zur Abfrage von Messdaten #W000
Das erste Zeichen ist #, das letzte |. Die CRC-16 des Befehls 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 |
