Jump to content

Empfohlene Beiträge

Geschrieben

Hallo Freunde, 

mein Ziel ist, meine Anlage "zum Teil" automatisch durch Fahrpläne zu steuern. D.h. zu bestimmten Zeiten werden bestimmte Fahrstrassen geschaltet. 

Wie das im einzelnen geht, habe ich harausgefunden. Was ich nicht verstehe, wie das mit Hilfe von Listen geht. Die Liste sollte so aussehen. Spalte 1 Uhrzeit, Spalte 2 Fahrstrasse(n). 

Kann mir da jemand helfen? 

Geschrieben

Hallo,

Am 21.7.2025 um 18:11 schrieb galuschka.karl:

Wie das im einzelnen geht, habe ich harausgefunden. Was ich nicht verstehe, wie das mit Hilfe von Listen geht. Die Liste sollte so aussehen. Spalte 1 Uhrzeit, Spalte 2 Fahrstrasse(n). 

Kann mir da jemand helfen? 

... ich habe ein Beispiel gebaut...
Bild007.thumb.jpg.74387c233dfee1b15cacf185168070da.jpg

Der Fahrplan ist folgendermaßen aufgebaut...
... der Fahrplan ist eine Liste...
Bild001.jpg.42daa0cf10da79a56a5965d19249b149.jpg

... jedes Element ist wiederum eine Liste...
Bild002.jpg.d34f90c249f263d224013ee0803a2a6f.jpg

... das erste Element dieser Liste ist die Abfahrtszeit...
Bild003.jpg.c269ca1ef84444e17bd8e13d02ab8680.jpg

... das 2. Element dieser Liste sind die Fahrstraße(n) als Liste...
... mit einer Fahrstraße...
Bild004.jpg.d6c205436cc84b621624996efc528e57.jpg

... mit zwei Fahrstraßen...
Bild005.jpg.20bcb5c1f4793ae2e6928e247c48f5cf.jpg

Mit dem Ereignis "Zeitpunkt erreicht" -> "jede Minute" wird abgefragt, ob eine Fahrplanzeit erreicht wurde...
Bild006.thumb.jpg.6823e67960483eb055821ebc184676af.jpg

... das ganze ist in lua, da die grafische EV nur die Bedingung "Zeitpunkt überschritten" kennt und ich nicht weiß, wie man damit einen einen genauen Vergleich auf nur eine bestimmte Zeit machen kann...
 

--[[
Ungenauigkeiten von Zeitsekunden eliminieren
--]]

$("Textfeld 1").text=layout.time

for i,v in ipairs($("Ereignisse").variables.Fahrplan) do
local t=toTime(v[1]) -- Abfahrtszeit
  if layout.time >= t and layout.time < (t+toTime("00:01"))  then --*
    local text=""
    for k,w in ipairs(v[2]) do -- Fahrstraßen
      text=text .. w.name .. " aktiviert " .. tostring(layout.time).."\n"
      w.active=true
    end
    $("Textfeld 2").text=text
  end
end

Hier noch die Demoanlage...
Zeitsteuerung 02a.mbp

Da der Fahrplan zwischen 12:00 und 13:00 abläuft, kann mit dem Taster die Zeit auf 12:00 zurückgesetzt werden
(Simulationszeit auf "Virtuell" auf 20 Minuten / 24 Stunden gesetzt)

Gruß
EASY

Bearbeitet von EASY

Geschrieben
  • Autor

Ja, vielen Dank, ich werde es versuchen. 

Geschrieben

Hallo,

da mir das Ausfüllen der Fahrplan - Variablen etwas aufwendig erschien (viele Klicks für einen Eintrag) habe ich für die Vereinfachung der Eingabe eine Ereignisauswertung geschrieben, die den Fahrplan aus einem Textfeld ("TF Fahrplan") ausliest... (betätigen des Tasters "FP auslesen")
P.S. die Modulvariable "Fahrplan" für den Fahrplan wird automatisch angelegt.

Bild 008.jpg

-[[
- Fahrplan in ein Textfeld eintragen

Formatierung Textzeile:
HH:MM; Auflistung Fahrstraße(n mit , getrennt)
z.B.
08:45; Fahrstraße 1
10:03; Fahrstraße 2, Fahrstraße 3
11:56; Fahrstraße 4

(Führende 0 in der Zeit kann auch weggelassen werden))

--* ={""} Einträge sind eine Liste (nicht ={} -> wird zu Tabelle! -> Adressierung über Name ["x"] ungünstig!)
--*                                                         -> z.B.print($("Ereignisse").variables.Fahrplan[2]["2"][1])
--*                                                                                          [Liste][Tabelle][Liste]
--*                                                  einfacher -> z.B.print($("Ereignisse").variables.Fahrplan[2][2][1])
--*                                                                                            [Liste][Liste][Liste]

--** Fahrstraßen mit gleichem Namen werden einzeln aufgenommen

--*** Schreibweise $("Ereignisse").variables.Fahrplan geht nur, wenn Name ohne Leerzeichen!
--*** -> sonst z.B. $("Ereignisse").variables["Fahrplan 01"]
--]]

$("Ereignisse").variables.Fahrplan={""} --*** Liste anlegen (--*)
local text = $("TF Fahrplan").text
local lines = {} -- Zeilen
text:gsub("[^\n]+",function(c) table.insert(lines,c) end) -- Text in Zeilen auflösen
local zeit="" -- Abfahrtszeit
local fs="" -- Fahrstraße(n) aus Text
local n=0 -- Hilfsvariable
local tf={} -- Hilfsliste Fahrstraßennamen
local te={} -- Hilfsliste Fahrstraßen

for i, line in ipairs(lines) do
  line:gsub("[^;]+",function(c) zeit=c end,1) -- Zeit extrahieren
  fs,n=line:gsub(zeit..";","") -- Zeit in Linie Löschen
  tf={} -- Hilfsliste leeren
  te={}
  -- Fahrstraßen extrahieren, Leerstellen vor dem Namen löschen
  fs:gsub("[^,]+",function(c,a,b) a,b=string.gsub(c, "^%s+", "") table.insert(tf,a) end)
  $("Ereignisse").variables.Fahrplan[i]={""} --*
  for i,v in ipairs(tf) do                          -- Liste Fahrstraßennamen umwandeln in...
    for k,w in ipairs(layout:getRoutesByName(v)) do --** Liste mit Fahrstraßen
      table.insert(te,w)
    end
  end
  $("Ereignisse").variables.Fahrplan[i][1]=zeit --*** Abfahrtszeit eintragen
  $("Ereignisse").variables.Fahrplan[i][2]=te   --*** Fahrstraßen eintragen
end

... in dem Beispiel ist (zu Demonstrationszwecken) noch der Fall mit berücksichtigt, daß 2 Fahrstraßen den gleichen Namen haben.

Zur prinzipiellen Funktionsweise hat sich sonst nichts gegenüber dem vorherigen Beispiel geändert.

... zum Ausprobieren und Spielen noch das Projekt...

Zeitsteuerung 02b.mbp

Gruß
EASY

Bearbeitet von EASY

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren