From 5e1476e385615558d5c1823b8657581a95e72a59 Mon Sep 17 00:00:00 2001 From: Nero <41307858+nero@users.noreply.github.com> Date: Fri, 8 Apr 2022 19:49:24 +0000 Subject: [PATCH] =?UTF-8?q?Basissignale=20hinzuf=C3=BCgen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 48 ++++++++++++++- grapho | 2 +- img/basissignal.png | Bin 0 -> 64811 bytes init.lua | 120 +++++++++++++++++++++++++++++++++++++ serpent.lua | 140 ++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 308 insertions(+), 2 deletions(-) create mode 100644 img/basissignal.png create mode 100644 serpent.lua diff --git a/README.md b/README.md index 09a04f1..fc750ff 100755 --- a/README.md +++ b/README.md @@ -24,7 +24,53 @@ Die Einbindung vom Anlagenscript aus erfolgt mittels `require("kskit")`. Findet EEP die Dateien von Lua nicht, wird im Ereignisfenster eine Liste von Orten ausgegeben, an denen die Dateien gesucht wurden. Die Orte sind in diesem Fall mit dem Installationsort abzugleichen. -## Allgemeine Lua-Kniffe +## Allgemeine Hauptsignale + +Damit KsKit ein Modell als Hauptsignal ansteuern kann, muss das Signalmodell über eine funktionierende Haltstellung verfügen. +Trotz "Ks" im Namen ist KsKit in der Lage, Signalmodelle unabhängig vom Signalsystem anzusteuern. + +Um ein Signal ohne besondere Funktion in KsKit einzutragen, wird die Funktion `Basissignal` verwendet: + +``` +Basissignal(39, 1) +``` + +Der erste Parameter ist die ID-Nummer des Signals, der zweite Parameter ist die Haltstellung. +Als Haltstellung verwenden die meisten Signalmodelle die 1, es gibt allerdings Ausnahmen. + +Das Aufrufen dieser Funktion legt die notwendigen Callbacks und Funktionen für das Signal an. +Daher darf die Funktion nur einmal während der Initialisierung des Lua-Scriptes aufgerufen werden, nicht aus der EEPMain, MainFunktionen oder vergleichbaren heraus. + +![Basissignal mit Anmeldekontakt (gelb) und Signalzugschlussstelle (rot)](img/basissignal.png) + +### Signalzugschlussstalle + +Für jedes Hauptsignal muss eine Signalzugschlussstelle existieren. +Als Signalzugschlussstelle dient ein Signalkontakt (rot), welcher nach der Überfahrt eines Signals dieses wieder auf den Haltbegriff zurücksetzt. +Dieser Kontaktpunkt befindet nach dem Signal am Ende des Durchrutschweges. + +Die Bezeichnung als Zugschlussstelle ist historisch gewachsen, in Epoche V und VI löst die erste Achse des Zuges durch Befahren eines Gleisfreimeldeabschnittes die Rotschaltung aus. +Das Einstellen auf 'Zugschluss' ist daher nicht notwendig. + +An dem Signalkontakt muss keine Lua-Funktion eingetragen werden. +Auch die Wirkrichtung muss nicht beschränkt werden, dies bietet sich aber an, damit man über das Kontakt-Symbol leichter erkennen kann, in welcher Richtung das dazugehörige Signal steht. + +### Anmelde-Kontakt + +Optional zu einem jeden Hauptsignal kann ein Anmeldekontakt verwendet werden. +Ein Anmeldekontakt kann ein Kontakt jeglicher Art sein, an dem die Lua-Funktion "Anmeldung_X" eingetragen wird. +Anstelle "X" wird die ID-Nummer des folgenden Signales eingetragen. + +EEP überprüft bei dem Eintragen der Lua-Funktion, ob diese auch existiert, daher kann dieser Kontakt erst korrekt eingerichtet werden, nachdem EEP die `Basissignal`-Funktion ausgeführt hat, z.B. durch Wechsel in den 3D-Modus. + +Der Anmelde-Kontakt sollte eingerichtet werden, wenn das vorherige Signal keine automatische Anmeldung durch Weiterschaltung des Zugnamens durchgeführt hat. +Dies trifft auch zu, wenn es kein vorheriges Signal gibt, weil es sich um eine Aufgleisstrecke, eine Ausfahrt eines virtuelles Depots oder um einen ungesicherten Anlagenbereich handelt. + +Wird keine Anmeldung durchgeführt und fährt ein Zug unangemeldet an einem logischen Vorsignal vorbei, wird die Anmeldung am jeweiligen Hauptsignal nachgeholt. + +Wer sich nicht daran stört, das Signale erst nach Überfahrt des Vorsignales auf Fahrt schalten, kann auf Anmeldungen generell verzichten. + +## Lua-Kniffe Bei der Entwicklung des Basisscriptes haben sich einige Mechanismen als sehr praktisch erwiesen, um die Komplexität des Codes im Zaum zu halten. diff --git a/grapho b/grapho index 5196199..733ce1b 160000 --- a/grapho +++ b/grapho @@ -1 +1 @@ -Subproject commit 5196199acba962cc6c47f08b8b86428ae88e38d1 +Subproject commit 733ce1b119ed12fc2c755b3e2647c6bcbd4efff4 diff --git a/img/basissignal.png b/img/basissignal.png new file mode 100644 index 0000000000000000000000000000000000000000..c0826d500f35d4d32138ae281b21f4d8678f8dac GIT binary patch literal 64811 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
  • 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 T3}abA1OC*Mv=tlVZ6p34NH;3? literal 0 HcmV?d00001 diff --git a/init.lua b/init.lua index f90598a..146f389 100755 --- a/init.lua +++ b/init.lua @@ -2,6 +2,9 @@ -- Ich weiss jetzt noch nicht, wie viele verschiedene Versionen von dem Script spaeter herumfliegen werden. KsKitVer=0 +-- Uebrige Konstanten +Vmax=400 + -- Tabelle, in der alle Lambda-Funktionen gespeichert werden -- Die Eintragung erfolgt durch die MainFunktion() vom Zielort aus. MainFunktionTabelle={} @@ -37,3 +40,120 @@ function SignalFunktion(Signal, Funktion) -- In unsere eigene Tabelle eintragen table.insert(SignalFunktionen[Signal], Funktion) end + +-- Lua-Serializer und Deserializer laden +serpent=require("kskit/serpent") + +-- Lua-Tabelle aus EEP Slot laden +function ladeTabelle(Slot) + local roh, geparst + ok, roh = EEPLoadData(Slot) + if not ok then return {} end + ok, geparst = serpent.load(roh) + if not ok then return {} end + if type(geparst) ~= "table" then return {} end + return geparst +end + +-- Lua-Tabelle in EEP Slot speichern +function speicherTabelle(Slot, Tabelle) + EEPSaveData(Slot, serpent.line(Tabelle, {comment = false})) +end + +SignalLesenFunktionen={} + +-- Definiere ein Signal +-- Signal: ID-Nummer +-- Haltstellung: Nummer der Haltstellung, meistens 1 +-- SchaltFunk: Callback, wird wiederholt aufgerufen, um Fahrt-Stellung des Signals zu erwirken +-- AbmeldeFunk: Wird nach Durchfahrt am Signal aufgerufen +function Basissignal(Signal, Haltstellung, SchaltFunk, AbmeldeFunk) + if EEPGetSignal(Signal)==0 then + print("Anlagen-Fehler: ID ",Signal," ist kein Signal") + return + end + -- Funktion, damit anderer Programmcode das Signal lesen kann + SignalLesenFunktionen[Signal]=function() + local Stellung = EEPGetSignal(Signal) + if Stellung == 0 or Stellung == Haltstellung then + return false, 0 + end + return true, Vmax + end + -- Funktion fuer Kontaktpunkte: Zug an Signal anmelden + _G["Anmeldung_"..tostring(Signal)] = function(Zug) + local Anmeldung + Anmeldung = ladeTabelle(Signal) + if Anmeldung.train and Anmeldung.train ~= Zug then return end + Anmeldung.train = Zug + speicherTabelle(Signal, Anmeldung) + end + -- Auftragsstatus pollen + MainFunktion(function() + local Anmeldung = ladeTabelle(Signal) + -- Wenn Zug vor Signal steht, Anmeldung ggf. nachholen + if EEPGetSignalTrainsCount(Signal) > 0 then + if Anmeldung.train == nil then + Anmeldung.train = EEPGetSignalTrainName(Signal, 1) + speicherTabelle(Signal, Anmeldung) + end + -- Ankunftszeit merken, sobald Zug am Signal angekommen ist + -- Wird im if von EEPGetSignalTrainsCount gemacht, + -- damit nur Halte an diesem Signal zaehlen + if Anmeldung.arrival == nil then + ok, speed = EEPGetTrainSpeed(Anmeldung.train) + if math.abs(speed) < 5 then + Anmeldung.arrival = EEPTime + speicherTabelle(Signal, Anmeldung) + end + end + end + -- Nichts tun wenn kein Zug da + if Anmeldung.train == nil then return end + -- SchaltFunk + if SchaltFunk and EEPGetSignal(Signal) == Haltstellung then + r=SchaltFunk(Anmeldung.train) + if r and r > 0 and r ~= Haltstellung then + EEPSetSignal(Signal, r, 1) + end + end + end) + -- Reaktion auf Signal-Umstellungen + SignalFunktion(Signal, function(Stellung) + if Stellung == Haltstellung then + -- Wenn Signal auf Halt gestellt wurde, mache eine Abmeldung + if AbmeldeFunk then + local Anmeldung = ladeTabelle(Signal) + AbmeldeFunk(Anmeldung.train) + end + speicherTabelle(Signal, {}) + end + end) +end + +-- Funktion zum Erklaeren, was ein Signal gerade so tut +-- Nimmt die Nummer des Signals als Argument +-- Gibt einen Menschenlesbaren Text zurueck +function SignalBeschreibung(Signal) + local Anmeldung = ladeTabelle(Signal) + local Fahrt, V = SignalLesenFunktionen[Signal]() + Text = "Signal " .. tonumber(Signal) .. ": " + if Fahrt then + if V < Vmax then + Text = Text .. "Fahrt mit " .. tonumber(V) .. " Km/h\n" + else + Text = Text .. "Fahrt\n" + end + else + Text = Text .. "Halt\n" + end + if Anmeldung.train then + Text = Text .. "Zug angemeldet: " .. Anmeldung.train .. "\n" + end + if Anmeldung.arrival then + local Dauer = EEPTime - Anmeldung.arrival + if Dauer < 0 then Dauer = Dauer + 24*60*60 end + Text = Text .. "Ankunft vor " .. Dauer .. " Sekunden\n" + end + return Text +end diff --git a/serpent.lua b/serpent.lua new file mode 100644 index 0000000..a043713 --- /dev/null +++ b/serpent.lua @@ -0,0 +1,140 @@ +local n, v = "serpent", "0.302" -- (C) 2012-18 Paul Kulchenko; MIT License +local c, d = "Paul Kulchenko", "Lua serializer and pretty printer" +local snum = {[tostring(1/0)]='1/0 --[[math.huge]]',[tostring(-1/0)]='-1/0 --[[-math.huge]]',[tostring(0/0)]='0/0'} +local badtype = {thread = true, userdata = true, cdata = true} +local getmetatable = debug and debug.getmetatable or getmetatable +local pairs = function(t) return next, t end -- avoid using __pairs in Lua 5.2+ +local keyword, globals, G = {}, {}, (_G or _ENV) +for _,k in ipairs({'and', 'break', 'do', 'else', 'elseif', 'end', 'false', + 'for', 'function', 'goto', 'if', 'in', 'local', 'nil', 'not', 'or', 'repeat', + 'return', 'then', 'true', 'until', 'while'}) do keyword[k] = true end +for k,v in pairs(G) do globals[v] = k end -- build func to name mapping +for _,g in ipairs({'coroutine', 'debug', 'io', 'math', 'string', 'table', 'os'}) do + for k,v in pairs(type(G[g]) == 'table' and G[g] or {}) do globals[v] = g..'.'..k end end + +local function s(t, opts) + local name, indent, fatal, maxnum = opts.name, opts.indent, opts.fatal, opts.maxnum + local sparse, custom, huge = opts.sparse, opts.custom, not opts.nohuge + local space, maxl = (opts.compact and '' or ' '), (opts.maxlevel or math.huge) + local maxlen, metatostring = tonumber(opts.maxlength), opts.metatostring + local iname, comm = '_'..(name or ''), opts.comment and (tonumber(opts.comment) or math.huge) + local numformat = opts.numformat or "%.17g" + local seen, sref, syms, symn = {}, {'local '..iname..'={}'}, {}, 0 + local function gensym(val) return '_'..(tostring(tostring(val)):gsub("[^%w]",""):gsub("(%d%w+)", + -- tostring(val) is needed because __tostring may return a non-string value + function(s) if not syms[s] then symn = symn+1; syms[s] = symn end return tostring(syms[s]) end)) end + local function safestr(s) return type(s) == "number" and tostring(huge and snum[tostring(s)] or numformat:format(s)) + or type(s) ~= "string" and tostring(s) -- escape NEWLINE/010 and EOF/026 + or ("%q"):format(s):gsub("\010","n"):gsub("\026","\\026") end + local function comment(s,l) return comm and (l or 0) < comm and ' --[['..select(2, pcall(tostring, s))..']]' or '' end + local function globerr(s,l) return globals[s] and globals[s]..comment(s,l) or not fatal + and safestr(select(2, pcall(tostring, s))) or error("Can't serialize "..tostring(s)) end + local function safename(path, name) -- generates foo.bar, foo[3], or foo['b a r'] + local n = name == nil and '' or name + local plain = type(n) == "string" and n:match("^[%l%u_][%w_]*$") and not keyword[n] + local safe = plain and n or '['..safestr(n)..']' + return (path or '')..(plain and path and '.' or '')..safe, safe end + local alphanumsort = type(opts.sortkeys) == 'function' and opts.sortkeys or function(k, o, n) -- k=keys, o=originaltable, n=padding + local maxn, to = tonumber(n) or 12, {number = 'a', string = 'b'} + local function padnum(d) return ("%0"..tostring(maxn).."d"):format(tonumber(d)) end + table.sort(k, function(a,b) + -- sort numeric keys first: k[key] is not nil for numerical keys + return (k[a] ~= nil and 0 or to[type(a)] or 'z')..(tostring(a):gsub("%d+",padnum)) + < (k[b] ~= nil and 0 or to[type(b)] or 'z')..(tostring(b):gsub("%d+",padnum)) end) end + local function val2str(t, name, indent, insref, path, plainindex, level) + local ttype, level, mt = type(t), (level or 0), getmetatable(t) + local spath, sname = safename(path, name) + local tag = plainindex and + ((type(name) == "number") and '' or name..space..'='..space) or + (name ~= nil and sname..space..'='..space or '') + if seen[t] then -- already seen this element + sref[#sref+1] = spath..space..'='..space..seen[t] + return tag..'nil'..comment('ref', level) end + -- protect from those cases where __tostring may fail + if type(mt) == 'table' and metatostring ~= false then + local to, tr = pcall(function() return mt.__tostring(t) end) + local so, sr = pcall(function() return mt.__serialize(t) end) + if (to or so) then -- knows how to serialize itself + seen[t] = insref or spath + t = so and sr or tr + ttype = type(t) + end -- new value falls through to be serialized + end + if ttype == "table" then + if level >= maxl then return tag..'{}'..comment('maxlvl', level) end + seen[t] = insref or spath + if next(t) == nil then return tag..'{}'..comment(t, level) end -- table empty + if maxlen and maxlen < 0 then return tag..'{}'..comment('maxlen', level) end + local maxn, o, out = math.min(#t, maxnum or #t), {}, {} + for key = 1, maxn do o[key] = key end + if not maxnum or #o < maxnum then + local n = #o -- n = n + 1; o[n] is much faster than o[#o+1] on large tables + for key in pairs(t) do if o[key] ~= key then n = n + 1; o[n] = key end end end + if maxnum and #o > maxnum then o[maxnum+1] = nil end + if opts.sortkeys and #o > maxn then alphanumsort(o, t, opts.sortkeys) end + local sparse = sparse and #o > maxn -- disable sparsness if only numeric keys (shorter output) + for n, key in ipairs(o) do + local value, ktype, plainindex = t[key], type(key), n <= maxn and not sparse + if opts.valignore and opts.valignore[value] -- skip ignored values; do nothing + or opts.keyallow and not opts.keyallow[key] + or opts.keyignore and opts.keyignore[key] + or opts.valtypeignore and opts.valtypeignore[type(value)] -- skipping ignored value types + or sparse and value == nil then -- skipping nils; do nothing + elseif ktype == 'table' or ktype == 'function' or badtype[ktype] then + if not seen[key] and not globals[key] then + sref[#sref+1] = 'placeholder' + local sname = safename(iname, gensym(key)) -- iname is table for local variables + sref[#sref] = val2str(key,sname,indent,sname,iname,true) end + sref[#sref+1] = 'placeholder' + local path = seen[t]..'['..tostring(seen[key] or globals[key] or gensym(key))..']' + sref[#sref] = path..space..'='..space..tostring(seen[value] or val2str(value,nil,indent,path)) + else + out[#out+1] = val2str(value,key,indent,nil,seen[t],plainindex,level+1) + if maxlen then + maxlen = maxlen - #out[#out] + if maxlen < 0 then break end + end + end + end + local prefix = string.rep(indent or '', level) + local head = indent and '{\n'..prefix..indent or '{' + local body = table.concat(out, ','..(indent and '\n'..prefix..indent or space)) + local tail = indent and "\n"..prefix..'}' or '}' + return (custom and custom(tag,head,body,tail,level) or tag..head..body..tail)..comment(t, level) + elseif badtype[ttype] then + seen[t] = insref or spath + return tag..globerr(t, level) + elseif ttype == 'function' then + seen[t] = insref or spath + if opts.nocode then return tag.."function() --[[..skipped..]] end"..comment(t, level) end + local ok, res = pcall(string.dump, t) + local func = ok and "((loadstring or load)("..safestr(res)..",'@serialized'))"..comment(t, level) + return tag..(func or globerr(t, level)) + else return tag..safestr(t) end -- handle all other types + end + local sepr = indent and "\n" or ";"..space + local body = val2str(t, name, indent) -- this call also populates sref + local tail = #sref>1 and table.concat(sref, sepr)..sepr or '' + local warn = opts.comment and #sref>1 and space.."--[[incomplete output with shared/self-references skipped]]" or '' + return not name and body..warn or "do local "..body..sepr..tail.."return "..name..sepr.."end" +end + +local function deserialize(data, opts) + local env = (opts and opts.safe == false) and G + or setmetatable({}, { + __index = function(t,k) return t end, + __call = function(t,...) error("cannot call functions") end + }) + local f, res = (loadstring or load)('return '..data, nil, nil, env) + if not f then f, res = (loadstring or load)(data, nil, nil, env) end + if not f then return f, res end + if setfenv then setfenv(f, env) end + return pcall(f) +end + +local function merge(a, b) if b then for k,v in pairs(b) do a[k] = v end end; return a; end +return { _NAME = n, _COPYRIGHT = c, _DESCRIPTION = d, _VERSION = v, serialize = s, + load = deserialize, + dump = function(a, opts) return s(a, merge({name = '_', compact = true, sparse = true}, opts)) end, + line = function(a, opts) return s(a, merge({sortkeys = true, comment = true}, opts)) end, + block = function(a, opts) return s(a, merge({indent = ' ', sortkeys = true, comment = true}, opts)) end }