From 17954ef3d02c5b4b4df6e54f736f01ecb5f1f07f Mon Sep 17 00:00:00 2001 From: Mikayla Fischler <mikayla@ky8.io> Date: Thu, 8 Sep 2022 10:25:00 -0400 Subject: [PATCH] #86 supervisor fixes and changes for annunciator/units; send annunciator, fixed heartbeat, change to max return flow detection --- supervisor/session/coordinator.lua | 2 +- supervisor/session/plc.lua | 2 ++ supervisor/session/unit.lua | 20 ++++++++++++++------ supervisor/startup.lua | 2 +- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/supervisor/session/coordinator.lua b/supervisor/session/coordinator.lua index f36414e..00f3a33 100644 --- a/supervisor/session/coordinator.lua +++ b/supervisor/session/coordinator.lua @@ -112,7 +112,7 @@ function coordinator.new_session(id, in_queue, out_queue, facility_units) for i = 1, #self.units do local unit = self.units[i] ---@type reactor_unit - status[unit.get_id()] = { unit.get_reactor_status(), unit.get_rtu_statuses() } + status[unit.get_id()] = { unit.get_reactor_status(), unit.get_annunciator(), unit.get_rtu_statuses() } end _send(SCADA_CRDN_TYPES.UNIT_STATUSES, status) diff --git a/supervisor/session/plc.lua b/supervisor/session/plc.lua index ffffeb9..ffc851b 100644 --- a/supervisor/session/plc.lua +++ b/supervisor/session/plc.lua @@ -285,6 +285,8 @@ function plc.new_session(id, for_reactor, in_queue, out_queue) self.sDB.overridden = pkt.data[3] self.sDB.degraded = pkt.data[4] self.sDB.mek_status.heating_rate = pkt.data[5] + ---@todo rps_tripped is redundant with overridden, rename overridden to rps_tripped globally + self.sDB.rps_tripped = pkt.data[4] -- attempt to read mek_data table if pkt.data[6] ~= nil then diff --git a/supervisor/session/unit.lua b/supervisor/session/unit.lua index e919592..88c512b 100644 --- a/supervisor/session/unit.lua +++ b/supervisor/session/unit.lua @@ -1,5 +1,6 @@ local types = require "scada-common.types" local util = require "scada-common.util" +local log = require "scada-common.log" local unit = {} @@ -33,14 +34,15 @@ function unit.new(for_reactor, num_boilers, num_turbines) boilers = {}, redstone = {}, deltas = {}, + last_heartbeat = 0, db = { ---@class annunciator annunciator = { -- reactor PLCOnline = false, PLCHeartbeat = false, -- alternate true/false to blink, each time there is a keep_alive - ReactorTrip = false, - ManualReactorTrip = false, + ReactorSCRAM = false, + ManualReactorSCRAM = false, RCPTrip = false, RCSFlowLow = false, ReactorTempHigh = false, @@ -167,9 +169,15 @@ function unit.new(for_reactor, num_boilers, num_turbines) if self.plc_s ~= nil then local plc_db = self.plc_i.get_db() - -- update annunciator - self.db.annunciator.ReactorTrip = plc_db.rps_tripped - self.db.annunciator.ManualReactorTrip = plc_db.rps_trip_cause == types.rps_status_t.manual + -- heartbeat blink about every second + if self.last_heartbeat + 1000 < plc_db.last_status_update then + self.db.annunciator.PLCHeartbeat = not self.db.annunciator.PLCHeartbeat + self.last_heartbeat = plc_db.last_status_update + end + + -- update other annunciator fields + self.db.annunciator.ReactorSCRAM = plc_db.overridden + self.db.annunciator.ManualReactorSCRAM = plc_db.rps_trip_cause == types.rps_status_t.manual self.db.annunciator.RCPTrip = plc_db.rps_tripped and (plc_db.rps_status.ex_hcool or plc_db.rps_status.no_cool) self.db.annunciator.RCSFlowLow = plc_db.mek_status.ccool_fill < 0.75 or plc_db.mek_status.hcool_fill > 0.25 self.db.annunciator.ReactorTempHigh = plc_db.mek_status.temp > 1000 @@ -270,7 +278,7 @@ function unit.new(for_reactor, num_boilers, num_turbines) local sfmismatch = math.abs(total_flow_rate - total_input_rate) > 10 sfmismatch = sfmismatch or boiler_steam_dt_sum > 0 or boiler_water_dt_sum < 0 self.db.annunciator.SteamFeedMismatch = sfmismatch - self.db.annunciator.MaxWaterReturnFeed = max_water_return_rate == total_flow_rate + self.db.annunciator.MaxWaterReturnFeed = max_water_return_rate == total_flow_rate and total_flow_rate ~= 0 -- check if steam dumps are open for i = 1, #self.turbines do diff --git a/supervisor/startup.lua b/supervisor/startup.lua index 51fa010..ea313a4 100644 --- a/supervisor/startup.lua +++ b/supervisor/startup.lua @@ -13,7 +13,7 @@ local svsessions = require("supervisor.session.svsessions") local config = require("supervisor.config") local supervisor = require("supervisor.supervisor") -local SUPERVISOR_VERSION = "beta-v0.5.9" +local SUPERVISOR_VERSION = "beta-v0.5.10" local print = util.print local println = util.println