Es geht voran...
This commit is contained in:
parent
43f1451de1
commit
d4878f781c
62
Install_00/Begriffe.lua
Normal file
62
Install_00/Begriffe.lua
Normal 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
|
@ -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"
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user