• 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 ("trigger") 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 Fahrstraßen 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 Fahrstraßen 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:


    1.3 Konfiguration

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



    Zunächst wird hier ausgewählt, zu welchem Fahrstraßen-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.



    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 Fahrstraßen.
          • "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 Fahrpläne 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 TRIGGER-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 GT6N 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!!


    Nachricht von Fahrzeug an den Trigger Rückmeldung des Objekts Bemerkung
    PZB
    PZB_1000Hz Ü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
    ZS-H_STOP Überfahrt eines aktiven Magneten
    (Zugsicherung Stadtbahn Hannover)
    ZS-H
    ZS-H_VMAX=XX Setzen der neuen Höchstgeschwindigkeit
    (XX: VMax in KMH)
    (Zugsicherung Stadtbahn Hannover)
    ZS-H
    ZS-H_ZS_ON Beginn der Fahrt unter Zugsicherung
    (Zugsicherung Stadtbahn Hannover)
    ZS-H
    ZS-H_ZS_OFF 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)

    Nr. Parameter Bemerkung
    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)