#399 auto waste control

This commit is contained in:
Mikayla Fischler 2024-11-17 23:07:58 -05:00
parent 7b6b1de539
commit 532c15e258
4 changed files with 55 additions and 10 deletions

View File

@ -305,7 +305,6 @@ function pocket.new_session(id, s_addr, i_seq_num, in_queue, out_queue, timeout)
u.annunciator.AutoControl, u.annunciator.AutoControl,
u.a_group u.a_group
} }
end end
_send(CRDN_TYPE.API_GET_CTRL, data) _send(CRDN_TYPE.API_GET_CTRL, data)
@ -343,8 +342,8 @@ function pocket.new_session(id, s_addr, i_seq_num, in_queue, out_queue, timeout)
elseif pkt.type == CRDN_TYPE.API_GET_WASTE then elseif pkt.type == CRDN_TYPE.API_GET_WASTE then
local data = {} local data = {}
-- local fac = db.facility local fac = db.facility
-- local proc = process.get_control_states().process local proc = process.get_control_states().process
-- unit data -- unit data
for i = 1, #db.units do for i = 1, #db.units do
@ -362,7 +361,15 @@ function pocket.new_session(id, s_addr, i_seq_num, in_queue, out_queue, timeout)
end end
-- facility data -- facility data
data[#db.units + 1] = {} data[#db.units + 1] = {
fac.auto_current_waste_product,
fac.auto_pu_fallback_active,
fac.auto_sps_disabled,
proc.waste_product,
proc.pu_fallback,
proc.sps_low_power,
fac.sps_data_tbl
}
_send(CRDN_TYPE.API_GET_WASTE, data) _send(CRDN_TYPE.API_GET_WASTE, data)
else else

View File

@ -159,6 +159,7 @@ function iocontrol.init_fac(conf)
---@type WASTE_PRODUCT ---@type WASTE_PRODUCT
auto_current_waste_product = types.WASTE_PRODUCT.PLUTONIUM, auto_current_waste_product = types.WASTE_PRODUCT.PLUTONIUM,
auto_pu_fallback_active = false, auto_pu_fallback_active = false,
auto_sps_disabled = false,
radiation = types.new_zero_radiation_reading(), radiation = types.new_zero_radiation_reading(),
@ -951,6 +952,24 @@ function iocontrol.record_waste_data(data)
unit.unit_ps.publish("po_rate", unit.waste_stats[2]) unit.unit_ps.publish("po_rate", unit.waste_stats[2])
unit.unit_ps.publish("po_pl_rate", unit.waste_stats[3]) unit.unit_ps.publish("po_pl_rate", unit.waste_stats[3])
end end
-- get facility data
local fac = io.facility
local f_data = data[#io.units + 1]
fac.auto_current_waste_product = f_data[1]
fac.auto_pu_fallback_active = f_data[2]
fac.auto_sps_disabled = f_data[3]
fac.ps.publish("current_waste_product", fac.auto_current_waste_product)
fac.ps.publish("pu_fallback_active", fac.auto_pu_fallback_active)
fac.ps.publish("sps_disabled_low_power", fac.auto_sps_disabled)
fac.ps.publish("process_waste_product", f_data[4])
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]
end end
-- get the IO controller database -- get the IO controller database

View File

@ -139,6 +139,27 @@ function process.process_stop()
log.debug("PROCESS: STOP AUTO CTRL") log.debug("PROCESS: STOP AUTO CTRL")
end end
-- set automatic process control waste mode
---@param product WASTE_PRODUCT waste product for auto control
function process.set_process_waste(product)
self.comms.send_fac_command(F_CMD.SET_WASTE_MODE, product)
log.debug(util.c("PROCESS: SET WASTE ", product))
end
-- set automatic process control plutonium fallback
---@param enabled boolean whether to enable plutonium fallback
function process.set_pu_fallback(enabled)
self.comms.send_fac_command(F_CMD.SET_PU_FB, enabled)
log.debug(util.c("PROCESS: SET PU FALLBACK ", enabled))
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)
self.comms.send_fac_command(F_CMD.SET_SPS_LP, enabled)
log.debug(util.c("PROCESS: SET SPS LOW POWER ", enabled))
end
-- #endregion -- #endregion
--------------------------------- ---------------------------------

View File

@ -176,14 +176,12 @@ local function new_view(root)
TextBox{parent=c_div,y=1,text="Waste Control",alignment=ALIGN.CENTER} TextBox{parent=c_div,y=1,text="Waste Control",alignment=ALIGN.CENTER}
local status = StateIndicator{parent=c_div,x=3,y=3,states=style.waste.states,value=1,min_width=17} local status = StateIndicator{parent=c_div,x=3,y=3,states=style.waste.states,value=1,min_width=17}
local waste_prod = RadioButton{parent=c_div,y=5,options=style.waste.options,callback=process.set_process_waste,radio_colors=cpair(colors.lightGray,colors.gray),select_color=colors.white}
status.register(f_ps, "current_waste_product", status.update) status.register(f_ps, "current_waste_product", status.update)
local waste_prod = RadioButton{parent=c_div,y=5,options=style.waste.options,callback=function()end,radio_colors=cpair(colors.lightGray,colors.gray),select_color=colors.white}
waste_prod.register(f_ps, "process_waste_product", waste_prod.set_value) waste_prod.register(f_ps, "process_waste_product", waste_prod.set_value)
local fb_active = IconIndicator{parent=c_div,y=9,label="Fallback Active",states=wht_ind_s} local fb_active = IconIndicator{parent=c_div,y=9,label="Fallback Active",states=wht_ind_s}
local sps_disabled = IconIndicator{parent=c_div,y=10,label="SPS Disabled LC",states=yel_ind_s} local sps_disabled = IconIndicator{parent=c_div,y=10,label="SPS Disabled LC",states=yel_ind_s}
fb_active.register(f_ps, "pu_fallback_active", fb_active.update) fb_active.register(f_ps, "pu_fallback_active", fb_active.update)
@ -239,11 +237,11 @@ local function new_view(root)
TextBox{parent=o_div,y=1,text="Waste Options",alignment=ALIGN.CENTER} TextBox{parent=o_div,y=1,text="Waste Options",alignment=ALIGN.CENTER}
local pu_fallback = Checkbox{parent=o_div,x=2,y=3,label="Pu Fallback",callback=function()end,box_fg_bg=cpair(colors.white,colors.gray)} local pu_fallback = Checkbox{parent=o_div,x=2,y=3,label="Pu Fallback",callback=process.set_pu_fallback,box_fg_bg=cpair(colors.white,colors.gray)}
TextBox{parent=o_div,x=2,y=5,height=3,text="Switch to Pu when SNAs cannot keep up with waste.",fg_bg=style.label} TextBox{parent=o_div,x=2,y=5,height=3,text="Switch to Pu when SNAs cannot keep up with waste.",fg_bg=style.label}
local lc_sps = Checkbox{parent=o_div,x=2,y=9,label="Low Charge SPS",callback=function()end,box_fg_bg=cpair(colors.white,colors.gray)} local lc_sps = Checkbox{parent=o_div,x=2,y=9,label="Low Charge SPS",callback=process.set_sps_low_power,box_fg_bg=cpair(colors.white,colors.gray)}
TextBox{parent=o_div,x=2,y=11,height=3,text="Use SPS at low charge, otherwise switches to Po.",fg_bg=style.label} TextBox{parent=o_div,x=2,y=11,height=3,text="Use SPS at low charge, otherwise switches to Po.",fg_bg=style.label}