Jump to content
Zum Start hinzufügen

Weitere Informationen

3D-Modellbahn Studio

Eine Vollbild-App auf Ihrem Startbildschirm mit Push-Benachrichtigungen und mehr.

So installieren Sie diese App auf iOS und iPadOS
  1. Tippen Sie auf das Teilen-Symbol in Safari
  2. Scrollen Sie durch das Menü und tippen Sie auf Zum Startbildschirm hinzufügen.
  3. Tippen Sie oben rechts auf Hinzufügen.
So installieren Sie diese App auf Android
  1. Tippen Sie auf das 3-Punkte-Menü (⋮) in der oberen rechten Ecke des Browsers.
  2. Tippen Sie auf Zum Startbildschirm hinzufügen oder App installieren.
  3. Bestätigen Sie durch Tippen auf Installieren.

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

Das ist bei dir wirklich sehr schön lesbar! 

Geschrieben

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
  • Autor

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

Push-Benachrichtigungen konfigurieren

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.