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 [[1]]
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 [[2]] 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 [[3]] sind, damit keine Lücken entstehen und sie auch auf anderen Fahrzeugen eingesetzt werden können.
- Frontanzeige beim Bus: `TERMINUSDISPLAY_LARGE` (kein Slave vorgesehen)
[https://www.lotus-simulator.de/index.php?attachment/19009-pasted-from-clipboard-png/ "pasted-from-clipboard.png"]
- ACHTUNG: Wir haben die Höhe von Ober- und Unterkante verändert! Die Höhe der Anzeige beträgt nunmehr 40 cm.**
**
[https://www.lotus-simulator.de/index.php?attachment/15720-pasted-from-clipboard-png/ "pasted-from-clipboard.png"]
- Linien-Anzeige beim [[6]] und beim Bus (nur Slave): `LINEDISPLAY_SLAVE`
[https://www.lotus-simulator.de/index.php?attachment/15721-pasted-from-clipboard-png/ "pasted-from-clipboard.png"]
(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): `TERMINUSDISPLAY_SLAVE_NARROW`
[https://www.lotus-simulator.de/index.php?attachment/15723-pasted-from-clipboard-png/ "pasted-from-clipboard.png"]
(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`
[https://www.lotus-simulator.de/index.php?attachment/15724-pasted-from-clipboard-png/ "pasted-from-clipboard.png"]
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 [[7]]-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 [[8]]-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 [[9]]. Der [[10]] wird jedoch andere Innenanzeigen erhalten, deren Spezifikationen aber dieselben sein werden.
[https://www.lotus-simulator.de/index.php?attachment/15279-pasted-from-clipboard-png/ "pasted-from-clipboard.png"][https://www.lotus-simulator.de/index.php?attachment/15280-pasted-from-clipboard-png/ "pasted-from-clipboard.png"]
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 [[11]]
Die Modulklasse für den Bordrechner des [[12]] 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":
[https://www.lotus-simulator.de/index.php?attachment/15277-pasted-from-clipboard-png/ "pasted-from-clipboard.png"][https://www.lotus-simulator.de/index.php?attachment/15278-pasted-from-clipboard-png/ "pasted-from-clipboard.png"]
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 [[13]], 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 [[14]]-Hauptscript kompatibel sein oder von diesem berücksichtigt werden.
6 Eingabegerät und Fahrscheindrucker beim Bus
Die Modulklasse für den Bordrechner des [[15]] lautet `ITCS_TERMINAL`.
6.1 Geometrie
Der Ursprung des Gerätes muss mittig platziert werden. Die Ausrichtung ist der folgenden Grafik zu entnehmen:
[https://www.lotus-simulator.de/index.php?attachment/15515-pasted-from-clipboard-png/ "pasted-from-clipboard.png"]
6.2 Script-Kommunikation
Die Script-Kommunikation erfolgt genauso wie mit der des [[16]]-Steuergerätes (abgesehen von den Weichenstellbefehlen, natürlich ![[17]] )
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 [[18]] 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 [[19]]-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 [[20]]-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 Getriebe _eingang_ 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 Getriebe _ausgang_ 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 Getriebe _ausgang_ 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":
[https://www.lotus-simulator.de/index.php?attachment/15725-pasted-from-clipboard-png/ "pasted-from-clipboard.png"]
ACHTUNG: Unsere Fahrzeuge haben bisher keine modularen Entwerter.