1
0
mirror of https://github.com/metrostroi-repo/MetrostroiAddon.git synced 2026-05-02 00:42:29 +00:00
Files
MetrostroiAddon/lua/metrostroi/systems/_obsolete/sys_gen_int_710.lua
g_brzhezinskiy 1d05caf866 init
2021-01-02 12:51:45 +03:00

758 lines
38 KiB
Lua

--------------------------------------------------------------------------------
-- Internal systems simulation code
--------------------------------------------------------------------------------
-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o.
-- Contains proprietary code. See license.txt for additional information.
--------------------------------------------------------------------------------
Metrostroi.DefineSystem("Gen_Int")
-- Node values
local S = {}
-- Converts boolean expression to a number
local function C(x) return x and 1 or 0 end
local min = math.min
local max = math.max
function TRAIN_SYSTEM.SolveEzh3(Train,Triggers)
local P = Train.PositionSwitch.SelectedPosition
local RK = Train.RheostatController.SelectedPosition
local B = (Train.Battery.Voltage > 55) and 1 or 0
local T = Train.SolverTemporaryVariables
if not T then
T = {}
for i=1,100 do T[i] = 0 end
Train.SolverTemporaryVariables = T
end
-- Solve all circuits
--T["SDRK_ShortCircuit"] = -10*Train.RheostatController.RKP*(Train.RUT.Value+Train.RRT.Value+(1.0-Train.SR1.Value) )
T["SDRK_ShortCircuit"] = -10*Train.RheostatController.RKP*(Train.RUT.Value+(1.0-Train.SR1.Value) )
Triggers["SDRK_Shunt"]( 1.0 - (0.20+0.20*C((RK >= 2) and (RK <= 7))*C(P == 1))*Train.LK2.Value )
S["33-33Aa"] = Train.KD.Value+Train.VAD.Value
S["U2-20"] = Train.KV["U2-20a"]+Train.KV["U2-20b"]
S["31V'-31V"] = Train.KDL.Value+Train.VDL.Value
S["10AK-VAH1"] = Train.VAH.Value+Train.RPB.Value
S["33B-33AVU"] = Train.AVU.Value+Train.OtklAVU.Value
S["1T-1P"] = Train.NR.Value+Train.RPU.Value
S["2Zh-2A"] = (1.0-Train.KSB1.Value)+(1.0-Train.TR1.Value)
S["2Zh-2A"] = Train.ThyristorBU5_6.Value+S["2Zh-2A"]
--S["2Zh-2A"] = Train.KSB2.Value+S["2Zh-2A"]
S["8A-8Ye"] = C(RK == 1)+(1.0-Train.LK4.Value)
S["15A-15B"] = Train.KV["15A-15B"]+Train.KD.Value
S["10AYa-10E"] = (1.0-Train.LK3.Value)+Train.Rper.Value
S["10AP-10AD"] = Train.LK2.Value+C((P == 3) or (P == 4))
S["10AE-10B"] = Train.TR1.Value+Train.RV1.Value
S["D1-32V"] = 1*Train.KDP.Value+Train.ALS_ARS["32"]
S["TW[15]-15A"] = Train.KRU["15/2-D8"]*Train.KV["D8-15A"]+1
S["1E-1Yu"] = Train.KSH2.Value+Train.KSB2.Value*Train.KSB1.Value
S["2V-2G"] = C((RK >= 5) and (RK <= 18))+C((RK >= 2) and (RK <= 4))*Train.KSH1.Value
S["10-8"] = Train.KV["10-8"]+(1.0-Train.VAH.Value)*Train.KV["FR1-10"]*(1.0-Train.RPB.Value)
S["10AG-10AD"] = (1.0-Train.TR1.Value)*C((P == 2) or (P == 3) or (P == 4))*(1.0-Train.TR2.Value)+Train.TR2.Value*Train.TR1.Value*C((P == 1) or (P == 2) or (P == 4))
S["1G-1Zh"] = Train.LK3.Value+C((P == 1) or (P == 3))*Train.LK5.Value*C(RK == 1)*S["1E-1Yu"]
S["10N-10Zh"] = (1.0-Train.RRT.Value)*(1.0-Train.RUT.Value)*Train.SR1.Value+Train.RheostatController.RKM1
S["10E-10AG"] = (1.0-Train.LK1.Value)*S["10AP-10AD"]*S["10AG-10AD"]+C(RK == 18)*C((P == 1))*Train.LK3.Value
S["1A-1M"] = C((RK >= 1) and (RK <= 5))+C(RK == 6)*Train.RheostatController.RKM1
S["2A-2G"] = C((P == 1) or (P == 3))*C((RK >= 1) and (RK <= 17))+C((P == 2) or (P == 4))*S["2V-2G"]
S["D1-31V"] = Train.ALS_ARS["31"]+1*S["31V'-31V"]
S["1A-1R"] = (1.0-Train.RV1.Value)*C((P == 1))+C((P == 2))*S["1A-1M"]
S["10"] = 1*Train:ReadTrainWire(10)
S["FR1/2"] = S["10"]*Train.KV["FR1-10"]
S["15B"] = S["TW[15]-15A"]*S["15A-15B"]*Train:ReadTrainWire(15)
S["10AL"] = S["10"]*Train.VU.Value
S["10ALa"] = S["10AL"]*Train.VU3.Value
S["Sh1-43"] = S["10AL"]*Train.ARS.Value--A45.Value
S["10AS"] = S["10AL"]--*Train.A55.Value
S["10AK"] = S["10AL"]--*Train.A54.Value --Pred:pr24
S["6P"] = S["10AL"]--*Train.A61.Value
S["6"] = S["6P"]*Train.RVT.Value
S["2-7R-24"] = S["6P"]*(1.0-Train.AVU.Value)
S["29"] = S["2-7R-24"]*(1.0-Train.OtklAVU.Value)+Train.ALS_ARS["29"]
--????
--23w*PR31+PR14*22
S["22A"] = Train:ReadTrainWire(23)+T[6]--*Train.KU1.Value --Pred:PR20 --Train.A23.Value*1*Train:ReadTrainWire(23)+T[6]*Train.A22.Value
S["10AN"] = (1.0-Train.RPvozvrat.Value)--*Train.A14.Value*1*1
S["1-7R-8"] = S["10AS"]*Train.KV["10AS-U4"]*Train.VozvratRP.Value
--S["1A"] = Train.A1.Value*(1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value*Train.A39.Value)*Train:ReadTrainWire(1)
--S["3A"] = Train.A3.Value*(1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value*Train.A39.Value)*Train:ReadTrainWire(3)
S["1A"] = (1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value)*Train:ReadTrainWire(1)
S["3A"] = (1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value)*Train:ReadTrainWire(3)
S["33V"] = S["10AK"]*Train.RV2.Value*S["10AK-VAH1"]*1*S["33B-33AVU"]
S["1R"] = S["1A"]*S["1A-1R"]
--S["20B"] = (1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value*Train.A39.Value)*(1.0-Train.RPvozvrat.Value)*Train.A20.Value*Train:ReadTrainWire(20)
S["20B"] = (1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value)*(1.0-Train.RPvozvrat.Value)*Train:ReadTrainWire(20)
S["4B"] = (1.0-Train.RKR.Value)*Train:ReadTrainWire(4)
S["5B"] = Train.RKR.Value*Train:ReadTrainWire(5)
S["5V"] = Train.RKR.Value*Train:ReadTrainWire(4)+T[8]*(1.0-Train.RKR.Value)
S["5B'"] = S["5V"]*Train.LK3.Value
S["6A"] = Train:ReadTrainWire(6)--Train.A6.Value*Train:ReadTrainWire(6)
S["B12"] = 1*Train.VB.Value*B
S["8A"] = Train:ReadTrainWire(8) --Pred:PR23 --Train.A8.Value*Train:ReadTrainWire(8)
S["8Zh"] = S["8A"]*C((RK >= 17) and (RK <= 18))+T[10]*1
S["12A"] = Train:ReadTrainWire(12)--Train.A12.Value*Train:ReadTrainWire(12)
S["1"] = S["10AS"]*Train.R1_5.Value*Train.KV["10AS-33D"]*Train.ALS_ARS["33D"]+(-10*Train.KRU["1/3-ZM31"])
S["8"] = S["10"]*S["10-8"]+Train.ALS_ARS["8"]
S["16V"] = (1.0-Train.RD.Value)*Train:ReadTrainWire(16) --Train.A16.Value*(1.0-Train.RD.Value)*Train:ReadTrainWire(16)
S["6Yu"] = S["6A"]*C((P == 3) or (P == 4))*C((RK >= 1) and (RK <= 2))
S["17A"] = Train:ReadTrainWire(17) --Train.A17.Value*Train:ReadTrainWire(17)
S["24V"] = (1.0-Train.LK4.Value)*Train:ReadTrainWire(24)
--S["25A"] = Train.A25.Value*Train:ReadTrainWire(25)
--S["27A"] = Train.A50.Value*Train:ReadTrainWire(27)
--S["28A"] = Train.A51.Value*Train:ReadTrainWire(28)
--S["31A"] = Train.A31.Value*Train:ReadTrainWire(31)+T[3]*1
--S["32A"] = Train.A32.Value*Train:ReadTrainWire(32)+T[4]*1
S["25A"] = Train:ReadTrainWire(25)
S["27A"] = Train:ReadTrainWire(27)
S["28A"] = Train:ReadTrainWire(28)
S["31A"] = Train:ReadTrainWire(31)+T[3]*1
S["32A"] = Train:ReadTrainWire(32)+T[4]*1
S["B2"] = 1*Train.VB.Value*B
--S["18A"] = (1.0-Train.RPvozvrat.Value)*Train.A14.Value*1+(-0.5*(1.0-Train.LK4.Value))
S["18A"] = (1.0-Train.RPvozvrat.Value)+(-0.5*(1.0-Train.LK4.Value))
S["B8"] = S["B2"]*Train.AV8B.Value
S["B22"] = S["B8"]*Train.VU1.Value
S["B28"] = S["B8"]*Train.KUP.Value
S["36Ya"] = S["B8"]*Train.KVC.Value
S["B13"] = S["B12"]--*Train.A24.Value
S["B3"] = S["B2"]--*Train.A44.Value
S["1-7R-29"] = S["B3"]*Train.RezMK.Value
S["4"] = S["10AK"]*Train.KV["10AK-4"]+(-10*Train.KRU["5/3-ZM31"]*0 + Train.KRU["14/1-B3"]*S["B3"]*(1-Train.KRR.Value)*1)
S["5"] = S["10AK"]*Train.KV["10AK-5"]+(-10*Train.KRU["5/3-ZM31"]*0 + Train.KRU["14/1-B3"]*S["B3"]*(Train.KRR.Value)*1)
S["U2"] = S["10AS"]*Train.KV["U2-10AS"]
S["24"] = S["U2"]*Train.KSN.Value
S["2-7R-21"] = S["U2"]*1+(-1*max(0,Train:ReadTrainWire(18)))
S["2"] = S["10AK"]*Train.KV["10AK-2"]+Train.ALS_ARS["2"]+(-10*Train.KRU["2/3-ZM31"])
S["3"] = S["U2"]*Train.KV["U2-3"]+(-10*Train.KRU["3/3-ZM31"])
S["33Aa"] = S["10AS"]*Train.KV["10AS-33"]*S["33-33Aa"]
S["22V"] = S["22A"]*(1.0-Train.TRK.Value)
--S["10/4"] = S["B12"]*Train.VB.Value*Train.A56.Value+(1-Train.VB.Value)*Train:ReadTrainWire(10)
S["10/4"] = S["B12"]*Train.VB.Value+(1-Train.VB.Value)*Train:ReadTrainWire(10)
S["1P"] = S["1A"]*C((P == 1) or (P == 2))*S["1T-1P"]+T[2]*C((P == 3) or (P == 4))
S["25"] = S["U2"]*Train.KV["U2-25"]*Train.K25.Value
S["1Zh"] = S["1P"]*Train.AVT.Value*(1.0-Train.RPvozvrat.Value)*S["1G-1Zh"]
S["8G"] = S["8A"]*(1.0-Train.RT2.Value)*S["8A-8Ye"]
S["11A"] = S["B2"]*(1.0-Train.RD.Value)
S["1-7R-31"] = S["B3"]*Train.KRU["14/1-B3"]*Train.KRP.Value
S["10AYa"] = S["B2"]--*Train.A80.Value
S["10AE"] = S["B2"]--*Train.A30.Value
S["20"] = S["U2"]*S["U2-20"]+Train.ALS_ARS["20"]+(-10*Train.KRU["20/3-ZM31"])
S["10I"] = S["10AE"]*Train.RheostatController.RKM2
S["10AH"] = S["10I"]*(1.0-Train.LK1.Value)+0
S["10H"] = S["10I"]*Train.LK4.Value
S["10B"] = S["10AE"]*S["10AE-10B"]
S["10/4a"] = S["10/4"]*Train.VB.Value
S["22K"] = S["10/4"]--*Train.A10.Value
S["22E'"] = S["22K"]*Train.KU1.Value*Train.AK.Value*Train.AV8B.Value
S["U0"] = S["10/4"]--*Train.A27.Value
S["U0a"] = S["U0"]*1+(-10*S["10AN"])
S["s3"] = S["U0"]*Train.DIPon.Value
S["s10"] = S["U0"]*Train.DIPoff.Value
S["F1"] = S["10/4"]*Train.KV["10/4-F1"]
S["D4"] = S["10/4"]*(1.00-Train.KSD.Value)
S["15"] = S["D4"]*Train.KV["D4-15"]+(-10*Train:ReadTrainWire(11)) + Train.KRU["14/1-B3"]*S["B3"]*20
S["D4/3"] = S["D4"]*1
--S["D1"] = S["10/4"]*Train.A21.Value*Train.KV["D-D1"]+(1*Train.KRU["11/3-D1/1"]*Train.KRU["14/1-B3"]*S["B3"])
S["D1"] = S["10/4"]*Train.KV["D-D1"]+(1*Train.KRU["11/3-D1/1"]*Train.KRU["14/1-B3"]*S["B3"])
S["11B"] = S["10/4"]*Train.KV["10/4-C3"]*(1.0-Train.NR.Value)+T[1]*1
S["16"] = S["D1"]*Train.VUD1.Value*Train.VUD2.Value
S["F2a"] = S["F1"]--*Train.A7.Value
S["F1a"] = S["F1"]--*Train.A9.Value
S["ST/1+ST/2"] = S["D4/3"]*Train.BPT.Value
S["16V/1+16V/2"] = S["D4/3"]*(1.0-Train.RD.Value)
S["D6/1"] = S["D4/3"]*Train.BD.Value
S["1K"] = S["1Zh"]*C((P == 1) or (P == 2))
S["1N"] = S["1Zh"]*C((P == 1) or (P == 3))
S["10N"] = S["10AE"]*S["10N-10Zh"]*1+T["SDRK_ShortCircuit"]
S["31V"] = S["D1"]*S["D1-31V"]
S["10AG"] = S["10AYa"]*S["10E-10AG"]*S["10AYa-10E"]
S["2Ye10AV"] = S["10AYa"]*(1.0-Train.LK3.Value)*C((RK >= 2) and (RK <= 18))*(1.0-Train.LK4.Value)+0
S["32V"] = S["D1"]*S["D1-32V"]
S["12"] = S["D1"]*Train.KRZD.Value
S["F7"] = S["10"]*Train.KV["F7-10"]+(1*Train.KRU["11/3-FR1"]*Train.KRU["14/1-B3"]*S["B3"])
S["F7/1"] = S["10"]*Train.KV["F7-10"]+(1*Train.KRU["11/3-FR1"]*Train.KRU["14/1-B3"]*S["B3"])
S["33G"] = 1*Train.ALS_ARS["33G"]+S["U2"]*Train.KV["U2-33G"]
--S["2Ye"] = Train.A2.Value*(1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value*Train.A39.Value)*S["2Zh-2A"]*Train.LK4.Value*S["2A-2G"]*Train:ReadTrainWire(2)+(S["2Ye10AV"])
S["2Ye"] = (1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value)*S["2Zh-2A"]*Train.LK4.Value*S["2A-2G"]*Train:ReadTrainWire(2)+(S["2Ye10AV"])
S["F13"] = S["F7"]--*Train.A46.Value
S["F10"] = S["F7/1"]*Train.VUS.Value--*Train.A47.Value
-- Call all triggers
T[4] = min(1,S["12A"])
Train.Panel["RedLightRight"] = S["F2a"]
Train.RRP:TriggerInput("Set",Train:ReadTrainWire(14)*(1-Train.Rp8.Value))
Train.RZ_2:TriggerInput("Set",S["24V"])
Train.Panel["HeadLights2"] = S["F13"]
Triggers["ReverserForward"](S["5B"])
Train:WriteTrainWire(2,S["2"])
Train.Panel["TrainDoors"] = S["16V/1+16V/2"]
Train:WriteTrainWire(14,S["1-7R-31"])
Train:WriteTrainWire(27,S["s3"])
Train:WriteTrainWire(9,S["10/4a"])
Train.RV1:TriggerInput("Set",S["2Ye"])
Train.TR1:TriggerInput("Set",S["6A"])
Train.SR1:TriggerInput("Set",S["2Ye"])
Train.Panel["EmergencyLight"] = S["B12"]
Triggers["XR3.4"](S["36Ya"])
Train.Panel["AVU"] = S["2-7R-24"]
Train.PneumaticNo2:TriggerInput("Set",S["8G"])
Triggers["SDRK_Coil"](S["10B"])
Train.RD:TriggerInput("Set",S["D6/1"])
Triggers["XR3.6"](S["36Ya"])
Train:WriteTrainWire(20,S["20"])
Train:WriteTrainWire(32,S["32V"])
T[6] = min(1,Train:ReadTrainWire(22))
Train.KSH1:TriggerInput("Set",S["1R"])
Train.Panel["KUP"] = S["B28"]
Train:WriteTrainWire(23,S["1-7R-29"])
Triggers["XR3.7"](S["36Ya"])
Train.Panel["TrainBrakes"] = S["ST/1+ST/2"]
Train:WriteTrainWire(31,S["31V"])
Train.LK5:TriggerInput("Set",S["20B"])
Train.LK1:TriggerInput("Set",S["1K"])
Train:WriteTrainWire(4,S["4"])
Train.VDOL:TriggerInput("Set",S["31A"])
Triggers["SDRK"](S["10N"])
Train.LK4:TriggerInput("Set",S["5B'"])
Train:WriteTrainWire(16,S["16"])
Train.R1_5:TriggerInput("Set",S["33V"])
Train:WriteTrainWire(10,S["10/4a"])
Triggers["XR3.2"](S["27A"])
Train.KVC:TriggerInput("Set",S["B8"])
T[8] = min(1,Train:ReadTrainWire(5))
T[7] = min(1,S["5V"])
Train.RVT:TriggerInput("Set",S["33G"])
T[10] = min(1,Train:ReadTrainWire(29))
Train.RPU:TriggerInput("Set",S["27A"])
T[5] = min(1,S["22A"])
Train:WriteTrainWire(25,S["25"])
T[1] = min(1,S["28A"])
Train.KK:TriggerInput("Set",S["22V"])
Train:WriteTrainWire(5,S["5"])
Triggers["RUTpod"](S["10H"])
Train:WriteTrainWire(29,S["29"])
Triggers["RRTpod"](S["10AH"])
Train.Panel["GreenRP"] = S["U0a"]
Triggers["SDPP"](S["10AG"])
Train.Panel["CabinLight"] = S["10ALa"]
T[2] = min(1,S["6A"])
Triggers["XT3.1"](S["B13"])
Triggers["XR3.3"](S["28A"])
Train.KSB1:TriggerInput("Set",S["6Yu"])
Triggers["RRTuderzh"](S["25A"])
Train.Panel["V1"] = S["10/4"]
Train.RR:TriggerInput("Set",S["1N"])
T[3] = min(1,S["12A"])
Train:WriteTrainWire(8,S["8"])
Train:WriteTrainWire(1,S["1"])
Train.Panel["SD"] = S["15B"]
Train.TR2:TriggerInput("Set",S["6A"])
Triggers["KPP"](S["27A"])
Train:WriteTrainWire(24,S["24"])
T[9] = min(1,S["8Zh"])
Train:WriteTrainWire(3,S["3"])
Train:WriteTrainWire(15,S["15"])
Train.LK3:TriggerInput("Set",S["1Zh"])
Train.KUP:TriggerInput("Set",S["B22"])
Train.Rper:TriggerInput("Set",S["3A"])
Train.Panel["RedRP"] = S["2-7R-21"]
Train:WriteTrainWire(18,S["18A"])
Triggers["RPvozvrat"](S["17A"])
Train.VDZ:TriggerInput("Set",S["16V"])
Train.Panel["RedLightLeft"] = S["F1a"]
Train.KD:TriggerInput("Set",S["15B"])
Train.LK2:TriggerInput("Set",S["20B"])
Train.KSH2:TriggerInput("Set",S["1R"])
Train.PneumaticNo1:TriggerInput("Set",S["8Zh"])
Train.K25:TriggerInput("Set",Train.ALS_ARS["33Zh"])
Train.KSB2:TriggerInput("Set",S["6Yu"])
Train.RUP:TriggerInput("Set",S["6Yu"])
Train:WriteTrainWire(17,S["1-7R-8"])
Train.Panel["TrainRP"] = S["2-7R-21"]
Train.Panel["Ring"] = S["11B"]
Train:WriteTrainWire(28,S["s10"])
Triggers["ReverserBackward"](S["4B"])
Train.RV2:TriggerInput("Set",S["33Aa"])
Train.Panel["HeadLights1"] = S["F10"]
Train:WriteTrainWire(11,S["11A"])
Train.Panel["HeadLights3"] = S["F13"]
Train:WriteTrainWire(22,S["22E'"])
Train.VDOP:TriggerInput("Set",S["32A"])
Train:WriteTrainWire(6,S["6"])
Train:WriteTrainWire(12,S["12"])
return S
end
function TRAIN_SYSTEM.SolveEzh3RU1(Train,Triggers)
local P = Train.PositionSwitch.SelectedPosition
local RK = Train.RheostatController.SelectedPosition
local B = (Train.Battery.Voltage > 55) and 1 or 0
local T = Train.SolverTemporaryVariables
if not T then
T = {}
for i=1,100 do T[i] = 0 end
Train.SolverTemporaryVariables = T
end
-- Solve all circuits
T["SDRK_ShortCircuit"] = -10*Train.RheostatController.RKP*(Train.RUT.Value+Train.RRT.Value+(1.0-Train.SR1.Value) )
Triggers["SDRK_Shunt"]( 1.0 - (0.20+0.20*C((RK >= 2) and (RK <= 7))*C(P == 1))*Train.LK2.Value )
S["33-33Aa"] = Train.KD.Value+Train.VAD.Value
S["U2-20"] = Train.KV["U2-20a"]+Train.KV["U2-20b"]
S["31V'-31V"] = (Train.KDL.Value+Train.VDL.Value)*(1-Train.ASNP31.Value)
S["10AK-VAH1"] = Train.VAH.Value+Train.RPB.Value
S["33B-33AVU"] = Train.AVU.Value+Train.OtklAVU.Value
S["1T-1P"] = Train.NR.Value+Train.RPU.Value
S["2Zh-2A"] = (1.0-Train.KSB1.Value)+(1.0-Train.TR1.Value)
S["2Zh-2A"] = Train.ThyristorBU5_6.Value+S["2Zh-2A"]
S["8A-8Ye"] = C(RK == 1)+(1.0-Train.LK4.Value)
S["15A-15B"] = Train.KV["15A-15B"]+Train.KD.Value
S["10AYa-10E"] = (1.0-Train.LK3.Value)+Train.Rper.Value
S["10AP-10AD"] = Train.LK2.Value+C((P == 3) or (P == 4))
S["10AE-10B"] = Train.TR1.Value+Train.RV1.Value
S["D1-32V"] = (1*Train.KDP.Value+Train.ALS_ARS["32"])*(1-Train.ASNP32.Value)
S["TW[15]-15A"] = Train.KRU["15/2-D8"]*Train.KV["D8-15A"]+1
S["1E-1Yu"] = Train.KSH2.Value+Train.KSB2.Value*Train.KSB1.Value
S["2V-2G"] = C((RK >= 5) and (RK <= 18))+C((RK >= 2) and (RK <= 4))*Train.KSH1.Value
S["10-8"] = Train.KV["10-8"]+(1.0-Train.VAH.Value)*Train.KV["FR1-10"]*(1.0-Train.RPB.Value)
S["10AG-10AD"] = (1.0-Train.TR1.Value)*C((P == 2) or (P == 3) or (P == 4))*(1.0-Train.TR2.Value)+Train.TR2.Value*Train.TR1.Value*C((P == 1) or (P == 2) or (P == 4))
S["1G-1Zh"] = Train.LK3.Value+C((P == 1) or (P == 3))*Train.LK5.Value*C(RK == 1)*S["1E-1Yu"]
S["10N-10Zh"] = (1.0-Train.RRT.Value)*(1.0-Train.RUT.Value)*Train.SR1.Value+Train.RheostatController.RKM1
S["10E-10AG"] = (1.0-Train.LK1.Value)*S["10AP-10AD"]*S["10AG-10AD"]+C(RK == 18)*C((P == 1))*Train.LK3.Value
S["1A-1M"] = C((RK >= 1) and (RK <= 5))+C(RK == 6)*Train.RheostatController.RKM1
S["2A-2G"] = C((P == 1) or (P == 3))*C((RK >= 1) and (RK <= 17))+C((P == 2) or (P == 4))*S["2V-2G"]
S["D1-31V"] = (Train.ALS_ARS["31"]+1*S["31V'-31V"])
S["1A-1R"] = (1.0-Train.RV1.Value)*C((P == 1))+C((P == 2))*S["1A-1M"]
S["10"] = 1*Train:ReadTrainWire(10)
S["FR1/2"] = S["10"]*Train.KV["FR1-10"]
S["15B"] = S["TW[15]-15A"]*S["15A-15B"]*Train:ReadTrainWire(15)
S["10AL"] = S["10"]*Train.VU.Value
Train.VU:TriggerInput("Check",S["10AL"]) if Train.VU.Value < 0.5 then S["10AL"] = 0 end
S["10ALa"] = S["10AL"]*Train.A64.Value
--Train.A64.TriggerInput("Check",S["10ALa"]) if Train.A64.Value < 0.5 then S["10ALa"] = 0 end --if Train.A.Value < 0.5 then S[""] = 0 end
S["Sh1-43"] = S["10AL"]*Train.A45.Value
--Train.A45.TriggerInput("Check",S["Sh1-43"]) if Train.A45.Value < 0.5 then S["Sh1-43"] = 0 end
S["10AS"] = S["10AL"]*Train.A55.Value
--Train.A55.TriggerInput("Check",S["10AS"]) if Train.A55.Value < 0.5 then S["10AS"] = 0 end
S["10AK"] = S["10AL"]*Train.A54.Value
--Train.A54.TriggerInput("Check",S["10AK"]) if Train.A54.Value < 0.5 then S["10AK"] = 0 end
S["6P"] = S["10AL"]*Train.A61.Value
--Train.A61.TriggerInput("Check",S["6P"]) if Train.A61.Value < 0.5 then S["6P"] = 0 end
S["6"] = S["6P"]*Train.RVT.Value
S["2-7R-24"] = S["6P"]*(1.0-Train.AVU.Value)
S["29"] = S["2-7R-24"]*(1.0-Train.OtklAVU.Value)+Train.ALS_ARS["29"]
S["22A"] = Train.A23.Value*1*Train:ReadTrainWire(23)+T[6]*Train.A22.Value
--Train.A22.TriggerInput("Check",S["22A"]) if Train.A22.Value < 0.5 then S["22A"] = 0 end
--Train.A23.TriggerInput("Check",S["22A"]) if Train.A23.Value < 0.5 then S["22A"] = 0 end
S["10AN"] = (1.0-Train.RPvozvrat.Value)*Train.A14.Value*1*1
--Train.A14.TriggerInput("Check",S["10AN"]) if Train.A14.Value < 0.5 then S["10AN"] = 0 end
S["1-7R-8"] = S["10AS"]*Train.KV["10AS-U4"]*Train.VozvratRP.Value
S["1A"] = Train.A1.Value*(1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value*Train.A39.Value)*Train:ReadTrainWire(1)
--Train.A1.TriggerInput("Check",S["1A"]) if Train.A1.Value < 0.5 then S["1A"] = 0 end
--Train.A39.TriggerInput("Check",S["1A"]) if Train.A39.Value < 0.5 then S["1A"] = 0 end
S["3A"] = Train.A3.Value*(1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value*Train.A39.Value)*Train:ReadTrainWire(3)
--Train.A1.TriggerInput("Check",S["3A"]) if Train.A1.Value < 0.5 then S["3A"] = 0 end
--Train.A39.TriggerInput("Check",S["3A"]) if Train.A39.Value < 0.5 then S["3A"] = 0 end
S["33V"] = S["10AK"]*Train.RV2.Value*S["10AK-VAH1"]*1*S["33B-33AVU"]
S["1R"] = S["1A"]*S["1A-1R"]
S["20B"] = (1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value*Train.A39.Value)*(1.0-Train.RPvozvrat.Value)*Train.A20.Value*Train:ReadTrainWire(20)
--Train.A39.TriggerInput("Check",S["20B"]) if Train.A39.Value < 0.5 then S["20B"] = 0 end
--Train.A20.TriggerInput("Check",S["20B"]) if Train.A20.Value < 0.5 then S["20B"] = 0 end
S["4B"] = (1.0-Train.RKR.Value)*Train:ReadTrainWire(4)
S["5B"] = Train.RKR.Value*Train:ReadTrainWire(5)
S["5V"] = Train.RKR.Value*Train:ReadTrainWire(4)+T[8]*(1.0-Train.RKR.Value)
S["5B'"] = S["5V"]*Train.LK3.Value
S["6A"] = Train.A6.Value*Train:ReadTrainWire(6)
--Train.A6.TriggerInput("Check",S["6A"]) if Train.A6.Value < 0.5 then S["6A"] = 0 end
S["B12"] = 1*Train.VB.Value*B
S["8A"] = Train.A8.Value*Train:ReadTrainWire(8)
--Train.A8.TriggerInput("Check",S["8A"]) if Train.A8.Value < 0.5 then S["8A"] = 0 end
S["8Zh"] = S["8A"]*C((RK >= 17) and (RK <= 18))+T[10]*1
S["12A"] = Train.A12.Value*Train:ReadTrainWire(12)
--Train.A12.TriggerInput("Check",S["12A"]) if Train.A12.Value < 0.5 then S["12A"] = 0 end
S["1"] = S["10AS"]*Train.R1_5.Value*Train.KV["10AS-33D"]*Train.ALS_ARS["33D"]+(-10*Train.KRU["1/3-ZM31"])
S["8"] = S["10"]*S["10-8"]+Train.ALS_ARS["8"]
S["16V"] = Train.A16.Value*(1.0-Train.RD.Value)*Train:ReadTrainWire(16)
--Train.A16.TriggerInput("Check",S["16V"]) if Train.A16.Value < 0.5 then S["16V"] = 0 end
S["6Yu"] = S["6A"]*C((P == 3) or (P == 4))*C((RK >= 1) and (RK <= 2))
S["17A"] = Train.A17.Value*Train:ReadTrainWire(17)
--Train.A17.TriggerInput("Check",S["17A"]) if Train.A17.Value < 0.5 then S["17A"] = 0 end
S["24V"] = (1.0-Train.LK4.Value)*Train:ReadTrainWire(24)
--Train.A24.TriggerInput("Check",S["24V"]) if Train.A24.Value < 0.5 then S["24V"] = 0 end
S["25A"] = Train.A25.Value*Train:ReadTrainWire(25)
--Train.A25.TriggerInput("Check",S["25A"]) if Train.A25.Value < 0.5 then S["25A"] = 0 end
S["27A"] = Train.A50.Value*Train:ReadTrainWire(27)
--Train.A50.TriggerInput("Check",S["27A"]) if Train.A50.Value < 0.5 then S["27A"] = 0 end
S["28A"] = Train.A51.Value*Train:ReadTrainWire(28)
--Train.A51.TriggerInput("Check",S["28A"]) if Train.A51.Value < 0.5 then S["28A"] = 0 end
S["31A"] = Train.A31.Value*Train:ReadTrainWire(31)+T[3]*1
--Train.A31.TriggerInput("Check",S["31A"]) if Train.A31.Value < 0.5 then S["31A"] = 0 end
S["32A"] = Train.A32.Value*Train:ReadTrainWire(32)+T[4]*1
--Train.A32.TriggerInput("Check",S["32A"]) if Train.A32.Value < 0.5 then S["32A"] = 0 end
S["B2"] = 1*Train.VB.Value*B
S["18A"] = (1.0-Train.RPvozvrat.Value)*Train.A14.Value*1+(-0.5*(1.0-Train.LK4.Value))
--Train.A14.TriggerInput("Check",S["18A"]) if Train.A14.Value < 0.5 then S["18A"] = 0 end
S["B8"] = S["B2"]*Train.A53.Value
--Train.A53.TriggerInput("Check",S["B8"]) if Train.A53.Value < 0.5 then S["B8"] = 0 end
S["B22"] = S["B8"]*Train.A75.Value
--Train.A75.TriggerInput("Check",S["B22"]) if Train.A75.Value < 0.5 then S["B22"] = 0 end
S["B28"] = S["B8"]*Train.KUP.Value
S["36Ya"] = S["B8"]*Train.KVC.Value
S["B13"] = S["B12"]*Train.A24.Value
--Train.A24.TriggerInput("Check",S["B13"]) if Train.A24.Value < 0.5 then S["B13"] = 0 end
S["B3"] = S["B2"]*Train.A44.Value
--Train.A44.TriggerInput("Check",S["B3"]) if Train.A44.Value < 0.5 then S["B3"] = 0 end
S["1-7R-29"] = S["B3"]*Train.RezMK.Value
S["4"] = S["10AK"]*Train.KV["10AK-4"]
S["5"] = S["10AK"]*Train.KV["10AK-5"]+(-10*Train.KRU["5/3-ZM31"]*0 + Train.KRU["14/1-B3"]*S["B3"]*1)
S["U2"] = S["10AS"]*Train.KV["U2-10AS"]
S["24"] = S["U2"]*Train.KSN.Value
S["2-7R-21"] = S["U2"]*1+(-1*max(0,Train:ReadTrainWire(18)))
S["2"] = S["10AK"]*Train.KV["10AK-2"]+Train.ALS_ARS["2"]+(-10*Train.KRU["2/3-ZM31"])
S["3"] = S["U2"]*Train.KV["U2-3"]+(-10*Train.KRU["3/3-ZM31"])
S["33Aa"] = S["10AS"]*Train.KV["10AS-33"]*S["33-33Aa"]
S["22V"] = S["22A"]*(1.0-Train.TRK.Value)
S["10/4"] = S["B12"]*Train.VB.Value*Train.A56.Value+(1-Train.VB.Value)*Train:ReadTrainWire(10)
--Train.A56.TriggerInput("Check",S["10/4"]) if Train.A56.Value < 0.5 then S["10/4"] = 0 end
S["1P"] = S["1A"]*C((P == 1) or (P == 2))*S["1T-1P"]+T[2]*C((P == 3) or (P == 4))
S["25"] = S["U2"]*Train.KV["U2-25"]*Train.K25.Value
S["1Zh"] = S["1P"]*Train.AVT.Value*(1.0-Train.RPvozvrat.Value)*S["1G-1Zh"]
S["8G"] = S["8A"]*(1.0-Train.RT2.Value)*S["8A-8Ye"]
S["11A"] = S["B2"]*(1.0-Train.RD.Value)
S["1-7R-31"] = S["B3"]*Train.KRU["14/1-B3"]*Train.KRP.Value
S["10AYa"] = S["B2"]*Train.A80.Value
--Train.A80.TriggerInput("Check",S["10AYa"]) if Train.A80.Value < 0.5 then S["10AYa"] = 0 end
S["10AE"] = S["B2"]*Train.A30.Value
--Train.A30.TriggerInput("Check",S["10AE"]) if Train.A30.Value < 0.5 then S["10AE"] = 0 end
S["20"] = S["U2"]*S["U2-20"]+Train.ALS_ARS["20"]+(-10*Train.KRU["20/3-ZM31"])
S["10I"] = S["10AE"]*Train.RheostatController.RKM2
S["10AH"] = S["10I"]*(1.0-Train.LK1.Value)+0
S["10H"] = S["10I"]*Train.LK4.Value
S["10B"] = S["10AE"]*S["10AE-10B"]
S["10/4a"] = S["10/4"]*Train.VB.Value
S["22K"] = S["10/4"]*Train.A10.Value
--Train.A10.TriggerInput("Check",S["22K"]) if Train.A10.Value < 0.5 then S["22K"] = 0 end
S["22E'"] = S["22K"]*Train.VMK.Value*Train.AK.Value
S["U0"] = S["10/4"]*Train.A27.Value
--Train.A27.TriggerInput("Check",S["U0"]) if Train.A27.Value < 0.5 then S["U0"] = 0 end
S["U0a"] = S["U0"]*1+(-10*S["10AN"])
S["s3"] = S["U0"]*Train.DIPon.Value
S["s10"] = S["U0"]*Train.DIPoff.Value
S["F1"] = S["10/4"]*Train.KV["10/4-F1"]
S["D4"] = S["10/4"]*Train.A13.Value
--Train.A13.TriggerInput("Check",S["D4"]) if Train.A13.Value < 0.5 then S["D4"] = 0 end
S["15"] = S["D4"]*Train.KV["D4-15"]+(-10*Train:ReadTrainWire(11)) + Train.KRU["14/1-B3"]*S["B3"]*20
S["D4/3"] = S["D4"]*1
S["D1"] = S["10/4"]*Train.A21.Value*Train.KV["D-D1"]+(1*Train.KRU["11/3-D1/1"]*Train.KRU["14/1-B3"]*S["B3"])
--Train.A21.TriggerInput("Check",S["D1"]) if Train.A21.Value < 0.5 then S["D1"] = 0 end
S["11B"] = S["10/4"]*Train.KV["10/4-C3"]*(1.0-Train.NR.Value)+T[1]*1
S["16"] = S["D1"]*Train.VUD1.Value*Train.VUD2.Value
S["F2a"] = S["F1"]*Train.A7.Value
--Train.A7.TriggerInput("Check",S["F2a"]) if Train.A7.Value < 0.5 then S["F2a"] = 0 end
S["F1a"] = S["F1"]*Train.A9.Value
--Train.A9.TriggerInput("Check",S["F1a"]) if Train.A9.Value < 0.5 then S["F1a"] = 0 end
S["ST/1+ST/2"] = S["D4/3"]*Train.BPT.Value
S["16V/1+16V/2"] = S["D4/3"]*(1.0-Train.RD.Value)
S["D6/1"] = S["D4/3"]*Train.BD.Value
S["1K"] = S["1Zh"]*C((P == 1) or (P == 2))
S["1N"] = S["1Zh"]*C((P == 1) or (P == 3))
S["10N"] = S["10AE"]*S["10N-10Zh"]*1+T["SDRK_ShortCircuit"]
S["31V"] = S["D1"]*S["D1-31V"]
S["10AG"] = S["10AYa"]*S["10E-10AG"]*S["10AYa-10E"]
S["2Ye10AV"] = S["10AYa"]*(1.0-Train.LK3.Value)*C((RK >= 2) and (RK <= 18))*(1.0-Train.LK4.Value)+0
S["32V"] = S["D1"]*S["D1-32V"]
S["12"] = S["D1"]*Train.KRZD.Value
S["F7"] = S["10"]*Train.KV["F7-10"]+(1*Train.KRU["11/3-FR1"]*Train.KRU["14/1-B3"]*S["B3"])
S["F7/1"] = S["10"]*Train.KV["F7-10"]+(1*Train.KRU["11/3-FR1"]*Train.KRU["14/1-B3"]*S["B3"])
S["33G"] = 1*Train.ALS_ARS["33G"]+S["U2"]*Train.KV["U2-33G"]
S["2Ye"] = Train.A2.Value*(1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value*Train.A39.Value)*S["2Zh-2A"]*Train.LK4.Value*S["2A-2G"]*Train:ReadTrainWire(2)+(S["2Ye10AV"])
--Train.A2.TriggerInput("Check",S["2Ye"]) if Train.A2.Value < 0.5 then S["2Ye"] = 0 end
--Train.A39.TriggerInput("Check",S["2Ye"]) if Train.A39.Value < 0.5 then S["2Ye"] = 0 end
S["F13"] = S["F7"]*Train.A46.Value
--Train.A46.TriggerInput("Check",S["F13"]) if Train.A46.Value < 0.5 then S["F13"] = 0 end
S["F10"] = S["F7/1"]*Train.VUS.Value*Train.A47.Value
--Train.A47.TriggerInput("Check",S["F10"]) if Train.A47.Value < 0.5 then S["F10"] = 0 end
--Train.A.TriggerInput("Check",S[""])
-- Call all triggers
T[4] = min(1,S["12A"])
Train.Panel["RedLightRight"] = S["F2a"]
Train.RRP:TriggerInput("Set",Train:ReadTrainWire(14)*(1-Train.Rp8.Value))
Train.RZ_2:TriggerInput("Set",S["24V"])
Train.Panel["HeadLights2"] = S["F13"]
Triggers["ReverserForward"](S["5B"])
Train:WriteTrainWire(2,S["2"])
Train.Panel["TrainDoors"] = S["16V/1+16V/2"]
Train:WriteTrainWire(14,S["1-7R-31"])
Train:WriteTrainWire(27,S["s3"])
Train:WriteTrainWire(9,S["10/4a"])
Train.RV1:TriggerInput("Set",S["2Ye"])
Train.TR1:TriggerInput("Set",S["6A"])
Train.SR1:TriggerInput("Set",S["2Ye"])
Train.Panel["EmergencyLight"] = S["B12"]
Triggers["XR3.4"](S["36Ya"])
Train.Panel["AVU"] = S["2-7R-24"]
Train.PneumaticNo2:TriggerInput("Set",S["8G"])
Triggers["SDRK_Coil"](S["10B"])
Train.RD:TriggerInput("Set",S["D6/1"])
Triggers["XR3.6"](S["36Ya"])
Train:WriteTrainWire(20,S["20"])
Train:WriteTrainWire(32,S["32V"])
T[6] = min(1,Train:ReadTrainWire(22))
Train.KSH1:TriggerInput("Set",S["1R"])
Train.Panel["KUP"] = S["B28"]
Train:WriteTrainWire(23,S["1-7R-29"])
Triggers["XR3.7"](S["36Ya"])
Train.Panel["TrainBrakes"] = S["ST/1+ST/2"]
Train:WriteTrainWire(31,S["31V"])
Train.LK5:TriggerInput("Set",S["20B"])
Train.LK1:TriggerInput("Set",S["1K"])
Train:WriteTrainWire(4,S["4"])
Train.VDOL:TriggerInput("Set",S["31A"])
Triggers["SDRK"](S["10N"])
Train.LK4:TriggerInput("Set",S["5B'"])
Train:WriteTrainWire(16,S["16"])
Train.R1_5:TriggerInput("Set",S["33V"])
Train:WriteTrainWire(10,S["10/4a"])
Triggers["XR3.2"](S["27A"])
Train.KVC:TriggerInput("Set",S["B8"])
T[8] = min(1,Train:ReadTrainWire(5))
T[7] = min(1,S["5V"])
Train.RVT:TriggerInput("Set",S["33G"])
T[10] = min(1,Train:ReadTrainWire(29))
Train.RPU:TriggerInput("Set",S["27A"])
T[5] = min(1,S["22A"])
Train:WriteTrainWire(25,S["25"])
T[1] = min(1,S["27A"])
Train.KK:TriggerInput("Set",S["22V"])
Train:WriteTrainWire(5,S["5"])
Triggers["RUTpod"](S["10H"])
Train:WriteTrainWire(29,S["29"])
Triggers["RRTpod"](S["10AH"])
Train.Panel["GreenRP"] = S["U0a"]
Triggers["SDPP"](S["10AG"])
Train.Panel["CabinLight"] = S["10ALa"]
T[2] = min(1,S["6A"])
Triggers["XT3.1"](S["B13"])
Triggers["XR3.3"](S["28A"])
Train.KSB1:TriggerInput("Set",S["6Yu"])
Triggers["RRTuderzh"](S["25A"])
Train.Panel["V1"] = S["10/4"]
Train.RR:TriggerInput("Set",S["1N"])
T[3] = min(1,S["12A"])
Train:WriteTrainWire(8,S["8"])
Train:WriteTrainWire(1,S["1"])
Train.Panel["SD"] = S["15B"]
Train.TR2:TriggerInput("Set",S["6A"])
Triggers["KPP"](S["27A"])
Train:WriteTrainWire(24,S["24"])
T[9] = min(1,S["8Zh"])
Train:WriteTrainWire(3,S["3"])
Train:WriteTrainWire(15,S["15"])
Train.LK3:TriggerInput("Set",S["1Zh"])
Train.KUP:TriggerInput("Set",S["B22"])
Train.Rper:TriggerInput("Set",S["3A"])
Train.Panel["RedRP"] = S["2-7R-21"]
Train:WriteTrainWire(18,S["18A"])
Triggers["RPvozvrat"](S["17A"])
Train.VDZ:TriggerInput("Set",S["16V"])
Train.Panel["RedLightLeft"] = S["F1a"]
Train.KD:TriggerInput("Set",S["15B"])
Train.LK2:TriggerInput("Set",S["20B"])
Train.KSH2:TriggerInput("Set",S["1R"])
Train.PneumaticNo1:TriggerInput("Set",S["8Zh"])
Train.K25:TriggerInput("Set",Train.ALS_ARS["33Zh"])
Train.KSB2:TriggerInput("Set",S["6Yu"])
Train.RUP:TriggerInput("Set",S["6Yu"])
Train:WriteTrainWire(17,S["1-7R-8"])
Train.Panel["TrainRP"] = S["2-7R-21"]
Train.Panel["Ring"] = S["11B"]
Train:WriteTrainWire(28,S["s10"])
Triggers["ReverserBackward"](S["4B"])
Train.RV2:TriggerInput("Set",S["33Aa"])
Train.Panel["HeadLights1"] = S["F10"]
Train:WriteTrainWire(11,S["11A"])
Train.Panel["HeadLights3"] = S["F13"]
Train:WriteTrainWire(22,S["22E'"])
Train.VDOP:TriggerInput("Set",S["32A"])
Train:WriteTrainWire(6,S["6"])
Train:WriteTrainWire(12,S["12"])
return S
end
function TRAIN_SYSTEM.SolveEma508(Train,Triggers)
local P = Train.PositionSwitch.SelectedPosition
local RK = Train.RheostatController.SelectedPosition
local B = (Train.Battery.Voltage > 55) and 1 or 0
local T = Train.SolverTemporaryVariables
if not T then
T = {}
for i=1,100 do T[i] = 0 end
Train.SolverTemporaryVariables = T
end
-- Solve all circuits
T["SDRK_ShortCircuit"] = -10*Train.RheostatController.RKP*(Train.RUT.Value+Train.RRT.Value+(1.0-Train.SR1.Value) )
Triggers["SDRK_Shunt"]( 1.0 - (0.20+0.20*C((RK >= 2) and (RK <= 7))*C(P == 1))*Train.LK2.Value )
S["1T-1P"] = Train.NR.Value+Train.RPU.Value
S["2Zh-2A"] = (1.0-Train.KSB1.Value)+(1.0-Train.TR1.Value)
S["2Zh-2A"] = Train.ThyristorBU5_6.Value+S["2Zh-2A"]
S["8A-8Ye"] = C(RK == 1)+(1.0-Train.LK4.Value)
S["10AYa-10E"] = (1.0-Train.LK3.Value)+Train.Rper.Value
S["10AP-10AD"] = Train.LK2.Value+C((P == 3) or (P == 4))
S["10AE-10B"] = Train.TR1.Value+Train.RV1.Value
S["2V-2G"] = C((RK >= 5) and (RK <= 18))+C((RK >= 2) and (RK <= 4))*Train.KSH1.Value
S["1E-1Yu"] = Train.KSH2.Value+Train.KSB2.Value*Train.KSB1.Value
S["10Zh-10N"] = Train.RheostatController.RKM1+(1.0-Train.RUT.Value)*Train.SR1.Value*(1.0-Train.RRT.Value)
S["1G-1Zh"] = Train.LK3.Value+C((P == 1) or (P == 3))*Train.LK5.Value*C(RK == 1)*S["1E-1Yu"]
S["10AG-10AD"] = C((P == 2) or (P == 3) or (P == 4))*(1.0-Train.TR2.Value)*(1.0-Train.TR1.Value)+Train.TR2.Value*Train.TR1.Value*C((P == 1) or (P == 2) or (P == 4))
S["1A-1M"] = C((RK >= 1) and (RK <= 5))+C(RK == 6)*Train.RheostatController.RKM1
S["10E-10AG"] = Train.LK3.Value*C(RK == 18)*C((P == 1))+S["10AG-10AD"]*S["10AP-10AD"]*(1.0-Train.LK1.Value)
S["1A-1R"] = (1.0-Train.RV1.Value)*C((P == 1))+C((P == 2))*S["1A-1M"]
S["2A-2G"] = C((P == 2) or (P == 4))*S["2V-2G"]+C((P == 1) or (P == 3))*C((RK >= 1) and (RK <= 17))
S["10"] = 1*Train:ReadTrainWire(10)
S["3A"] = Train.A3.Value*(1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value*Train.A39.Value)*Train:ReadTrainWire(3)
S["4B"] = (1.0-Train.RKR.Value)*Train:ReadTrainWire(4)
S["5B"] = Train.RKR.Value*Train:ReadTrainWire(5)
S["5V"] = Train.RKR.Value*Train:ReadTrainWire(4)+T[37]*(1.0-Train.RKR.Value)
S["5B'"] = S["5V"]*Train.LK3.Value
S["6A"] = Train.A6.Value*Train:ReadTrainWire(6)
S["8A"] = Train.A8.Value*Train:ReadTrainWire(8)
S["8Zh"] = S["8A"]*C((RK >= 17) and (RK <= 18))+T[39]*1
S["12A"] = Train.A12.Value*Train:ReadTrainWire(12)
S["10AN"] = 1*(1.0-Train.RPvozvrat.Value)*Train.A14.Value*1
S["16V"] = Train.A16.Value*(1.0-Train.RD.Value)*Train:ReadTrainWire(16)
S["1A"] = Train.A1.Value*(1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value*Train.A39.Value)*Train:ReadTrainWire(1)
S["17A"] = Train.A17.Value*Train:ReadTrainWire(17)
S["6Yu"] = S["6A"]*C((P == 3) or (P == 4))*C((RK >= 1) and (RK <= 2))
S["24V"] = (1.0-Train.LK4.Value)*Train:ReadTrainWire(24)
S["25A"] = Train.A25.Value*Train:ReadTrainWire(25)
S["27A"] = Train.A50.Value*Train:ReadTrainWire(27)
S["28A"] = Train.A51.Value*Train:ReadTrainWire(28)
S["31A"] = Train.A31.Value*Train:ReadTrainWire(31)+T[32]*1
S["32A"] = Train.A32.Value*Train:ReadTrainWire(32)+T[33]*1
S["18A"] = (1.0-Train.RPvozvrat.Value)*Train.A14.Value*1+(-0.5*(1.0-Train.LK4.Value))
S["B2"] = 1*Train.VB.Value*B
S["8G"] = S["8A"]*(1.0-Train.RT2.Value)*S["8A-8Ye"]
S["22A"] = Train.A23.Value*1*Train:ReadTrainWire(23)+T[35]*Train.A22.Value
S["B12"] = 1*Train.VB.Value*B
S["20B"] = Train.A20.Value*(1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value*Train.A39.Value)*(1.0-Train.RPvozvrat.Value)*Train:ReadTrainWire(20)
S["B8"] = S["B2"]*Train.A53.Value
S["B22"] = S["B8"]*Train.A75.Value
S["B28"] = S["B8"]*Train.KUP.Value
S["36Ya"] = S["B8"]*Train.KVC.Value
S["B13"] = S["B12"]*Train.A24.Value
S["1R"] = S["1A"]*S["1A-1R"]
S["22V"] = S["22A"]*(1.0-Train.TRK.Value)
S["1P"] = S["1A"]*C((P == 1) or (P == 2))*S["1T-1P"]+T[31]*C((P == 3) or (P == 4))
S["11A"] = S["B2"]*(1.0-Train.RD.Value)
S["10/4"] = S["B12"]*Train.VB.Value*Train.A56.Value
S["10AYa"] = S["B2"]*Train.A80.Value
S["10AE"] = S["B2"]*Train.A30.Value
S["10I"] = S["10AE"]*Train.RheostatController.RKM2
S["10AH"] = S["10I"]*(1.0-Train.LK1.Value)
S["10H"] = S["10I"]*Train.LK4.Value
S["10B"] = S["10AE"]*S["10AE-10B"]
S["22K"] = S["10/4"]*Train.A10.Value
S["22E'"] = S["22K"]*Train.VMK.Value*Train.AK.Value
S["1Zh"] = S["1P"]*Train.AVT.Value*(1.0-Train.RPvozvrat.Value)*S["1G-1Zh"]
S["D4/3"] = S["10/4"]*Train.A13.Value*1
S["2Ye10AV"] = S["10AYa"]*(1.0-Train.LK4.Value)*(1.0-Train.LK3.Value)*C((RK >= 2) and (RK <= 18))+0
S["10/4a"] = S["10/4"]*Train.VB.Value
S["D"] = S["10/4"]*Train.A21.Value
S["10AK"] = S["10/4"]*Train.A54.Value
S["1/1p"] = S["10AK"]*Train.PMP["3-4"]
S["20/1p"] = S["10AK"]*Train.PMP["9-10"]
S["10AKl"] = S["10AK"]*Train.KRP.Value
S["4/1p"] = S["10AKl"]*Train.PMP["5-6"]
S["5/1p"] = S["10AKl"]*Train.PMP["7-8"]
S["10N"] = S["10AE"]*1*S["10Zh-10N"]+T["SDRK_ShortCircuit"]
S["ST/1+ST/2"] = S["D4/3"]*Train.BPT.Value
S["16V/1+16V/2"] = S["D4/3"]*(1.0-Train.RD.Value)
S["D6/1"] = S["D4/3"]*Train.BD.Value
S["U0"] = S["10/4"]*Train.A27.Value
S["U0a"] = S["U0"]*1+(-10*S["10AN"])
S["s3"] = S["U0"]*Train.BPSNon.Value*(1-Train:ReadTrainWire(35))
S["1K"] = S["1Zh"]*C((P == 1) or (P == 2))
S["1N"] = S["1Zh"]*C((P == 1) or (P == 3))
S["10AG"] = S["10AYa"]*S["10E-10AG"]*S["10AYa-10E"]
S["1-7R-29"] = S["U0"]*Train.A23.Value*Train.RezMK.Value
S["17/1p"] = S["10AK"]*(1.0-Train.KRP.Value)*Train.VozvratRP.Value
S["2Ye"] = S["2A-2G"]*Train.LK4.Value*Train.A2.Value*(1-2*Train.RRP.Value)*((1-Train.RRP.Value) + Train.RRP.Value*Train.A39.Value)*S["2Zh-2A"]*Train:ReadTrainWire(2)+(S["2Ye10AV"])
-- Call all triggers
Train.RRP:TriggerInput("Set",Train:ReadTrainWire(14))
Train.RZ_2:TriggerInput("Set",S["24V"])
Triggers["ReverserForward"](S["5B"])
Train.Panel["TrainDoors"] = S["16V/1+16V/2"]
Train.PneumaticNo1:TriggerInput("Set",S["8Zh"])
Train:WriteTrainWire(27,S["s3"])
Train:WriteTrainWire(9,S["10/4a"])
Train.RV1:TriggerInput("Set",S["2Ye"])
T[37] = min(1,Train:ReadTrainWire(5))
Train.TR1:TriggerInput("Set",S["6A"])
Train.SR1:TriggerInput("Set",S["2Ye"])
T[34] = min(1,S["22A"])
Train.Panel["EmergencyLight"] = S["B12"]
Triggers["XR3.4"](S["36Ya"])
Train.PneumaticNo2:TriggerInput("Set",S["8G"])
Triggers["SDRK_Coil"](S["10B"])
Triggers["RPvozvrat"](S["17A"])
Triggers["XR3.6"](S["36Ya"])
Train:WriteTrainWire(20,S["20/1p"])
Triggers["XR3.2"](S["27A"])
Train.KSH1:TriggerInput("Set",S["1R"])
Train.Panel["KUP"] = S["B28"]
Train:WriteTrainWire(23,S["1-7R-29"])
Triggers["XR3.7"](S["36Ya"])
Train.Panel["TrainBrakes"] = S["ST/1+ST/2"]
Train.LK5:TriggerInput("Set",S["20B"])
Train.LK1:TriggerInput("Set",S["1K"])
Train:WriteTrainWire(4,S["4/1p"])
Train.VDOL:TriggerInput("Set",S["31A"])
Triggers["SDRK"](S["10N"])
Train.LK4:TriggerInput("Set",S["5B'"])
Train.KVC:TriggerInput("Set",S["B8"])
Train.KSB2:TriggerInput("Set",S["6Yu"])
Train.RPU:TriggerInput("Set",S["27A"])
Train:WriteTrainWire(5,S["5/1p"])
Train.Panel["GreenRP"] = S["U0a"]
Triggers["SDPP"](S["10AG"])
Triggers["XT3.1"](S["B13"])
Train.KSB1:TriggerInput("Set",S["6Yu"])
Triggers["RRTuderzh"](S["25A"])
Train.RR:TriggerInput("Set",S["1N"])
T[39] = min(1,Train:ReadTrainWire(29))
Train:WriteTrainWire(22,S["22E'"])
Train:WriteTrainWire(1,S["1/1p"])
T[38] = min(1,S["8Zh"])
Train.TR2:TriggerInput("Set",S["6A"])
Triggers["KPP"](S["27A"])
Train.RUP:TriggerInput("Set",S["6Yu"])
Train.LK3:TriggerInput("Set",S["1Zh"])
Train.KUP:TriggerInput("Set",S["B22"])
Train.Rper:TriggerInput("Set",S["3A"])
Train:WriteTrainWire(10,S["10/4a"])
Triggers["XR3.3"](S["28A"])
Train.LK2:TriggerInput("Set",S["20B"])
Train:WriteTrainWire(18,S["18A"])
T[35] = min(1,Train:ReadTrainWire(22))
T[33] = min(1,S["12A"])
Train:WriteTrainWire(17,S["17/1p"])
T[32] = min(1,S["12A"])
T[31] = min(1,S["6A"])
Triggers["RUTpod"](S["10H"])
Triggers["ReverserBackward"](S["4B"])
Train.KK:TriggerInput("Set",S["22V"])
Triggers["RRTpod"](S["10AH"])
Train:WriteTrainWire(11,S["11A"])
T[36] = min(1,S["5V"])
Train.KSH2:TriggerInput("Set",S["1R"])
Train.VDOP:TriggerInput("Set",S["32A"])
Train.RD:TriggerInput("Set",S["D6/1"])
Train.VDZ:TriggerInput("Set",S["16V"])
return S
end