2023-07-29 22:16:59 +00:00
|
|
|
--
|
2023-07-30 04:13:26 +00:00
|
|
|
-- I/O Control for Pocket Integration with Supervisor & Coordinator
|
2023-07-29 22:16:59 +00:00
|
|
|
--
|
|
|
|
|
|
|
|
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
|