Spezifikation der Paketformate


zurück

In SLIP-Pakete eingebettet sind folgende Pakete definiert.

Index der definierten Pakete

Legende Relevanz Symbol Erläuterung
notwendig + muss gesendet werden
muss empfangen werden
notwendig (nur
empfangsseitig)
(+) kann gesendet werden
muss empfangen werden
nicht
anwendbar
- wird nicht gesendet
wird beim Empfang ignoriert
optional o kann gesendet und empfangen werden
ist für Blockfunktionen nicht relevant
Name Bytecode Blockbauform
Dez Hex Relaisblock
Tf71
Selbstblock
Achszähler
Selbstblock
Gleiskreis
Felderblock/Relaisblock/Tf71
Vorblock 42 2A + - -
Rückblock 43 2B + - -
Erlaubnis-Abgabe 44 2C + + +
Erlaubnis-Anfrage 45 2D (+) (+) (+)
Optionale Acknowledges für Debugzwecke
Vorblock Acknowledge 142 8E o - -
Rückblock Acknowledge 143 8F o - -
Erlaubnis-Abgabe Acknowledge 144 90 o - -
Erlaubnis-Anfrage Acknowledge 145 91 o - -
Selbstblock
Achssensor Zählerstand 46 2E - + -
Achszählergrundstellung 49 31 - + -
Austausch von Gleisstromkreis-Zuständen 53 35 - - +
Zustandsmeldung
Einfahrsignal-Zustand 47 2F o + +
Konfiguration
Plug & Pray Konfiguration 48 30 o o o
Blockstellensteuerung/-überwachung
Blockstellen-Zustand 50 32 o o o
Befehle an die Blockstelle 51 33 o o o
Selbststellbetrieb
Anstoßmeldung 52 34 o o o

Weitere Pakete

Alles weitere sind Planungen, die zur Diskussion stehen. Falls jemand bei der Implementierung von diesem oder jenem mitwirken möchte, ist er herzlich eingeladen!

Weitere Blockbauformen

Wer weiss, was noch kommt ;-)

Zugnummernmeldeanlage

Die Idee ist, auf einer Kette von Block-Leitungen und Bahnhofs-LoTUSNets einen ZLV-Bus zu emulieren. Die Netzwerkschichten sind dann etwa so angeordnet.

Beispiele

Die o.g. Bytecodes werden im sogenannten Serial Line Internet Protocol (SLIP) eingebettet. Dies dient dazu, hintereinander geschickte Pakete voneinander zu trennen. Das Trennzeichen ist C016. Beispiel eines Vorblock-Pakets in hexadezimaler Darstellung:
        C0 2A C0
Das erste C016 ist optional, schadet aber auch nicht. Man kann es als Paketende des vorausgehenden Paketes oder als Paket mit 0 Bytes Länge auffassen, welches ignoriert wird. Die 2A16 ist die Nutzlast des Paketes, in der Tabelle oben als "Vorblock" definiert. Das zweite C016 ist das Paketende des Vorblocks.

Andere Pakete haben mehr Nutzbytes und variable Inhalte. Zum Beispiel ist
        C0 2F 3F C0
die Meldung eines Hp1-zeigenden Einfahrsignals. 2F16 zeigt an, dass es sich um die Meldung eines Signalzustands handelt, 3F16 ist der Code für GO, was im Gebiet der Deutschen (Bundes-)Bahn Hp1 entspricht.

Was ist zu tun, wenn C016 selbst zur Nutzlast des Pakets gehört? C016 entspricht 192 in dezimaler Darstellung. Wenn man nun einen Achszählerstand von 192 melden möchte, wäre die Lösung vermeintlich:
        C0 2E 10 CO 00 C0
Dies führt jedoch beim Empfänger zum Missverständnis, dass das Paket schon nach den ersten beiden Nutzbytes beendet ist und dann noch ein Paket mit der Nutzlast 0016 folgt. Laut SLIP ist die Lösung hierfür folgender Algorithmus:
Ist ein Nutzbyte C016, so wird es durch die zwei Zeichen DB16DC16 ersetzt.
Ist ein Nutzbyte DB16, so wird es durch die zwei Zeichen DB16DD16 ersetzt.


Der Empfänger muss diese Zeichenfolgen ebenfalls erkennen und wieder durch die ursprünglichen Nutzbytes C016 und DB16 ersetzen. Das korrekte Paket zur Meldung von 192 Achsen lautet also:
        C0 2E 10 DB DC 00 C0
Durch dieses Protokoll sind beliebig lange Zeichenketten aus allen 256 Zeichen übertragbar.

Die Realisation der Übertragung ist hier erläutert.

Autor: Stefan Bormann. Site hosted by: SourceForge Logo Valid HTML 4.01 Transitional