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/sys_bpsn.lua

91 lines
3.7 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
--------------------------------------------------------------------------------
-- "BPSN" Power supply
--------------------------------------------------------------------------------
-- Copyright (C) 2013-2018 Metrostroi Team & FoxWorks Aerospace s.r.o.
-- Contains proprietary code. See license.txt for additional information.
--------------------------------------------------------------------------------
Metrostroi.DefineSystem("BPSN")
TRAIN_SYSTEM.DontAccelerateSimulation = true
function TRAIN_SYSTEM:Initialize()
self.X2 = {
[2] = 0,
[3] = 0,
[4] = 0,
[5] = 0, -- Out only
[6] = 0,
[7] = 0,
}
self.X2_2 = 0
self.X6_2 = 0
self.X2_1 = 0
self.OutputVoltage = 76 -- volts
self.IResistance = 0.01 -- Ohm (сам выдумал, примерно на полтора порядка ниже, чем у АКБ)
--self.car_control_load = 0 -- Amp
--self.car_control_sigma = 0 -- Amp
self.Icosume = 0 -- 3rd rail current consumption, amp
self.Iout = 0 -- output current, amp
self.VoltageOut = 0
self.ISumpSetpoint = math.random(25,30) -- overload consumption current protection setpoint
self.Active = 0
self.Train:LoadSystem("ConverterProtection","Relay","Switch", {bass = true})
end
function TRAIN_SYSTEM:Inputs()
return { "5x2", "6x2", "7x2", "2x2" }
end
function TRAIN_SYSTEM:Outputs()
return { "X2_2", "X6_2", "VoltageOut", "OutputVoltage", "Icosume", "Iout" }
end
function TRAIN_SYSTEM:TriggerInput(name,value)
local idx = tonumber(name:sub(1,1)) or 0
if self.X2[idx] then
self.X2[idx] = value > 0.5 and 1.0 or 0
end
end
function TRAIN_SYSTEM:Think()
local Train = self.Train
-- Get high-voltage input
-- X2_1 now indicates that primary converter is operating
self.X2_1 = (Train.Electric.Aux750V > 300 and 1 or 0) * Train.KPP.Value * (1-Train.RZP.Value)
if Train.Electric.Aux750V >= 550 then
self.VoltageOut = self.X2_1*(self.OutputVoltage + (Train.Electric.Aux750V - 550)*8/425)
else
self.VoltageOut = math.max(0,self.X2_1*(Train.Electric.Aux750V - 300)*76/300)
end
--[[if self.car_control_sigma > 0 then
self.Iout = self.car_control_sigma
for k,v in ipairs(Train.WagonList) do
if v ~= Train then
self.Iout = math.max(0,self.Iout - v.A24.Value*v.PowerSupply.X2_1*(v.PowerSupply.car_control_load + v.A56.Value*v.Battery.Ibatt))
end
end
self.car_control_sigma = 0
end]]
--self.Iout = self.car_control_load
self.Icosume = --[[Train.NR.Value*]]self.VoltageOut*self.Iout/(Train.Electric.Aux750V > 0 and Train.Electric.Aux750V or 1)
-- Get battery input
local XT3_1 = self.X2[5]*self.X2_1
if Train.Electric.Aux750V*self.X2_1 > 975 or self.Icosume > self.ISumpSetpoint then
Train.RZP:TriggerInput("Close",1)
print "-------------------------------------------------------------------------------------------\n"
print(Format("Сработала защита БПСН вагона %s:",Train.WagonNumber))
print(Format("I потр = %.2f A\tI вых = %.2f A\tI уст = %.2f A\tU кс = %.1f B", self.Icosume, self.Iout, self.ISumpSetpoint, Train.Electric.Aux750V))
--print("Train.Battery.eds_eq = "..Train.Battery.eds_eq, "self.VoltageOut = "..self.VoltageOut)
self.X2_1 = 0
XT3_1 = 0
end
-- Check if enable signal is present
self.Active = XT3_1>0 and 1 or 0
self.X2_2 = Train.Electric.Aux750V*self.Active -- radio, asnp etc.
self.X6_2 = Train.KVP.Value--self.Active -- mainlights
end