Trigger

Aus LOTUS Wiki DE
Wechseln zu: Navigation, Suche

Vorlage:ArticleMetadata

Trigger ermöglichen die Kommunikation des Fahrzeuges mit der Umgebung. Hierzu werden die Fahrzeuge mit Sensoren und die Gleise und Fahrbahnen mit Triggern ausgestattet.

1 Trigger platzieren und konfigurieren

1.1 Platzierung

Man findet das Trigger-Objekt rechts in der Kategorie "Helfer", wobei es sowohl eine Version für Gleise ("[[1]]") und eine für Fahrbahnen gibt ("triggerBus"). Der Trigger muss dabei einfach nur "ungefähr" auf dem Gleis bzw. dem Fahrbahnpfad platziert werden; die interne "Verknüpfung" mit dem Gleis bzw. des Pfades wird dennoch gewährleistet. Eine exakte Ausrichtung/Drehung ist auch nicht nötig, aber die grobe Richtung (vorwärts oder rückwärts) ist sehr wichtig, weil die Sensoren/Trigger jeweils immer nur auf die Sensoren/Trigger "ihrer" Richtung reagieren.


Trigger können die folgenden Dinge tun:

    • Befehle vom Fahrzeug entgegen nehmen und davon abhängig
      • eine [[2]] einlegen oder
      • die Meldung an ein dem Trigger zugeordnetes Szenerieobjekt weiter leiten
    • Direkt ohne extra fahrzeugseitigem Befehl
      • eine Fahrstraße einlegen oder auflösen
      • die Prozedur "OnVehicleEntered" im zugeordnetem Szenerieobjekt auslösen
      • eine Ampelanforderung auslösen

1.2 Mit Szenerieobjekt verbinden

Soll mehr als nur das Einlegen oder Auflösen von [[3]] oder das Auslösen von Anforderungen geschehen, so benötigt man ein separates Szenerieobjekt, was die gewünschten Vorgänge als Script enthält. Dies kann sowohl ein konkretes Signal sein, empfehlenswert können aber auch separate "unsichtbare" Objekte sein, die ausschließlich Träger der Logik sind, je nach Anwendungsfall.


Die Verbindung erfolgt darüber, dass das separate Szenerieobjekt markiert wird und dann mit der rechten Maustaste auf den Trigger geklickt und "Mark. Object Trigger zuordnen" ausgewählt wird:


[https://www.lotus-simulator.de/index.php?attachment/26705-pasted-from-clipboard-png/ "pasted-from-clipboard.png"]

1.3 Konfiguration

Mittels Rechtsklick auf den Trigger und Auswahl von "Trigger-Eigenschaften..." wird das Eigenschafts-Dialogfeld aufgerufen:


[https://www.lotus-simulator.de/index.php?attachment/26703-pasted-from-clipboard-png/ "pasted-from-clipboard.png"]


Zunächst wird hier ausgewählt, zu welchem [[4]]-Bezirk der Trigger gehören soll.


Sendet das Fahrzeug einen Stellbefehl an den Trigger, dann soll dieser - je nach Stellbefehl - eine bestimmte Fahrstraße einlegen. Dieses Verhalten kann in den folgenden drei Dropdown-Menüs eingestellt werden. Soll der Trigger bestimmte oder alle Stellbefehle ignorieren, dann ist jeweils " - " auszuwählen.


Verlässt das Fahrzeug den Bereich der Fahrstraße, dann soll diese wieder aufgelöst (deaktiviert) werden. Sofern dies nicht über die Gleisfreimeldung erfolgt/erfolgen soll, kann für diesen Zweck einem Trigger ebenfalls eine Fahrstraße zugewiesen werden ("Bei Fahrzeugkontakt diese Fahrstraße zurücksetzen"). Hierbei "wartet" der Trigger aber nicht auf eine bestimmte Information/Aufforderung seitens des Fahrzeuges, sondern die Aufhebung wird sofort bei "Berührung" des Triggers ausgelöst. Umgekehrt ist es ebenfalls möglich, dass eine Fahrstraße unabhängig von irgendwelchem Verhalten seitens des Fahrzeuges bei Kontakt zum Trigger eine bestimmte Fahrstraße eingelegt wird ("Bei Fahrzeugkontakt diese Fahrstraße setzen").


Um den Trigger zum Aktivieren einer Ampelanforderung zu nutzen, muss weiter unten die Ampelanlage und die entsprechend gewünschte Anforderung ausgewählt werden.


Soll die Prozedur "OnVehicleEntered" im Script des dem Trigger zugeordnete Szenerieobjekts aufgerufen werden, dann muss unten der entsprechende Haken gesetzt werden.

2 Fahrzeug ausrüsten

Damit ein Fahrzeug mit den Baken interagieren kann, muss es mindestens einen Sensor bekommen, Zweirichtungsfahrzeuge benötigen mindestens einen jeweils an jedem Ende. Eingerichtet wird dieser in den Objekteinstellungen im Abschnitt "Sensoren":


Die Parameter bedeuten:

    • Y-Position: Die Position des Sensors am Fahrzeug in Längsrichtung
    • Gegen Fahrtrichtung: Die Sensoren interagieren immer nur mit jenen Triggern, die dieselbe Ausrichtung haben, weshalb hier entsprechend angegeben werden muss, in welche Richtung dieser Sensor eingebaut werden soll.


[https://www.lotus-simulator.de/index.php?attachment/26704-pasted-from-clipboard-png/ "pasted-from-clipboard.png"]


3 Script-Implementierung

3.1 Fahrzeug

Das Triggersystem umfasst aktuell folgende Funktionen:

    • Fahrzeug:
      • `procedure OnEnterLeaveTrigger(triggerid: string; entering: boolean; sensorindex: integer)` (ins Script einzufügen)
     * truggerid: aktuell nicht benutzt
     * entering: wurde der Trigger "betreten" (true) oder verlassen (false)?
     * sensorindex: Index des Sensors der diese Prozedur ausgelöst hat
      • `procedure SendMessageToTrigger(Self; ID: string; value: string; sensor_index: integer) ` (aus dem Script heraus aufrufen)
      • `function SendMessageToTriggerReceiveAnswer(Self; ID: string; value: string; sensor_index: integer): string` (aus dem Script heraus aufrufen)
     * ID: Aktuell verfügbare Werte "SWITCH", "LINEROUTE" sowie "MSGTOTRIGGER": 
       * "SWITCH" mit den Werten (jeweils als String!) "0" (links), "1" (rechts) und "2" (geradeaus) zum Übertragen eines Stellbefehls oder "toggle" zum Umschalten zwischen zweier der drei aufgeführten [[5]].
       * "LINEROUTE", bei dem die Zahlen der Linie und der Route und der Name des ITCS-Servers übertragen werden, als String getrennt mit einem "/". So wird aus Linie 123 mit Route 45 der String "123/45/{Name}". Die Übertragung der Linie und Route sorgt dafür, dass LOTUS anhand der vorliegenden, gültigen und zum ITCS-Server-Namen passenden [[6]] heraussucht, welche Route hierfür hinterlegt ist, und anhand dieser den Stellbefehl passend gibt. Der Name des ITCS-Servers wird zuvor üblicherweise mit der Funktion `PIS_GetITCSServer(self: integer)` geholt.
       * "MSGTOTRIGGER", bei dem im dem Trigger zugeordnetem Szenerieobjekt die Funktion function OnReceiveTriggerStringSend(triggerid, str: string; speed_mps: single): string; ausgelöst wird.   
    • ACHTUNG! ES IST STETS DIE UNTEN AUFGEFÜHRTE STANDARDISIERUNG DER STRINGS ZU NUTZEN! NUR SO IST EIN FREIZÜGIGER EINSATZ VON FAHRZEUGEN, MAPS UND[[7]]-OBJEKTEN MÖGLICH!!! Sofern euch da etwas fehlt, bitte melden, dann ergänzen wir den Standard.** _Dank an Panda für die Zusammenstellung der Liste!_
     * value: Zugehörige Information
     * Sensor_index: Index des Sensors, der diese Information senden soll
     * Rückgabewert: Im Fall von "MSGTOTRIGGER" wird im dem Trigger angehängten Szenerieobjekt die Funktion `OnReceiveTriggerStringSend` aufgerufen. Diese erlaubt einen "Antwortstring", welcher wiederum als Rückgabewert für die `SendMessageToTriggerReceiveAnswer`-Funktion zurückgegeben wird. Achtung! Die Rückgabe funktioniert nur bei aus dem Fahrzeug selbst aufgerufener Funktion! Ein Modul kann diese Funktion zwar ebenfalls auslösen, erhält aber keinen validen Wert als Rückgabe!

Im [[8]] werden zum Beispiel beide Funktionen zusammen verwendet: Wenn der Fahrer einen Stellbefehl aktiviert, dann wird dieser Wert (für eine bestimmte maximale Wegstrecke) "vorgemerkt". Wird dann `OnEnterLeaveTrigger` ausgelöst, dann benutzt das Script sofort `SendMessageToTrigger` und sendet damit den Stellbefehl an den Trigger. Denkbar sind aber auch andere Varianten: Wenn der Trigger einen größeren Radius hat (z.B. für Kontakt-Stellbefehle oder längere Kontaktschleifen), dann könnte `SendMessageToTrigger` auch unmittelbar ausgelöst werden, wenn der Fahrer den Stellbefehl betätigt.

3.2 Szenerieobjekt

Beim dem Trigger zugeordneten Szenerieobjekt gibt es die folgenden Methoden:

    • `function OnReceiveTriggerStringSend(triggerid, str: string; speed_mps: single): string;` (ins Script einzufügen)
      • triggerId: aktuell nicht benutzt
      • str: vom Fahrzeug versendeter String **AUCH HIER NOCHMAL DER HINWEIS: BITTE UNBEDINGT AN DIE STANDARDS (s.u.) HALTEN!!!**
      • speed_mps: aktuelle Fahrzeuggeschwindigkeit
      • Rückgabe: der Wert, den man diese Funktion zurückgeben lassen kann, wird an das Fahrzeug geschickt und dort als Rückgabewert für `SendMessageToTriggerReceiveAnswer` übermittelt
    • `procedure OnVehicleEntered(triggerid: string; speed_mps: single);` (ins Script einzufügen) - wird immer aufgerufen, wenn ein Sensor den Trigger "betritt" und jener entsprechend konfiguriert ist (s.o.)
      • triggerid: aktuell nicht benutzt
      • speed_mps: aktuelle Fahrzeuggeschwindigkeit

4 Standardisierung der Fahrzeug-Strecke-Kommunikation

Generell sollen bei Übertragung mehrerer Informationen diese mit ',' getrennt werden. Also: `Wert1,Wert2,Wert3`


Hier nun eine Liste an Messages vom Zug und die entsprechenden Antwortmöglichkeiten. Hierbei wurden erstmal einige bekannte Zugsicherungssysteme und andere nützliche Nachrichten mit aufgenommen. Wie schon gesagt: **Bevor eigene Probleme Lösungen benötigen, bitte unbedingt mit uns Kontakt aufnehmen, bevor nicht-standardisierte Lösungen entwickelt werden!!**


---|---|--- PZB
Überfahrt eines aktiven 1000Hz Magneten

(Punktfürmige Zugbeeinflussung PZB 90)

PZB | PZB_500Hz | Überfahrt eines aktiven 500Hz Magneten (Punktfürmige Zugbeeinflussung PZB 90) PZB | PZB_2000Hz | Überfahrt eines aktiven 2000Hz Magneten (Punktfürmige Zugbeeinflussung PZB 90) INDUSI | INDUSI_STOP | Überfahrt eines aktiven INDUSI Magneten (Zugsicherung für U-Bahn und Stadtbahn) MECH_FAHRSPERRE_U_BLN | U_BLN_STOP | Vorbeifahrt an einer geschlossenen Fahrsperre MECH_FAHRSPERRE_S_BLN | S_BLN_STOP | Vorbeifahrt an einer geschlossenen Fahrsperre (Bernauer Fahrsperre) ZBS | ZBS_ZH | Balisentyp: Hauptsignal (Zugbeeinflussungssystem S-Bahn Berlin) (Parameter: 1, 2, 3, 4, 5) ZBS | ZBS_ZHF | Balisentyp: Hauptsignal (nicht stellbar) + Ragierfahrt ZBS | ZBS_ZRH | Balisentyp: Hauptsignal + Ra12 (Parameter: 1) ZBS | ZBS_ZRHF | Balisentyp: Hauptsignal (nicht stellbar) + Ra12 (Parameter: 1) ZBS | ZBS_ZF | Balisentyp: Stumpfgleisabschluss ZBS | ZBS_FLiH | Balisentyp: Virtuelles Hauptsignal (Parameter: 1, 2, 3, 4, 5) ZBS | ZBS_ZV | Balisentyp: Vorsignal (Für Zugfahrten) (Parameter: 2) ZBS | ZBS_ZRV | Balisentyp: Vorsignal (Für Zug- und Rangierfahrten) (Parameter: 2) ZBS | ZBS_ZLiV | Balisentyp: Virtuelles Vorsignal (Parameter: 2) ZBS | ZBS_Rsp | Balisentyp: Sperrsignal ZBS | ZBS_RS | Balisentyp: Wartezeichen/ Ranigerhaltetafel ZBS | ZBS_RBE | Balisentyp: Virtuelles Signal "HP0 + Ra12" ZBS | ZBS_ZA | Balisentyp: Aufwertesignal (Parameter: 1, 6) ZBS | ZBS_ZBP | Balisentyp: Aufwertesignal m. anschl. Weichenbereich (Paraameter: 6) ZBS | ZBS_ZBbP | Balisentyp: Aufwertesignal o. anschl. Weichenbereich (Parameter: 6) ZBS | ZBS_ZUE | Balisentyp: Lokführerüberwachter Bahnübergang (Sendet nur wenn LO-Anlage nicht eingeschaltet) (Parameter: 8, 9)

ZBS | ZBS_ZRE | Balisentyp: Ende der ZBS-Strecke ZBS | ZBS_ZO | Balisentyp: Rücksetzung des Ortugnsfehlers ZBS | ZBS_ZRLa | Balisentyp: Vorrübergehende Langsamfahrstelle (Parameter: 7, 8, 9) ZUB | ZUB_Signalstate=X | Überfahrt eines Hauptsignals (X: 0=Haltbegriff, 1=Fahrtbegriff) ZUB | ZUB_VMAX=XX | Aufwertung der Geschwindigkeit (XX: VMax in KMH) ZUB | ZUB_NextStop | Impuls zum abspielen der nächsten Haltestellenansage ZUB | ZUB_DoorSide=X | Türseite einstellen (X: L=links, R=rechts, B=beiseitig, alles andere=löschen) ZUB | ZUB_DoorStep=X | Trittstufenhöhe einstellen (X: H=Hoch, M=Tief, SO=SO, alles andere=löschen) ZUB | ZUB_UBAHN_ON | "U-Bahnfunktion" einschalten ZUB | ZUB_UBAHN_OFF | "U-Bahnfunktion" ausschalten ZUB | ZUB_LIGHTS_ON | Einschalten der Zugbeleuchtung

ZUB | ZUB_LIGHTS_OFF | Ausschalten der Zugbeleuchtung

RCV | DoorSide=X | Streckenseitige Sendespule: Türseite einstellen (X: L=links, R=rechts, B=beidseitig, alles andere=löschen)

RCV | DoorStep=X | Streckenseitige Sendespule: Trittstufenhöhe einstellen (X: H=Hoch, M=Tief, SO=SO, alles andere=löschen)

REQ | OK | Vorerst nur reserviert, mögliche Nutzung für Standanforderungen

ZS-H

Überfahrt eines aktiven Magneten

(Zugsicherung Stadtbahn Hannover)

ZS-H

Setzen der neuen Höchstgeschwindigkeit

(XX: VMax in KMH) (Zugsicherung Stadtbahn Hannover)

ZS-H

Beginn der Fahrt unter Zugsicherung

(Zugsicherung Stadtbahn Hannover)

ZS-H

Ende der Fahrt unter Zugsicherung

(Zugsicherung Stadtbahn Hannover)


Der Vollständigkeit halber dann hier noch ein Beispiel zum Verständnis:

Das Fahrzeug sendet beim Überfahren eines Triggers mit `SendMessageToTriggerReceiveAnswer`: `ZUB` (Teilt dadurch dem Trigger mit, dass es über eine ZUB verfügt)

Der Trigger bzw. das verbundene Szenerieobjekt antwortet: `ZUB_DoorSide=R,ZUB_DoorStep=M` (Nur, wenn der Trigger zur ZUB gehört)

Das Fahrzeug setzt dann seine Türseite auf rechts und seine Trittstufenhöhe auf Mitte/Tief.


Anhang: (Parameter für ZBS Balisen)

---|---|--- 1 | ZBS_Signalstate=X | Überfahrt eines Hauptsignals (X: 0=Haltbegriff, 1=Fahrtbegriff, R=Ra12) 2 | ZBS_Presignalstate=X | Überfahrt eines Vorsignals (X: 0=Haltankündigung, 1=Fahrankündigung) 3 | ZBS_SignalDistance=XX | Distanz zum nächsten Hauptsignal in Metern 4 | ZBS_VMaxToNext=XX | Geschwindigkeitsänderung an diesem Hauptsignal (XX: VMax in KMH) 5 | ZBS_VMaxAtNext=XX | Geschwindigkeitsänderung am nächsten Hauptsignal (XX: VMax in KMH) (nur bei Änderung) 6 | ZBS_Routespeed=XX | Übermittlung der Streckengeschwindigkeit (XX: in KMH) 7 | ZBS_LA_V=XX | Übermittlung der Höchstgeschwindkeit einer Langsamfahrstelle 8 | ZBS_LA_Dist=XX | Übermittlung der Distanz zur Langsamfahrstelle 9 | ZBS_LA_Length=XX | Übermittlung der Länge der Langsamfahrstelle (Ab Beginn)