diff --git a/coordinator/process.lua b/coordinator/process.lua index 78be172..1f2b914 100644 --- a/coordinator/process.lua +++ b/coordinator/process.lua @@ -445,36 +445,21 @@ end ---@param product WASTE_PRODUCT waste product for auto control function process.set_process_waste(product) pctl.comms.send_fac_command(F_CMD.SET_WASTE_MODE, product) - log.debug(util.c("PROCESS: SET WASTE ", product)) - - -- update config table and save - pctl.control_states.process.waste_product = product - _write_auto_config() end -- set automatic process control plutonium fallback ---@param enabled boolean whether to enable plutonium fallback function process.set_pu_fallback(enabled) pctl.comms.send_fac_command(F_CMD.SET_PU_FB, enabled) - log.debug(util.c("PROCESS: SET PU FALLBACK ", enabled)) - - -- update config table and save - pctl.control_states.process.pu_fallback = enabled - _write_auto_config() end -- set automatic process control SPS usage at low power ---@param enabled boolean whether to enable SPS usage at low power function process.set_sps_low_power(enabled) pctl.comms.send_fac_command(F_CMD.SET_SPS_LP, enabled) - log.debug(util.c("PROCESS: SET SPS LOW POWER ", enabled)) - - -- update config table and save - pctl.control_states.process.sps_low_power = enabled - _write_auto_config() end -- save process control settings @@ -527,21 +512,30 @@ end -- record waste product settting after attempting to change it ---@param response WASTE_PRODUCT supervisor waste product settting function process.waste_ack_handle(response) + -- update config table and save pctl.control_states.process.waste_product = response + _write_auto_config() + pctl.io.facility.ps.publish("process_waste_product", response) end -- record plutonium fallback settting after attempting to change it ---@param response boolean supervisor plutonium fallback settting function process.pu_fb_ack_handle(response) + -- update config table and save pctl.control_states.process.pu_fallback = response + _write_auto_config() + pctl.io.facility.ps.publish("process_pu_fallback", response) end -- record SPS low power settting after attempting to change it ---@param response boolean supervisor SPS low power settting function process.sps_lp_ack_handle(response) + -- update config table and save pctl.control_states.process.sps_low_power = response + _write_auto_config() + pctl.io.facility.ps.publish("process_sps_low_power", response) end diff --git a/coordinator/session/pocket.lua b/coordinator/session/pocket.lua index cb38a61..f4f1942 100644 --- a/coordinator/session/pocket.lua +++ b/coordinator/session/pocket.lua @@ -1,6 +1,7 @@ local comms = require("scada-common.comms") local log = require("scada-common.log") local mqueue = require("scada-common.mqueue") +local types = require("scada-common.types") local util = require("scada-common.util") local iocontrol = require("coordinator.iocontrol") @@ -14,6 +15,9 @@ local MGMT_TYPE = comms.MGMT_TYPE local FAC_COMMAND = comms.FAC_COMMAND local UNIT_COMMAND = comms.UNIT_COMMAND +local AUTO_GROUP = types.AUTO_GROUP +local WASTE_MODE = types.WASTE_MODE + -- retry time constants in ms -- local INITIAL_WAIT = 1500 -- local RETRY_PERIOD = 1000 @@ -166,8 +170,26 @@ function pocket.new_session(id, s_addr, i_seq_num, in_queue, out_queue, timeout) log.info(log_tag .. "FAC ACK ALL ALARMS") self.proc_handle.fac_ack_alarms() elseif cmd == FAC_COMMAND.SET_WASTE_MODE then + if pkt.length == 2 then + log.info(util.c(log_tag, " SET WASTE ", pkt.data[2])) + process.set_process_waste(pkt.data[2]) + else + log.debug(log_tag .. "CRDN set waste mode packet length mismatch") + end elseif cmd == FAC_COMMAND.SET_PU_FB then + if pkt.length == 2 then + log.info(util.c(log_tag, " SET PU FALLBACK ", pkt.data[2])) + process.set_pu_fallback(pkt.data[2] == true) + else + log.debug(log_tag .. "CRDN set pu fallback packet length mismatch") + end elseif cmd == FAC_COMMAND.SET_SPS_LP then + if pkt.length == 2 then + log.info(util.c(log_tag, " SET SPS LOW POWER ", pkt.data[2])) + process.set_sps_low_power(pkt.data[2] == true) + else + log.debug(log_tag .. "CRDN set sps low power packet length mismatch") + end else log.debug(log_tag .. "CRDN facility command unknown") end @@ -192,20 +214,28 @@ function pocket.new_session(id, s_addr, i_seq_num, in_queue, out_queue, timeout) log.info(util.c(log_tag, "UNIT[", uid, "] RESET RPS")) self.proc_handle.reset_rps(uid) elseif cmd == UNIT_COMMAND.SET_BURN then - if pkt.length == 3 then + if (pkt.length == 3) and (type(pkt.data[3]) == "number") then log.info(util.c(log_tag, "UNIT[", uid, "] SET BURN ", pkt.data[3])) process.set_rate(uid, pkt.data[3]) else log.debug(log_tag .. "CRDN unit command burn rate missing option") end elseif cmd == UNIT_COMMAND.SET_WASTE then + if (pkt.length == 3) and (type(pkt.data[3]) == "number") and + (pkt.data[3] >= WASTE_MODE.AUTO) and (pkt.data[3] <= WASTE_MODE.MANUAL_ANTI_MATTER) then + log.info(util.c(log_tag, "UNIT[", id, "] SET WASTE ", pkt.data[3])) + process.set_unit_waste(uid, pkt.data[3]) + else + log.debug(log_tag .. "CRDN unit command set waste missing/invalid option") + end elseif cmd == UNIT_COMMAND.ACK_ALL_ALARMS then log.info(util.c(log_tag, "UNIT[", uid, "] ACK ALL ALARMS")) self.proc_handle.ack_all_alarms(uid) elseif cmd == UNIT_COMMAND.ACK_ALARM then elseif cmd == UNIT_COMMAND.RESET_ALARM then elseif cmd == UNIT_COMMAND.SET_GROUP then - if pkt.length == 3 then + if (pkt.length == 3) and (type(pkt.data[3]) == "number") and + (pkt.data[3] >= AUTO_GROUP.MANUAL) and (pkt.data[3] <= AUTO_GROUP.BACKUP) then log.info(util.c(log_tag, "UNIT[", uid, "] SET GROUP ", pkt.data[3])) process.set_group(uid, pkt.data[3]) else diff --git a/coordinator/startup.lua b/coordinator/startup.lua index 9cd8e61..772b8b6 100644 --- a/coordinator/startup.lua +++ b/coordinator/startup.lua @@ -19,7 +19,7 @@ local renderer = require("coordinator.renderer") local sounder = require("coordinator.sounder") local threads = require("coordinator.threads") -local COORDINATOR_VERSION = "v1.5.12" +local COORDINATOR_VERSION = "v1.5.13" local CHUNK_LOAD_DELAY_S = 30.0 diff --git a/pocket/startup.lua b/pocket/startup.lua index 0f6fe40..36330e3 100644 --- a/pocket/startup.lua +++ b/pocket/startup.lua @@ -20,7 +20,7 @@ local pocket = require("pocket.pocket") local renderer = require("pocket.renderer") local threads = require("pocket.threads") -local POCKET_VERSION = "v0.12.7-alpha" +local POCKET_VERSION = "v0.12.8-alpha" local println = util.println local println_ts = util.println_ts diff --git a/supervisor/session/coordinator.lua b/supervisor/session/coordinator.lua index 771e210..e9c585d 100644 --- a/supervisor/session/coordinator.lua +++ b/supervisor/session/coordinator.lua @@ -278,13 +278,13 @@ function coordinator.new_session(id, s_addr, i_seq_num, in_queue, out_queue, tim end elseif cmd == FAC_COMMAND.SET_PU_FB then if pkt.length == 2 then - _send(CRDN_TYPE.FAC_CMD, { cmd, facility.set_pu_fallback(pkt.data[2]) }) + _send(CRDN_TYPE.FAC_CMD, { cmd, facility.set_pu_fallback(pkt.data[2] == true) }) else log.debug(log_tag .. "CRDN set pu fallback packet length mismatch") end elseif cmd == FAC_COMMAND.SET_SPS_LP then if pkt.length == 2 then - _send(CRDN_TYPE.FAC_CMD, { cmd, facility.set_sps_low_power(pkt.data[2]) }) + _send(CRDN_TYPE.FAC_CMD, { cmd, facility.set_sps_low_power(pkt.data[2] == true) }) else log.debug(log_tag .. "CRDN set sps low power packet length mismatch") end