From 55f6e4756e3021cda21fab152ff2185535f7914f Mon Sep 17 00:00:00 2001 From: Mikayla Date: Fri, 8 Nov 2024 02:52:17 +0000 Subject: [PATCH] #566 interrupt auto control on unformed/faulted induction matrix --- coordinator/iocontrol.lua | 6 +++--- coordinator/startup.lua | 2 +- coordinator/ui/components/process_ctl.lua | 4 ++-- pocket/iocontrol.lua | 4 ++-- pocket/startup.lua | 2 +- pocket/ui/apps/process.lua | 4 ++-- pocket/ui/docs.lua | 2 +- supervisor/facility.lua | 6 +++--- supervisor/facility_update.lua | 24 ++++++++++++++--------- supervisor/startup.lua | 2 +- 10 files changed, 31 insertions(+), 25 deletions(-) diff --git a/coordinator/iocontrol.lua b/coordinator/iocontrol.lua index 8d57bed..be76052 100644 --- a/coordinator/iocontrol.lua +++ b/coordinator/iocontrol.lua @@ -94,7 +94,7 @@ function iocontrol.init(conf, comms, temp_scale, energy_scale) auto_scram = false, ---@type ascram_status ascram_status = { - matrix_dc = false, + matrix_fault = false, matrix_fill = false, crit_alarm = false, radiation = false, @@ -540,7 +540,7 @@ function iocontrol.update_facility_status(status) fac.auto_saturated = ctl_status[5] fac.auto_scram = ctl_status[6] - fac.ascram_status.matrix_dc = ctl_status[7] + fac.ascram_status.matrix_fault = ctl_status[7] fac.ascram_status.matrix_fill = ctl_status[8] fac.ascram_status.crit_alarm = ctl_status[9] fac.ascram_status.radiation = ctl_status[10] @@ -555,7 +555,7 @@ function iocontrol.update_facility_status(status) fac.ps.publish("auto_ramping", fac.auto_ramping) fac.ps.publish("auto_saturated", fac.auto_saturated) fac.ps.publish("auto_scram", fac.auto_scram) - fac.ps.publish("as_matrix_dc", fac.ascram_status.matrix_dc) + fac.ps.publish("as_matrix_fault", fac.ascram_status.matrix_fault) fac.ps.publish("as_matrix_fill", fac.ascram_status.matrix_fill) fac.ps.publish("as_crit_alarm", fac.ascram_status.crit_alarm) fac.ps.publish("as_radiation", fac.ascram_status.radiation) diff --git a/coordinator/startup.lua b/coordinator/startup.lua index 772b8b6..7b08aba 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.13" +local COORDINATOR_VERSION = "v1.5.14" local CHUNK_LOAD_DELAY_S = 30.0 diff --git a/coordinator/ui/components/process_ctl.lua b/coordinator/ui/components/process_ctl.lua index a70bcd6..f649ac5 100644 --- a/coordinator/ui/components/process_ctl.lua +++ b/coordinator/ui/components/process_ctl.lua @@ -94,14 +94,14 @@ local function new_view(root, x, y) main.line_break() local auto_scram = IndicatorLight{parent=main,label="Automatic SCRAM",colors=ind_red,flash=true,period=period.BLINK_250_MS} - local matrix_dc = IndicatorLight{parent=main,label="Matrix Disconnected",colors=ind_yel,flash=true,period=period.BLINK_500_MS} + local matrix_flt = IndicatorLight{parent=main,label="Induction Matrix Fault",colors=ind_yel,flash=true,period=period.BLINK_500_MS} local matrix_fill = IndicatorLight{parent=main,label="Matrix Charge High",colors=ind_red,flash=true,period=period.BLINK_500_MS} local unit_crit = IndicatorLight{parent=main,label="Unit Critical Alarm",colors=ind_red,flash=true,period=period.BLINK_250_MS} local fac_rad_h = IndicatorLight{parent=main,label="Facility Radiation High",colors=ind_red,flash=true,period=period.BLINK_250_MS} local gen_fault = IndicatorLight{parent=main,label="Gen. Control Fault",colors=ind_yel,flash=true,period=period.BLINK_500_MS} auto_scram.register(facility.ps, "auto_scram", auto_scram.update) - matrix_dc.register(facility.ps, "as_matrix_dc", matrix_dc.update) + matrix_flt.register(facility.ps, "as_matrix_fault", matrix_flt.update) matrix_fill.register(facility.ps, "as_matrix_fill", matrix_fill.update) unit_crit.register(facility.ps, "as_crit_alarm", unit_crit.update) fac_rad_h.register(facility.ps, "as_radiation", fac_rad_h.update) diff --git a/pocket/iocontrol.lua b/pocket/iocontrol.lua index e72a573..41f6aef 100644 --- a/pocket/iocontrol.lua +++ b/pocket/iocontrol.lua @@ -148,7 +148,7 @@ function iocontrol.init_fac(conf) auto_scram = false, ---@type ascram_status ascram_status = { - matrix_dc = false, + matrix_fault = false, matrix_fill = false, crit_alarm = false, radiation = false, @@ -908,7 +908,7 @@ function iocontrol.record_process_data(data) fac.ps.publish("auto_saturated", fac.auto_saturated) fac.ps.publish("auto_scram", fac.auto_scram) - fac.ps.publish("as_matrix_dc", fac.ascram_status.matrix_dc) + fac.ps.publish("as_matrix_fault", fac.ascram_status.matrix_fault) fac.ps.publish("as_matrix_fill", fac.ascram_status.matrix_fill) fac.ps.publish("as_crit_alarm", fac.ascram_status.crit_alarm) fac.ps.publish("as_radiation", fac.ascram_status.radiation) 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/pocket/ui/apps/process.lua b/pocket/ui/apps/process.lua index deb7b1f..593e74c 100644 --- a/pocket/ui/apps/process.lua +++ b/pocket/ui/apps/process.lua @@ -269,7 +269,7 @@ local function new_view(root) local auto_scram = IconIndicator{parent=a_div,y=3,label="Automatic SCRAM",states=red_ind_s} TextBox{parent=a_div,y=5,text="Induction Matrix",fg_bg=label_fg_bg} - local matrix_dc = IconIndicator{parent=a_div,label="Disconnected",states=yel_ind_s} + local matrix_flt = IconIndicator{parent=a_div,label="Matrix Fault",states=yel_ind_s} local matrix_fill = IconIndicator{parent=a_div,label="Charge High",states=red_ind_s} TextBox{parent=a_div,y=9,text="Assigned Units",fg_bg=label_fg_bg} @@ -282,7 +282,7 @@ local function new_view(root) local gen_fault = IconIndicator{parent=a_div,label="Control Fault",states=yel_ind_s} auto_scram.register(f_ps, "auto_scram", auto_scram.update) - matrix_dc.register(f_ps, "as_matrix_dc", matrix_dc.update) + matrix_flt.register(f_ps, "as_matrix_fault", matrix_flt.update) matrix_fill.register(f_ps, "as_matrix_fill", matrix_fill.update) unit_crit.register(f_ps, "as_crit_alarm", unit_crit.update) fac_rad_h.register(f_ps, "as_radiation", fac_rad_h.update) diff --git a/pocket/ui/docs.lua b/pocket/ui/docs.lua index 0d4e889..f87b249 100644 --- a/pocket/ui/docs.lua +++ b/pocket/ui/docs.lua @@ -148,7 +148,7 @@ doc("auto_ramping", "Process Ramping", "Automatic process control is performing doc("auto_saturated", "Min/Max Burn Rate", "Auto control has either commanded 0 mB/t or the maximum total burn rate available (from assigned units).") sect("Automatic SCRAM") doc("auto_scram", "Automatic SCRAM", "Automatic control system SCRAM'ed the assigned reactors due to a safety hazard, shown by the below indicators.") -doc("as_matrix_dc", "Matrix Disconnected", "Automatic SCRAM occurred due to loss of induction matrix connection.") +doc("as_matrix_fault", "Matrix Fault", "Automatic SCRAM occurred due to the loss of the induction matrix connection, or the matrix being unformed or faulted.") doc("as_matrix_fill", "Matrix Charge High", "Automatic SCRAM occurred due to induction matrix charge exceeding acceptable limit.") doc("as_crit_alarm", "Unit Critical Alarm", "Automatic SCRAM occurred due to critical level unit alarm(s).") doc("as_radiation", "Facility Radiation High", "Automatic SCRAM occurred due to high facility radiation levels.") diff --git a/supervisor/facility.lua b/supervisor/facility.lua index b87d6f4..604771a 100644 --- a/supervisor/facility.lua +++ b/supervisor/facility.lua @@ -17,7 +17,7 @@ local WASTE = types.WASTE_PRODUCT ---@enum AUTO_SCRAM local AUTO_SCRAM = { NONE = 0, - MATRIX_DC = 1, + MATRIX_FAULT = 1, MATRIX_FILL = 2, CRIT_ALARM = 3, RADIATION = 4, @@ -81,7 +81,7 @@ function facility.new(config) ascram_reason = AUTO_SCRAM.NONE, ---@class ascram_status ascram_status = { - matrix_dc = false, + matrix_fault = false, matrix_fill = false, crit_alarm = false, radiation = false, @@ -599,7 +599,7 @@ function facility.new(config) self.waiting_on_ramp or self.waiting_on_stable, self.at_max_burn or self.saturated, self.ascram, - astat.matrix_dc, + astat.matrix_fault, astat.matrix_fill, astat.crit_alarm, astat.radiation, diff --git a/supervisor/facility_update.lua b/supervisor/facility_update.lua index f60fe06..b2142be 100644 --- a/supervisor/facility_update.lua +++ b/supervisor/facility_update.lua @@ -528,13 +528,19 @@ function update.auto_safety() local astatus = self.ascram_status + -- matrix related checks if self.induction[1] ~= nil then local db = self.induction[1].get_db() - -- clear matrix disconnected - if astatus.matrix_dc then - astatus.matrix_dc = false - log.info("FAC: induction matrix reconnected, clearing ASCRAM condition") + -- check for unformed or faulted state + local i_ok = db.formed and not self.induction[1].is_faulted() + + -- clear matrix fault if ok again + if astatus.matrix_fault and i_ok then + astatus.matrix_fault = false + log.info("FAC: induction matrix OK, clearing ASCRAM condition") + else + astatus.matrix_fault = i_ok end -- check matrix fill too high @@ -580,7 +586,7 @@ function update.auto_safety() end if (self.mode ~= PROCESS.INACTIVE) and (self.mode ~= PROCESS.SYSTEM_ALARM_IDLE) then - local scram = astatus.matrix_dc or astatus.matrix_fill or astatus.crit_alarm or astatus.gen_fault + local scram = astatus.matrix_fault or astatus.matrix_fill or astatus.crit_alarm or astatus.gen_fault if scram and not self.ascram then -- SCRAM all units @@ -604,14 +610,14 @@ function update.auto_safety() self.status_text = { "AUTOMATIC SCRAM", "facility radiation high" } log.info("FAC: automatic SCRAM due to high facility radiation") - elseif astatus.matrix_dc then + elseif astatus.matrix_fault then next_mode = PROCESS.MATRIX_FAULT_IDLE - self.ascram_reason = AUTO_SCRAM.MATRIX_DC - self.status_text = { "AUTOMATIC SCRAM", "induction matrix disconnected" } + self.ascram_reason = AUTO_SCRAM.MATRIX_FAULT + self.status_text = { "AUTOMATIC SCRAM", "induction matrix fault" } if self.mode ~= PROCESS.MATRIX_FAULT_IDLE then self.return_mode = self.mode end - log.info("FAC: automatic SCRAM due to induction matrix disconnection") + log.info("FAC: automatic SCRAM due to induction matrix disconnected, unformed, or faulted") elseif astatus.matrix_fill then next_mode = PROCESS.MATRIX_FAULT_IDLE self.ascram_reason = AUTO_SCRAM.MATRIX_FILL diff --git a/supervisor/startup.lua b/supervisor/startup.lua index 2011059..5a74e20 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.12" +local SUPERVISOR_VERSION = "v1.5.13" local println = util.println local println_ts = util.println_ts