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.
|