Diskussion:3964R
Ein paar Zusatzinfos, die vielleicht nützlich sind:
Die Prüfsumme bei 3964R ist keine CRC sondern nur eine einfache XOR-Verknüpfung über das Datentelegramm beginnend mit dem ersten Zeichen nach dem STX.
Das Protokoll ist nicht wirklich Voll Duplex auch wenn Siemens das gelegentlich behauptet
sondern Halb Duplex.
Das Protokoll ist aber symetrisch, das heisst beide Seiten können mit dem gleichen Verfahren
senden und empfangen.
Bei Kollisionen, d.h. wenn beide Seiten gleichzeitig versuchen zu senden,
wird nach Priorität entschieden. Die Priorität hängt vom Master/Slave Zustand der Stationen ab,
die auf beiden Seiten fest eingestellt sein muss.
Bei einer Kollision kann der Master einfach weiter senden, während der Slave seinen eigenen
Sendeversuch abbricht und statt dessen das Telegramm von der Gegenseite annimmt.
Die benutzten Steuerzeichen sind
STX (0x02) | Start of Text |
ETX (0x03) | End of Text |
DLE (0x10) | Data Link Escape |
NAK (0x15) | Negative Acknowledge |
Das Handshake beim Senden/Empfangen verläuft nach dem folgenden einfachen Schema:
→ STX | Eine Seite meldet Sendeversuch an |
← DLE | Gegenseite bestätigt Empfangsbereitschaft |
→ <data> DLE ETX BCC | Daten senden (BCC ist die XOR-Prüfsumme ohne vorheriges STX, entfällt bei 3964 ohne R) |
← DLE | Empfangsbestätigung (NAK wenn Fehler, z.B. bei Prüfsumme) |
Im Datenblock sind alle 7 bzw. 8-Bit ASCII-Zeichen erlaubt. Nur das Zeichen DLE(0x10) muss innerhalb der Nutzdaten durch DLE DLE ersetzt werden und wird auf der Gegenseite entsprechend wieder entfernt. Das Ende des Blocks wird an der eindeutigen Sequenz DLE ETX [BCC] erkannt.
Die maximale Länge des Datenblocks ist nicht explizit vorgeschrieben. Einige Publikationen reden
von 1024 Byte, handelsüblich ist aber eine Telegrammlänge von < 128 Byte.
Längere Telegramme sind wegen der unsicheren XOR-Prüfsumme auch kaum zu empfehlen.
Fehlerbehandlung:
Wenn auf STX mit NAK oder einem anderen Zeichen ausser STX geantwortet wird,
muss der Sendeversuch wiederholt werden.
Wenn auf STX ebenfalls mit STX geantwortet wird, liegt eine Kollision vor. Der Master wartet in diesem
Fall auf die Bestätigung DLE, der Slave bricht seinen Sendeversuch ab und schickt statt dessen DLE als
Zeichen für die Empfangsbereitschaft.
Timeout für die Antwort DLE ist jeweils 550 Millisekunden (nach STX oder nach dem Datenblock). Der Abstand zwischen zwei Zeichen im Datenblock sollte 100 msec nicht überschreiten.
Verweise: http://www.ait-augsburg.de/download/win32_3964r.zip (Pascal (Delphi) Unit mit Protokollimplementierung)
-- Lutz Nitzsche 15:47, 12. Nov. 2007 (CET)
http://www.ait-software.de/de-de/Downloads hier zu finden
--2003:80:C946:C003:C421:20B7:5BB9:F903 21:26, 14. Mär. 2015 (CET)