From 8fad94c4c66b6ecca52c26194a9870122b4f49d3 Mon Sep 17 00:00:00 2001 From: Mikayla Fischler Date: Sun, 17 Nov 2024 18:22:40 -0500 Subject: [PATCH] #399 unit waste data updating --- coordinator/iocontrol.lua | 5 +++++ coordinator/session/pocket.lua | 25 ++++++++++++++++++++++++ coordinator/startup.lua | 2 +- pocket/iocontrol.lua | 35 +++++++++++++++++++++++++++++++++- pocket/pocket.lua | 9 +++++++++ pocket/ui/apps/waste.lua | 22 ++++++++++++++++----- scada-common/comms.lua | 9 +++++---- supervisor/startup.lua | 2 +- 8 files changed, 97 insertions(+), 12 deletions(-) diff --git a/coordinator/iocontrol.lua b/coordinator/iocontrol.lua index be76052..9513982 100644 --- a/coordinator/iocontrol.lua +++ b/coordinator/iocontrol.lua @@ -174,6 +174,7 @@ function iocontrol.init(conf, comms, temp_scale, energy_scale) waste_mode = types.WASTE_MODE.MANUAL_PLUTONIUM, waste_product = types.WASTE_PRODUCT.PLUTONIUM, + waste_stats = { 0, 0, 0 }, -- plutonium, polonium, po pellets last_rate_change_ms = 0, turbine_flow_stable = false, @@ -1192,6 +1193,7 @@ function iocontrol.update_unit_statuses(statuses) local u_spent_rate = waste_rate local u_pu_rate = util.trinary(is_pu, waste_rate, 0.0) local u_po_rate = unit.sna_out_rate + local u_po_pl_rate = 0 unit.unit_ps.publish("pu_rate", u_pu_rate) unit.unit_ps.publish("po_rate", u_po_rate) @@ -1202,6 +1204,7 @@ function iocontrol.update_unit_statuses(statuses) u_spent_rate = u_po_rate unit.unit_ps.publish("po_pl_rate", u_po_rate) unit.unit_ps.publish("po_am_rate", 0) + u_po_pl_rate = u_po_rate po_pl_rate = po_pl_rate + u_po_rate elseif unit.waste_product == types.WASTE_PRODUCT.ANTI_MATTER then u_spent_rate = 0 @@ -1213,6 +1216,8 @@ function iocontrol.update_unit_statuses(statuses) unit.unit_ps.publish("po_am_rate", 0) end + unit.waste_stats = { u_pu_rate, u_po_rate, u_po_pl_rate } + unit.unit_ps.publish("ws_rate", u_spent_rate) pu_rate = pu_rate + u_pu_rate diff --git a/coordinator/session/pocket.lua b/coordinator/session/pocket.lua index f4f1942..f471f0b 100644 --- a/coordinator/session/pocket.lua +++ b/coordinator/session/pocket.lua @@ -339,6 +339,31 @@ function pocket.new_session(id, s_addr, i_seq_num, in_queue, out_queue, timeout) { proc.mode, proc.burn_target, proc.charge_target, proc.gen_target } } + _send(CRDN_TYPE.API_GET_PROC, data) + elseif pkt.type == CRDN_TYPE.API_GET_WASTE then + local data = {} + + -- local fac = db.facility + -- local proc = process.get_control_states().process + + -- unit data + for i = 1, #db.units do + local u = db.units[i] + + data[i] = { + u.waste_mode, + u.waste_product, + u.num_snas, + u.sna_peak_rate, + u.sna_max_rate, + u.sna_out_rate, + u.waste_stats + } + end + + -- facility data + data[#db.units + 1] = {} + _send(CRDN_TYPE.API_GET_PROC, data) else log.debug(log_tag .. "handler received unsupported CRDN packet type " .. pkt.type) diff --git a/coordinator/startup.lua b/coordinator/startup.lua index b6ee0ed..52ce676 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.15" +local COORDINATOR_VERSION = "v1.5.16" local CHUNK_LOAD_DELAY_S = 30.0 diff --git a/pocket/iocontrol.lua b/pocket/iocontrol.lua index 41f6aef..a9d45a1 100644 --- a/pocket/iocontrol.lua +++ b/pocket/iocontrol.lua @@ -94,7 +94,8 @@ function iocontrol.init_core(pkt_comms, nav, cfg) io.api = { get_unit = function (unit) comms.api__get_unit(unit) end, get_ctrl = function () comms.api__get_control() end, - get_proc = function () comms.api__get_process() end + get_proc = function () comms.api__get_process() end, + get_waste = function () comms.api__get_waste() end } end @@ -217,6 +218,7 @@ function iocontrol.init_fac(conf) last_rate_change_ms = 0, turbine_flow_stable = false, + waste_stats = { 0, 0, 0 }, -- plutonium, polonium, po pellets -- auto control group a_group = types.AUTO_GROUP.MANUAL, @@ -920,6 +922,37 @@ function iocontrol.record_process_data(data) fac.ps.publish("process_gen_target", f_data[5][4]) end +-- update waste app with unit data from API_GET_WASTE +---@param data table +function iocontrol.record_waste_data(data) + -- get unit data + for u_id = 1, #io.units do + local unit = io.units[u_id] + local u_data = data[u_id] + + unit.waste_mode = u_data[1] + unit.waste_product = u_data[2] + unit.num_snas = u_data[3] + unit.sna_peak_rate = u_data[4] + unit.sna_max_rate = u_data[5] + unit.sna_out_rate = u_data[6] + unit.waste_stats = u_data[7] + + unit.unit_ps.publish("U_AutoWaste", unit.waste_mode == types.WASTE_MODE.AUTO) + unit.unit_ps.publish("U_WasteMode", unit.waste_mode) + unit.unit_ps.publish("U_WasteProduct", unit.waste_product) + + unit.unit_ps.publish("sna_count", unit.num_snas) + unit.unit_ps.publish("sna_peak_rate", unit.sna_peak_rate) + unit.unit_ps.publish("sna_max_rate", unit.sna_max_rate) + unit.unit_ps.publish("sna_out_rate", unit.sna_out_rate) + + unit.unit_ps.publish("pu_rate", unit.waste_stats[1]) + unit.unit_ps.publish("po_rate", unit.waste_stats[2]) + unit.unit_ps.publish("po_pl_rate", unit.waste_stats[3]) + end +end + -- get the IO controller database function iocontrol.get_db() return io end diff --git a/pocket/pocket.lua b/pocket/pocket.lua index c69b04d..461f57a 100644 --- a/pocket/pocket.lua +++ b/pocket/pocket.lua @@ -567,6 +567,11 @@ function pocket.comms(version, nic, sv_watchdog, api_watchdog, nav) if self.api.linked then _send_api(CRDN_TYPE.API_GET_PROC, {}) end end + -- coordinator get waste app data + function public.api__get_waste() + if self.api.linked then _send_api(CRDN_TYPE.API_GET_WASTE, {}) end + end + -- send a facility command ---@param cmd FAC_COMMAND command ---@param option any? optional option options for the optional options (like waste mode) @@ -735,6 +740,10 @@ function pocket.comms(version, nic, sv_watchdog, api_watchdog, nav) if _check_length(packet, #iocontrol.get_db().units + 1) then iocontrol.record_process_data(packet.data) end + elseif packet.type == CRDN_TYPE.API_GET_WASTE then + if _check_length(packet, #iocontrol.get_db().units + 1) then + iocontrol.record_waste_data(packet.data) + end else _fail_type(packet) end else log.debug("discarding coordinator SCADA_CRDN packet before linked") diff --git a/pocket/ui/apps/waste.lua b/pocket/ui/apps/waste.lua index 9260325..20196c0 100644 --- a/pocket/ui/apps/waste.lua +++ b/pocket/ui/apps/waste.lua @@ -87,7 +87,7 @@ local function new_view(root) -- refresh data callback, every 500ms it will re-send the query local function update() if util.time_ms() - last_update >= 500 then - -- db.api.get_waste() + db.api.get_waste() last_update = util.time_ms() end end @@ -109,11 +109,11 @@ local function new_view(root) TextBox{parent=u_div,y=1,text="Reactor Unit #"..i,alignment=ALIGN.CENTER} - local u_status = StateIndicator{parent=u_div,x=16,y=3,states=style.waste.states_abbrv,value=1,min_width=6} + local waste_prod = StateIndicator{parent=u_div,x=16,y=3,states=style.waste.states_abbrv,value=1,min_width=6} + local waste_mode = RadioButton{parent=u_div,y=3,options=style.waste.unit_opts,callback=function()end,radio_colors=cpair(colors.lightGray,colors.gray),select_color=colors.white} - -- u_status.register(f_ps, "current_waste_product", u_status.update) - - local waste_prod = RadioButton{parent=u_div,y=3,options=style.waste.unit_opts,callback=function()end,radio_colors=cpair(colors.lightGray,colors.gray),select_color=colors.white} + waste_prod.register(u_ps, "U_WasteProduct", waste_prod.update) + waste_mode.register(u_ps, "U_WasteMode", waste_mode.update) TextBox{parent=u_div,y=8,text="Plutonium (Pellets)",fg_bg=style.label} local pu = DataIndicator{parent=u_div,label="",format="%16.3f",value=0,unit="mB/t",lu_colors=lu_col,width=21,fg_bg=text_fg} @@ -122,6 +122,10 @@ local function new_view(root) TextBox{parent=u_div,y=14,text="Polonium (Pellets)",fg_bg=style.label} local popl = DataIndicator{parent=u_div,label="",format="%16.3f",value=0,unit="mB/t",lu_colors=lu_col,width=21,fg_bg=text_fg} + pu.register(u_ps, "pu_rate", pu.update) + po.register(u_ps, "po_rate", po.update) + popl.register(u_ps, "po_pl_rate", popl.update) + local sna_div = Div{parent=u_pane,x=2,width=page_div.get_width()-2} table.insert(panes, sna_div) @@ -146,6 +150,14 @@ local function new_view(root) TextBox{parent=sna_div,y=13,text="Current Rate\n In\n Out",fg_bg=style.label} local cur_i = DataIndicator{parent=sna_div,x=6,y=14,label="",format="%11.2f",value=0,unit="mB/t",lu_colors=lu_col,width=17,fg_bg=text_fg} local cur_o = DataIndicator{parent=sna_div,x=6,label="",format="%11.2f",value=0,unit="mB/t",lu_colors=lu_col,width=17,fg_bg=text_fg} + + count.register(u_ps, "sna_count", count.update) + peak_i.register(u_ps, "sna_peak_rate", function (x) peak_i.update(x * 10) end) + peak_o.register(u_ps, "sna_peak_rate", peak_o.update) + max_i.register(u_ps, "sna_max_rate", function (x) max_i.update(x * 10) end) + max_o.register(u_ps, "sna_max_rate", max_o.update) + cur_i.register(u_ps, "sna_out_rate", function (x) cur_i.update(x * 10) end) + cur_o.register(u_ps, "sna_out_rate", cur_o.update) end --#endregion diff --git a/scada-common/comms.lua b/scada-common/comms.lua index 1775248..e31aa42 100644 --- a/scada-common/comms.lua +++ b/scada-common/comms.lua @@ -17,8 +17,8 @@ local max_distance = nil local comms = {} -- protocol/data versions (protocol/data independent changes tracked by util.lua version) -comms.version = "3.0.1" -comms.api_version = "0.0.6" +comms.version = "3.0.2" +comms.api_version = "0.0.7" ---@enum PROTOCOL local PROTOCOL = { @@ -68,8 +68,9 @@ local CRDN_TYPE = { UNIT_CMD = 6, -- command a reactor unit API_GET_FAC = 7, -- API: get all the facility data API_GET_UNIT = 8, -- API: get reactor unit data - API_GET_CTRL = 9, -- API: get data used for the control app - API_GET_PROC = 10 -- API: get data used for the process app + API_GET_CTRL = 9, -- API: get data for the control app + API_GET_PROC = 10, -- API: get data for the process app + API_GET_WASTE = 11 -- API: get data for the waste app } ---@enum ESTABLISH_ACK diff --git a/supervisor/startup.lua b/supervisor/startup.lua index 4d31d6a..99ac055 100644 --- a/supervisor/startup.lua +++ b/supervisor/startup.lua @@ -22,7 +22,7 @@ local supervisor = require("supervisor.supervisor") local svsessions = require("supervisor.session.svsessions") -local SUPERVISOR_VERSION = "v1.5.15" +local SUPERVISOR_VERSION = "v1.5.16" local println = util.println local println_ts = util.println_ts