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 | ||
| + | </ | ||
| </ | </ | ||