#290 pocket page management and alarm test tool, supervisor pocket diagnostics system
This commit is contained in:
106
pocket/iocontrol.lua
Normal file
106
pocket/iocontrol.lua
Normal file
@@ -0,0 +1,106 @@
|
||||
--
|
||||
-- I/O Control for Pocket Integration with Supervisor & Coordinator
|
||||
--
|
||||
|
||||
local psil = require("scada-common.psil")
|
||||
|
||||
local types = require("scada-common.types")
|
||||
|
||||
local ALARM = types.ALARM
|
||||
|
||||
local iocontrol = {}
|
||||
|
||||
---@class pocket_ioctl
|
||||
local io = {
|
||||
ps = psil.create()
|
||||
}
|
||||
|
||||
---@enum POCKET_LINK_STATE
|
||||
local LINK_STATE = {
|
||||
UNLINKED = 0,
|
||||
SV_LINK_ONLY = 1,
|
||||
API_LINK_ONLY = 2,
|
||||
LINKED = 3
|
||||
}
|
||||
|
||||
---@enum NAV_PAGE
|
||||
local NAV_PAGE = {
|
||||
HOME = 1,
|
||||
UNITS = 2,
|
||||
REACTORS = 3,
|
||||
BOILERS = 4,
|
||||
TURBINES = 5,
|
||||
DIAG = 6,
|
||||
D_ALARMS = 7
|
||||
}
|
||||
|
||||
iocontrol.LINK_STATE = LINK_STATE
|
||||
iocontrol.NAV_PAGE = NAV_PAGE
|
||||
|
||||
-- initialize facility-independent components of pocket iocontrol
|
||||
---@param comms pocket_comms
|
||||
function iocontrol.init_core(comms)
|
||||
---@class pocket_ioctl_diag
|
||||
io.diag = {}
|
||||
|
||||
-- alarm testing
|
||||
io.diag.tone_test = {
|
||||
test_1 = function (state) comms.diag__set_alarm_tone(1, state) end,
|
||||
test_2 = function (state) comms.diag__set_alarm_tone(2, state) end,
|
||||
test_3 = function (state) comms.diag__set_alarm_tone(3, state) end,
|
||||
test_4 = function (state) comms.diag__set_alarm_tone(4, state) end,
|
||||
test_5 = function (state) comms.diag__set_alarm_tone(5, state) end,
|
||||
test_6 = function (state) comms.diag__set_alarm_tone(6, state) end,
|
||||
test_7 = function (state) comms.diag__set_alarm_tone(7, state) end,
|
||||
test_8 = function (state) comms.diag__set_alarm_tone(8, state) end,
|
||||
stop_tones = function () comms.diag__set_alarm_tone(0, false) end,
|
||||
|
||||
test_breach = function (state) comms.diag__set_alarm(ALARM.ContainmentBreach, state) end,
|
||||
test_rad = function (state) comms.diag__set_alarm(ALARM.ContainmentRadiation, state) end,
|
||||
test_lost = function (state) comms.diag__set_alarm(ALARM.ReactorLost, state) end,
|
||||
test_crit = function (state) comms.diag__set_alarm(ALARM.CriticalDamage, state) end,
|
||||
test_dmg = function (state) comms.diag__set_alarm(ALARM.ReactorDamage, state) end,
|
||||
test_overtemp = function (state) comms.diag__set_alarm(ALARM.ReactorOverTemp, state) end,
|
||||
test_hightemp = function (state) comms.diag__set_alarm(ALARM.ReactorHighTemp, state) end,
|
||||
test_wasteleak = function (state) comms.diag__set_alarm(ALARM.ReactorWasteLeak, state) end,
|
||||
test_highwaste = function (state) comms.diag__set_alarm(ALARM.ReactorHighWaste, state) end,
|
||||
test_rps = function (state) comms.diag__set_alarm(ALARM.RPSTransient, state) end,
|
||||
test_rcs = function (state) comms.diag__set_alarm(ALARM.RCSTransient, state) end,
|
||||
test_turbinet = function (state) comms.diag__set_alarm(ALARM.TurbineTrip, state) end,
|
||||
stop_alarms = function () comms.diag__set_alarm(0, false) end,
|
||||
|
||||
get_tone_states = function () comms.diag__get_alarm_tones() end,
|
||||
|
||||
ready_warn = nil, ---@type graphics_element
|
||||
tone_buttons = {},
|
||||
alarm_buttons = {},
|
||||
tone_indicators = {} -- indicators to update from supervisor tone states
|
||||
}
|
||||
|
||||
---@class pocket_nav
|
||||
io.nav = {
|
||||
page = NAV_PAGE.HOME, ---@type NAV_PAGE
|
||||
sub_pages = { NAV_PAGE.HOME, NAV_PAGE.UNITS, NAV_PAGE.REACTORS, NAV_PAGE.BOILERS, NAV_PAGE.TURBINES, NAV_PAGE.DIAG },
|
||||
tasks = {}
|
||||
}
|
||||
|
||||
-- add a task to be performed periodically while on a given page
|
||||
---@param page NAV_PAGE page to add task to
|
||||
---@param task function function to execute
|
||||
function io.nav.register_task(page, task)
|
||||
if io.nav.tasks[page] == nil then io.nav.tasks[page] = {} end
|
||||
table.insert(io.nav.tasks[page], task)
|
||||
end
|
||||
end
|
||||
|
||||
-- initialize facility-dependent components of pocket iocontrol
|
||||
function iocontrol.init_fac() end
|
||||
|
||||
-- set network link state
|
||||
---@param state POCKET_LINK_STATE
|
||||
function iocontrol.report_link_state(state) io.ps.publish("link_state", state) end
|
||||
|
||||
-- get the IO controller database
|
||||
function iocontrol.get_db() return io end
|
||||
|
||||
return iocontrol
|
||||
Reference in New Issue
Block a user