Jump to content

mini-test anlage mit definiertem Anfahren aus unbekanntem Zustand, untersuchen der speed/direction variablen, y-pendeln mit Fahrstrassen


Empfohlene Beiträge

Geschrieben

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

Geschrieben (bearbeitet)

Hallo @liftboy,

Was mir aufgefallen ist...
Das Ziel der Lok wird nicht gelöscht...
Bild001.jpg.03a5b46d104549c8c3c0119b3caae971.jpg

... beim Aufsetzen der Lok stimmt zwar die Anzeige (bis auf die erste Zeile!)...
Bild002.jpg.01f599186210e9a377666317117cf128.jpg

... 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)
Bild003.jpg.4605f4cc7fbbdf8008e0986095ca85eb.jpg

... wenn ich "Target Run" betätige... stimmt es wieder...
Bild004.thumb.jpg.62040f074ac145504dd69df38e242feb.jpg

Bei einer Lok mit "falscher" Fahrtrichtung stimmt beim Aufsetzen prinzipiell die Anzeige...
Bild005.jpg.9dacfd1b643225152f8fe0ab47b82c31.jpg

... sie stimmt allerdings nicht mehr mehr nach Taste "Target Run"...
Bild006.jpg.bb220422fbd74ce1202f3e818cd6c9b7.jpg
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...
Bild007.jpg.2484583178ba016a104723b999545f91.jpg

... und dieser auch...
Bild008.jpg.369ce521ae87d1e064c643d5e446ef3e.jpg

Die erste Zeile wurde korrigiert bei einem Fahrzeug mit Antrieb...
Bild009.jpg.928eb185d864ff6ebe0be4bd8b651c81.jpg

... und die Anzeige reagiert jetzt auch darauf, wenn die Fahrtrichtung der Lok manuell geändert wird...
Bild010.thumb.jpg.34dbad588aac58cda35844bf85268df6.jpg

"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 von EASY
Geschrieben

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

 

 

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 erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...