Compare commits

...

2 Commits

2 changed files with 40 additions and 17 deletions

View File

@ -1,3 +1,8 @@
function ZuggreiferMelden(...)
local Zeitstempel = string.format("%02d:%02d:%02d", EEPTimeH, EEPTimeM, EEPTimeS)
print(Zeitstempel," Zuggreifer: ",...)
end
-- Erwartet im Anlagenscript definierte Zuggreifer-Tabelle: -- Erwartet im Anlagenscript definierte Zuggreifer-Tabelle:
-- Schluessel ist die Signal-ID -- Schluessel ist die Signal-ID
-- Wert ist eine Liste von Gleisen vor dem Signal -- Wert ist eine Liste von Gleisen vor dem Signal
@ -18,13 +23,13 @@ function ZuggreiferInstallieren(Optionen)
if Optionen == nil then Optionen={} end if Optionen == nil then Optionen={} end
for Signal, Schienen in pairs(Zuggreifer) do for Signal, Schienen in pairs(Zuggreifer) do
if EEPGetSignal(Signal) == 0 then if EEPGetSignal(Signal) == 0 then
print("Zuggreifer findet Signal "..Signal.." nicht") ZuggreiferMelden("finde Signal "..Signal.." nicht")
end end
-- Schienen fuer die Gleisbesetztabfrage registrieren -- Schienen fuer die Gleisbesetztabfrage registrieren
for i=1,#Schienen do for i=1,#Schienen do
local SchienenID = math.abs(Schienen[i]) local SchienenID = math.abs(Schienen[i])
if not EEPRegisterRailTrack(SchienenID) then if not EEPRegisterRailTrack(SchienenID) then
print("Zuggreifer "..Signal.." findet Gleis "..SchienenID.." nicht") ZuggreiferMelden("Signal "..Signal.." findet Gleis "..SchienenID.." nicht")
end end
end end
-- Vorherigen Callback retten -- Vorherigen Callback retten
@ -44,12 +49,13 @@ function ZuggreiferInstallieren(Optionen)
-- Nix tun, wenn das Signal auf Halt gestellt wurde -- Nix tun, wenn das Signal auf Halt gestellt wurde
local Fahrt, V_max = leseSignal(Signal) local Fahrt, V_max = leseSignal(Signal)
if not Fahrt then return end if not Fahrt then return end
if type(V_max) ~= "number" then V_max = Optionen.V end
if type(V_max) ~= "number" then V_max = 40 end if type(V_max) ~= "number" then V_max = 40 end
-- Zug ermitteln -- Zug ermitteln
local Zugname, Richtung = ZuggreiferAbfragen(Zuggreifer[Signal]) local Zugname, Richtung = ZuggreiferAbfragen(Zuggreifer[Signal])
-- Erfolg melden -- Erfolg melden
if Optionen.Melden then if Optionen.Melden then
print("Signal ",Signal," hat ",Zugname and Zugname or "ins Leere"," gegriffen") ZuggreiferMelden("Signal ",Signal," hat ",Zugname and Zugname or "ins Leere"," gegriffen")
end end
-- Abfahrbefehl erteilen -- Abfahrbefehl erteilen
if Zugname then if Zugname then
@ -95,7 +101,7 @@ function ZuggreiferAbfragen(Schienen)
-- Richtung des Fahrzeugs im Zug ermitteln, benoetigt EEP 15 Plugin 1 -- Richtung des Fahrzeugs im Zug ermitteln, benoetigt EEP 15 Plugin 1
local FahrzeugVorwaerts = true local FahrzeugVorwaerts = true
if type(EEPRollingstockGetOrientation) == "function" then if type(EEPRollingstockGetOrientation) == "function" then
local ok, FahrzeugVorwaerts = EEPRollingstockGetOrientation(FahrzeugName) _, FahrzeugVorwaerts = EEPRollingstockGetOrientation(FahrzeugName)
end end
-- Richtung zusammenmultiplizieren und mit Zugnamen zurueckgeben -- Richtung zusammenmultiplizieren und mit Zugnamen zurueckgeben
return Zugname, SchienenMap[Gleis] * ( FahrzeugRichtung > 0 and 1 or -1) * (FahrzeugVorwaerts and 1 or -1) return Zugname, SchienenMap[Gleis] * ( FahrzeugRichtung > 0 and 1 or -1) * (FahrzeugVorwaerts and 1 or -1)

View File

@ -1,8 +1,14 @@
require("Serializer") require("Serializer")
Zuglenkung_Slot = 991 Zuglenkung_Slot = Zuglenkung_Slot or 991
Zuglenkung_Auftreage = ladeTabelle(Zuglenkung_Slot) 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(...) function Zuglenkung(...)
local Weg = {...} local Weg = {...}
if #Weg % 2 == 1 then if #Weg % 2 == 1 then
@ -11,38 +17,49 @@ function Zuglenkung(...)
end end
local Auftrag=nil local Auftrag=nil
for i=#Weg-1,1,-2 do for i=#Weg-1,1,-2 do
Auftrag={Weg[i],Weg[i+1],Auftrag,0} Auftrag={Weg[i],Weg[i+1],0,Auftrag}
end end
Zuglenkung_Auftreage[Auftrag[1]]=Auftrag ZuglenkungAuftrag(Auftrag)
speicherTabelle(Zuglenkung_Slot, Zuglenkung_Auftreage) speicherTabelle(Zuglenkung_Slot, Zuglenkung_Auftreage)
end 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={} local ZuStellen={}
for k, Auftrag in pairs(Zuglenkung_Auftreage) do for k, Auftrag in pairs(Zuglenkung_Auftreage) do
local Stellung = EEPGetSignal(Auftrag[1]) local Stellung = EEPGetSignal(Auftrag[1])
-- Rumheulen, falls es unser FSignal nicht gibt -- Rumheulen, falls es unser FSignal nicht gibt
if Stellung == 0 then if Stellung == 0 then
print("Zuglenkung verworfen: FSignal ",Auftrag[1]," nicht gefunden") ZuglenkungMelden("FSignal ", Auftrag[1], " nicht gefunden")
Zuglenkung_Auftreage[k]=nil Zuglenkung_Auftreage[k]=nil
-- Merken, das wir das FS-Signal schonmal aufgeloest gesehen haben -- Merken, das wir das FS-Signal schonmal aufgeloest gesehen haben
elseif Stellung == 1 then elseif Stellung == 1 then
Auftrag[4]=1 Auftrag[3]=1
local Ziel = Auftrag[2] local Ziel = Auftrag[2]
if type(Ziel) == "number" then Ziel={Ziel} end if type(Ziel) == "number" then Ziel={Ziel} end
table.insert(ZuStellen, {Auftrag[1], Ziel[math.random(#Ziel)]}) table.insert(ZuStellen, {Auftrag[1], Ziel[math.random(#Ziel)]})
-- Stellung > 1 und wir haben es vorher auf 1 gesehen -> wir waren das -- Stellung > 1 und wir haben es vorher auf 1 gesehen -> wir waren das
elseif Auftrag[4] == 1 then elseif Auftrag[3] == 1 then
if Optionen.Meldung=true then ZuglenkungMelden(string.format("FS %04d-%02d",Auftrag[1],Stellung-1)," geschaltet")
print("Zuglenkung: ", Auftrag[1], " auf ", Stellung, " gestellt") Auftrag = Auftrag[4]
end
Auftrag = Auftrag[3]
Zuglenkung_Auftreage[k]=nil Zuglenkung_Auftreage[k]=nil
if Auftrag then if Auftrag then
Zuglenkung_Auftreage[Auftrag[1]]=Auftrag ZuglenkungAuftrag(Auftrag)
return
end end
end end
end end
@ -55,7 +72,7 @@ function Zuglenkung_Main(Optionen)
-- Stellversuche durchfuehren -- Stellversuche durchfuehren
for i=1, #ZuStellen do for i=1, #ZuStellen do
EEPSetSignal(ZuStellen[i][1], ZuStellen[i][2]) EEPSetSignal(ZuStellen[i][1], ZuStellen[i][2]+1, 1)
end end
speicherTabelle(Zuglenkung_Slot, Zuglenkung_Auftreage) speicherTabelle(Zuglenkung_Slot, Zuglenkung_Auftreage)