Elekdra kann schon seit längerem anstatt einer physikalischen Blockleitung (mit USB2Block o.ä.) auch Streckenblock über eine TCP-Verbindung in beliebigen Netzwerken abwickeln. Dabei wird die Schnittstelle eins zu eins ersetzt, der Verbindungsaufbau erfolgt, indem ein Stellwerk beim Start versucht, ob der Nachbar schon ansprechbar ist (Connect zu IP-Adresse/Port, gemäß Konfiguration). Ist er nicht ansprechbar, wird stattdessen ein Server initialisiert, so dass der später gestartete Nachbar sich verbinden kann. Dabei müssen IP und Port des Nachbarn per Konfiguration bekannt sein!
Ziel der angepeilten Neuerung (Automatische IP-Block-Konfiguration) soll sein, dass auch in DHCP-verwalteten Netzwerken nicht ständig die Konfiguration geändert werden muss (wegen veränderter IP-Adresse...).
Ich überspringe hier mal die diversen Zwischenschritte und komme zum derzeitigen Ergebnis der überlegungen:
Einmalig (pro Treffen) muss natürlich (für jedes betroffene Streckengleis) konfiguriert werden, mit welchem Streckengleis von welchem Bahnhof es verbunden werden soll. Dazu bietet sich die ZN-Feldkennung des Gleises an, da in den zur Implementierung stehenden Stellwerken i.d.R. auch ZN vorhanden ist. In Stellwerken ohne ZN wird die Nummer dann eben abstrakt verwendet! Diese Kennung besteht aus einer Bahnhofsnummer (1..99) und einer Gleisnummer (1..9999). Außerdem muss das Stellwerk natürlich den eigenen Port kennen, der für die TCP-Verbindung genutzt werden soll (das gilt natürlich für die bisherige manuelle TCP-Block-Verbindung auch).
Wenn beim Auto-IP-Block ein Stellwerk gestartet wird, wird sofort ein TCP-Server initialisiert, der auf eine Verbindung vom Nachbarn wartet.
Außerdem wird ein UDP-Server gestartet, der an Port 47911 "horcht", s.u.. Die Portnummer ist willkürlich aus "Echt Köllnisch Wasser" und dem USA-Notruf zusammengesetzt ;-)
Dann wird (für jedes betroffene Streckengleis) ein UDP-Broadcast (Adresse 255.255.255.255) an Port 47911 gesendet. Dieser Broadcast enthält folgende Daten:
Jedes Paket, das nicht dieser Norm entspricht, wird ignoriert!
Wenn der Nachbar noch nicht aktiv ist, passiert nichts weiter. Man empfängt den Broadcast zwar selbst auch, er wird aber wegen der Gleisnummer, die ja einem Nachbarn gehört, ignoriert!
Ist der Nachbar schon hochgefahren, empfängt er den Broadcast und prüft, ob er das passende Streckengleis in seinem Bereich verwaltet. Wenn ja, wird mit der Portnummer des Broadcasts und der IP-Adresse, die im UDP-Header implizit enthalten ist, die TCP-Verbindung für die Blockverbindung aufgebaut - fertig. Nach Aufbau einer Verbindung werden die gleichen Daten gesendet, die auch über die bisherige Blockleitung gehen.
Bei der hardwaremäßigen Blockleitung gibt es prinzipiell eine Funktion (ich nenne sie "Trägerpause", die zur Beseitigung von irgendwelchen Problemen für kurze Zeit den Leitungstreiber abschaltet, was von der Gegenstelle als Kabelbruch interpretiert wird, worauf nach Wiederherstellung der Verbindung diverse (Re-)Initialisierungsdaten gesendet werden, womit viele Probleme ausgeräumt sind.
Diese Funktionalität sollte auch beim Auto-IP-Block vorgesehen werden, da es Szenarien gibt, in der manuell eingegriffen werden muss:
In diesem Fall schließt das Stellwerk, das einen Verbindungs-Neustart provozieren möchte, vom Benutzer ausgelöst, seinerseit die Verbindung und sendet anschließend den Broadcast, wie beim ersten Start. Das Stellwerk, das den Broadcast empfängt (jederzeit!) schließt ebenfalls die Verbindung, und verbindet dann gemäß Broadcast neu.
Ich habe den Auto-IP-Block für mein EStw bereits im Testbetrieb und bin bisher sehr zufrieden!
Dabei teste ich sowohl Verbindungen eines meiner Streckengleise zu einem anderen Gleis desselben Bahnhofs als auch zu einer zweiten Betriebsstelle. Wenn man mit sich selbst verbinden möchte, sollte man für die diversen Strecken verschiedene Verzögerungen einbauen, sonst wird sofort der oben beschriebene Störungsfall erreicht, den man allerdings dann auch mit der "Trägerpause"-Funktionalität auflösen kann.
Bei mir kommt noch eine Besonderheit dazu, nämlich dass ich auch mehr als ein Stellwerk als Simulation auf ein und demselben Rechner laufen lasse. Daher muss ich meinen UDP-Server mit der Option "Reuse-Adress" betreiben (das will ich hier nicht weiter ausführen).
Alles dies ist natürlich optional, wer weiter nur eine "echte" Blockleitung bedienen kann, soll keine Nachteile haben. Aber wenn "befähigte" Stellwerke aufeinander treffen, die z.B. für ZN schon ein Netzwerk unterhalten, kann man auf weitere Kabel verzichten!
Aufgeschrieben hat's: Bodo Mertins. In HTML überführt: Stefan Bormann. $Id: AutoIP.de.html 966 2021-04-05 15:29:33Z sbormann71 $ |
Site hosted by: |