BauerHeini Geschrieben 21. Februar 2020 Geschrieben 21. Februar 2020 Liebe Programmierer und MBS-Freunde, ich habe mir ein/e Gleis/Spur gebastelt, die mir mit einem Skript ein Fahrzeug auf eine bestimmte Geschwindigkeit bringen soll: Fahrzeug betritt ein Gleis/Straße mit Schlagwort "Signalgleis" local l --LgRad local sp = 0 --Speed if track.variables["Signal"].state == 2 then sp = track.variables["Signal"].variables["Tempo"] end if track.variables["Alpha"] ~= 0 then --[[Kurve--]] l = math.pi / 180 * track.variables["LgRad"] * track.variables["Alpha"] * $("Ereignisse").variables["Massstab"] else l = track.variables["LgRad"] * $("Ereignisse").variables["Massstab"] -- l = track.size.y end $("Bremsen"):invoke(0, vehicle, l, sp) ----------------------------------- benutzerdefiniertes Ereignis --[[Parameter: Delta = ev. Bremswegverlängerung Fahrzeug = auslösendes Fahrzeug Laenge = auslösende Spurlänge Zieltempo --]]local v = Fahrzeug.currentSpeed / 3600 * 1000 --Umrechnung in m/s local s = Laenge - Delta local a = (v ^ 2) / (2 * s) Fahrzeug.deceleration = a Fahrzeug.targetSpeed = Zieltempo Nun habe ich zwei Fragen. 1. Kann man die Variablen, die ich in den Gleisen/Strassen eingebunden habe, wie LgRad oder Alpha (Geometrie: Lg/Rad bzw Winkel) oder den Maßstab, per Programm auslesen? 2. Wie kann man eine LUA-Funktion erstellen und benutzen? Ich habe das LUA-Tutorial von Goetz gelesen und mir eine Funktion in einem benutzerdefiniertem Ereignis erstellt. Aber wie könnte ich eine Variable bestücken mit dem Wert aus der Funktion? Ich habe ja nur den Namen des benutzerdefinierten Ereignisses und nicht der Funktion. In freudiger Erwartung auf Antworten BauerHeinz
Timba Geschrieben 21. Februar 2020 Geschrieben 21. Februar 2020 Ich verstehe nicht ganz ... um eine Fahrzeug auf eine bestimmte Geschwindigkeit zu bringen gibt es einen einfachen Befehl: vehicle.targetspeed = v -- v ist die gewünschte Geschwindigkeit Oder willst du etwas ganz anderes?
BauerHeini Geschrieben 21. Februar 2020 Autor Geschrieben 21. Februar 2020 Es geht darum, ein Fahrzeug an einem bestimmten Punkt zum Stehen zu bringen.
Timba Geschrieben 21. Februar 2020 Geschrieben 21. Februar 2020 Aha. Das Thema wurde hier schon mal ausführlich behandelt. Ich suche gleich mal danach und schick dir den Link. Muss jetzt erst einkaufen. Kannst aber auch schon mal selbst danach suchen.
Timba Geschrieben 21. Februar 2020 Geschrieben 21. Februar 2020 Schau mal in diesen Faden. Da findest du einiges. Klick
Goetz Geschrieben 21. Februar 2020 Geschrieben 21. Februar 2020 (bearbeitet) vor 2 Stunden schrieb BauerHeini: Wie kann man eine LUA-Funktion erstellen und benutzen? Du erstellst eine Funktion mit dem Schlüsselwort function. Und du benutzt sie, indem du ihren Namen samt den Klammern dahinter schreibst function benutzMich() -- Funktionsdefinition print("Ich werde benutzt") end benutzMich() -- Funktionsaufruf Aber jedes Ereignis, dass du mit einem Lua Skript versiehst, ist ein Funktionsaufruf. Und alles, was du in dieses Skript schreibst, bildet deine Funktionsdefinition. Ich verstehe noch nicht, was dir fehlt. vor 2 Stunden schrieb BauerHeini: Kann man die Variablen, die ich in den Gleisen/Strassen eingebunden habe, wie LgRad oder Alpha (Geometrie: Lg/Rad bzw Winkel) oder den Maßstab, per Programm auslesen? Ja, das geht. $("Objektname").variables["meinVariablenname"] Aber genau das hast du in deinem Skript schon verwendet. Meinst du mit "per Programm" etwas anderes als die EV im MBS? Bearbeitet 21. Februar 2020 von Goetz
BauerHeini Geschrieben 22. Februar 2020 Autor Geschrieben 22. Februar 2020 Ok, was ich meine ist: 1. Meine Funktion habe ich als benutzerdefiniertes Ereignis mit Namen "Kreisbogen" angelegt: function Laenge(Alpha, Radius) local l = Alpha / 360 * 2 * math.pi * Radius return l end Die Testabfrage per Taster lautet: $("Beschriftung").text = Laenge(90, 10) Die Fehlermeldung lautet: [11:05:14] Ereignis-Protokollierung gestartet [11:05:18] Schalter wird betätigt -> Taster, 0 [11:05:18] Schalter wird betätigt [11:05:18] Skriptfehler (9): attempt to call a nil value (global 'Laenge') 2. Um die Länge eines Objekt auszulesen geht... $("Beschriftung").text = $("G01").variables["Lg/Rad"] auch nicht. "G01" ist ein Gleis.
HaNNoveraNer Geschrieben 22. Februar 2020 Geschrieben 22. Februar 2020 Schreib die Funktion mal nicht in ein Benutzerdefinierte Ereignis, sondern in ein SCRIPT, das Du ganz oben im Ereignisbaum unter EREIGNISSE einfügst. Gruß Thomas
Goetz Geschrieben 22. Februar 2020 Geschrieben 22. Februar 2020 Zu HaNNoveraNers richtigem Vorschlag liefere ich die Begründung nach. Mit function Laenge() legst du eine Funktion an. Du müsstest also dein benutzerdefiniertes Ereignis aufrufen, um die Funktion zu erzeugen. Du willst sie aber benutzen. Also musst du sie vorher erzeugt haben. Und dafür ist das Skript, welches du gleich oben in der EV über das + erstellst. Dieses Skript wird während des Anlagenstarts einmal ausgeführt. Das ist der richtige Zeitpunkt, um eine Funktion zu erstellen.
Timba Geschrieben 22. Februar 2020 Geschrieben 22. Februar 2020 vor 3 Stunden schrieb BauerHeini: 2. Um die Länge eines Objekt auszulesen geht... $("Beschriftung").text = $("G01").variables["Lg/Rad"] auch nicht. "G01" ist ein Gleis. Und dafür solltest du dir was anderes ausdenken, denn das wird nix! Die Länge eines Gleises kannst du nicht auslesen. Jedenfalls nicht bei einem gebogenen Gleis. Ich glaube, man kann die Ausdehnung in x- und y-Richtung auslesen, du brauchst für dein Vorhaben aber die Länge der Spur, nicht die x/y-Dimension. Die Länge der Spur ergibt sich aus Radius und Winkel. Diese Werte sind nicht auszulesen, jedenfalls ist mir keine Methode dafür bekannt.
BauerHeini Geschrieben 22. Februar 2020 Autor Geschrieben 22. Februar 2020 Dankeschön. Das mit der Funktion funktioniert Jetzt fehlt nur noch die Lösung auf die Frage mit den Objektvariablen. Obwohl es ja keine Variablen sind, sondern konstante Werte, wie "Lg/Rad" oder "Winkel". Interessant für mich wäre auch "Maßstab" aus dem Modelleditor
BauerHeini Geschrieben 22. Februar 2020 Autor Geschrieben 22. Februar 2020 (bearbeitet) Hallo Timba, ich kann sie berechnen aus "Lg/Rad" und "Winkel". Dafür habe ich ja die Funktion "Laenge" erstellt. Nur hierzu müßte ich eben die Konstanten aus dem Modelleditor auslesen können. Das wäre jetzt mal eine Frage an den "Erbauer" des Programms Stefan Werner. Denn wenn die Daten im Modelleditor zu finden sind, dürfte es ja nicht allzu schwer sein sie auch per Funktion auszulesen. Bearbeitet 22. Februar 2020 von BauerHeini
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