Es geht voran...

This commit is contained in:
Nero 2022-06-22 22:44:30 +00:00
parent 43f1451de1
commit d4878f781c
3 changed files with 176 additions and 107 deletions

62
Install_00/Begriffe.lua Normal file
View File

@ -0,0 +1,62 @@
-- Grundsätzliche Typen von Signalbildern
HALT=1
FAHRT=2
RANGIERFAHRT=3
ERSATZFAHRT=4
AUS=5
-- Hv-Signalsystem
Hp0={HALT}
Hp1={FAHRT}
Hp2={FAHRT, V_max=40}
Hp1Vr0={FAHRT, H_erwarten=true}
Hp1Vr1={FAHRT}
Hp1Vr2={FAHRT, V_erwarten=40}
Hp2Vr0={FAHRT, V_max=40, H_erwarten=true}
Hp2Vr1={FAHRT, V_max=40}
Hp2Vr2={FAHRT, V_max=40, V_erwarten=40}
-- OSJD/EZMG/Hl-Signale des Ostblocks
-- V_erwarten=60 wird durch V_erwarten=40 signalisiert
Hl1={FAHRT}
Hl2={FAHRT, V_max=100}
Hl3a={FAHRT, V_max=40}
Hl3b={FAHRT, V_max=60}
Hl4={FAHRT, V_erwarten=100}
Hl5={FAHRT, V_max=100, V_erwarten=100}
Hl6a={FAHRT, V_max=40, V_erwarten=100}
Hl6b={FAHRT, V_max=60, V_erwarten=100}
Hl7={FAHRT, V_erwarten=40}
Hl8={FAHRT, V_max=100, V_erwarten=40}
Hl9a={FAHRT, V_max=40, V_erwarten=40}
Hl9b={FAHRT, V_max=60, V_erwarten=40}
Hl10={FAHRT, H_erwarten=true}
Hl11={FAHRT, V_max=100, H_erwarten=true}
Hl12a={FAHRT, V_max=40, H_erwarten=true}
Hl12b={FAHRT, V_max=60, H_erwarten=true}
Hl13={HALT}
-- Zusatzsignale (DS 301 Namen)
Zs1={ERSATZFAHRT}
Sh1={RANGIERFAHRT} -- war Ra12 bei DR
function BegriffErklaeren(Begriff)
if Begriff[1]==HALT then return "Halt" end
if Begriff[1]==RANGIERFAHRT then return "Rangierfahrt" end
if Begriff[1]==ERSATZFAHRT then return "Fahrt auf Ersatzsignal" end
if Begriff[1]==AUS then return "Signal ausgeschaltet" end
local txt = "Fahrt"
if Begriff.H_erwarten ~= nil then
txt = "Halt erwarten"
if Begriff.kurz ~= nil then
txt = "Halt im verkürzten Abstand"
end
end
if Begriff.V_max then
txt = txt.." mit "..tostring(Begriff.V_max).." km/h"
end
if Begriff.V_erwarten then
txt = txt..", "..tostring(Begriff.V_erwarten).." km/h erwarten"
end
return txt
end

View File

@ -3,3 +3,4 @@ EEPVersion = 10
File001 = "On.lua","LUA\On.lua" File001 = "On.lua","LUA\On.lua"
File002 = "Prototype.lua","LUA\Prototype.lua" File002 = "Prototype.lua","LUA\Prototype.lua"
File003 = "kskit.lua","LUA\kskit.lua" File003 = "kskit.lua","LUA\kskit.lua"
File004 = "Begriffe.lua","LUA\Begriffe.lua"

View File

@ -1,3 +1,6 @@
require("BetterContacts_BH2"){printErrors=true, deprecatedUseGlobal=true}
require("Begriffe")
-- Tabelle in einen String umwandeln, rekursiv -- Tabelle in einen String umwandeln, rekursiv
-- Funktionswerte werden ignoriert -- Funktionswerte werden ignoriert
function __tostring(self) function __tostring(self)
@ -111,9 +114,6 @@ function AnimiereZugStromabnehmer(Zug, Richtung)
end end
end end
FAHRT=1
HALT=2
function leseSignal(Signal) function leseSignal(Signal)
if EEPGetSignal(Signal) == 1 then if EEPGetSignal(Signal) == 1 then
return {FAHRT} return {FAHRT}
@ -123,7 +123,8 @@ function leseSignal(Signal)
end end
local GefundeneSignale={} local GefundeneSignale={}
local Zugaktionen={} local Zugaktionen=ladeTabelle(1)
local SignalChanged={}
setmetatable(Zugaktionen, { setmetatable(Zugaktionen, {
__index=function(table, key) __index=function(table, key)
@ -134,7 +135,6 @@ setmetatable(Zugaktionen, {
function KsKitInit() function KsKitInit()
GefundeneSignale={} GefundeneSignale={}
Zugaktionen=ladeTabelle(1)
for Signal=1,1000 do for Signal=1,1000 do
if EEPGetSignal(Signal) > 0 and EEPGetSignal(Signal+1000) > 0 then if EEPGetSignal(Signal) > 0 and EEPGetSignal(Signal+1000) > 0 then
@ -144,14 +144,16 @@ function KsKitInit()
for i=1,#GefundeneSignale do for i=1,#GefundeneSignale do
local Signal = GefundeneSignale[i] local Signal = GefundeneSignale[i]
local FSignal = Signal + 1000
EEPRegisterSignal(Signal) EEPRegisterSignal(Signal)
_G["EEPOnSignal_"..tostring(Signal)]=function(Stellung) _G["EEPOnSignal_"..tostring(Signal)]=function(Stellung)
SignalChanged[Signal]=true
end end
EEPRegisterSignal(Signal+1000) EEPRegisterSignal(FSignal)
_G["EEPOnSignal_"..tostring(Signal+1000)]=function(FStellung) _G["EEPOnSignal_"..tostring(FSignal)]=function(FStellung)
SignalChanged[FSignal]=true
if FStellung > 1 then if FStellung > 1 then
print("Fahrstrasse ",string.format("%04d-%02d", Signal+1000, FStellung-1)," geschalten") print("Fahrstrasse ",string.format("%04d-%02d", FSignal, FStellung-1)," geschalten")
end end
end end
end end
@ -174,92 +176,94 @@ function KsKitMain()
local SignalHaltegruende = {} local SignalHaltegruende = {}
for Zugname, Data in pairs(Zugaktionen) do for Zugname, Data in pairs(Zugaktionen) do
local ok, V = EEPGetTrainSpeed(Zugname) local ok, V_ist = EEPGetTrainSpeed(Zugname)
if ok then if not ok or next(Zugaktionen[Zugname]) == nil then
local Haltegrund = "Kein Plan" Zugaktionen[Zugname] = nil
-- Wenn wir stehen, merken wir uns unsere Ankunftszeit
if V > -5 and V < 5 then
if Zugaktionen[Zugname].A == nil then
Zugaktionen[Zugname].A = EEPTime
if Zugaktionen[Zugname].V then
EEPSetTrainSpeed(Zugname, 0)
if Zugaktionen[Zugname].R then
AnimiereZugStromabnehmer(Zugname, 0)
end
end
end
-- Ankunftszeit loeschen falls wir unterwegs sind
elseif Zugaktionen[Zugname].A then
Zugaktionen[Zugname].A = nil
Zugaktionen[Zugname].S = nil
Zugaktionen[Zugname].R = nil
Zugaktionen[Zugname].V = nil
end
if Zugaktionen[Zugname].W then
Haltegrund = "Planhalt"
end
-- Wartezeit loeschen falls abgesessen
if Zugaktionen[Zugname].W and Zugaktionen[Zugname].A then
local Wartedauer = EEPTime - Zugaktionen[Zugname].A
if Wartedauer < 0 then
Wartedauer = Wartedauer + 24*60*60
end
if Wartedauer > Zugaktionen[Zugname].W then
Zugaktionen[Zugname].W = nil
end
end
-- Fahrstrasse schalten
if not Zugaktionen[Zugname].W and Zugaktionen[Zugname].S then
local ZSignal = Zugaktionen[Zugname].S
local FSignal = ZSignal + 1000
local Fahrstrassen = {}
if Zugaktionen[Zugname].FS then
Fahrstrassen = Zugaktionen[Zugname].FS
elseif Selbstblock_Default then
Fahrstrassen = {1}
end
if #Fahrstrassen > 0 then
if EEPGetSignal(FSignal) == 1 then
Schaltauftraege[FSignal] = 1+Fahrstrassen[math.random(#Fahrstrassen)]
end
Haltegrund = "FS angefordert"
end
end
-- Haltegrund merken, das wir ihn spaeter im Signal-Tooltip darstellen koennen
if Zugaktionen[Zugname].S then
SignalHaltegruende[Zugaktionen[Zugname].S] = Haltegrund
end
if Zugaktionen[Zugname].S then
local Begriff = leseSignal(Zugaktionen[Zugname].S)
if Begriff[1] ~= HALT then
if Zugaktionen[Zugname].V then
if Zugaktionen[Zugname].B and Zugaktionen[Zugname].B + 5 < EEPTime then
EEPSetTrainSpeed(Zugname, Zugaktionen[Zugname].V)
Zugaktionen[Zugname].V = nil
Zugaktionen[Zugname].B = nil
elseif not Zugaktionen[Zugname].B then
AnimiereZugStromabnehmer(Zugname, Zugaktionen[Zugname].V>0 and 1 or -1)
Zugaktionen[Zugname].B = EEPTime
Zugaktionen[Zugname].R = nil
end
else
Zugaktionen[Zugname].S = nil
end
end
end
else
-- Zug aus den Augen verloren...
Zugaktionen[Zugname]=nil
end end
end end
for Zugname, Data in pairs(Zugaktionen) do
local Haltegrund = "Kein Plan"
local ok, V_ist = EEPGetTrainSpeed(Zugname)
-- Wenn wir stehen, merken wir uns unsere Ankunftszeit
if V_ist == 0 then
if Zugaktionen[Zugname].A == nil then
Zugaktionen[Zugname].A = EEPTime
if Zugaktionen[Zugname].V then
EEPSetTrainSpeed(Zugname, 0)
if Zugaktionen[Zugname].R then
AnimiereZugStromabnehmer(Zugname, 0)
end
end
end
-- Ankunftszeit loeschen falls wir unterwegs sind
elseif Zugaktionen[Zugname].A then
Zugaktionen[Zugname].A = nil
Zugaktionen[Zugname].S = nil
Zugaktionen[Zugname].R = nil
Zugaktionen[Zugname].V = nil
end
if Zugaktionen[Zugname].W then
Haltegrund = "Planhalt"
end
-- Wartezeit loeschen falls abgesessen
if Zugaktionen[Zugname].W and Zugaktionen[Zugname].A then
local Wartedauer = EEPTime - Zugaktionen[Zugname].A
if Wartedauer < 0 then
Wartedauer = Wartedauer + 24*60*60
end
if Wartedauer > Zugaktionen[Zugname].W then
Zugaktionen[Zugname].W = nil
end
end
-- Fahrstrasse schalten
if not Zugaktionen[Zugname].W and Zugaktionen[Zugname].S then
local ZSignal = Zugaktionen[Zugname].S
local FSignal = ZSignal + 1000
local Fahrstrassen = {}
if Zugaktionen[Zugname].FS then
Fahrstrassen = Zugaktionen[Zugname].FS
elseif Selbstblock_Default then
Fahrstrassen = {1}
end
if #Fahrstrassen > 0 then
if EEPGetSignal(FSignal) == 1 then
Schaltauftraege[FSignal] = 1+Fahrstrassen[math.random(#Fahrstrassen)]
end
Haltegrund = "FS angefordert"
end
end
-- Haltegrund merken, das wir ihn spaeter im Signal-Tooltip darstellen koennen
if Zugaktionen[Zugname].S then
SignalHaltegruende[Zugaktionen[Zugname].S] = Haltegrund
end
if Zugaktionen[Zugname].S then
local Begriff = leseSignal(Zugaktionen[Zugname].S)
if Begriff[1] ~= HALT then
if Zugaktionen[Zugname].V then
if Zugaktionen[Zugname].B and Zugaktionen[Zugname].B + 5 < EEPTime then
EEPSetTrainSpeed(Zugname, Zugaktionen[Zugname].V)
Zugaktionen[Zugname].V = nil
Zugaktionen[Zugname].B = nil
elseif not Zugaktionen[Zugname].B then
AnimiereZugStromabnehmer(Zugname, Zugaktionen[Zugname].V>0 and 1 or -1)
Zugaktionen[Zugname].B = EEPTime
Zugaktionen[Zugname].R = nil
end
else
Zugaktionen[Zugname].S = nil
end
end
end
end
speicherTabelle(1, Zugaktionen) speicherTabelle(1, Zugaktionen)
EEPChangeInfoSignal(1, __tostring(Zugaktionen)) EEPChangeInfoSignal(1, __tostring(Zugaktionen))
for k,v in pairs(Schaltauftraege) do for k,v in pairs(Schaltauftraege) do
@ -272,12 +276,16 @@ function KsKitMain()
local name = string.format("%04d", Signal) local name = string.format("%04d", Signal)
if Name and Name[Signal] then name=Name[Signal] end if Name and Name[Signal] then name=Name[Signal] end
local txt = "<c>Signal "..name local txt = "<c>Signal "..name
local Stellung = EEPGetSignal(Signal) local Begriff = leseSignal(Signal)
if Stellung == 1 then local Farbe = "<fgrgb=255,255,255><bgrgb=255,0,0>"
txt = txt.."\n<c><b><fgrgb=0,0,0><bgrgb=0,255,0>Fahrt</b>" if Begriff[1] ~= HALT then
else if Begriff.H_erwarten or Begriff.V_max then
txt = txt.."\n<c><b><fgrgb=255,255,255><bgrgb=255,0,0>Halt</b>" Farbe = "<fgrgb=0,0,0><bgrgb=255,255,0>"
else
Farbe = "<fgrgb=0,0,0><bgrgb=0,255,0>"
end
end end
txt = txt.."\n<c><b>"..Farbe..BegriffErklaeren(Begriff).."</b>"
txt = txt.."<fgrgb=0,0,0><bgrgb=255,255,255>" txt = txt.."<fgrgb=0,0,0><bgrgb=255,255,255>"
local FStellung = EEPGetSignal(Signal+1000) local FStellung = EEPGetSignal(Signal+1000)
if FStellung > 1 then if FStellung > 1 then
@ -306,18 +314,16 @@ end
function S(Signal) function S(Signal)
Zugaktionen[Zugname].S = Signal Zugaktionen[Zugname].S = Signal
-- Geschwindigkeit fuer Weiterfahrt ermitteln
local _, V = EEPGetTrainSpeed(Zugname)
Zugaktionen[Zugname].V = math.floor(V)
speicherTabelle(1, Zugaktionen) speicherTabelle(1, Zugaktionen)
end end
function R(Signal) function V(V_soll)
Zugaktionen[Zugname].S = Signal local _, V_ist = EEPGetTrainSpeed(Zugname)
-- Geschwindigkeit fuer Weiterfahrt ermitteln -- Negieren, falls Zug rueckwarts faehrt
local _, V = EEPGetTrainSpeed(Zugname) if V_ist < 0 then V_soll = -V_soll end
Zugaktionen[Zugname].V = math.floor(-V) -- Mit dieser Division teste ich, ob beide Geschwindigkeiten das selbe Vorzeichen haben
-- Merken, das ein Richtungswechsel animiert werden soll -- Falls Vorzeichen ungleich, beim naechsten Halt Fahrtrichtungswechsel
Zugaktionen[Zugname].R = 1 if V_soll/V_ist < 0 then Zugaktionen[Zugname].R = 1 end
Zugaktionen[Zugname].V = V_soll
speicherTabelle(1, Zugaktionen) speicherTabelle(1, Zugaktionen)
end end