#589 moved boot recovery to facility update file
This commit is contained in:
@@ -1,17 +1,21 @@
|
||||
local audio = require("scada-common.audio")
|
||||
local const = require("scada-common.constants")
|
||||
local log = require("scada-common.log")
|
||||
local rsio = require("scada-common.rsio")
|
||||
local types = require("scada-common.types")
|
||||
local util = require("scada-common.util")
|
||||
local audio = require("scada-common.audio")
|
||||
local const = require("scada-common.constants")
|
||||
local log = require("scada-common.log")
|
||||
local rsio = require("scada-common.rsio")
|
||||
local types = require("scada-common.types")
|
||||
local util = require("scada-common.util")
|
||||
|
||||
local qtypes = require("supervisor.session.rtu.qtypes")
|
||||
local plc = require("supervisor.session.plc")
|
||||
local svsessions = require("supervisor.session.svsessions")
|
||||
|
||||
local qtypes = require("supervisor.session.rtu.qtypes")
|
||||
|
||||
local TONE = audio.TONE
|
||||
|
||||
local ALARM = types.ALARM
|
||||
local PRIO = types.ALARM_PRIORITY
|
||||
local ALARM_STATE = types.ALARM_STATE
|
||||
local AUTO_GROUP = types.AUTO_GROUP
|
||||
local CONTAINER_MODE = types.CONTAINER_MODE
|
||||
local PROCESS = types.PROCESS
|
||||
local PROCESS_NAMES = types.PROCESS_NAMES
|
||||
@@ -131,6 +135,54 @@ end
|
||||
|
||||
--#region PUBLIC FUNCTIONS
|
||||
|
||||
-- run reboot recovery routine if needed
|
||||
function update.boot_recovery()
|
||||
local RCV_STATE = self.types.RCV_STATE
|
||||
|
||||
-- attempt reboot recovery if in progress
|
||||
if self.recovery == RCV_STATE.RUNNING then
|
||||
local was_inactive = self.recovery_boot_state.mode == PROCESS.INACTIVE or self.recovery_boot_state.mode == PROCESS.SYSTEM_ALARM_IDLE
|
||||
|
||||
-- try to start auto control
|
||||
if self.recovery_boot_state.mode ~= nil and self.units_ready then
|
||||
if was_inactive then
|
||||
self.mode = self.mode_set
|
||||
log.info("FAC: process startup resume initiated")
|
||||
end
|
||||
|
||||
self.recovery_boot_state.mode = nil
|
||||
end
|
||||
|
||||
local recovered = self.recovery_boot_state.mode == nil or was_inactive
|
||||
|
||||
-- restore manual control reactors
|
||||
for i = 1, #self.units do
|
||||
local u = self.units[i]
|
||||
|
||||
if self.recovery_boot_state.unit_states[i] and self.group_map[i] == AUTO_GROUP.MANUAL then
|
||||
recovered = false
|
||||
|
||||
if u.get_control_inf().ready then
|
||||
local plc_s = svsessions.get_reactor_session(i)
|
||||
if plc_s ~= nil then
|
||||
plc_s.in_queue.push_command(plc.PLC_S_CMDS.ENABLE)
|
||||
log.info("FAC: startup resume enabling manually controlled reactor unit #" .. i)
|
||||
|
||||
-- only execute once
|
||||
self.recovery_boot_state.unit_states[i] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if recovered then
|
||||
self.recovery = RCV_STATE.STOPPED
|
||||
self.recovery_boot_state = nil
|
||||
log.info("FAC: startup resume sequence completed")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- automatic control pre-update logic
|
||||
function update.pre_auto()
|
||||
-- unlink RTU sessions if they are closed
|
||||
|
||||
Reference in New Issue
Block a user