mirror of
https://github.com/metrostroi-repo/MetrostroiAddon.git
synced 2026-05-02 00:42:29 +00:00
74 lines
2.1 KiB
Lua
74 lines
2.1 KiB
Lua
--------------------------------------------------------------------------------
|
|
-- SPB Anti rolling unit
|
|
--------------------------------------------------------------------------------
|
|
-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o.
|
|
-- Contains proprietary code. See license.txt for additional information.
|
|
--------------------------------------------------------------------------------
|
|
Metrostroi.DefineSystem("81_502_BPS")
|
|
|
|
function TRAIN_SYSTEM:Initialize()
|
|
self.Power = 0
|
|
|
|
self.KRR = 0
|
|
self.KRH = 0
|
|
|
|
self[8] = 0
|
|
self[39] = 0
|
|
|
|
self.PowerLamp = 0
|
|
self.ErrorLamp = 0
|
|
self.FailLamp = 0
|
|
self.Rolling = false
|
|
self.Rolled = false
|
|
end
|
|
|
|
function TRAIN_SYSTEM:Inputs()
|
|
return {}
|
|
end
|
|
function TRAIN_SYSTEM:Outputs()
|
|
return { "PowerLamp","ErrorLamp","FailLamp" }
|
|
end
|
|
|
|
function TRAIN_SYSTEM:Think(dT)
|
|
local Train = self.Train
|
|
if Train.Electric.Type ~= 1 then return end
|
|
local ALS = Train.ALSCoil
|
|
local speed = ALS.Speed*ALS.SpeedSign
|
|
|
|
|
|
local Work = self.Power*(1-self.KRR)
|
|
self.FailLamp = 0
|
|
|
|
if Work > 0 then
|
|
if speed < -0.05 and not self.Rolling then self.Rolling = 0 end
|
|
if self.Rolling and self.Rolling < 0 then self.Rolling = false end
|
|
if self.Rolling then
|
|
local rolled = -speed/3600*1000*dT
|
|
if math.abs(rolled) >0.001 then
|
|
self.Rolling = self.Rolling + rolled
|
|
end
|
|
end
|
|
|
|
if not self.Rolled and self.Rolling and self.Rolling > 0.5+self.KRH*2.5 then
|
|
self.Rolled = self.KRH
|
|
end
|
|
if self.Rolled then
|
|
if self.Rolled == 0 and self.KRH > 0 then
|
|
self.Rolled = false
|
|
self.Rolling = false
|
|
end
|
|
if self.KRH == 0 then self.Rolled = 0 end
|
|
end
|
|
self.ErrorLamp = (self.Rolling and self.Rolling > 0.1 or self.KRH > 0 and speed <= 0.05) and 1 or 0
|
|
self.PowerLamp = 1-self.ErrorLamp
|
|
else
|
|
self.PowerLamp = 0
|
|
self.ErrorLamp = 0
|
|
self.Rolling = false
|
|
self.Rolled = false
|
|
end
|
|
|
|
self[8] = self.Rolled and 1 or 0
|
|
self[39] = self.Rolled and 1 or 0
|
|
end
|