DDorf 1981 - IBIS in eigenes Fahrzeug integrieren (für Entwickler)

  • In diesem Artikel wird beschrieben, wie das IBIS aus dem Addon Düsseldorf 1981 in das eigene Fahrzeug integriert werden kann.

    Achtung: Dieser Artikel beschreibt das Addon "Düsseldorf 1981". Die beschriebenen Funktionen sind ggf. noch nicht verfügbar, bitte die Patchnotes beachten!

    1 Modulslot

    1.1 Name des Modulslots

    Der Name des Modulslots lautet "IBIS_GT6N" und bekommt den IBIS-Hauptrechner zugewiesen. Für (Zweirichtungs)-Fahrzeuge die eine zweite Bedieneinheit haben, gibt es zusätzlich den Slot "IBIS_GT6N_Slave", in dem ein Terminal eingesetzt wird, was nur über die Displayanzeige verfügt, Töne abspielt und Tastendrücke an das Hauptgerät weiterleitet.

    1.2 Maße des Modulslots

    Die Maße des IBIS ohne zusätzliche optische Konfiguration entsprechen denen den GT6N-Modulslots. Siehe hier: Standardisierte Modul-Slots

    2 Aktivierung des Geräts

    2.1 Elektrische Verbindungen

    Das IBIS benötigt folgende Messages zwingend um eingeschaltet zu werden:

    • BATTERYSWITCH (integer, Broadcast(busId = GEN)) - Schaltet den Batteriehauptschalter ein (1) bzw. aus (0). Bei ausgeschaltetem Batteriehauptschalter macht das Gerät gar nichts!
    • MAINSWITCH (integer) - Schaltet das Gerät aktiv (1) bzw. inaktiv (0), wenn der Batteriehauptschalter eingeschaltet ist.
    • VOLTAGE (single, Broadcast(busId = GEN)) - Batteriespannung, dabei ist "1.0" die Sollspannung.

    Diese Messages gelten für Hauptrechner und Terminal gleichermaßen!

    2.2 Optische Konfiguration

    Das Gerät ist in seiner Erscheinungsweise über die Message FAHRZEUGTYP (integer) anpassbar:

    • 0 = Das Gerät wird dargestellt wie im GT6N
    • 1 = Das Gerät ist etwas anders proportioniert, hat einen Rahmen und einen Beleuchtungsbügel für den B80D (Stahl)
    • 2 = Wie "1" nur ohne Rahmen und Bügel
    • 3 = Wie im GT8 mit sichtbarem Gehäuse, Beleuchtungsbügel aber ohne Rahmen. Das Gerät schaltet sich hier im Funkbereich 01 auch erst nach einer Verzögerung von 15 Minuten aus, wenn der Umschalthebel in "0" gestellt wird. In allen anderen Funkbereichen geht es sofort aus.

    Diese Messages gelten für Hauptrechner und Terminal gleichermaßen!

    3 Messages zum Empfangen

    3.1 Standardmessages

    Zusätzlich zu den oben beschrieben Nachrichten zur Aktivierung empfängt das IBIS vom Fahrzeug oder anderen Modulen:

    • LIGHT (single, Broadcast(GEN)) - steuert die Helligkeit der Beleuchtung (0 = Aus)
    • LIGHT (single) - steuert die Helligkeit der Beleuchtung (0 = Aus)
    • DOORRELEASE (integer, Broadcast(PIS)) - setzt die Türfreigabe (1), muss nicht zwingend mit 0 überschrieben werden.
    • ATBUSSTOP (integer) - wie DOORRELEASE
    • SWITCH_OFF - Wird vom Fahrzeug gesendet (1), wenn ein Trigger für Weichen überfahren wurde. Das IBIS löscht daraufhin die Anzeige für Weichenanforderung.
    • WEGIMPULS - Wird immer dann gesendet (1), wenn das Fahrzeug einen Meter (Richtung egal) zurückgelegt hat. Ist für die automatische Haltestellenweiterschaltung (90m) zwingend erforderlich und inkrementiert außerdem den internen Kilometerzähler des IBIS. Als Wert ist hier nur die "1" zulässig!
    • INITSTRING - Wird an die Anzeigen geschickt, wenn das IBIS resettet wird.
    • BEIWAGEN - (integer, Broadcast(IBIS_WAGENBUS)) aktiviert die
      Abfrage nach der Beiwagennummer, muss der Beiwagen senden. Die Beiwagennummer wird gelöscht, sobald die Nachricht BEIWAGEN "0" geschickt wird.
    • KM_STAND - (single) Sollte nur einmal geschickt werden, initialisiert den Kilometerstand des Fahrzeugs.

    3.2 Debugging

    Zum Zwecke des Debugging von Modulen, insbesondere der Anzeigenmodule des GT8S/NM-Wagens, kann das IBIS über seine Testfunktionen weitere Informationen anzeigen. Dazu benötigt es aber folgende Informationen:

    • RLB_SpezFis_NotFound - (integer, Broadcast(IBIS_WAGENBUS)) - Erzeugt die Fehlermeldung "keine spezielle FIS!" auf dem IBIS. Die Rollbandmodule teilen so mit, dass keine passende FIS Datei gefunden wurde und somit auch kein Rollband angezeigt werden kann.
    • ROLLBANDINDEX - (integer, Broadcast(IBIS_DEBUGGING)) - Zeigt an, welcher Rollbandindex gewählt wurde (beim GT8/S/U die Auswahl des Betriebshofs)
    • ANZAHL_SONDERZIELE - (integer, Broadcast(IBIS_DEBUGGING)) - Zeigt die Anzahl an Sonderzielen an, welche mit speziellen Zielcodemanipulationen angesteuert werden können
    • LINIENBAND_LAENGE - (integer, Broadcast(IBIS_DEBUGGING)) - Zeigt die Länge des Linienbandes an
    • ZIELBAND_LAENGE - (integer, Broadcast(IBIS_DEBUGGING)) - Zeigt die Länge des Zielbandes an
    • LINIE_USERID - (integer, Broadcast(IBIS_DEBUGGING)) - Zeigt die User-ID des Linienbandes
    • ZIELBAND_CONTENTID - (integer, Broadcast(IBIS_DEBUGGING)) - Zeigt die User-ID des Zielbandes
    • LINIENBAND_CONTENTID - (integer, Broadcast(IBIS_DEBUGGING)) - Zeigt die erste(!) Content-ID des Linienbandes
    • ZIELBAND_USERID - (integer, Broadcast(IBIS_DEBUGGING)) - Zeigt die erste(!) Content-ID des Zielbandes

    Das Rollband wird über den Broadcast SendBroadcastInteger(self, 'IBIS_WAGENBUS', 'IBIS_TELL_DEBUG_INFO', 1) dazu aufgefordert die Informationen bereitzustellen.


    ACHTUNG: Bei unseren Rollbandmodulen ist es so, dass sich immer nur das Rollband mit der Wagenbusadresse 1:01 meldet! So werden Überschneidungen vermieden!

    4 Messages die gesendet werden

    Folgende Nachrichten schickt das IBIS direkt ans Fahrzeug bzw. als Broadcast:

    • SWITCH - (string) wo 0 (Links), 1 (Rechts) oder 2 (Gerade) für Weichensteuerung durch das Fahrzeug.
    • ANNOUNCE_USERID - (integer, Broadcast(PIS)) User ID der abzuspielenden Ansage
    • ANNOUNCE_SUBID - (integer, Broadcast(PIS)) Content ID der abzuspielenden Ansage
    • ROUTE_LISTINDEX - (integer, Broadcast(PIS)) Index der aktuell eingestellten Route
    • TERMINUS_LISTINDEX - (integer, Broadcast(PIS)) Sendet als Value den Index (nicht den Code!) der soeben gewählten Ziel-Haltestelle, die an den Anzeigen angezeigt werden soll.
    • SPECIALCHAR - (integer, Broadcast(PIS)) Sendet als Value den Sonderzeichen-Code. Das Umwandeln desselben in einen Sonderzeichen-String erfolgt erst in der Anzeige.
    • STOP_SEQ - (integer, Broadcast(PIS)) Sendet die Information, welche Haltestelle angezeigt werden soll, wobei übertragen wird, um die wievielte Haltestelle es sich entlang der aktuellen Route handelt.
    • LINE - (integer, Broadcast(PIS)) Sendet als Value die Liniennummer (ohne irgendwelche Kurs- oder Sonderzeichen-Information!)
    • OFFSTRING - (integer, Broadcast(PIS)) Sendet als Value den zuvor festgelegten INITSTRING wenn die Linie gelöscht wird.
    • LineForBalise - (integer), enthält die eingestellte Linie für die Fahrweganforderung
    • RouteForBalise - (integer), enthält die eingestellte Route für die Fahrweganforderung

    Zusätzlich zu den oben genannten Standardnachrichten werden gesendet:

    • DEST_CODE - (integer, Broadcast(PIS)) Sendet als Value den Zielcode, der im IBIS eingestellt ist.
    • ROUTE - (integer, Broadcast(PIS)) Sendet als Value die Route, die im IBIS eingestellt ist.
    • LINIE_KURS - (string, Broadcast(IBIS_WAGENBUS)) Sendet als Value die eingestellte Linie-Kurs im IBIS
    • LINIE - (string, Broadcast(IBIS_WAGENBUS)) Sendet als Value die eingestellte Linieim IBIS
    • KURS - (string, Broadcast(IBIS_WAGENBUS)) Sendet als Value den eingestellten Kurs im IBIS
    • ZIEL - (string, Broadcast(IBIS_WAGENBUS)) Sendet als Value das eingestellte Ziel im IBIS
    • ROUTE - (string, Broadcast(IBIS_WAGENBUS)) Sendet als Value die eingestellte Route im IBIS
    • WABE - (string, Broadcast(IBIS_WAGENBUS)) Sendet als Value die eingestellte Wabe im IBIS
    • KURZSTRECKE - (string, Broadcast(IBIS_WAGENBUS)) Sendet als Value die eingestellte Kurzstrecke im IBIS
    • STUNDE - (string, Broadcast(IBIS_WAGENBUS)) Sendet als Value die aktuelle Stunde
    • MINUTE - (string, Broadcast(IBIS_WAGENBUS)) Sendet als Value die aktuelle Minute
    • DestinationForBalise - (integer), enthält das eingestellte Ziel für die Fahrweganforderung


    Die obigen Nachrichten dienen einem abgeschaltetem IBIS-Hauptgerät im Zugverband als Info, was das aktuell aktive Gerät verarbeitet. Daher muss der Broadcast "IBIS_WAGENBUS" unbedingt auch über die Kupplung gekuppelt werden!

    5 Interne Kommunikation

    Für die Kommunikation zwischen dem Hauptrechner und dem Terminal gibt es den Broadcast IBIS_INTERN, dort werden alle erforderlichen Eingaben versendet bzw. empfangen.


    Datentyp Name (id)
    Inhalt Richtung
    Integer TERM_AKTIV 0 = Terminal inaktiv
    1 = Terminal aktiv
    TERM > HAUPT
    Integer TERM_TEXID Enthält die TexId des Displays, wird vom Hauptrechner mitgeteilt.
    HAUPT > TERM
    Integer TERM_PLAYSND Spielt einen Ton auf dem Terminal ab:
    0 = Tastenton
    1 = Fehlerton
    2 = Startsound
    3 = Abfahrtton
    4 = Testfunktion-starten-Ton
    5 = Testfunktions-Tastenton
    HAUPT > TERM
    String TERM_REQSWITCH 0, 1 oder 2 für die Weichenanforderung. Das Terminal schickt zunächst den Tastendruck an den Hauptrechner, dieser entscheidet dann, ob eine Weichenanforderung ausgelöst wird und teilt das über diese Nachricht dem Terminal mit. Dies ist erforderlich, damit das Fahrzeug unterscheiden kann welcher Trigger betätigt werden soll. Anschließend wird diese Message geschickt:

    SendMessageToParentString(Self, 'SWITCH', value);
    HAUPT > TERM
    Integer BTNPRESS_TERM Tastendruck auf dem Terminal, wird nur gesendet wenn das Terminal auch tatsächlich Aktiv und nicht defekt ist:

    1 = Taste "0"
    2 = Taste "1"
    3 = Taste "2"
    4 = Taste "3"
    5 = Taste "4"
    6 = Taste "5"
    7 = Taste "6"
    8 = Taste "7"
    9 = Taste "8"
    10 = Taste "9"
    11 = Taste "Eingabe/QUITT"
    12 = Taste "Löschen"
    13 = Taste "Weiche links"
    14 = Taste "Weiche Gerade"
    15 = Taste "Weiche rechts"
    16 = Taste "Stumm"
    17 = Taste "Unfall"
    18 = Taste "Datum/Uhrzeit"
    19 = Taste "Sprechwunsch"
    20 = Taste "Ansage wiederholen"
    21 = Taste "Aussen"
    22 = Taste "Leitstelle an Fahrgäste"

    Der jeweilige Wert mit -1 Mulitpliziert wird gesendet, wenn die Taste wieder losgelassen wird. Drückt man auf dem Terminal die Taste mit der ID 4, wird nach dem loslassen die Message "-4" hinterhergeschickt. So weiß der Hauptrechner, ob eine Taste gedrückt gehalten wird. Deswegen ist auch die ID 0 nicht vergeben ;-)
    TERM > HAUPT


    So ist es möglich, die Grundfunktion des IBIS-Gerätes in einer völlig anderen Optik beizubehalten. Das Hauptgerät kann versteckt platziert und ein eigenes Terminal entwickelt werden. Die Anzahl an Terminals ist nicht begrenzt, es sollte aber nur eines zur gleichen Zeit aktiv sein - das muss das Fahrzeug steuern! Ist mehr als ein Terminal aktiv, ist die Anzeige dort identisch, es kann nicht unterschieden werden, welches Terminal aktiv ist.


    Das Fahrzeug muss in diesem Fall natürlich aus dem Modulslot des Terminals die Weichenanforderung verarbeiten.

    Das Terminal kann nur aktiv sein, wenn das Hauptgerät mit der Message MAINSWITCH ausgeschaltet wurde bzw. eben gar nicht erst eingeschaltet wurde.