Zuglenkung: Extra Melden-Funktion und FS-Nummerierung via Ziele, nicht Stellungen

This commit is contained in:
Nero 2022-07-03 12:59:06 +00:00
parent eec8400940
commit 365da6cd9b

View File

@ -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)