Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
|
wiki:ems:ems-telegramme [2014/12/30 18:17] ingof |
wiki:ems:ems-telegramme [2019/06/09 12:10] (aktuell) ingof |
||
|---|---|---|---|
| Zeile 2: | Zeile 2: | ||
| ====== Telegrammaufbau ====== | ====== Telegrammaufbau ====== | ||
| - | Es gibt mehrere Telegrammtypen auf dem Bus. hier eine kleine Übersicht: | + | Es gibt mehrere Telegrammtypen auf dem Bus. Jedes Telegramm wird mit einem Break beendet. Dieses Break ist ein 0-Byte bei dem das Stopbit auch auf " |
| + | |||
| + | Hier eine kleine Übersicht: | ||
| </ | </ | ||
| Zeile 22: | 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 | ||
| + | </ | ||
| </ | </ | ||
| Zeile 36: | Zeile 62: | ||
| ==== Beispiele ==== | ==== Beispiele ==== | ||
| + | |||
| + | Polling an an 0x10:\\ | ||
| + | '' | ||
| + | |||
| + | Antwort " | ||
| + | ''' | ||
| + | |||
| + | Abfrage eines anderen Gerätes: | ||
| {{: | {{: | ||
| - | Abfrage eines anderen Gerätes | ||
| + | |||
| + | Setzen eines Wertes: | ||
| {{: | {{: | ||
| - | Setzen eines Wertes | ||
| </ | </ | ||
| Zeile 78: | Zeile 112: | ||
| |< | |< | ||
| - | |@# | + | |@# |
| |@# | |@# | ||
| - | | | + | | |
| - | | 0x18 | | + | | |
| - | | 0x1E | | + | | 0x09 | |
| - | | 0x38 | | + | | 0x0A | |
| - | | 0x48 | | + | | 0x0B | |
| + | | 0x0C | | ||
| + | | 0x0D | | ||
| + | | 0x15 | | ||
| + | | 0x18 | | ||
| + | | 0x1E | | ||
| + | | 0x38 | | ||
| + | | 0x48 | | ||
| </ | </ | ||