From 365da6cd9bb089419c89f51220b8331e17078567 Mon Sep 17 00:00:00 2001 From: Nero <41307858+nero@users.noreply.github.com> Date: Sun, 3 Jul 2022 12:59:06 +0000 Subject: [PATCH] Zuglenkung: Extra Melden-Funktion und FS-Nummerierung via Ziele, nicht Stellungen --- Zuglenkung.lua | 43 ++++++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/Zuglenkung.lua b/Zuglenkung.lua index fea3be6..f07aeac 100644 --- a/Zuglenkung.lua +++ b/Zuglenkung.lua @@ -1,8 +1,14 @@ require("Serializer") -Zuglenkung_Slot = 991 +Zuglenkung_Slot = Zuglenkung_Slot or 991 Zuglenkung_Auftreage = ladeTabelle(Zuglenkung_Slot) +-- Extrafunktion, damit der User das ueberschreiben kann +function ZuglenkungMelden(...) + local Zeitstempel = string.format("%02d:%02d:%02d", EEPTimeH, EEPTimeM, EEPTimeS) + print(Zeitstempel," Zuglenkung: ",...) +end + function Zuglenkung(...) local Weg = {...} if #Weg % 2 == 1 then @@ -11,38 +17,49 @@ function Zuglenkung(...) end local Auftrag=nil for i=#Weg-1,1,-2 do - Auftrag={Weg[i],Weg[i+1],Auftrag,0} + Auftrag={Weg[i],Weg[i+1],0,Auftrag} end - Zuglenkung_Auftreage[Auftrag[1]]=Auftrag + ZuglenkungAuftrag(Auftrag) speicherTabelle(Zuglenkung_Slot, Zuglenkung_Auftreage) end -function Zuglenkung_Main(Optionen) +function ZuglenkungAuftrag(Auftrag) + if Zuglenkung_Auftreage[Auftrag[1]] ~= nil then + ZuglenkungMelden("Stellauftrag ", Auftrag[1], " verworfen") + end + Zuglenkung_Auftreage[Auftrag[1]]=Auftrag + if type(Auftrag[2]) == "number" then + ZuglenkungMelden("Anmeldung ",string.format("FS %04d-%02d",Auftrag[1],Auftrag[2])) + else + ZuglenkungMelden("Anmeldung ",string.format("FS %04d",Auftrag[1])," zu ",__tostring(Auftrag[2])) + end +end + +function ZuglenkungMain() local ZuStellen={} for k, Auftrag in pairs(Zuglenkung_Auftreage) do local Stellung = EEPGetSignal(Auftrag[1]) -- Rumheulen, falls es unser FSignal nicht gibt if Stellung == 0 then - print("Zuglenkung verworfen: FSignal ",Auftrag[1]," nicht gefunden") + ZuglenkungMelden("FSignal ", Auftrag[1], " nicht gefunden") Zuglenkung_Auftreage[k]=nil -- Merken, das wir das FS-Signal schonmal aufgeloest gesehen haben elseif Stellung == 1 then - Auftrag[4]=1 + Auftrag[3]=1 local Ziel = Auftrag[2] if type(Ziel) == "number" then Ziel={Ziel} end table.insert(ZuStellen, {Auftrag[1], Ziel[math.random(#Ziel)]}) -- Stellung > 1 und wir haben es vorher auf 1 gesehen -> wir waren das - elseif Auftrag[4] == 1 then - if Optionen.Meldung=true then - print("Zuglenkung: ", Auftrag[1], " auf ", Stellung, " gestellt") - end - Auftrag = Auftrag[3] + elseif Auftrag[3] == 1 then + ZuglenkungMelden(string.format("FS %04d-%02d",Auftrag[1],Stellung-1)," geschaltet") + Auftrag = Auftrag[4] Zuglenkung_Auftreage[k]=nil if Auftrag then - Zuglenkung_Auftreage[Auftrag[1]]=Auftrag + ZuglenkungAuftrag(Auftrag) + return end end end @@ -55,7 +72,7 @@ function Zuglenkung_Main(Optionen) -- Stellversuche durchfuehren for i=1, #ZuStellen do - EEPSetSignal(ZuStellen[i][1], ZuStellen[i][2]) + EEPSetSignal(ZuStellen[i][1], ZuStellen[i][2]+1, 1) end speicherTabelle(Zuglenkung_Slot, Zuglenkung_Auftreage)