Hallo EEP Freunde,
auch auf die Gefahr hin, dass mir gesagt wird, „dass hatten wir schon im Beitrag xx“, möchte ich mich mit meinem Problem an Euch wenden. Ich habe lange unter den verschiedensten Stichworten gesucht, und Beiträge gelesen, bis die Pupillen eckig wurden. Alle 65 Seiten von „Signale, Lua und Schalttechniken“ durchgeblättert, nichts gefunden!
Ich steuere meine Anlagen mit LUA.(siehe Korona-Anlage veröffentlicht 11.2.2021). Den Aufenthalt im BF steuere ich mit zeitverzögerter Ausfahrt-Anforderung für die jeweilige Ausfahrt Fahrstraße mit jeweils einem Sound-Kontakt (anmelden(xx,Zugname). Jeweils auch wieder das Abmelden über Soundkontakt nach Ausfahrtsignal (mit Hilfe von Benny´s Codeschnipsel). In der main erfolgt dann der Reihenfolge nach, die Abfrage, ob für eine Fahrstraße eine Anforderung vor liegt.
( if EEPLoadData(168) then EEPSetSignal(168,2) end --Ausfahrt ost Gleis 5 )
Ist das Ausfahrtgleis von einer anderen FS belegt, bleibt die Anforderung eben bestehen. Das funktioniert so weit auch gut.
Bei größeren Bahnhöfen und regem Zugverkehr, kann es aber vorkommen, dass während das Ausfahrtgleis belegt ist, schon wieder neue Anforderungen zur Ausfahrt vorliegen. Wenn diese neuen Anforderungen in der main in der Reihenfolge vor den schon vorhandenen Anforderungen stehen, dann werden diese zuerst bedient. So kann es vorkommen, dass ein Zugverband in einem Gleis stehen bleibt und nicht an die Reihe kommt.
Wurde das schon mal angesprochen? Wäre dankbar für einen Hinweis, oder direkt eine Möglichkeit, wie man die Abfrage Reihenfolge vom Zeitpunkt der Anforderung abhängig machen kann. Ist „first in first out“ ohne zusätzlich 2 Seiten LUA möglich?
Danke und Gruß bena
-- 210701 Vorlage
I=10 -- Integer conter ganze Zahl für Counter nicht auf 0 setzen
clearlog() --löscht Ereignisfensterclearlog()
-- Codeschnipsel von BH2,Benny notwendig für Anmeldefunktion mit Routen/Zugname Soundkontakt anmelden(xx,Zugname) abmelden(xx)
setmetatable(_ENV,{__index = function(s,k)
local p = load(k)
if p then
local f = function(z) local s = Zugname
Zugname = z
p()
Zugname = s
end
_ENV[k] = f
return f
end
return nil
end } )
function EEPMain()
if EEPLoadData(168) then EEPSetSignal(168,2) end --Ausfahrt ost Gleis 5
if EEPLoadData(169) then EEPSetSignal(169,2) end --Ausfahrt ost Gleis 6
if EEPLoadData(170) then EEPSetSignal(170,2) end --Ausfahrt ost Gleis 7
if EEPLoadData(171) then EEPSetSignal(171,2) end --Ausfahrt ost Gleis 8
if EEPLoadData(172) then EEPSetSignal(172,2) end --Ausfahrt ost Gleis 9
if EEPLoadData(173) then EEPSetSignal(173,2) end --Ausfahrt ost Gleis 10 Cargo
if EEPLoadData(174) then EEPSetSignal(174,2) end --Ausfahrt ost Gleis 11 Aufgleisung
if EEPLoadData(175) then EEPSetSignal(175,2) end --Ausfahrt west Gleis 1
if EEPLoadData(176) then EEPSetSignal(176,2) end --Ausfahrt west Gleis 2
if EEPLoadData(177) then EEPSetSignal(177,2) end --Ausfahrt west Gleis 3
if EEPLoadData(178) then EEPSetSignal(178,2) end --Ausfahrt west Gleis 4
if EEPLoadData(179) then EEPSetSignal(179,2) end --Ausfahrt west Gleis 10 Cargo
if EEPLoadData(180) then EEPSetSignal(180,2) end --Ausfahrt west Gleis 11 Aufgleisung
if EEPLoadData(187) then EEPSetSignal(187,2) end --Ausfahrt west Gleis 9
if EEPLoadData(182) then EEPSetSignal(182,2) end --1. FS west nach Depot west
if EEPLoadData(184) then EEPSetSignal(184,2) end --1. FS ost nach Depot ost
if EEPLoadData(152) then FS_152() end --Einfahrt HBF Ost -- Anmeldung von FS mit Funktionsaufruf schalten,
if EEPLoadData(160) then FS_160() end --Einfahrt HBF West -- ist flexibler zu handhaben
if EEPLoadData(156) then FS_156() end --Einf ost Regio
return 1
end
-- allg. Anmeldefunktion mit Route
function anmelden(Fs_Id, Zn)
local hResult, s_route
hResult, s_route = EEPGetTrainRoute(Zn)
if hResult then
EEPSaveData(Fs_Id, s_route )
print("angefordert FS_",Fs_Id, ", Route: ", s_route) --print im Ereignisfenster
end
end
-- allg. Abmeldefunktion
function abmelden(Fs_Id)
EEPSaveData(Fs_Id, nil)
print("abgemeldet FS_",Fs_Id)
end
-- FS Funktion Routenauswahl
function FS_156() --Ausfahrt ost Gleis 2
local hResult, s_route
hResult, s_route = EEPLoadData(156)
if hResult and EEPGetSignal(156)==1 and EEPGetSignal(150)==1 --Regio Startsignal
then EEPSetSignal(156,2)
end
end
function FS_152() --HBF Einfahrt ost
local hResult, s_route
hResult, s_route = EEPLoadData(152)
if hResult and EEPGetSignal(152)==1 then
if s_route == "Perso" then
EEPSetSignal(152,5)
EEPSetSignal(152,4)
EEPSetSignal(152,2)
EEPSetSignal(152,3)
elseif s_route == "ICE" then
EEPSetSignal(152,4)
EEPSetSignal(152,5)
elseif s_route == "Cargo" then
EEPSetSignal(152,8) --Gleis 11
EEPSetSignal(152,7) --Gleis 9
EEPSetSignal(152,6) --Gleis 10
end
end
end
function FS_160() --HBF Einfahrt west Gleis 1
local hResult, s_route
hResult, s_route = EEPLoadData(160)
if hResult and EEPGetSignal(160)==1 then
if s_route == "Perso" then
EEPSetSignal(160,2)
EEPSetSignal(160,3)
EEPSetSignal(160,3)
EEPSetSignal(160,5)
EEPSetSignal(160,4)
elseif s_route == "ICE" then
EEPSetSignal(160,3)
EEPSetSignal(160,2)
elseif s_route == "Cargo" then
EEPSetSignal(160,8)
EEPSetSignal(160,6)
EEPSetSignal(160,7)
end
end
end
Alles anzeigen