Alles gute zum Geburtstag Dieter.
viele Grüße Dieter
Alles gute zum Geburtstag Dieter.
viele Grüße Dieter
Viele Grüße. Wäre auch gerne dabei gewesen.
Dieter
-- Script als universelle Grundlage/Vorlage, für eine neue/vorhandene Anlage,
-- wird ständig erweitert, nach dem Prinzip "rundum sorglos" Paket von Parry36,
-- Nutzung nur bestimmungsgemäß, Lizenz: mit Quellenangabe Parry36,
-- Änderungen an meinem Sourcecode, sowie die Ausgliederung von Teilen, sind nicht erlaubt,
-- in das Anlagen-Script kopieren und los geht´s, inEEPMain() in die EEPMain() einbinden,
-- oder im Anlagen-Script mit require("gewählter NAME") einbinden, inEEPMain(), ---> in EEPMain() triggern.
local rusData = {VERSION = "21.04", AUTOR = "Parry36"}
t = 0
math.randomseed(os.time())
require("P36_Tool_Box") -- im LUA Ordner (von meiner Homepage kopieren)
require("Slot_tab_Data") -- im LUA Ordner (von meiner Homepage kopieren)
print("\n Zeitstempel: ", P36_time(), ",\n Anlage: Meine neue Anlage")
print(" EEP: ", EEPVer, " Lua: ", _VERSION, " Template: ",rusData.VERSION,"\n")
sloteinlesen() -- beim Anlagenstart die Daten einlesen
info_tabData() -- Info
-- Routenzusammenfassung in Tabellen, nur als Beispiele
local a_routenG = {"Gueter","Gefahrgut","Kohlen"}
local a_routenP = {"Personen","Regional","Sonderfahrt"}
local a_routenR = {"Personen","Regional","Wende"}
local a_routenD = {"Personen", "Schnellzug"}
local a_routenI = {"ICE", "Regional", "IC", "Personen"}
-- named table: a_znSlot,
-- hier alle Fahrstrassen-Beschreibungen einsetzen, gemäß Beispiel
local a_znSlot = {}
--[[
BEISPIEL: für FS_412 (als Vorlage nutzen)
local a_znSlot = {[412] = {trigger = true, -- generieren von Funktionen
s_text = "angefordert, Bhf.Süd aus Ost", -- anmelde Text
routen = {a_routenG, a_routenP}, -- Routen vergeben
f_wege = { {2,3}, {4,5,6}}, -- Fahrwege festlegen
on_text = {"FS_412, geschaltet, Bhf.Süd, Einfahrt Ost Gl.5, Güter", -- EEPOn Texte
"FS_412, geschaltet, Bhf.Süd, Einfahrt Ost Gl.4, Güter", -- für jeden Fahrweg
"FS_412, geschaltet, Bhf.Süd, Einfahrt Ost Gl.3",
"FS_412, geschaltet, Bhf.Süd, Einfahrt Ost Gl.2",
"FS_412, geschaltet, Bhf.Süd, Einfahrt Ost Gl.1" } }, -- <--- auf das Komma achten
}
]]
-- listed table: a_pool,
-- für alle einzel Fahrstrassen, die nicht in a_znSlot enthalten sind, gemäß Beispiel,
-- einschließlich --> eventuelle Sonderfunktionen die getriggert werden sollen
local a_pool = {}
--[[
-- BEISPIELE: FS-Id´s und Referenzen
local a_pool = {88,97,66,54,55,443,123,43,}
z.B. Sonderfunktionen per Referenzübergabe in a_pool
function a_pool:Sonderfunktion()
body ...
end
]]
------------ generieren aller Funktionen in a_znSlot -----------
for k, v in pairs(a_znSlot) do
-- Funktionen nur generieren wenn trigger = true
if v.trigger then
_ENV["FS_"..k] = function() -- Funktions-Namen z.B. FS_412
local hResult, s_route = load_tabData(k) -- Route aus Tabelle laden
if hResult and EEPGetSignal(k) == 1 then -- anmelden prüfen und verriegeln
for n = 1, #v.routen do -- Tabelle routen wird iteriert, als Master
if SelectRoute( s_route, v.routen[n]) then -- Fahrwege als Slaves
EEPSetSignal(k, fw_random(v.f_wege[n]), 1) -- als Callback aufrufen
end
end
end
end
v.func = _ENV["FS_"..k] -- Referenzübergabe der Funktionen an a_znSlot
EEPRegisterSignal(k) -- Signale registrieren
-- Callback - Funktion generieren
_ENV["EEPOnSignal_"..k] = function(_status)
if _status > 1 then
del_tabData(k) -- anmelden löschen
print(v.on_text[_status -1])
end
end
end
end
-- !!!!!!! inEEPMain(), einfügen in --->EEPMain()<---,im Anlagen-Script triggern !!!!!!!
function inEEPMain()
t = t + 1
FS_schalten()
if t%600 == 0 then
info_tabData() -- Info anzeigen alle 2 Min.
end
end
-- in inEEPMain()
function FS_schalten()
-- a_znSlot wird direkt aus der Queue angesprochen
for k in pairs(slot_tabData) do
if a_znSlot[k] ~= nil then -- Schlüssel prüfen
local a_val = rawget(a_znSlot, k) -- Sekundärtabelle direkt holen
if type(a_val.func) == "function" then -- Funktion vorgegeben
a_val.func()
elseif not a_val.func then -- keine Funktion vorgegeben
if EEPGetSignal(k) == 1 then EEPSetSignal(k, 2) end -- verriegeln
end
end
end
for _, v in pairs(table2rand(a_pool)) do -- verwürfeln
if type(v) == "number" then
if load_tabData(v) and EEPGetSignal(v) == 1 then EEPSetSignal(v, 2) end -- verriegeln
elseif type(v) == "function" then v() end
end
end
-- anmelden im KP, z.Beispiel --> anmelden(56) <-- für die FS 56
function anmelden(Fs_Id, Zn)
Zn = Zn or Zugname
local hResult, s_route = EEPGetTrainRoute(Zn)
if hResult then
set_tabData(Fs_Id, s_route )
if not a_znSlot[Fs_Id] then
print("FS_", Fs_Id, ", angefordert, Zug: ", Zn, ",\nRoute: ", s_route)
else
print("FS_", Fs_Id, ", ",a_znSlot[Fs_Id].s_text, "\nZug: ", Zn, ", Route: ", s_route)
end
end
end
-- abmelden im KP, z.Beispiel --> abmelden(56) <-- für die FS 56
-- wenn die FS in a_znSlot generiert wurde, ist keine Abmeldung im KP erforderlich
function abmelden(Fs_Id, Zn)
Zn = Zn or Zugname
del_tabData(Fs_Id)
if not a_znSlot[Fs_Id] then
print("FS_", Fs_Id, ", geschaltet, Zug: ", Zn)
end
end
Alles anzeigen
Versuch mal das hier.
Gruß Dieter
-- Depoausfahrten zufällig und mit unterschiedlichen Intervallzeiten, autom. Zugnamen- und Routenanzeige
-- Depoausfahrten abgesichert durch das Einbinden des ersten Blocksignals, voll autark ohne KP´s
-- Depot muß vorher auf unendliche Ausfahrtzeit eingestellt werden ---> 99999999
-- Nutzung nur bestimmungsgemäß, Lizenz: mit Quellenangabe Parry36,
-- Änderungen an meinem Sourcecode, sowie die Ausgliederung von Teilen, sind nicht erlaubt,
-----> dieses Objektmodul muß zwingend ins Anlagenscript ---> da Referenz zu a_pool <----
function newZnDepot(_depotobject)
assert(type(_depotobject) == "table", "***Fehler, keine gültige Tabelle***")
local depo = {} -- Object Tabelle anlegen
depo.objects = _depotobject -- Argumentliste wird dem Objectarry zugewiesen
depo.objects.waitings = {} -- wartende Züge im Depot
depo.objects.intval = depo.objects.intval -- Intervallzeiten in Minuten
depo.objects.dept = depo.objects.dept or 1 -- Depot Id, default = 1
depo.objects.vSig = depo.objects.vSig or nil -- ist erstes Strecken-Signal belegt?
depo.objects.name = depo.objects.name or "Ausfahrt"
depo.objects.next = (EEPTime + 180)%86400 -- Nachlauf in sec.
_ENV["Depo"..depo.objects.dept] = function()
if depo.objects.next == EEPTime then
for Itemcount = 1, EEPGetTrainyardItemsCount(depo.objects.dept) do
local item = EEPGetTrainyardItemName(depo.objects.dept, Itemcount)
if EEPGetTrainyardItemStatus(depo.objects.dept, item, 0) == 1 then -- wartend
table.insert(depo.objects.waitings, item)
end
end
if depo.objects.vSig and #depo.objects.waitings >= 1 then
local item = depo.objects.waitings[math.random(#depo.objects.waitings)]
if EEPGetSignalTrainsCount(depo.objects.vSig) == 0 then -- Gleisstrecke auf frei prüfen, sicher
EEPGetTrainFromTrainyard(depo.objects.dept, item, 0 )
print("\nDepotausfahrt: ",depo.objects.name , "\nZug: ", item,", Route: ", select(-1,EEPGetTrainRoute(item)))
end
elseif (not depo.objects.vSig) and #depo.objects.waitings >= 1 then -- mit Risiko
local item = depo.objects.waitings[math.random(#depo.objects.waitings)]
EEPGetTrainFromTrainyard(depo.objects.dept, item, 0 )
print("\nDepotausfahrt: ",depo.objects.name , "\nZug: ", item,", Route: ", select(-1,EEPGetTrainRoute(item)))
end
depo.objects.next = (EEPTime + (fw_random(depo.objects.intval) * 60))%86400 -- neuen Intervall festlegen
print("nächster-Intervall: ",(depo.objects.next - EEPTime)%86400 /60, " Min. Depot: ",depo.objects.name,"\n")
end
end
table.insert(a_pool, _ENV["Depo"..depo.objects.dept]) -- Referenz in a_pool
return depo
end
-- Beispiele für 4 Depots:
-- newZnDepot({ intval = { 7 , 7.5, 6.5, 8}, dept = 6, vSig = 606, name = "Bhf.Ost, Abzweig 2"} )
-- newZnDepot({ intval = { 7 , 6, 6.5}, dept = 7, vSig = 716, name = "Bhf.Ost, Abzweig 1"} )
-- newZnDepot({ intval = { 6 , 7.5, 6.5}, dept = 3, vSig = 407, name = "Bhf.Ost, Strecke Nord"} )
-- newZnDepot({ intval = { 6 , 7, 6.5}, dept = 2, vSig = 729, name = "Tunnel Strecke"} )
Alles anzeigen
Depoausfahrten mit Beispielen
Gruß Dieter
reset_tabData( {234 } )
gezielt löschen.
Grüße Dieter
Freut mich sehr , dass der (Tag-Text) so gut funktioniert.
Viele Grüße Dieter
--[[ Neuer Tag-Text Universalspeicher von Parry36, im Hauptscript ---> sloteinlesen() nicht vergessen!!!!
die gesamte FS Verwaltung wird über eine globale Tabelle abgewickelt,
Fahrstrassen Anzahl, speichern ohne Limit und Id´s >1000,
Nutzung nur bestimmungsgemäß, Lizenz: mit Quellenangabe Parry36,
Änderungen an meinem Sourcecode, sowie die Ausgliederung von Teilen, sind nicht erlaubt,
kann auch als "Merker" einsetzt werden, im KP -->z.B. set_tabData(2000, "Bunker1_AKW") -->del_tabData(2000)
ein "rundum sorglos Paket" für die Fahrstrassensteuerung und freie Merker;
die Datei muß in den ----> LUA <---- Ordner von EEP kopiert werden,
mit require("Tag_tab_Data") ins Anlagenscript einbinden und sloteinlesen() aufrufen
globale Variable TAGIMOID Tag-Text Id z.B. "#696"
]]
local tagData = {VERSION = "21.08", AUTOR = "Parry36"}
slot_tabData = {} -- globale Queue
local function digit(_s)
if tonumber(_s) ~= nil then _s = tonumber(_s) end
return _s
end
-- im Hauptscript die Funktion aufrufen --> sloteinlesen()
function sloteinlesen(_imoId)
local pattern = "(%w+):([^"..";]+)"
_imoId = _imoId or TAGIMOID -- default: TAGIMOID, Tag-Text Id frei wählbar
-- Daten aus Slot laden
local hResult, loaded_data = EEPStructureGetTagText(_imoId)
if hResult and type(loaded_data) == "string" then
-- Tabelle erstellen
print("Zeichen eingelesen : ", string.len(loaded_data) ) -- einlesen
for pos, val in string.gmatch(loaded_data, pattern ) do
val = digit(val) -- parsed
rawset(slot_tabData, tonumber(pos), val )
end
return true
else
return false
end
end
-- speichert die Daten im EEP-Slot
function slotspeichern(_imoId)
local save_slot = ""
_imoId = _imoId or TAGIMOID -- default: TAGIMOID, frei wählbar
-- Tabelle in einen String formatieren, max.996 Zeichen
for k, v in pairs(slot_tabData) do
save_slot = save_slot..tostring(k)..":"..tostring(v)..";"
end
if not EEPStructureSetTagText(_imoId, save_slot) then
print("***Error***, Daten failed: " , _imoId)
end
end
-- Key und Route in Tabelle speichern, Ersatz für EEPSaveData()
function set_tabData(_Id, _route )
rawset(slot_tabData, _Id, _route)
slotspeichern()
end
-- wer möchte kann anstelle von set_tabData(), save_tabData() nutzen
save_tabData = set_tabData
-- Eintrag in Tabelle löschen, Ersatz für EEPSaveData()
function del_tabData(_Id)
rawset(slot_tabData, _Id, nil )
slotspeichern()
end
-- Route aus Tabelle laden, Ersatz für EEPLoadData()
function load_tabData(_Id)
local s_route = ""
if rawget(slot_tabData, _Id) ~= nil then
s_route = rawget(slot_tabData, _Id)
return true, s_route
end
return false, s_route
end
-- zur Information Inhalt der Tabelle ausgeben
function info_tabData()
print("Info tabData:"); local n = 0
for k, v in pairs(slot_tabData) do
n = n + 1; print(n,", Key: ",k, ", Route: ", v)
end
print("\n")
end
-- Tabelle slot_tabData resetten, z.B. reset_tabData(), alle Daten werden gelöscht
-- mit Parameter _t eine Auswahl mit Tabelle z.B. reset_tabData( {45,78,189} )
function reset_tabData(_t)
if not _t then
slot_tabData = {}
slotspeichern()
print("Alle Daten in der Fahrstrassen Steuerung gelöscht")
else
assert(type(_t) == "table", "Error, keine gültige Tabelle")
for n = 1, #_t do
rawset(slot_tabData, _t[n], nil )
end
slotspeichern()
print("Daten gemäß Tabelle gelöscht")
end
end
print("Tag_tab_Data eingebunden, Version: ", tagData.VERSION)
Alles anzeigen
Das neue slot tab Data
Gruß Dieter
-- metatable für Funktions-Parameter in KP
setmetatable(_G,{__index = function(s,k)
local p = load(k) -- load() versucht aus String(k), ausführbaren Code zu machen
if p then -- wenn Erfolg, wird p() in f() ausgeführt
local f = function(zn) -- Prototype Funktion f() wird erstellt
Zugname = zn -- Zugname wird zugeordnet,(ptrack)
p() -- KP Code wird als Funktion ausgeführt
Zugname = nil -- Variable, ist nur innerhalb der Funktion(f) gültig
end
_G[k] = f -- Referenz von (f) wird in _G-Schlüssel (k) eingefügt
return f
end
return nil
end }
Dietmar, ist die function (s , k) oK ?
Gruß Dieter
Alles anzeigenHallo moebelplus,
ich arbeite ebenfalls mit dem Rus-Paket. Auch deinem Screenshot sehe ich nichts davon. Es müsste doch mindest die meldung zu sehen sein mit dem Zeitstempel.
Bei dir zählt der Counter du hast scheinbar das standart Lua script.
Selbst wenn er das Script nicht findet kommt eine entsprechende meldung und nicht das Standart script
hier habe ich die Script zur Steuerung mal schnell unbenannt damit es nicht gefunden kann.
und EEP meckert über einen Fehler in Zeile 3.
so ist es. Dieter
Parry36 hallo hallo
Ich kann einen Zwischbericht geben:
Beta Version von "Tag_tab_Data.lua" ist fertig, jetzt
geht das gründliche Testen los.
Wer mitmachen will, PN an mich.
Gruß Dieter
Durch die letzte zunehmende Diskussion um die, ab V15,
zur Verfügung stehende Speichermöglichkeit im "Tag-Text",
bin ich neugierig geworden.
In dem "rundum sorglos Paket" steht bereits ein umfangreiches
Speichermanagement "Slot_tab_Data" zur Verfügung.
Ich möchte jetzt gerne Versuche mit "Tag-Text" ein weiteres
Speichermanagement "Tag_tab_Data" entwickeln, da,
so weit ich das Verstanden habe, die gleichen Möglichkeiten bestehen,
und durch die Art dieser Speicherung, sogar noch sicherer sein könnten,
als die EEP-Slot´s.
Schauen wir mal.
Gruß Dieter
Jörg,
du kannst mir ruhig glauben, die if wird mit end abgeschlossen
und deine eigentliche end in 74. hängt in der Luft.
Du hast recht, das end gehört zur Funktion, habe ich übersehen, sorry.
Gruß Dieter
Hallo Tufftuff ,
hier hat sich ein Fehler eingeschlichen:
61. if Abkuppeln.Tab[Gleis_ID] == nil then Abkuppeln.Tab[Gleis_ID] = {} end
es genügt das then, ohne end.
Gruß Dieter
Wo und wie, kann ich dieses Skript bekommen oder herunterladen?
Hallo Michael, Michael K. ,
alle meine Scripte und Demoanlagen zu den Lehrvideos, kannst du dir
auf meiner Homepage im Downloadbereich herunterladen,
um es dir und anderen Interessierten zugänglich zu machen,
habe ich es hier mal eingeladen:
-- Script als universelle Grundlage/Vorlage, für eine neue/vorhandene Anlage,
-- wird ständig erweitert, nach dem Prinzip "rundum sorglos" Paket von Parry36,
-- Nutzung nur bestimmungsgemäß, Lizenz: mit Quellenangabe Parry36,
-- Änderungen an meinem Sourcecode, sowie die Ausgliederung von Teilen, sind nicht erlaubt,
-- in das Anlagen-Script kopieren und los geht´s, inEEPMain() in die EEPMain() einbinden,
-- oder im Anlagen-Script mit require("gewählter NAME") einbinden, inEEPMain(), ---> in EEPMain() triggern.
local rusData = {VERSION = "21.04", AUTOR = "Parry36"}
t = 0
math.randomseed(os.time())
require("P36_Tool_Box") -- im LUA Ordner (von meiner Homepage kopieren)
require("Slot_tab_Data") -- im LUA Ordner (von meiner Homepage kopieren)
print("\n Zeitstempel: ", P36_time(), ",\n Anlage: Meine neue Anlage")
print(" EEP: ", EEPVer, " Lua: ", _VERSION, " Template: ",rusData.VERSION,"\n")
sloteinlesen() -- beim Anlagenstart die Daten einlesen
info_tabData() -- Info
-- Routenzusammenfassung in Tabellen, nur als Beispiele
local a_routenG = {"Gueter","Gefahrgut","Kohlen"}
local a_routenP = {"Personen","Regional","Sonderfahrt"}
local a_routenR = {"Personen","Regional","Wende"}
local a_routenD = {"Personen", "Schnellzug"}
local a_routenI = {"ICE", "Regional", "IC", "Personen"}
-- named table: a_znSlot,
-- hier alle Fahrstrassen-Beschreibungen einsetzen, gemäß Beispiel
local a_znSlot = {}
--[[
BEISPIEL: für FS_412 (als Vorlage nutzen)
local a_znSlot = {[412] = {trigger = true, -- generieren von Funktionen
s_text = "angefordert, Bhf.Süd aus Ost", -- anmelde Text
routen = {a_routenG, a_routenP}, -- Routen vergeben
f_wege = { {2,3}, {4,5,6}}, -- Fahrwege festlegen
on_text = {"FS_412, geschaltet, Bhf.Süd, Einfahrt Ost Gl.5, Güter", -- EEPOn Texte
"FS_412, geschaltet, Bhf.Süd, Einfahrt Ost Gl.4, Güter", -- für jeden Fahrweg
"FS_412, geschaltet, Bhf.Süd, Einfahrt Ost Gl.3",
"FS_412, geschaltet, Bhf.Süd, Einfahrt Ost Gl.2",
"FS_412, geschaltet, Bhf.Süd, Einfahrt Ost Gl.1" } }, -- <--- auf das Komma achten
}
]]
-- listed table: a_pool,
-- für alle einzel Fahrstrassen, die nicht in a_znSlot enthalten sind, gemäß Beispiel,
-- einschließlich --> eventuelle Sonderfunktionen die getriggert werden sollen
local a_pool = {}
--[[
-- BEISPIELE: FS-Id´s und Referenzen
local a_pool = {88,97,66,54,55,443,123,43,}
z.B. Sonderfunktionen per Referenzübergabe in a_pool
function a_pool:Sonderfunktion()
body ...
end
]]
------------ generieren aller Funktionen in a_znSlot -----------
for k, v in pairs(a_znSlot) do
-- Funktionen nur generieren wenn trigger = true
if v.trigger then
_ENV["FS_"..k] = function() -- Funktions-Namen z.B. FS_412
local hResult, s_route = load_tabData(k) -- Route aus Tabelle laden
if hResult and EEPGetSignal(k) == 1 then -- anmelden prüfen und verriegeln
for n = 1, #v.routen do -- Tabelle routen wird iteriert, als Master
if SelectRoute( s_route, v.routen[n]) then -- Fahrwege als Slaves
EEPSetSignal(k, fw_random(v.f_wege[n]), 1) -- als Callback aufrufen
end
end
end
end
v.func = _ENV["FS_"..k] -- Referenzübergabe der Funktionen an a_znSlot
EEPRegisterSignal(k) -- Signale registrieren
-- Callback - Funktion generieren
_ENV["EEPOnSignal_"..k] = function(_status)
if _status > 1 then
del_tabData(k) -- anmelden löschen
print(v.on_text[_status -1])
end
end
end
end
-- !!!!!!! inEEPMain(), einfügen in --->EEPMain()<---,im Anlagen-Script triggern !!!!!!!
function inEEPMain()
t = t + 1
FS_schalten()
if t%600 == 0 then
info_tabData() -- Info anzeigen alle 2 Min.
end
end
-- in inEEPMain()
function FS_schalten()
-- a_znSlot wird direkt aus der Queue angesprochen
for k in pairs(slot_tabData) do
if a_znSlot[k] ~= nil then -- Schlüssel prüfen
local a_val = rawget(a_znSlot, k) -- Sekundärtabelle direkt holen
if type(a_val.func) == "function" then -- Funktion vorgegeben
a_val.func()
elseif not a_val.func then -- keine Funktion vorgegeben
if EEPGetSignal(k) == 1 then EEPSetSignal(k, 2) end -- verriegeln
end
end
end
for _, v in pairs(table2rand(a_pool)) do -- verwürfeln
if type(v) == "number" then
if load_tabData(v) and EEPGetSignal(v) == 1 then EEPSetSignal(v, 2) end -- verriegeln
elseif type(v) == "function" then v() end
end
end
-- anmelden im KP, z.Beispiel --> anmelden(56) <-- für die FS 56
function anmelden(Fs_Id, Zn)
Zn = Zn or Zugname
local hResult, s_route = EEPGetTrainRoute(Zn)
if hResult then
set_tabData(Fs_Id, s_route )
if not a_znSlot[Fs_Id] then
print("FS_", Fs_Id, ", angefordert, Zug: ", Zn, ",\nRoute: ", s_route)
else
print("FS_", Fs_Id, ", ",a_znSlot[Fs_Id].s_text, "\nZug: ", Zn, ", Route: ", s_route)
end
end
end
-- abmelden im KP, z.Beispiel --> abmelden(56) <-- für die FS 56
-- wenn die FS in a_znSlot generiert wurde, ist keine Abmeldung im KP erforderlich
function abmelden(Fs_Id, Zn)
Zn = Zn or Zugname
del_tabData(Fs_Id)
if not a_znSlot[Fs_Id] then
print("FS_", Fs_Id, ", geschaltet, Zug: ", Zn)
end
end
Alles anzeigen
Zitathabe alle Abmeldungen bei den Mehrfachstraßen herausgenommen, und jetzt klappt es super
Ok, das hast du genau richtig gemacht, wenn du dir den Codebereich Zeile 78 in der
EEPOnSignal..() ansiehst, kannst du feststellen, dass dort die Abmeldung nach
Schaltung des Fahrweges bereits erfolgt.
Damit sind Abmeldungen bei Mehrfachfahrwegen nicht erforderlich.
Gruß Dieter
oh mein Gott.
Was machst du bloß für Sachen, warum hast du nicht die EEPMain() die ich
dir in #8 gezeigt habe, nicht für dein Anlagenscript genutzt.
Die EEPMain() darf es nur einmal geben, das gilt auch für jede andere Funktion.
Ich hab es noch mal versucht, dir eine entsprechende Vorlage zu geben, du mußt
sie entsprechend für deine übrigen Funktionen ergänzen.
Es wäre auch hilfreich, wenn du dir noch einige Lehrvideos ansiehst.
clearlog()
t = 0
-- die EEPMain() darf es nur einmal geben, alles was du triggern mußt
-- gehört hier hinein, bitte alles, deine übrigen FS Funktionen
function EEPMain()
t = t + 1
-- du mußt dich entscheiden, beides geht nicht
-- if EEPLoadData(161) then EEPSetSignal( 161, 2) end
-- FS_161() einmal reicht!!
FS_161()
return 1
end
function FS_161()
local hResult, s_route = EEPLoadData(161)
if hResult then
if t%450 == 0 and EEPGetSignal(390) < 4 then -- nach 90 sec aktiv werden
if s_route == "Pers 05" then
EEPSetSignal( 161, 2)
end
elseif t%150 == 0 and EEPGetSignal(390) == 4 then -- nach 30 sec aktiv werden
if s_route == "Pers 05" then
EEPSetSignal( 161, 3)
end
-- gleiche Zeiten werden nicht selektiert
-- oder du setzt sie oben dazu und selektierst einzeln
elseif t%475 == 0 and EEPGetSignal(390) == 6 then -- nach 95 sec aktiv werden
if s_route == "Pers 05" then
EEPSetSignal( 161, 3)
end
end
end
end
--[[ Alternative:
function FS_161()
local hResult, s_route = EEPLoadData(161)
if hResult then
if t%450 == 0 then -- nach 90 sec aktiv werden
if s_route == "Pers 05" then
if EEPGetSignal(390) < 4 then
EEPSetSignal( 161, 2)
elseif EEPGetSignal(390) == 6 then
EEPSetSignal( 161, 3 )
end
end
elseif t%150 == 0 and EEPGetSignal(390) == 4 then -- nach 30 sec aktiv werden
if s_route == "Pers 05" then
EEPSetSignal( 161, 3)
end
end
end
end
]]
Alles anzeigen
Gruß Dieter
Jürgen, nicht über Modulo, sondern eine Schrittvariable die am Funktionsende
dann wieder 0 ist.
Und die Startfunktion stößt nur die Beladenfunktion an, wenn Beladen,
dann geht alles wieder in Wartestellung.
Gruß Dieter
Da muß ich Tufftuff,
ausnahmsweise recht geben, mit Lua ist das eine ganz simple Angelegenheit.
z.B. in einer Startfunktion werden der Zugname, die Anzahl der Waggons
und die Namen der Waggons in eine Tabelle hinterlegt--> ende
In einer Zweiten kleinen Funktion z. B. "Beladen"
gehts zur Sache, der Zeitablauf wird in einer Schrittvariablen der Reihe
nach abgearbeitet, --> Axen, Zugvorschub und Abfahrt. --> ende
Aber dann alles in der EEPMain() triggern und keinen Schaltkringel nutzen.
Gruß Dieter
Waldkaterle , Bodo,
hat dir ja bereits gezeigt, dass die Funktion "FS_161()" in der
EEPMain() getriggert werden muß.
Ebenso, wie ich das in allen Vorlagen (Templates) , vorgesehen habe,
ist im oberen Teil des Scriptes, t = 0, definiert.
Es sollte bei dir etwa so aussehen:
t = 0
function EEPMain()
t = t + 1
FS_161() --- und alle weiteren Funktionen die getriggert werden
return 1
end
Gruß Dieter
so ganz verstehe ich dein Script nicht, aber vielleicht hilft
dir dieser Vorschlag:
-- Funktion und t müssen getriggert werden,
function FS_161()
local hResult, s_route = EEPLoadData(161)
if hResult then
if t%450 == 0 and EEPGetSignal(390) < 4 then --- nach 90 sec aktiv werden
if s_route == "Pers 05" then
EEPSetSignal( 161, 2)
end
elseif t%150 == 0 and EEPGetSignal(390) == 4 then --- nach 30 sec aktiv werden
if s_route == "Pers 05" then
EEPSetSignal( 161, 3)
end
end
end
end
Alles anzeigen
Gruß Dieter