@@ -84,6 +84,8 @@ function iocontrol.init(conf, comms, temp_scale, energy_scale)
|
||||
all_sys_ok = false,
|
||||
rtu_count = 0,
|
||||
|
||||
status_lines = { "", "" },
|
||||
|
||||
auto_ready = false,
|
||||
auto_active = false,
|
||||
auto_ramping = false,
|
||||
@@ -157,6 +159,11 @@ function iocontrol.init(conf, comms, temp_scale, energy_scale)
|
||||
num_snas = 0,
|
||||
has_tank = conf.cooling.r_cool[i].TankConnection,
|
||||
|
||||
status_lines = { "", "" },
|
||||
|
||||
auto_ready = false,
|
||||
auto_degraded = false,
|
||||
|
||||
control_state = false,
|
||||
burn_rate_cmd = 0.0,
|
||||
radiation = types.new_zero_radiation_reading(),
|
||||
@@ -539,8 +546,8 @@ function iocontrol.update_facility_status(status)
|
||||
fac.ascram_status.radiation = ctl_status[10]
|
||||
fac.ascram_status.gen_fault = ctl_status[11]
|
||||
|
||||
fac.status_line_1 = ctl_status[12]
|
||||
fac.status_line_2 = ctl_status[13]
|
||||
fac.status_lines[1] = ctl_status[12]
|
||||
fac.status_lines[2] = ctl_status[13]
|
||||
|
||||
fac.ps.publish("all_sys_ok", fac.all_sys_ok)
|
||||
fac.ps.publish("auto_ready", fac.auto_ready)
|
||||
@@ -553,8 +560,8 @@ function iocontrol.update_facility_status(status)
|
||||
fac.ps.publish("as_crit_alarm", fac.ascram_status.crit_alarm)
|
||||
fac.ps.publish("as_radiation", fac.ascram_status.radiation)
|
||||
fac.ps.publish("as_gen_fault", fac.ascram_status.gen_fault)
|
||||
fac.ps.publish("status_line_1", fac.status_line_1)
|
||||
fac.ps.publish("status_line_2", fac.status_line_2)
|
||||
fac.ps.publish("status_line_1", fac.status_lines[1])
|
||||
fac.ps.publish("status_line_2", fac.status_lines[2])
|
||||
|
||||
local group_map = ctl_status[14]
|
||||
|
||||
@@ -1128,15 +1135,19 @@ function iocontrol.update_unit_statuses(statuses)
|
||||
|
||||
if type(unit_state) == "table" then
|
||||
if #unit_state == 8 then
|
||||
unit.status_lines[1] = unit_state[1]
|
||||
unit.status_lines[2] = unit_state[2]
|
||||
unit.auto_ready = unit_state[3]
|
||||
unit.auto_degraded = unit_state[4]
|
||||
unit.waste_mode = unit_state[5]
|
||||
unit.waste_product = unit_state[6]
|
||||
unit.last_rate_change_ms = unit_state[7]
|
||||
unit.turbine_flow_stable = unit_state[8]
|
||||
|
||||
unit.unit_ps.publish("U_StatusLine1", unit_state[1])
|
||||
unit.unit_ps.publish("U_StatusLine2", unit_state[2])
|
||||
unit.unit_ps.publish("U_AutoReady", unit_state[3])
|
||||
unit.unit_ps.publish("U_AutoDegraded", unit_state[4])
|
||||
unit.unit_ps.publish("U_StatusLine1", unit.status_lines[1])
|
||||
unit.unit_ps.publish("U_StatusLine2", unit.status_lines[2])
|
||||
unit.unit_ps.publish("U_AutoReady", unit.auto_ready)
|
||||
unit.unit_ps.publish("U_AutoDegraded", unit.auto_degraded)
|
||||
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)
|
||||
|
||||
@@ -61,6 +61,8 @@ local function _write_auto_config()
|
||||
return saved
|
||||
end
|
||||
|
||||
--#region Core
|
||||
|
||||
-- initialize the process controller
|
||||
---@param iocontrol ioctl iocontrl system
|
||||
---@param coord_comms coord_comms coordinator communications
|
||||
@@ -335,6 +337,14 @@ function process.clear_timed_out()
|
||||
end
|
||||
end
|
||||
|
||||
-- get the control states table
|
||||
---@nodiscard
|
||||
function process.get_control_states() return pctl.control_states end
|
||||
|
||||
--#endregion
|
||||
|
||||
--#region Command Handling
|
||||
|
||||
-- handle a command acknowledgement
|
||||
---@param cmd_state process_command_state
|
||||
---@param success boolean if the command was successful
|
||||
@@ -535,4 +545,6 @@ function process.sps_lp_ack_handle(response)
|
||||
pctl.io.facility.ps.publish("process_sps_low_power", response)
|
||||
end
|
||||
|
||||
--#endregion
|
||||
|
||||
return process
|
||||
|
||||
@@ -279,6 +279,37 @@ function pocket.new_session(id, s_addr, i_seq_num, in_queue, out_queue, timeout)
|
||||
end
|
||||
|
||||
_send(CRDN_TYPE.API_GET_CTRL, data)
|
||||
elseif pkt.type == CRDN_TYPE.API_GET_PROC 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.reactor_data.mek_status.status,
|
||||
u.reactor_data.mek_struct.max_burn,
|
||||
proc.limits[i],
|
||||
u.auto_ready,
|
||||
u.auto_degraded,
|
||||
u.annunciator.AutoControl,
|
||||
u.a_group
|
||||
}
|
||||
end
|
||||
|
||||
-- facility data
|
||||
data[#db.units + 1] = {
|
||||
fac.status_lines,
|
||||
{ fac.auto_ready, fac.auto_active, fac.auto_ramping, fac.auto_saturated },
|
||||
fac.auto_scram,
|
||||
fac.ascram_status,
|
||||
{ proc.mode, proc.burn_target, proc.charge_target, proc.gen_target }
|
||||
}
|
||||
|
||||
_send(CRDN_TYPE.API_GET_PROC, data)
|
||||
else
|
||||
log.debug(log_tag .. "handler received unsupported CRDN packet type " .. pkt.type)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user