liftboy Geschrieben 8. März Geschrieben 8. März Hallo, ich zeige das Ergebnis meiner letzten Woche. Ich habe mit EASY's und Goetz'ens Hilfe einige mir unbekannt Zustände (direction, speed, target) untersucht und ein Board zum testen gebaut. Durch Pendel-Verkehr auf einer Y-Strecke mit Hilfe von Fahrstraßen habe ich mir diesen Bereich erschlossen. Ich warne : es ist unkompliziert, aber in purem Lua geschrieben, ich wäre dankbar wenn Rückmeldungen kämen vielleicht mit Lösungen in grafischer EV. Für mich ist allerdings puresLua kompakter und auch leichter zu lesen Grüße vom liftboy minitest_speed-direction-pendeln-fahrstraßen.mbp
EASY Geschrieben 9. März Geschrieben 9. März (bearbeitet) Hallo @liftboy, Was mir aufgefallen ist... Das Ziel der Lok wird nicht gelöscht... ... beim Aufsetzen der Lok stimmt zwar die Anzeige (bis auf die erste Zeile!)... ... aber nur solange, bis das Ziel vor dem Aufsetzen nicht (manuell) gelöscht wurde. Wenn ich das Ziel zuvor lösche, stimmt die Anzeige nicht mehr (außer in der ersten Zeile, in der letzten Zeile) ... wenn ich "Target Run" betätige... stimmt es wieder... Bei einer Lok mit "falscher" Fahrtrichtung stimmt beim Aufsetzen prinzipiell die Anzeige... ... sie stimmt allerdings nicht mehr mehr nach Taste "Target Run"... Es wird zwar die Fahrtrichtung richtig gesetzt aber es findet keine (korrigierende) Abfrage des Ziels statt, weshalb die Anzeige nicht angepasst wird. Ich habe Dein Skript etwas abgeändert... ... nun wird auch dieser Zustand angezeigt... ... und dieser auch... Die erste Zeile wurde korrigiert bei einem Fahrzeug mit Antrieb... ... und die Anzeige reagiert jetzt auch darauf, wenn die Fahrtrichtung der Lok manuell geändert wird... "GetVehicle" und "show" sieht nun so aus... getVehicle = function(self) -- get vehicle auf dem "gleis" -- return object oder nil vehicles = layout:getVehiclesOn(self.gleis) for _,v in ipairs(vehicles) do if v:hasEngine() then self.vehicle = v return v,#vehicles end end self.vehicle = nil return nil,#vehicles end , -- --------------------------------------------------------------- show = function(self) -- zeigt die variablen auf "textfeld1" -- schreibt alles in eine table -- schreibt die table dann in das textfeld local texte = {} local t = "" local v,n = self:getVehicle() if v ~= nil then t = "vehicle with engine" table.insert(texte,string.format("%s", v.name )) table.insert(texte,string.format("drivingDirection %d", v.drivingDirection )) table.insert(texte,string.format("targetSpeed %2.2f", v.targetSpeed)) table.insert(texte,string.format("targetSpeedAbs %2.2f", v.targetSpeedAbs )) table.insert(texte,string.format("engine.active %s", tostring(v.engine.active))) v.target=self.ziel if v.target ~= nil then table.insert(texte,string.format("target %s", v.target.name)) v.target=nil else table.insert(texte,"target not in drivingDirection") end -- dump auf die console -- PrintTable(texte, 1) -- erzeugt einen string mit "\n" for i,v in ipairs(texte) do t = t.."\n"..v; end; else if n~=0 then t = "vehicle without engine" else t = "no vehicle" end end -- write den string in das textfeld self.textfeld.text = t end , und bei "start_target" wird das Ziel nach der Auswertung gleich wieder gelöscht... start_target = function (self, v, ziel, speed) -- --------------------------------------------------------------- --[[ diese function ist das ergebnis aller versuche : " Aufgabe: - untersuche eine lok mit beliebiger richtung und speed - gebe ihr ein ziel - starte die lok mit richtig eingestellter richtung und speed" Methode: (Vorschlag von EASY) setze ein ziel-object als ziel in das vehicle.target werte dann die "target" property des vehicle aus wenn kein ziel gefunden (target==nil) drehe die drivingDirection um multipliziere die wunsch-speed(positiv) mit der drivingDirection vor dem setzen der speed muß die engine.active gesetzt werden ! --]] v.target= ziel -- Fahrziel setzen -- konnte Fahrziel gesetzt werden? (Aktuelle Fahrtrichtung in Richtung Gleiskontakt?) if v.target == nil then -- not in drivingDirection ! --> drivingDirection korrigieren v.drivingDirection = - v.drivingDirection else v.target = nil end v.engine.active = true -- speed an die drivingDirection anpassen v.targetSpeed = speed * v.drivingDirection -- ende routine return end -- end do_start() ... zum ausprobieren... Minitest_speed-direction-pendeln-fahrstraßen-5a.mbp Persönliche Anmerkung: Für einen Programmierer ist Dein Verfahren zwar einfacher (weil am Stück und keine doppelten Funktionen) zu lesen, daß allerdings bei den einzelnen Aktionen (Taster xy wird betätigt) nur eine Funktion aufgerufen wird, macht es etwas schwieriger nachzuvollziehen, was genau bei dieser Aktion passiert... da muß man dann im übergeortneten Skript nachschlagen... Gruß EASY Bearbeitet 9. März von EASY
liftboy Geschrieben 9. März Autor Geschrieben 9. März Hallo @EASY vielen Dank für deine Korrekturen, 100% korrekt! chapeau vor deinem Engagement. Meine Programme lassen sich halt leicht mit ctrl-c/ctrl-v (komplett) in eine textfile transportieren und von dort mit dem z.bsp One-Compiler überprüfen und mit einem Beautifier in Form bringen, sichern und genauso einfach wieder zurückholen. Bei der Doku der einzelnen Aktionen im EV hast du Recht, aber welcher Programmierer dokumentiert schon gerne mehr als das unbedingt notwendig ist. Ich wünschte ich könnte einigen 3d-modellbahn Akteuren von dieser Art der Programmierung überzeugen, würde sicher manche Erleichterung bringen Grüße vom liftboy
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