diff --git a/coordinator/iocontrol.lua b/coordinator/iocontrol.lua index 9513982..854be3a 100644 --- a/coordinator/iocontrol.lua +++ b/coordinator/iocontrol.lua @@ -105,6 +105,7 @@ function iocontrol.init(conf, comms, temp_scale, energy_scale) auto_current_waste_product = types.WASTE_PRODUCT.PLUTONIUM, auto_pu_fallback_active = false, auto_sps_disabled = false, + waste_stats = { 0, 0, 0, 0, 0, 0 }, -- waste in, pu, po, po pellets, am, spent waste radiation = types.new_zero_radiation_reading(), @@ -118,6 +119,7 @@ function iocontrol.init(conf, comms, temp_scale, energy_scale) induction_ps_tbl = {}, ---@type psil[] induction_data_tbl = {}, ---@type imatrix_session_db[] + sps_status = 1, sps_ps_tbl = {}, ---@type psil[] sps_data_tbl = {}, ---@type sps_session_db[] @@ -663,6 +665,8 @@ function iocontrol.update_facility_status(status) -- SPS statuses if type(rtu_statuses.sps) == "table" then + local comp_stat = 1 + for id = 1, #fac.sps_ps_tbl do if rtu_statuses.sps[id] == nil then -- disconnected @@ -678,22 +682,26 @@ function iocontrol.update_facility_status(status) local rtu_faulted = _record_multiblock_status(sps, data, ps) if rtu_faulted then - ps.publish("computed_status", 3) -- faulted + comp_stat = 3 -- faulted elseif data.formed then if data.state.process_rate > 0 then - ps.publish("computed_status", 5) -- active + comp_stat = 5 -- active else - ps.publish("computed_status", 4) -- idle + comp_stat = 4 -- idle end else - ps.publish("computed_status", 2) -- not formed + comp_stat = 2 -- not formed end + ps.publish("computed_status", comp_stat) + io.facility.ps.publish("am_rate", data.state.process_rate * 1000) else log.debug(util.c(log_header, "invalid sps id ", id)) end end + + io.facility.sps_status = comp_stat else log.debug(log_header .. "sps list not a table") valid = false @@ -1226,6 +1234,8 @@ function iocontrol.update_unit_statuses(statuses) end end + io.facility.waste_stats = { burn_rate_sum, pu_rate, po_rate, po_pl_rate, po_am_rate, spent_rate } + io.facility.ps.publish("burn_sum", burn_rate_sum) io.facility.ps.publish("sna_count", sna_count_sum) io.facility.ps.publish("pu_rate", pu_rate) diff --git a/coordinator/session/pocket.lua b/coordinator/session/pocket.lua index 407ec1b..6d60ab0 100644 --- a/coordinator/session/pocket.lua +++ b/coordinator/session/pocket.lua @@ -360,6 +360,12 @@ function pocket.new_session(id, s_addr, i_seq_num, in_queue, out_queue, timeout) } end + local process_rate = 0 + + if fac.sps_data_tbl[1].state then + process_rate = fac.sps_data_tbl[1].state.process_rate + end + -- facility data data[#db.units + 1] = { fac.auto_current_waste_product, @@ -368,7 +374,9 @@ function pocket.new_session(id, s_addr, i_seq_num, in_queue, out_queue, timeout) proc.waste_product, proc.pu_fallback, proc.sps_low_power, - fac.sps_data_tbl + fac.waste_stats, + fac.sps_status, + process_rate } _send(CRDN_TYPE.API_GET_WASTE, data) diff --git a/pocket/iocontrol.lua b/pocket/iocontrol.lua index fe081e8..0a3af09 100644 --- a/pocket/iocontrol.lua +++ b/pocket/iocontrol.lua @@ -160,6 +160,7 @@ function iocontrol.init_fac(conf) auto_current_waste_product = types.WASTE_PRODUCT.PLUTONIUM, auto_pu_fallback_active = false, auto_sps_disabled = false, + waste_stats = { 0, 0, 0, 0, 0, 0 }, -- waste in, pu, po, po pellets, am, spent waste radiation = types.new_zero_radiation_reading(), @@ -969,7 +970,17 @@ function iocontrol.record_waste_data(data) fac.ps.publish("process_pu_fallback", f_data[5]) fac.ps.publish("process_sps_low_power", f_data[6]) - fac.sps_data_tbl = f_data[7] + fac.waste_stats = f_data[7] + + fac.ps.publish("burn_sum", fac.waste_stats[1]) + fac.ps.publish("pu_rate", fac.waste_stats[2]) + fac.ps.publish("po_rate", fac.waste_stats[3]) + fac.ps.publish("po_pl_rate", fac.waste_stats[4]) + fac.ps.publish("po_am_rate", fac.waste_stats[5]) + fac.ps.publish("spent_waste_rate", fac.waste_stats[6]) + + fac.ps.publish("sps_computed_status", f_data[8]) + fac.ps.publish("sps_process_rate", f_data[9]) end -- get the IO controller database diff --git a/pocket/ui/apps/waste.lua b/pocket/ui/apps/waste.lua index f46e332..34ad0d3 100644 --- a/pocket/ui/apps/waste.lua +++ b/pocket/ui/apps/waste.lua @@ -190,12 +190,12 @@ local function new_view(root) TextBox{parent=c_div,y=12,text="Nuclear Waste In",fg_bg=style.label} local sum_raw_waste = DataIndicator{parent=c_div,label="",format="%16.3f",value=0,unit="mB/t",lu_colors=lu_col,width=21,fg_bg=text_fg} - -- sum_raw_waste.register(f_ps, "burn_sum", sum_raw_waste.update) + sum_raw_waste.register(f_ps, "burn_sum", sum_raw_waste.update) TextBox{parent=c_div,y=15,text="Spent Waste Out",fg_bg=style.label} local sum_sp_waste = DataIndicator{parent=c_div,label="",format="%16.3f",value=0,unit="mB/t",lu_colors=lu_col,width=21,fg_bg=text_fg} - -- sum_sp_waste.register(f_ps, "spent_waste_rate", sum_sp_waste.update) + sum_sp_waste.register(f_ps, "spent_waste_rate", sum_sp_waste.update) local stats_div = Div{parent=c_pane,x=2,width=page_div.get_width()-2} table.insert(panes, stats_div) @@ -215,14 +215,14 @@ local function new_view(root) TextBox{parent=stats_div,y=9,text="Polonium (Pellets)",fg_bg=style.label} local popl = DataIndicator{parent=stats_div,label="",format="%16.3f",value=0,unit="mB/t",lu_colors=lu_col,width=21,fg_bg=text_fg} - -- pu.register(f_ps, "pu_rate", pu.update) - -- po.register(f_ps, "po_rate", po.update) - -- popl.register(f_ps, "po_pl_rate", popl.update) + pu.register(f_ps, "pu_rate", pu.update) + po.register(f_ps, "po_rate", po.update) + popl.register(f_ps, "po_pl_rate", popl.update) TextBox{parent=stats_div,y=12,text="Antimatter",fg_bg=style.label} local am = DataIndicator{parent=stats_div,label="",format="%16d",value=0,unit="\xb5B/t",lu_colors=lu_col,width=21,fg_bg=text_fg} - -- am.register(facility.sps_ps_tbl[1], "process_rate", function (r) sps_rate.update(r * 1000) end) + am.register(f_ps, "sps_process_rate", function (r) am.update(r * 1000) end) --#endregion @@ -263,17 +263,17 @@ local function new_view(root) local sps_status = StateIndicator{parent=s_div,x=5,y=3,states=style.sps.states,value=1,min_width=12} - -- status.register(facility.sps_ps_tbl[1], "computed_status", status.update) + sps_status.register(f_ps, "sps_computed_status", sps_status.update) TextBox{parent=s_div,y=5,text="Input Rate",width=10,fg_bg=style.label} local sps_in = DataIndicator{parent=s_div,label="",format="%16.2f",value=0,unit="mB/t",lu_colors=lu_col,width=21,fg_bg=text_fg} - -- sps_in.register(facility.ps, "po_am_rate", sps_in.update) + sps_in.register(f_ps, "po_am_rate", sps_in.update) TextBox{parent=s_div,y=8,text="Production Rate",width=15,fg_bg=style.label} local sps_rate = DataIndicator{parent=s_div,label="",format="%16d",value=0,unit="\xb5B/t",lu_colors=lu_col,width=21,fg_bg=text_fg} - -- sps_rate.register(facility.sps_ps_tbl[1], "process_rate", function (r) sps_rate.update(r * 1000) end) + sps_rate.register(f_ps, "sps_process_rate", function (r) sps_rate.update(r * 1000) end) --#endregion