Emulationsschicht

Einige der Programme, die während der zweiten Generation der Anlage entwickelt wurden, haben sich als sehr nützlich erwiesen. Dazu gehört insbesondere das Railway Control Center (rcc), das einen Fahrbetrieb mit mehreren Zügen realisieren kann. Genauso wichtig ist seine Fähigkeit, die nach einem Programmabbruch auf der Anlage verteilt stehenden Züge in ihre Bahnhöfe zurückfahren zu können. Dieses Programm basiert auf dem nicht mehr existierenden Interbus-System und steuern es über die Library libtrack an. Zum Glück weisen libtrack und librailway ausreichend viele Ähnlichkeiten auf, so daß ein Emulationslayer das API der älteren Bibliothek auf die neue abbilden kann. Alte Programme wie rcc lassen sich daher mit minimalen Veränderungen wieder in Betrieb nehmen, sie müssen in erster Linie nur gegen den Emulationslayer gelinkt werden.

Vier Umgebungsvariablen kontrollieren das Verhalten des Emulationslayers. Das zu benutzende Netzwerk wird über LIBTRACK angebeben, zur Auswahl stehen CAN, UDP und NONE. Letzteres erlaubt den Test von Programmen auch ohne Verbindung zur Hardware. Wie das lokale CAN-Interface und die seriellen Schnittstellen auf der Remote-Seite heißen, legen LIBTRACK_CAN und LIBTRACK_TTY fest. Schließlich kann mit LIBTRACK_VISUAL bestimmt werden, ob die Schnittstelle für die Visualisierung aktiviert wird.

  LIBTRACK=(NONE|UDP|CAN)
  LIBTRACK_CAN=/dev/pcan32
  LIBTRACK_TTY=/dev/ttyS0
  LIBTRACK_VISUAL=(YES|NO)

Das aktualisierte Railway Control Center der untenstehende Screenshot. Die Veränderungen bestehen hauptsächlich in der Anbindung der Emulationsschicht, außerdem wurden die Blocknamen an den neuen Gleisplan angepaßt, einige Fehler beseitigt und die Aufräumfunktion erweitert.


Aktualisierte Version von rcc

Die Emulation kann durch die unterschiedlichen Systeme nicht ganz perfekt sein. Es ergeben sich daher einige Veränderungen, die in der folgenden Liste aufgeführt sind.

  • Die Zykluszeit erhöht sich von 8 Millisekunden (Interbus) auf 30 Millisekunden (UDP). Dies wirkt sich in geringem Maße auf die Reaktionszeiten der Anwendung aus.
  • Der alte Block KH_LN_1 wurde in zwei aufgeteilt, die jetzt KH_LN_1 und KH_LN_2 heißen. Die Library setzt die beiden Hälften intern wieder zusammen, die neu hinzugekommenen Signale zwischen ihnen sind immer dunkel, genauso werden die Kontakte in der Mitte ignoriert. Für Anwendungen ist damit kein Unterschied sichtbar.
  • Die Namen der Blöcke haben sich geändert, insbesondere in den blau gezeichneten Teilen des Gleisplans. Wenn Anwendungen die Namen in irgendeiner Form benutzen, entsprechen diese dem alten Gleisplan und unterscheiden sich damit von dem aktuellen Aufbau. Die Programme sollten bei Bedarf angepaßt werden. Dabei muß auch berücksichtigt werden, daß durch die Aufteilung von KH_LN_1 alle Folgeblöcke neu numeriert wurden.
  • Kleinere Fehlerkorrekturen in der track_data.cfg waren nötig, um die Kreuzungsweichen richtig anzusteuern. Bei alten Programmen muß diese Datei ausgetauscht werden.
  • Die Kontaktfunktionen liefern statt einer Ereignisliste maximal einen Eintrag zur Zeit.
  • Der Bahnübergang ist neu und wird daher von den alten Anwendungen nicht angesteuert. Im Sinne eines realistischeren Fahrbetriebs senkt die Library von sich aus die Schranken, schaltet die Signale auf Rot und aktiviert die Glocke, sobald der Gleisbesetztmelder des betreffenden Blocks (KH_LN_2 im neuen Gleisplan) einen Triebwagen erkennt.
  • Die Library setzt die Geschwindigkeitsstufen über eine Tabelle auf Geschwindigkeiten für den Regelalgorithmus um. Damit sind Anpassungen an die Steigung oder bestimmte Typen von Triebwagen überflüssig geworden. Das schrittweise Beschleunigen ist unverändert.
  • Die Funktion GetSpeed wurde erweitert. Wird ihr die Nummer eines Blocks plus 1000 übergeben, liefert sie den Wert des Gleisbesetztmelders für den betreffenden Block.
  • Wenn die Verbindung zur Bahn zusammenbricht, terminiert die Library ihr Programm.

Die Emulationsschicht funktioniert zwar zuverlässig, sie sollte aber nicht für neu entwickelte Programme benutzt werden. Sie erlaubt keinen Zugriff auf viele der neuen Funktionen, außerdem sind Details der Schnittstelle problematisch. Insbesondere können Fehler von der Anwendung nicht abgefangen werden und es passiert leicht, daß allozierter Speicher nicht freigegeben wird.