Das Protokoll.

Zwischen dem Sender und dem Decoder (bzw. den Sendern und den Decodern) besteht eine elektrische, aber auch eine logische Verbindung. Die elektrische Verbindung besteht aus einer Leitung für das Bezugspotential (Masse) und einer (oder mehreren) Leitungen über die Daten gesendet werden. Es versteht sich von selbst, dass die Sache nur funktioniert, wenn Sender und Empfänger die selbe Sprache sprechen. Das alleine genügt aber noch nicht. Sollen mehrere Sender angeschlossen werden, so muss noch ein Weg gefunden werden die Sendezeit für die einzelenen Sender so festzulegen, dass zwei Sender nicht gleichzeitig Daten aussenden. Die Folge wäre nämlich Datensalat.

Alle angesprochenen Punkte werden in einem Regelwerk festgelegt und alle Systemelemente müssen sich an diese Regeln halten, damit das gesamte System funktionieren kann. In der Informatik bezeichnet man ein solches Regelwerk als "Protokoll". Im folgenden wird das Digi-Train Protokoll beschrieben (erwarten sie hier nichts wesentlich neues, alle digitalen Zugsteuerungen funktionieren so, oder so ähnlich).

1. Elektrische Verbindungen

Digi-Train arbeitet mit zwei verschiedenen elektrischen Verbindungen zwischen den Systemelementen:

  • Die Verbindung zwischen den Sendern und dem Booster (bzw. den Boostern) und
  • der Verbindung (bzw. den Verbindungen) zwischen dem Booster und den Decodern.

1.1 Die Verbindung zwischen Sender und Booster

An dieser Stelle wurde Wert darauf gelegt, dass eine dünne, flexible Leitung eingesetzt werden kann. Dadurch ist die Zahl der Adern schon einmal begrenzt. Digi-Train arbeitet hier mit einer beliebigen, vieradrigen Leitung, die einen Wellenwiderstand von ca. 100 Ohm aufweist. Am besten geeignet ist Telefonkabel, welches man als Telefon-Verlängerungskabel überall kaufen kann.

Über die vier Adern dieser Leitung werden folgende Signale transportiert:

  • Masse (weisse Ader, Bezugspotential): Alle Spannungen werden bezogen auf das Potential dieser Leitung angegeben.
  • Versorgunsspannung (braune Ader, +8V): Der Booster speist hier die Betriebsspannung für die Sender ein. Die Spannung ist ungeregelt, da die Regelung erst "vor Ort", d.h. in den einzelnen Sendern erfolgt.
  • Datenleitung (gelbe Ader): Über diese Leitung gehen die eigentlichen Daten in dem Format, das im zweiten Abschnitt festgelegt ist.
  • Handshake-Leitung (grüne Ader): Über diese Leitung teilt der Booster jedem Sender mit, wann er Daten auf die Datenleitung ausgeben darf.

1.2 Die Verbindung zwischen Booster und Decoder

Diese Verbindung ist das eigentlich Kritische am System: Sie besteht aus nur zwei "Drähten", die die Form von Eisenbahnschienen haben. Alle Decoder sind an dieses Zweileitersystem parallel angeschlossen, entweder fest (wie z.B. bei Weichen oder Signalen) oder aber lose (über Stromabnehmer wie bei Loks). Das hat zwei Konsequenzen, die als Nebenbedingungen in die Voraussetzungen für das Datenformat eingehen:

  • Diese Verbindung transportiert nicht nur Daten, sondern auch die Energie für die Systemkomponenten und
  • die Verbindung ist unsicher, d.h. es kann zu Störungen (Einzelbitfehler, Mehrbitfehler, Rahmenfehler, etc.) kommen.

Damit die Anlage sauber funktioniert, muss das Datenformat so ausgelegt sein, dass solche Störungen erkannt werden können. "Falsche", d.h. durch Störungen verfälschte Daten dürfen:

  • nicht zur Ausführung unerwünschter Kommandos führen und
  • nicht zum "Absturz" des gesamten Systems führen.

2. Das Datenformat

Die Digi-Train Kommandos bestehten jeweils aus einem 16bit Wort. Die Bits haben folgene Bedeutung:

Bit15
(MSB)
Bit14 Bit13 Bit12 Bit11 Bit10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
(LSB)
A7 A6 A5 A4 A3 A2 A1 A0 FWD BWD RST V4 V3 V2 V1 V0

Die Bits "A0".."A7" geben die Adresse des Zieldecoders an, der das Kommando ausführen soll. Nachdem ein Decoder ein Datenwort eingelesen hat, muss er überprüfen, ob das Kommando überhaupt für ihn bestimmt ist. Dazu vergleicht er die Bits A0..A7 mit dem Bitmuster, das dem Decoder bei der Programmierung mitgegeben wurde (mehr dazu siehe bei "Sender"). Stimmen diese Bits überein, so wird zum nächsten Schritt übergegangen. Stimmt nur ein Bit nicht mit dem hinterlegten Muster überein, so muss der der Decoder das Kommando ignorieren.

Theoretisch sind mit acht Bits 256 verschiedene Decoder adressierbar. Die Adresse, in der alle Bits auf eins gesetzt sind (dual: 11111111, hexadezimal: FF, dezimal: 255) ist jedoch reserviert für das "Global Reset Token" (GRT). Liest ein Decoder diese Adresse ein, so muss er sich sofort in seinen Grundzustand zurücksetzen (d.h. keine Fahrtrichtung, Geschwindigkeit null). Da dies für alle Decoder gilt, kann man auf diese Weise mit nur einem einzigen Kommando die gesamte Anlage in einen Stoppzustand bringen (z.B. Nothalt).

Die Bits "FWD" und "BWD" steuern die Fahrtrichtung bei Loks, bzw. die Stellung von Weichen und Signalen. Die Zustände der Bits und ihre Bedeutung:

FWD BWD Bedetung
0 0 Der Decoder ist deaktiviert und führt keine Kommandos aus.
0 1 Aktivierung des Decoders für Richtung "rückwärts".
Bei Weichen: "abbiegen", bei Signalen "Halt".
1 0 Aktivierung des Decoders für Richtung "vorwärts".
Bei Weichen: "gerade", bei Signalen "Fahrt".
1 1 Aktivierung des Sondersignalausganges des Decoders (z.B. Hupen bei Loks, etc.).
Keine Beeinflussung der Fahrtrichtung!

 

Das Bit "RST" bildet, mit allen anderen Bits von Bit7..Bit0 das "Local Reset Token" (LRT), mit dem ein einzelner Decoder in den Grundzustand gebracht werden kann. Dazu adressiert man den Decoder und setzt alle Bits von Bit7 bis Bit0 auf 1. Der adressierte Decoder (aber eben nur er) muss sich sofort in den Grundzustand bringen (keine Fahrtrichtung, Geschwindigkeit null).

Die verbleibenden Bits "V0".."V4" geben die Leistung an, die der Decoder abgeben soll. Bei Loks kann so die Geschwindigkeit in 32 Stufen je Fahrtrichtung eingestellt werden. Bei Weichen und Signalen kommt nur die Leistung Null und die volle Leistung zum Einsatz. Decoder, die Beleuchtungseinrichtungen steuern können auf diese Weise die Beleuchtung "dimmen".

Jedes Kommando wird von den Sendern fünf mal ausgesandt. Die Decoder führen ein Kommando nur dann aus, wenn es zwei mal nacheinander absolut identisch empfangen wurde. Das Bedeutet dass, wenn die Übertragung ohne jede Störung funktioniert, jedes Kommando vier mal ausgeführt wird. Da das Digi-Train System nur absoltue Kommandos benutzt ist das nicht schlimm, man merkt es gar nicht.

Hier ein paar Beispiele zum Datenformat:

Der Decoder mit der Adresse 5 (dual: 00000101, hexadezimal: 05, dezimal 5) bekommt das Kommando zur Vorwärtsfahrt mit Leistungsstufe 8:

Bit15
(MSB)
Bit14 Bit13 Bit12 Bit11 Bit10 Bit 9 Bit 8 Bit 7 Bit 6

Bit 5

Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
(LSB)
A7 A6 A5 A4 A3 A2 A1 A0

FWD

BWD RST V4 V3 V2 V1 V0
0 0 0 0 0 1 0 1 1 0 0 0 1 0 0 0

Der Decoder mit der Adresse 7 wird deaktiviert:

Bit15
(MSB)
Bit14 Bit13 Bit12 Bit11 Bit10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
(LSB)
A7 A6 A5 A4 A3 A2 A1 A0 FWD BWD RST V4 V3 V2 V1 V0
0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0

Der Decoder mit der Adresse 15 wird zurückgesetzt:

Bit15
(MSB)
Bit14 Bit13 Bit12 Bit11 Bit10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
(LSB)
A7 A6 A5 A4 A3 A2 A1 A0 FWD BWD RST V4 V3 V2 V1 V0
0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1

Die gesamte Anlage wird zurückgesetzt:

Bit15
(MSB)
Bit14 Bit13 Bit12 Bit11 Bit10 Bit 9 Bit 8 Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
(LSB)
A7 A6 A5 A4 A3 A2 A1 A0 FWD BWD RST V4 V3 V2 V1 V0
1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0

Auf dem Weg vom Sender zum Decoder werden die Bits physikalisch nicht als Spannungspegel codiert, sondern als Zeiten (Zeitcodierung). Für die Übertragung einer Eins wird die Datenleitung 400µs lang auf einen Spannungspegel von ca. 2.5 Volt (high) gelegt, danach für weitere 400µs auf 0V (low). Eine Null wird übertagen, indem die Datenleitung 200µs auf high gelegt wird, danach 200µs auf low. Die Übertragung eines Rahmens (also der gesamten 16 Bits) beginnt mit einer 800µs langen Pause (Gap, low), die die Decoder zur (Re-) Synchronisierung verwenden.

Vom Booster zu den Decodern wird das selbe Codierschema eingesetzt (es wird also nicht umcodiert). Nur werden die Spannungspegel so verschoben, dass die Decoder zu jedem Zeitpunkt mit Strom versorgt werden: low entspricht dann einem Pegel von -20V..-15V und high einem Pegel von +15V..+20V.


Das Datenformat auf der Leitung vom Sender zum Booster

Die Spannung auf den Schienen während der Datenübertragung

3. Synchronisierung der Sender

Wie wird vermieden, dass zwei Sender zur gleichen Zeit Daten übertragen?

Hier geht es zu, wie in der Schule:

Normalerweise ist die Handshake-Leitung low (1). Hat ein Sender Daten zu senden, so setzt er die Handshake-Leitung auf high (ca. 2.5V, genau wie bei der Datenleitung, 2). Dies entspricht einer Wortmeldung in der Schule. In diesem Zustand hat der Sender zu warten, bis die Handshake-Leitung von Booster auf low gezogen wird (3). Das entspricht dem Aufruf durch den Lehrer. Der Sender kann jetzt loslegen. Währenddessen lässt der Booster die Handshake-Leitung wieder auf high gehen (4). Ist der Sender mit der Übertragung fertig, so setzt er die Handshake-Leitung wieder auf low (5). Jetzt sucht der Booster nach einem weiteren Sender mit aktiver Handshake-Leitung und das Spiel beginnt von neuem. Auf diese Weise verteilt der Booster die Sendezeit zentral, gleichmässig und gerecht auf alle jeweils sendewilligen. Es wird aber keine Zeit verbraucht für Sender, die gerade nichts zu senden haben.


Das Handshake-Protokoll

Alle im Folgenden präsentierten Digi-Train Systemelemente erzeugen, bzw. verarbeiten das hier beschriebene Datenformat. Wer das System um eigene Elemente erweitern will (Wie wäre es z.B. mit einem alten C64 oder ZX81 als Steuerconsole) muss eine elektrische Schnittstelle bauen, die dem oben beschriebenen Protokoll gerecht werden kann. Der Rest ist dann nur eine Frage der Software...

Übrigens: Wenn Sie nur einen Sender betreiben wollen, können Sie das Handshake-Protokoll vollständig ignorieren. Verbinden Sie hierzu boosterseitig einfach die Handshake-Leitung mit Masse. Sobald der Sender etwas senden will kann er dann loslegen!


Die genannten Marken- oder Produktnamen sind Warenzeichen oder eingetragene Warenzeichen der jeweiligen Eigentümer