Diskussion:3964R

Letzter Kommentar: vor 9 Jahren von 2003:80:C946:C003:C421:20B7:5BB9:F903

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:

→ STXEine Seite meldet Sendeversuch an
← DLEGegenseite bestätigt Empfangsbereitschaft
→ <data> DLE ETX BCCDaten senden (BCC ist die XOR-Prüfsumme ohne vorheriges STX, entfällt bei 3964 ohne R)
← DLEEmpfangsbestä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)Beantworten

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)Beantworten