Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | |||
wiki:ems:ems-telegramme [2019/05/19 12:01] ingof |
wiki:ems:ems-telegramme [2019/06/09 12:10] (aktuell) ingof |
||
---|---|---|---|
Zeile 24: | Zeile 24: | ||
Die Telegramme werden nach dem Polling gesendet. Der Busmaster kann dann Telegramme selber an alle Busteilnehmer senden. Wenn keine Telegramme mehr gesendet werden sollen wird das Polling beantwortet. | Die Telegramme werden nach dem Polling gesendet. Der Busmaster kann dann Telegramme selber an alle Busteilnehmer senden. Wenn keine Telegramme mehr gesendet werden sollen wird das Polling beantwortet. | ||
Dabei ist das Bit7 der Zieladresse nicht gesetzt. | Dabei ist das Bit7 der Zieladresse nicht gesetzt. | ||
+ | </ | ||
+ | |||
+ | <WRAP nopagebreak> | ||
+ | ==== CRC ==== | ||
+ | |||
+ | Die CRC ist eine XOR-Verknüpfung mit Rotation. Wenn der Datenwert größer als 0x7f ist wird der Wert mit 0x12 zusätzlich mit XOR verknüpft: | ||
+ | Hier ein Beispiel-Code zur CRC-Berechnung: | ||
+ | < | ||
+ | poly = 12 | ||
+ | crc1 = 0x00 | ||
+ | |||
+ | for i in range(0, | ||
+ | crc1 = crc1 ^ int(a[i], | ||
+ | crc2 = crc1 | ||
+ | if crc1 & 0x80: crc1 ^= poly | ||
+ | |||
+ | d = 0 | ||
+ | if crc1 & 0x80: d = 1 | ||
+ | crc1 = crc1 << 1 | ||
+ | crc1 &= 0xfe | ||
+ | crc1 |= d | ||
+ | |||
+ | => crc2 | ||
+ | </ | ||
</ | </ | ||