-
Inhalte
- Verfügbarkeit
- Vorbeifahrt
- Verhalten
- Programmieren
- Kriterien zur Programmierung
- Kombinieren von Regeln
- Beispiele
- Kopieren von Regeln
- Verwendung
Programmierbare Vorsignale sind ein Feature in JGR's Patch Pack. Das Feature selbst hatte JGR schon in TTDPatch implementiert und später für OpenTTD überarbeitet.
Programmierbare Signale ermöglichen das Festlegen der Regeln, die bestimmen, wann ein Vorsignal "Halt!" oder "Freie Fahrt!" zeigen soll. Damit hat man als Spieler nun weitestgehende Kontrolle über das Signalverhalten. Die Regeln der Signalprogrammierung ersetzen die Vorsignal-Regeln. Oder anders gesagt: Man kann die Vorsignal-Regeln ändern. Man kann allerdings kein Signal programmieren, welches die Einfahrt in einen besetzten Block erlaubt, so viel Sicherheit muss sein.
Programmierbare Vorsignale können genauso aufgebaut werden wie normale Vorsignale. Es gibt also die Varianten als Formsignal und Lichtsignal sowie die Möglichkeit die Signale in eine oder beide Richtungen aufzustellen.
Verfügbarkeit
Programmierbare Vorsignale sind nur in JGR's Patch Pack verfügbar und dort auch nur, wenn folgende Einstellungen korrekt eingestellt sind:
Die Option für realistisches Bremsen von Zügen ist nicht aktiviert
Die programmierbaren Vorsignale sind aktiviert
Vorbeifahrt
Das Vorbeifahren an programmierbaren Vorsignalen unterscheidet sich nicht von normalen Vorsignalen. Sie können nur passiert werden, wenn sich der Zug dem Signal von der Vorderseite nähert. Aus der anderen Richtung wird der Zug am Signal halten und umkehren.
Verhalten
Programmierbare Vorsignale sind Blocksignale, das heißt sie zeigen immer rot, wenn sich ein Zug in dem zugehörigen Signalblock befindet.
Die Bedingungen, wann ein programmierbares Vorsignal bei freiem Signalblock "Freie Fahrt!" anzeigen kann, müssen programmiert werden. Ohne ein Programm wird ein programmierbares Vorsignal immer "Halt!" zeigen, egal welche anderen Signale um den Signalblock herum angeordnet sind und ob der Block frei ist oder nicht.
Das Programm besteht aus einer Folge von verschachtelbaren Anweisungen. Damit werden Bedingungen definiert und miteinander verknüpft, die genau bestimmen, wann das Signal "Freie Fahrt!" bzw. "Halt!" zeigen soll.
Programmieren
Das Programmieren erfolgt über eine eigene GUI, die aus dem Signalbaumenü heraus aufgerufen wird. Zuerst wählt man das Schraubenschlüssel-Symbol und klickt damit auf das Signal was man programmieren will. Damit öffnet sich das Fenster für die Programmierung. Das zeigt das aktuell mit dem Signal verknüpfte Programm an und enthält Schaltflächen, über die man das Programm verändern kann. Dazu wählt man mit der Maus eine der Anweisungen aus, wodurch die passenden Schaltflächen aktiv werden. So kann man nun alles anpassen, wie man es haben will.
Das Programm selbst besteht aus mehreren Teilen:
Bedingung: Eine Bedingung hat die folgende Form:
WENN (Kriterium) DANN (Anweisung1) SONST (Anweisung2)Wenn das Kriterium erfüllt ist, wird Anweisung1 ausgewertet, ansonsten wird Anweisung2 ausgewertet. Anweisung1 und Anweisung2 können nun wieder Bedingungen oder Aktionen sein, so lassen sich komplexe Verknüpfungen erzeugen.
Aktion: "Mach das Signal rot" bzw. "Mach das Signal grün"
Kriterium: Vereinfacht ausgedrückt eine Abfrage, die man mit "ja" oder "nein" beantworten kann.
Wichtig: Die Auswertung des Programms wird beendet, wenn man zu einer Aktion kommt. Damit stellt man das Signal, die restlichen Anweisungen werden ignoriert.
Kriterien zur Programmierung
Folgende Kriterien sind innerhalb einer Bedingung benutzbar:
- immer
Dieses Kriterium ist immer erfüllt. Die Bedingung hat dann die Form
Es wird immer Anweisung1 ausgeführt, Anweisung2 wird nie erreicht.WENN immer DANN (Anweisung1) SONST (Anweisung2) - nie
Dieses Kriterium ist nie erfüllt. Die Bedingung hat dann die Form
WENN nie
DANN (Anweisung1)
SONST (Anweisung2)
Es wird immer Anweisung2 ausgeführt, Anweisung1 wird nie erreicht.
Damit ist die Anzahl der Ausfahrt- und Combo-Vorsignale im Signalblock gemeint, die gerade "Freie Fahrt!" zeigen. Normale Blocksignale werden bei der Zählung ignoriert. Die Bedingung hat dann die Form
WENN (grüne Signale [Vergleich] [Wert])
DANN (Anweisung1)
SONST (Anweisung2)
Die Vergleichsoperation (gleich, ungleich, größer, kleiner, ...) und der Wert (eine beliebige Zahl) lassen sich über die entsprechenden Schaltflächen einstellen. Je nachdem,
ob die Bedingung erfüllt ist, wird dann entweder Anweisung1 oder Anweisung2 ausgeführt.
Damit ist die Anzahl der Ausfahrt- und Combo-Vorsignale im Signalblock gemeint, die gerade "Halt!" zeigen. Normale Blocksignale werden bei der Zählung ignoriert. Die Bedingung hat dann die Form
WENN (rote Signale (Vergleich) (Wert))
DANN (Anweisung1)
SONST (Anweisung2)
Die Vergleichsoperation (gleich, ungleich, größer, kleiner, ...) und der Wert (eine beliebige Zahl) lassen sich über die entsprechenden Schaltflächen einstellen. Je nachdem,
ob die Bedingung erfüllt ist, wird dann entweder Anweisung1 oder Anweisung2 ausgeführt.
Man kann den Zustand eines anderen Signals abfragen. Das abzufragende Signal muss ein einseitiges Ausfahrt- oder Combo-Vorsignal sein. Die Bedingung hat dann die Form
WENN (Signal auf Feld xy) ist Grün
DANN (Anweisung1)
SONST (Anweisung2)
Wenn also das Signal auf Feld xy "Fahrt frei!" zeigt, wird Anweisung1 ausgeführt, wenn das Signal "Halt!" zeigt, wird Anweisung2 ausgeführt.
Slots gehören konzeptionell zur eingeschränkten Wegfindung der Pfadsignale und werden dort erläutert. Man kann bei programmierbaren Vorsignalen die Werte von Slots lesen, aber nicht verändern.
WENN Auslastung von (Slotname) (Vergleich) (Wert)
DANN (Anweisung1)
SONST (Anweisung2)
Man muss vor der Programmierung einen passenden Slot angelegt haben, damit man ihn hier über das entsprechende Menü auswählen kann.
Die Vergleichsoperation (gleich, ungleich, größer, kleiner, ...) und der Wert (eine beliebige Zahl) lassen sich über die entsprechenden Schaltflächen einstellen. Je nachdem,
ob die Bedingung erfüllt ist, wird dann entweder Anweisung1 oder Anweisung2 ausgeführt.
Slots gehören konzeptionell zur eingeschränkten Wegfindung der Pfadsignale und werden dort erläutert. Man kann bei programmierbaren Vorsignalen die Werte von Slots lesen, aber nicht verändern.
WENN Verfügbare Kapazität von (Slotname) (Vergleich) (Wert)
DANN (Anweisung1)
SONST (Anweisung2)
Man muss vor der Programmierung einen passenden Slot angelegt haben, damit man ihn hier über das entsprechende Menü auswählen kann.
Die Vergleichsoperation (gleich, ungleich, größer, kleiner, ...) und der Wert (eine beliebige Zahl) lassen sich über die entsprechenden Schaltflächen einstellen. Je nachdem,
ob die Bedingung erfüllt ist, wird dann entweder Anweisung1 oder Anweisung2 ausgeführt.
Zähler gehören konzeptionell zur eingeschränkten Wegfindung der Pfadsignale und werden dort erläutert. Man kann bei programmierbaren Vorsignalen die Werte von Zählern lesen, aber nicht verändern.
WENN Wert von (Zählername) (Vergleich) (Wert)
DANN (Anweisung1)
SONST (Anweisung2)
Man muss vor der Programmierung einen passenden Zähler angelegt haben, damit man ihn hier über das entsprechende Menü auswählen kann.
Die Vergleichsoperation (gleich, ungleich, größer, kleiner, ...) und der Wert (eine beliebige Zahl) lassen sich über die entsprechenden Schaltflächen einstellen. Je nachdem,
ob die Bedingung erfüllt ist, wird dann entweder Anweisung1 oder Anweisung2 ausgeführt.
Kombinieren von Regeln
Die Bedingungen innerhalb eines Programms lassen sich verschachteln. Damit kann man Verknüpfungen von Regeln erzeugen. Das sieht dann ungefähr so aus:
WENN (Bedingung1) DANN
WENN (Bedingung2)
DANN (Anweisung1)
SONST (Anweisung2)
SONST
WENN (Bedingung3)
DANN (Anweisung3)
SONST (Anweisung4)
Je nachdem, in welcher Kombination die Bedingungen ganz oder teilweise erfüllt sind, wird eine der vier Anweisungen ausgeführt.
So könnte man zum Beispiel ein Signal an einer Umleitungsstrecke so programmieren, dass es nur "Freie Fahrt!" zeigt, wenn die Hauptstrecke voll ist und noch Platz auf der Umleitungsstrecke ist.
Beispiele
Blocksignal
Das Verhalten der normalen Blocksignale lässt sich durch folgendes Programm darstellen:
Stelle Signal auf grün
Das Blocksignal kennt keine Bedingungen oder Abfragen anderer Signale. Es prüft nur, ob der Block frei ist, und das wird unabhängig von der Programmierung sowieso geprüft.
Vorsignal
Das normale Vorsignalverhalten lässt sich durch folgendes Programm darstellen:
WENN (grüne Signale ungleich 0) DANN
(Stelle Signal auf grün)
SONST
(Stelle Signal auf rot)
Die Anzahl der grünen Signale bezieht sich auf die Anzahl der Ausfahrt-Vorsignale und Combo-Vorsignale im entsprechenden Signalblock. Wenn diese Anzahl nicht null ist (also mindestens ein Signal grün ist), zeigt auch das programmierte Vorsignal grün.
Prioritäten von Gleisen
In diesen zugegebenermaßen recht konstruierten Beispiel werden verschachtelte Bedingungen verwendet, um einzelnen Bahnsteigen eines Bahnhofes Prioritäten zu geben. Wenn der Bahnhof leer ist, soll der mittlere Bahnsteig angefahren werden. Ist der belegt, soll der linke Bahnsteig genutzt werden, und erst wenn beide Bahnsteige belegt sind soll der rechte Bahnsteig genutzt werden.
Der Signalblock rechts vom Bahnhof muss ein Vorsignalblock sein, da sonst das Programmieren der Signale auf der linken Seite nicht korrekt functioniert. Deswegen stehen an den äußeren Bahnsteigen auch Combo-Vorsignale - für die Programmierung muss man den Vorsignalstatus am anderen Ende des Bahnsteigs abfragen, gleichzeitig müssen diese Signale die Einfahrt in den Signalblock rechts des Bahnhofs regeln.
Das programmierbare Vorsignal am linken Bahnsteig hat folgendes Programm (A ist die Koordinate des Signals vor dem mittleren Bahnsteig):
WENN Signal auf A ist Grün DANN
Stelle Signal auf Rot
SONST
Stelle Signal auf Grün
Somit zeigt das Signal für den linken Bahnsteig nur grün, wenn der mittlere Bahnsteig belegt ist. Das Combo-Vorsignal am Ende des Bahnsteigs wird ignoriert, ein normales
Combo-Vorsignal würde dies berücksichtigen und die Zufahrt zum Bahnsteig sperren, wenn gerade ein Zug aus einem anderen Bahnsteig abfährt.
Das programmierbare Vorsignal am rechten Bahnsteig hat ein komplizierteres Programm, denn es muss die Signale der beiden anderen Bahnsteige berücksichtigen (A ist die Koordinate des Signals am mittleren Bahnsteig, B die Koordinate des Signals am linken Bahnsteig):
1 WENN Signal auf A ist Grün DANN
2 Stelle Signal auf Rot
3 SONST
4 WENN Signal auf B ist Grün DANN
5 Stelle Signal auf Rot
6 SONST
7 Stelle Signal auf Grün
Wenn also der mittlere Bahnsteig frei ist, bleibt das Signal rot. Wenn der mittlere Bahnsteig belegt ist, landet das Programm auf Zeile 4 und wertet den Zustand des Signals
am linken Bahnsteig aus. Ist dieses Signal grün, wird Zeile 5 ausgewertet, ansonsten kommen wir zu Zeile 7.
Kopieren von Regeln
Da man im Streckennetz ziemlich viele Signale hat, wird das Festlegen der Regeln für jedes einzelne Signal sehr mühsam, insbesondere wenn die Regeln immer die gleichen sind. Anstatt nun jedes Signal mühsam neu programmieren zu müssen, kann kann man bestehende Programmierungen kopieren.
Um eine existierende Programmierung zu kopieren, öffnet man das Menü für die Programmierung des Signals, auf das die Programmierung kopiert werden soll. Nun hat man hier die Möglichkeit, ein Programm von einem anderen Signal zu kopieren. Man drückt die entsprechende Schaltfläche und wählt das Signal, von dem kopiert werden soll. Fertig. Wichtig: Man hat nun zwei Kopien des gleichen Programms. Wenn man nun also merkt, dass das Programm einen Fehler enthält, muss man es an jedem Signal einzeln reparieren bzw. einmal reparieren und dann erneut auf alle anderen Signale kopieren.
Verwendung
Wie eingangs erwähnt ist das größte Problem der programmierbaren Vorsignale, dass es keine Pfadsignale sind. Damit sind die Verwendungsmöglichkeiten verschwindend gering. Für Pfadsignale gibt es die Möglichkeit zur Beschränkung der Wegsuche, diese funktioniert sehr ähnlich, kann aber auf wesentlich mehr Bedingungen zurückgreifen (zum Beispiel den Fahrplan des Zuges und diverse Eigenschaften des Zuges selbst) und ist somit deutlich mächtiger.