Fahrstraßensteuerung mit LUA
Der vorhandene Engpass soll problemlos von allen Zügen durchfahren werden. Ankommende Züge melden sich an und werden in der Reihenfolge der Anmeldungen durchgelassen. Wenn ein Zug fährt, müssen die anderen warten, bis sie dran sind.
Die Überlegung war, das ganze mit Fahrstraßen zu realisieren. Das hat dann auch eine Zeitlang geklappt, bis ich anfing Weichen per Hand zu stellen. Plötzlich tauchten Züge an Stellen auf, die nichts mit ihrer Route zu tun hatten. Also habe ich auf Fahrstraßen verzichtet, dafür dann die Weichen über Kontaktpunkte stellen lassen.
Die Realisierung erfolgt über LUA. Jedes Signal, das den Weg sperrt, steht auf Halt. Ein Kontakt vor dem Signal sorgt für die Anmeldung. Ist der Weg frei, kann das Signal in Fahrt wechseln und der Zug befährt den für ihn zuständigen Weg. Alle anderen Züge müssen warten, bis der Weg wieder frei ist. Das Eingangssignal muss über einen Kontakt wieder auf Halt gestellt werden. Am Ende des entsprechenden Weges gibt es einen Kontakt, der diese Durchfahrt als abgeschlossen meldet. Bestehen keine Voranmeldungen, passiert nichts, bestehen Voranmeldungen, wird der nächste Zug durchgeschleust. Das Signal schaltet auf Fahrt, der Zug bewegt sich in Richtung Ziel. Die LUA-Programmteile werden weiter unten ausführlich erklärt.
Auf dem folgenen Bild ist zu erkennen, dass es sich um 9 Wege handelt, dabei werden 5 und 9 von mehreren Zügen genutzt. Die roten Schilder zeigen die Eingangssignale an, die blauen den Verlauf, beim Verlassen des entsprechenden Wegs wird ein Endkontakt überfahren, der die Strecke jetzt wieder für den nächsten Zug freigibt.

Zuerst einmal brauche ich ein Array, um den einzelnen Ziffen die Nummer des Signals zuzuordnen:
Es folgt der Endkontakt, er befindet sich immer am Ende des einzelnen Weges, wobei es unerheblich ist, welchen Weg es betrifft, deshalb ohne zusätzliche Ziffer. Dann folgen die 9 Eingangskontakte, immer mit der Ziffer des Signals bezeichnet zum besseren zuordnen. In der Funktion function FSN_472() wird übersetzt nach FahrStrNeu(1). Die Funktion FahrStrNeu gilt dann für alle Anmeldekontakte, mit den entsprechenden Ziffern in der Klammer.
Jetzt folgen die Funktionen, die die Arbeit machen, damit alles funktioniert. Ich beginne mit der zweiten Funktion, die beim Einfahren in das System aktiviert wird. Zuerst einmal wird kontolliert, ob sich bereits ein Zug in dem System befindet. Wenn also im Speicher 99 nur das Wort leer zu finden ist, wird das Signal auf Fahrt gesetzt und der Wert "leer" und die Zahl des Weges gespeichert. Damit wird in Speicher 99 "leer5" gespeichert (die 5 wurde hier nur als Beispiel gewählt). Wenn ein zweiter Zug einen Weg anfordert, muss er warten bis der erste Zug das System verlassen hat.
Es folgt nun die Beschreibung der Funktion FahrStrFrei. Wenn ein Zug das System verlässt, muss zuerst einmal wieder der Speicher 99 ausgelesen werden. Steht da nur "leer5", dann wird erkannt, dass kein neuer Zug auf die Abfertigung wartet. Die 5 wird gelöscht und es bleibt nur das Wort "leer". War aber noch eine Ziffer hinzugekommen, wird die erste Ziffer nach "leer" gelöscht und die weiteren rutschen einen Platz vor. die nächste Ziffer erhält die Freigabe des Weges.
Mit diesen wenigen Zeilen funktioniert die Steuerung ohne jegliche Störung.