ElFerrocarrilero Geschrieben 1. Februar Geschrieben 1. Februar (bearbeitet) Hallo, eine allgemeine (Einsteiger-)Verständnisfrage zu Lua-Skripten im MBS: [Kurzfassung: Vielleicht läuft die Frage einfach nur darauf hinaus, was genau "Ereignisparameter" sind, und wo man sich darüber informieren kann? ] In der grafischen Oberfläche für die Ereignisverwaltung (EV) kann ein Ereignistyp (z.B. "Zug betritt ein Gleis") und ein "Auslöser" (z.B. "Gleis_42") festgelegt werden. Im Skript-Editor lässt sich dann Lua-Code für dieses Ereignis schreiben. Aber dieser Code betrifft dann (natürlich) nur, was "im Innern" des Ereignisses vorgehen soll. Es muss aber ja einen Rahmen / eine Umgebung geben, in der das alles abläuft (z.B. so etwas wie ein "EventListener" für Gleis_42, der aufpasst ob dieses Gleis betreten wird). Wie kann man sich diesen "Rahmen" ansehen (nicht ändern!)? Über reine Neugier hinaus ist das auch eine praktische Frage: Man kann z.B ein Objekt* track verwenden, das auf das Gleis zeigt, welches durch ein Fahrzeug betreten wird, z.B. bei print(track.name). Dieses Objekt brauche ich in meinem Lua-Skript nicht zu definieren, das ist offenbar schon in der Umgebung erfolgt. Durch Zufall** habe ich dann im Lua-Code einer alten Anlage von BahnLand noch Objekte namens oldTrack und newTrack gefunden, und (für mich) überraschenderweise konnte ich die im eigenen Skript verwenden, ohne sie erst definieren oder mit Parametern versehen zu müssen.* Vermutlich gibt es da, wo die herkommen, auch noch andere nützliche Dinge? In einer Anlage von Goetz fand ich z.B. controller, was auch interessant aussieht, aber ist es wie track ein in der Umgebung definiertes Objekt, das ich ohne Weiteres benutzen kann, oder kommt es nur in speziell dieser Anlage vor? Wo könnte man sich über diese "Umgebung" informieren? Gibt es eine Art Programmierschnittstelle (API) oder Ähnliches für MBS-Lua? oldTrack und newTrack beispielsweise konnte ich bisher weder in der MBS-Hilfe, noch im Wiki, noch in den Foren finden**. (Das Objekt track wird in der Hilfe zwar in verschiedenen Beispielen verwendet, aber nicht selbst dokumentiert.) Oder geht diese Frage womöglich am gesamten Konzept von MBS-Lua-Skripten vorbei? Cheers, El Ferrocarrilero * "Objekt" hier immer in ganz allgemeiner Bedeutung, wie auch immer die betreffende "entity" (Wesenheit?) in Lua heißt ("property", "function", usw.). ** Wenn man im Editor "ol" schreibt, erscheint allerdings in der Tat ein Popup das "oldTrack" als "Ereignisparameter" anbietet. Nur muss man dazu den Namen natürlich schon kennen. Für Info über Eigenschaften und Methoden kann man dann "oldTrack." bzw "oldTrack:" tippen, aber die dann erscheinenden Listen umfassen wohl immer alle bestehenden Eigenschaften und Methoden, nicht nur die, welche für dieses spezielle Objekt auch wirklich "Sinn machen". Oder? Bearbeitet 1. Februar von ElFerrocarrilero
Phrontistes Geschrieben 1. Februar Geschrieben 1. Februar vor 15 Minuten schrieb ElFerrocarrilero: oldTrack und newTrack Wie das funktioniert, habe ich hier mal mit einer kleinen Beispielsanlage beschrieben. Und wenn Du auf F12 drückst, dann hast Du auch den vermissten vor 17 Minuten schrieb ElFerrocarrilero: "EventListener"
Phrontistes Geschrieben 1. Februar Geschrieben 1. Februar vor 25 Minuten schrieb ElFerrocarrilero: controller ist der Schalter, der das Ereignis ausgelöst hat, was diese unsinnige Anweisung verdeutlichen mag:
ElFerrocarrilero Geschrieben 1. Februar Autor Geschrieben 1. Februar Vielen Dank @Phrontistes für die schnellen Antworten! (Die Beispielanlage läuft bei mir allerdings nicht; ich werde ermuntert MBS upzudaten. Vermutlich ist die Anlage für v.9, während ich noch v.8 habe.) Abgesehen davon war die Zielrichtung meiner Frage aber auch ein bisschen anders: Ich kann mittlerweile track, oldTrack und newTrack erfolgreich verwenden. Und hatte mir auch schon zusammengereimt, dass im Ereignis-Protokoll die Werte von oldTrack und newTrack auftauchen. Was mich aber darüber hinaus interessiert ist die Frage, ob/wo diese Dinge dokumentiert sind? Also zum einen, dass es so etwas wie controller oder oldTrack etc. überhaupt gibt, und zum anderen, welche Eigenschaften diese Objekte haben. XYZ.name funktioniert vermutlich immer, XYZ.state vielleicht ja auch, aber oldTrack.crane vermutlich nicht (oder?). So etwas kann ich (als Einsteiger) derzeit nur durch Studium von anderen Anlagen (oft sehr schön. aber für mich noch zu kompliziert) herausfinden, oder durch Versuch & Irrtum -- falls ich zumindest den Namen des betreffenden Objekts/Ereignisparameters schon kenne. Außer track, oldTrack, newTrack und controller gibt es aber sicher noch viele andere. Cheers, El Ferrocarrilero
Goetz Geschrieben 1. Februar Geschrieben 1. Februar (bearbeitet) vor 3 Stunden schrieb ElFerrocarrilero: Es muss aber ja einen Rahmen / eine Umgebung geben, in der das alles abläuft Dieser Rahmen ist das Studio selbst. Also das eigentliche Programm. Die EV (Ereignis Verwaltung) ist nur eine Erweiterung zum Studio. Auch ohne die EV ist der Betrieb einer Anlage eine permanente Abarbeitung von Ereignissen: Ein Zug wird entlang eines Gleises fortbewegt. Also schaut das Studio für jedes Bild, das neu berechnet wird: Mit welchem Gleisstück ist der Zug verbunden? Welche Lage, Form und Länge hat das Gleis? Wo auf diesem Gleis befindet sich der Zug? Wie weit hat er sich in der verstrichenen Zeit fortbewegt? Hat er dabei inzwischen eine Nahtstelle zu einem neuen Gleisstück überschritten? Dieses Beispiel soll dir verdeutlichen, dass zum Beispiel das Ereignis "Zug betritt Gleis" auch im Studio selbst eine Rolle spielt. Mit der Ereignisverwaltung hängst du dich nur an solch ein Ereignis dran und sagst: "Führe bitte außerdem noch diese Aufgaben aus ..." An einem Ereignis sind ein oder mehrere Objekte beteiligt. Wenn beispielsweise ein Zug ein Gleis betritt, dann gehören dazu der Zug (richtiger: ein Fahrzeug im Zugverband) das betretene Gleis das Gleis, von dem aus dieses neue Gleis betreten wurde Das Studio übergibt diese Auslöser als Argumente an das Ereignis, welches du in der EV benutzt um eine Aufgabenliste zu erstellen. Du findest sie in der grafischen EV unter dem Begriff "Auslöser". Wenn du die EV in Lua wandelst, siehst du den eigentlichen Parameternamen. Zu jedem Ereignis gibt es nur wenige Auslöser. Wenn ein Zug ein Gleis betritt, dann sind das vehicle (das Fahrzeug) track (das betretene Gleis) oldTrack (das Gleis, von dem der Zug kam) aber kein "newTrack" (weil das von "track" abgedeckt wird.) Für das Ereignis "Zug verlässt Gleis" gibt es vehicle (das Fahrzeug) track (das verlassene Gleis) newTrack (das Gleis, auf dem sich das Ende des Zuges jetzt befindet) aber kein "oldTrack". Ebenso kennt das Ereignis "Schalter wird betätigt" einen "controller" (das ist eben dieser Schalter, welcher betätigt wurde.) Aber das Ereignis "Zug betritt Gleis" kennt keinen "controller", weil hier kein Schalter involviert ist. Damit hast du zwar keine vollständige Liste. Aber ich hoffe, dass du das Prinzip jetzt besser durchschaust. Dann kannst du dir leicht selbst herleiten, welche Auslöser es für welches Ereignis überhaupt geben kann. Viele Grüße Götz Bearbeitet 1. Februar von Goetz Schreibfehler korrigiert
Goetz Geschrieben 1. Februar Geschrieben 1. Februar vor 56 Minuten schrieb ElFerrocarrilero: die Frage, ob/wo diese Dinge dokumentiert sind kann ich dir aber auch beantworten: (Ich hatte nur nicht gleich daran gedacht - sorry) Bezogen auf das jeweilige Ereignis kannst du in Lua mit der Tastenkombination Strg + Leertaste diese Hilfe öffnen: Gleich an erster Stelle in der Liste findest du alle Parameter, die zu diesem Ereignis (im Beispiel ist das "Zug betritt Gleis") gehören. Viele Grüße Götz
ElFerrocarrilero Geschrieben 1. Februar Autor Geschrieben 1. Februar Vielen Dank an @Goetz für die ausführliche und hilfreiche Erläuterung! 1 hour ago, Goetz said: Zu jedem Ereignis gibt es nur wenige Auslöser. Eine wichtige Information; mich hat etwas die Vorstellung beunruhigt, es gebe da womöglich wer weiß wieviele andere, die sehr nützlich wären, wenn man nur von ihnen wüsste. (Jedem Programmierer bekanntes Problem, besonders auf neuem Gebiet: Man programmiert mühsam und garantiert "nicht-performant" um ein Problem herum, das sich mit Hilfe eines dieser leider noch unbekannten Elemente ganz leicht lösen ließe. ) 37 minutes ago, Goetz said: Bezogen auf das jeweilige Ereignis kannst du in Lua mit der Tastenkombination Strg + Leertaste diese Hilfe öffnen: Aha! Genau das war der Stolperstein für mich. Da war mir was bei der Info-Jagd durch die Lappen gegangen. Zwar hatte ich die Lektion von neulich nicht vergessen und es auch hier mit Strg+Leertaste probiert, war dabei aber dem (falschen) Eindruck erlegen, dass die dann erscheinende Liste immer dieselbe ist, indem sie alle nur denkbaren MBS-Lua-Elemente (Eigenschaften, Funktionen, Variablen usw, plus Lua-Schlüsselwörter) auflistet. Beim neuerlichen Versuch, aufgrund der Hinweise hier, sehe ich jetzt aber, dass das nicht stimmt: die Liste ist in der Tat spezifisch für das jeweilige Ereignis, und die Ereignis-Parameter ganz am Anfang enthalten auch die jeweils speziellen Namen, die ich da also auch ohne "Vorkenntnisse" finden kann. Prima, alles klar, nochmals vielen Dank für alle Antworten, und schönes Wochenende! Cheers, El Ferrocarrilero
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren
Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen.
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden