Standardisierte Modul-Slots

  • In diesem Artikel werden alle LOTUS-weit als Standard definierten Modulslot-Informationen aufgelistet.

    1 Allgemeine Broadcast-Standards

    Nicht alle der genannten Broadcasts werden bereits vom Standardcontent unterstützt.


    Die folgenden Broadcasts sind auf der BusID "GEN" standardisiert:

    • BATTERYSWITCH (integer): Ein- und Ausschaltbefehl des Batteriehauptschalters (oder wahlweise Abklemmen der Batterie)
    • MAINSWITCH (integer): Ein- und Ausschalt-Befehl (1 bzw. 0) des Hauptschalters (im Allgemeinen Zündschloss o.Ä. bzw. Richtungswender).
    • LIGHT (single): Die Helligkeit der Anzeigen-Beleuchtung wird als Value empfangen und wird in die zuständige Variable geschrieben.
    • VOLTAGE (single): Aktuell vorliegende Systemspannung, 1.0 = Sollspannung
    • VEH_NUMBER (string): Sendet im ersten SimStep die Wagennummer als Broadcast

    2 Allgemein zum FIS

    Dank des Broadcast-Systems ist es immer möglich, dass selbst erstellte Bordrechner und selbst erstellte Anzeigen weitere Daten übertragen als die hier aufgeführten! Auf diese Weise kann natürlich ein komplexeres FIS auf den bestehenden Fahrzeugen eingerichtet werden.


    Die hier aufgeführten Broadcast-Sendungen und -Empfänge sind jedoch jene, welche zur Anwendung kommen müssen, wenn neu entwickelte Module zu den Standard-Content-Modulen kompatibel sein sollen.

    3 Außenanzeigen

    Bei den Anzeigen wird stets unterschieden zwischen einer Master-Anzeige, welche die gesamte Script-Logik und die Schreib-Befehle enthält, und Slave-Anzeigen, die keinerlei innere Logik enthalten, sondern lediglich von der Master-Matrix den Textur-Index erhalten, so dass sie dieselbe Textur wie die Master-Anzeige verwenden (und somit dasselbe anzeigen). Der Vorteil ist hierbei, dass nur eine einzige Textur generiert wird, die dann von allen Anzeigen gemeinsam genutzt wird.

    3.1 Geometrie

    Die Anzeigen sind flach und auf den Mittelpunkt der eigentlichen Matrix ausgerichtet. Sie sind so ausgerichtet wie die Front-Matrix. Wichtig ist, dass sie etwas zu breit und etwas zu hoch für den Anzeigen-Kasten vom GT6N sind, damit keine Lücken entstehen und sie auch auf anderen Fahrzeugen eingesetzt werden können.

    • Frontanzeige beim Bus: TERMINUSDISPLAY_LARGE (kein Slave vorgesehen)

    • Frontanzeige beim GT6N (als Master) und Seitenanzeigen bei Bus und GT6N (jeweils als Slave): TERMINUSDISPLAY und TERMINUSDISPLAY_SLAVE

    ACHTUNG: Wir haben die Höhe von Ober- und Unterkante verändert! Die Höhe der Anzeige beträgt nunmehr 40 cm.


    • Linien-Anzeige beim GT6N und beim Bus (nur Slave): LINEDISPLAY_SLAVE


    (die Z-Koordinaten der Linien-Anzeige sind identisch mit denen der Seitenanzeige)

    • Schmale Anzeige für Linie und Ziel, z.B. für Busse, die am Heck auch nochmal das Ziel anzeigen (nur Slave): TERMINUSDIRPLAY_SLAVE_NARROW


    (die Z-Koordinaten der schmalen Anzeige sind identisch mit denen der Seitenanzeige)

    • Reine Zielanzeige, z.B. für Busse mit aufgeteilten Seitenanzeigen (nur Slave): TERMINUSONLYDISPLAY_SLAVE


    Die Maße sind identisch zu denen der Seitenanzeige, abgesehen natürlich von der Breite der Anzeige selbst – diese ergibt sich über die Skalierung und Höhe der reinen Zielanzeige.

    3.2 Script-Kommunikation (Master)

    Per Broadcast werden die folgenden Befehle unter der BusID "PIS" empfangen:

    • LINE (integer): Empfängt als Value die Liniennummer (ohne irgendwelche Kurs- oder Sonderzeichen-Information!). Es findet unmittelbar eine Umwandlung in einen String unter Berücksichtigung des aktuellen Sonderzeichen-Codes auf Basis der FIS-Gruppe und dann die Aktualisierung der Anzeige statt.
    • TERMINUS_LISTINDEX (integer): Empfängt als Value den Index (nicht den Code!) der soeben gewählten Ziel-Haltestelle. Die entsprechenden Strings werden der FIS-Gruppe entnommen und es findet auf deren Basis unmittelbar eine Aktualisierung der Anzeige statt.
    • SPECIALCHAR (integer): Empfängt als Value den Sonderzeichen-Code. Es findet keine Aktualisierung der Anzeige statt.

    Per Broadcast wird der folgende Befehl unter der BusID "GEN" empfangen:

    • LIGHT (single): Die Helligkeit der Anzeigen-Beleuchtung wird als Value empfangen und wird in die zuständige Variable geschrieben.
    • MAINSWITCH (integer): Ein Ein- und Ausschalt-Befehl (1 bzw. 0) wird als Value empfangen und schaltet die Anzeige ein- bzw. aus. Dieser Befehl wird für gewöhnlich nur von LED- oder LCD-Anzeigen verarbeitet, die dementsprechend "ausschalten" können. Reine Rollband-, Flipdot- oder Fallblattanzeigen benötigten den Befehl natürlich nicht.

    Direkt vom Fahrzeug empfangen wird folgender Befehl:

    • INITSTRING (string): Der String, der auf die Anzeige geschrieben werden soll, wenn sonst nichts geschrieben werden soll (z.B. IBIS auf 0 zurücksetzen).

    3.3 Script-Kommunikation (Slave)

    Die einzigen Befehle, die die Slave-Anzeigen direkt empfangen, sind der LIGHT- und der MAINSWITCH-Broadcast. Ansonsten gibt es noch "interne" Broadcasts zwischen den Anzeigen, die aber nicht standardisiert werden müssen. Hier müssen lediglich die Anzeigen untereinander aufeinander abgestimmt werden.

    4 Innenanzeigen

    Bei den Innenanzeigen wird das selbe Master-Slave-System wie bei den Außenanzeigen verwendet. Die Modulklasse für die Master lautet STOPDISPLAY_MASTER, die der Slaves STOPDISPLAY_SLAVE.

    4.1 Geometrie

    Die dargestellte Innenanzeige ist die vom GT6N. Der DL wird jedoch andere Innenanzeigen erhalten, deren Spezifikationen aber dieselben sein werden.


    4.2 Script-Kommunikation

    Wichtig: Momentan empfangen die Anzeigen noch per Broadcast den Haltewunsch. Das wird aber geändert werden müssen, damit in verschiedenen Bereichen verschiedene Haltewunsch-Zustände angezeigt werden können! Aus dem Grunde wird die Haltewunsch-Spezifikation hier noch nicht aufgelistet.


    Es werden per Broadcast die folgenden Befehle über die BusID "PIS" empfangen:

    • STOP_SEQ (integer): Die "Position" der aktuellen Haltestelle in der Haltestellenliste der aktuell eingestellten Route ("die wievielte Haltestelle es ist")
    • ROUTE_LISTINDEX (integer): Der Index der eingestellten Route
    • TERMINUS_LISTINDEX (integer): Der Index des eingestellten Zieles
    • LINE (integer): Die eingestellte Linie
    • DOORSOPEN (integer): Es wird eine 1 empfangen, wenn die Türfreigabe gegeben wird

    Direkt vom Fahrzeug empfangen wird folgender Befehl:

    INITSTRING (string): Der String, der auf die Anzeige geschrieben werden soll, wenn sonst nichts geschrieben werden soll (z.B. IBIS auf 0 zurücksetzen).

    5 IBIS / Bordrechner GT6N

    Die Modulklasse für den Bordrechner des GT6N lautet IBIS_GT6N.

    5.1 Geometrie

    Die Größe und Ausrichtung des IBIS kann folgender Grafik entnommen werden; die Z-Achse zeigt dabei in Richtung des Betrachters, das IBIS liegt gewissermaßen "auf dem Boden":


    5.2 Script-Kommunikation

    Das IBIS sendet die Aufforderungen an Innen- und Außenanzeigen mittels Broadcasts, die unter der BusID "PIS" verteilt werden:

    • LINE (integer): Sendet als Value die Liniennummer (ohne irgendwelche Kurs- oder Sonderzeichen-Information!), die an den Anzeigen angezeigt werden soll. Die Aktualisierung der Anzeigen wird hiermit angefordert.
    • TERMINUS_LISTINDEX (integer): Sendet als Value den Index (nicht den Code!) der soeben gewählten Ziel-Haltestelle, die an den Anzeigen angezeigt werden soll. Die Aktualisierung der Anzeigen wird hiermit angefordert.
    • SPECIALCHAR (integer): Sendet als Value den Sonderzeichen-Code. Das Umwandeln desselben in einen Sonderzeichen-String erfolgt erst in der Matrix. Die Aktualisierung der Matrix wird nicht angefordert! Erst eine der oberen Messages löst die Aktualisierung der Anzeigen aus.
    • ROUTE_LISTINDEX (integer): Index der aktuell eingestellten Route, vor allem für die Innenanzeigen
    • STOP_SEQ (integer): Sendet die Information, welche Haltestelle angezeigt werden soll, wobei übertragen wird, um die wievielte Haltestelle es sich entlang der aktuellen Route handelt.

    Ebenfalls per Broadcast sendet das IBIS die Befehle für die akustischen Ansagen, die vom Fahrzeug-Hauptscript ausgeführt werden, ebenfalls über die BusID "PIS":

    • ANNOUNCE_USERID und ANNOUNCE_SUBID (beide integer): Erst muss die UserID der Sound-ContentID übertragen werden, dann die SubID. Sobald die SubID übertragen wurde, muss die Ansage beginnen.
    • ANNOUNCE_GLUED (string): Zeichenkette bestehend aus abwechselnd Content-UserID und Content-SubID, getrennt durch ein Pluszeichen "+", z.B.: 1000+1231004+1000+1231006+. Es sollen die durch die angegebenen ContentIDs identifizierten Sounds aneinander gehängt und dann abgespielt werden. ACHTUNG! Die Zeichenkette muss mit einem "+" enden!

    Wenn eine Weiche gestellt werden soll, dann sendet das Gerät per direkte Übertragung den folgenden Befehl:

    • SWITCH (integer): Die Richtung ist wie folgt kodiert: 0 = links, 1 = rechts, 2 = geradeaus

    Die folgenden Befehle versorgen das Fahrzeug mit Linie und Route, damit dieses die Daten an die Balisen weiterleiten kann (ebenfalls direkte Übertragung):

    • LINE (integer)
    • ROUTE (integer)

    Die folgenden Befehle werden über eine explizite Message vom Fahrzeug an das Gerät gesendet (kein Broadcast!):

    • MAINSWITCH (integer): Value = 0 schaltet das Gerät aus, Value = 1 schaltet es ein.
    • VELOCITY (single): Wie schnell rollt/bewegt sich das Fahrzeug (m/s) ? Negative Werte sind für Rückwärtsfahrt vorzusehen.
    • ATBUSSTOP (integer): Befindet sich das Fahrzeug an einer Bushaltestelle, ermittelt bspw. über die Türfreigabe? 0 = nein, 1 = ja.

    Sollen abweichende Systeme von Steuergerät/Anzeigen eingebaut werden, können ohne Probleme weitere Broadcast-Befehle eingefügt werden; durch die Broadcast-Charakteristik müssen diese nicht mit dem GT6N-Hauptscript kompatibel sein oder von diesem berücksichtigt werden.

    6 Eingabegerät und Fahrscheindrucker beim Bus

    Die Modulklasse für den Bordrechner des ND313 lautet ITCS_TERMINAL.

    6.1 Geometrie

    Der Ursprung des Gerätes muss mittig platziert werden. Die Ausrichtung ist der folgenden Grafik zu entnehmen:


    6.2 Script-Kommunikation

    Die Script-Kommunikation erfolgt genauso wie mit der des GT6N-Steuergerätes (abgesehen von den Weichenstellbefehlen, natürlich ;-) )

    7 Motor

    Insbesondere bei Fahrzeugen mit Verbrennungsmotor (Straßenfahrzeug oder Diesellok oder -triebwagen) wird der Motor mit seinem Sound in ein separates Modul verlagert, damit man die Möglichkeit hat, ohne Probleme einen alternativen Motor (andere PS-Zahl, anderes Verhalten und/oder anderer Sound) einzubauen. Bei Elektromotoren wird das Modulsystem vermutlich nicht zur Anwendung kommen, da hier die Ansteuerung eine viel größere Rolle spielt, sowohl bei der Leistung als auch beim Sound. Hier wird wohl eher auf Fahrzeugkonstanten zurückgegriffen.


    Die Modulklasse für einen klassischen Motor lautet ENGINE_PISTON (d.h. Kolbenmotor, also Benziner oder Diesel-Motor). Für alle Fälle seien hier aber auch für Elektromotoren die Klasse ENGINE_ELECTRIC und für Gasturbinen die Klasse ENGINE_TURBINE definiert.


    WICHTIG: Damit die ND313-Scripts ohne Modifikationen funktionieren, muss der Motor auf Slot Nr. 0!

    7.1 Geometrie

    Die Geometrie ist komplett irrelevant, da es hierbei um keinerlei Darstellung geht! Soll eine zu öffnende Motorklappe realisiert werden, dann muss das dahinter platzierte Mesh vom Bus selbst mitgeliefert werden! Für gewöhnlich verwendet man seitens des Motor-Moduls einen sehr kleinen Würfel und platziert seitens des Busses den Modul-Slot irgendwo so, dass er nicht sichtbar ist, aber der Sound trotzdem aus der richtigen Richtung hörbar ist.

    7.2 Script-Kommunikation

    Bei der gesamten Kommunikation wird ohne Broadcasts gearbeitet und erfolgt immer über das Fahrzeug selbst. Es gibt keine Kommunikation zwischen Motor und Getriebe direkt:

    • Einmalig beim ersten SimStep-Durchlauf wird vom Motor mit INV_J (single) das Trägheitsmoment gesendet, damit der Antriebsstrang bei seinem Verhalten damit rechnen kann.
    • Dauerhaft sendet der Motor mit M (single in Newtonmetern) das aktuelle Drehmoment, was er leisten kann (welches über Gaspedalstellung, Drehzahl usw. berechnet wird)
    • Dauerhaft empfängt der Motor mit THROTTLE (single, von 0 bis 1) die aktuelle Gaspedalstellung (aber das, was davon wirklich am Motor ankommt, also inklusive Eingriff durch ASR usw.)
    • Dauerhaft empfängt der Motor mit RPM (single, in Umdrehungen pro Sekunde) die aktuelle Drehzahl, die der Antriebsstrang am Motorflansch vorgibt
    • Dauerhaft empfängt der Motor mit STARTERSHUTOFF (integer) die Position von Anlasser und Motorabstellung: 1 = Anlasser soll aktiv sein, -1 = Motorabschaltung soll aktiv sein, 0 = nichts

    8 Getriebe

    Das Getriebemodul steuert, wie die Kraft auf die Räder wirkt und wie schnell sich der Motor dreht, abhängig von Wandler, Kupplung und eingelegtem Gang. Die Modulklasse ist GEARBOX, egal, ob es sich um ein Schaltgetriebe oder ein Automatikgetriebe handelt.


    WICHTIG: Damit die ND313-Scripts ohne Modifikationen funktionieren, muss das Getriebe auf Slot Nr. 1!

    8.1 Geometrie

    Hierbei verhält es sich so wie beim Motor: Die Position muss stimmen, damit der Sound aus der richtigen Richtung zu hören ist, aber das Mesh muss versteckt sein und entsprechend klein gewählt werden.

    8.2 Script-Kommunikation

    Auch beim Getriebe wird ohne Broadcasts gearbeitet und die Kommunikation wird immer über das Fahrzeug selbst geleitet:

    • Dauerhaft sendet das Getriebe mit MODE (integer) den aktuellen Modus (-1 = R, 0 = N, 1 = 1, 2 = 1+2, 3 = 1+2+3, 4 = D), d.h. den Modus, in dem das Getriebe tatsächlich ist. Beispielsweise gibt es eine Latenz zwischen dem Drücken des Gangwahltasters und dem Wechsel des Modus' im Getriebe. Oder aber schaltet das Getriebe gar nicht in den Modus D (selbst wenn man den Gangwahltaster drückt), wenn der Motor nicht läuft.
    • Dauerhaft sendet das Getriebe mit GEAR_CURRENT (integer), welcher tatsächliche Gang eingelegt ist. (-1 = Rückwärts, 0 = Leerlauf, 1 = 1. Gang, 2 = 2. Gang usw.)
    • Dauerhaft sendet das Getriebe mit RPM_INPUT (single, Umdrehungen pro Minute) die Drehzahl, welches der Getriebeeingang hat, also die Welle zum Motor hin. Das ist derjenige Wert, der vom Fahrzeug dem Motor übergeben wird.
    • Dauerhaft sendet das Getriebe mit M_OUTPUT (single, Newtonmeter), welches Drehmoment am Getriebeausgang entsteht. Dieser Wert muss dann vom Fahrzeug entsprechend des verbauten Differenzials (wo üblicherweise eine weitere Übersetzung verbaut ist) und das Raddurchmessers umgerechnet werden, um die Kraft der Räder auszurechnen, mit der diese den Bus antreiben sollen.
    • Das Getriebe empfängt mit MODE (integer), welcher Modus eingestellt werden soll. Kodiert ist der Wert so wie die gleichnamige Sende-Information (s.o.).
    • Das Getriebe empfängt mit RETARDER (integer), welche Retarder-Stufe aktiviert werden soll.
    • Das Getriebe empfängt mit INV_J_INPUT (single), welche Trägheit der Motor (plus ggf. vorhandene Zusatzbauteile) hat
    • Das Getriebe empfängt mit RPM_OUTPUT (single, Umdrehungen pro Minute), welche Drehzahl der Getriebeausgang haben soll. Da der Getriebeausgang fest mit Differenzial und Rädern verbunden ist, muss das Fahrzeugscript die Geschwindigkeit der Räder über den Raddurchmesser und die Differenzialübersetzung hin zum Getriebe umrechnen. Diese Information erreicht dann das Getriebe.
    • Das Getriebe empfängt mit M_INPUT (single, Newtonmeter) das Drehmoment, welches der Motor liefert
    • Das Getriebe empfängt mit THROTTLE (single, 0...1) die Stellung des Gaspedals, da hiervon die Schaltpunkte abhängig gemacht werden.

    9 Entwerter

    Wer möchte, kann seine Entwerter ebenfalls modular konfigurieren. Hierzu bitte folgende Konventionen einhalten:

    • Klasse: TICKETSTAMPER
    • Geometrie: Schlitz in Richtung positiver Y-Achse, Mittelpunkt "hinten unten":


    ACHTUNG: Unsere Fahrzeuge haben bisher keine modularen Entwerter.