#86 supervisor fixes and changes for annunciator/units; send annunciator, fixed heartbeat, change to max return flow detection

This commit is contained in:
Mikayla Fischler 2022-09-08 10:25:00 -04:00
parent c5ba95449f
commit 17954ef3d0
4 changed files with 18 additions and 8 deletions

View File

@ -112,7 +112,7 @@ function coordinator.new_session(id, in_queue, out_queue, facility_units)
for i = 1, #self.units do for i = 1, #self.units do
local unit = self.units[i] ---@type reactor_unit 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 end
_send(SCADA_CRDN_TYPES.UNIT_STATUSES, status) _send(SCADA_CRDN_TYPES.UNIT_STATUSES, status)

View File

@ -285,6 +285,8 @@ function plc.new_session(id, for_reactor, in_queue, out_queue)
self.sDB.overridden = pkt.data[3] self.sDB.overridden = pkt.data[3]
self.sDB.degraded = pkt.data[4] self.sDB.degraded = pkt.data[4]
self.sDB.mek_status.heating_rate = pkt.data[5] 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 -- attempt to read mek_data table
if pkt.data[6] ~= nil then if pkt.data[6] ~= nil then

View File

@ -1,5 +1,6 @@
local types = require "scada-common.types" local types = require "scada-common.types"
local util = require "scada-common.util" local util = require "scada-common.util"
local log = require "scada-common.log"
local unit = {} local unit = {}
@ -33,14 +34,15 @@ function unit.new(for_reactor, num_boilers, num_turbines)
boilers = {}, boilers = {},
redstone = {}, redstone = {},
deltas = {}, deltas = {},
last_heartbeat = 0,
db = { db = {
---@class annunciator ---@class annunciator
annunciator = { annunciator = {
-- reactor -- reactor
PLCOnline = false, PLCOnline = false,
PLCHeartbeat = false, -- alternate true/false to blink, each time there is a keep_alive PLCHeartbeat = false, -- alternate true/false to blink, each time there is a keep_alive
ReactorTrip = false, ReactorSCRAM = false,
ManualReactorTrip = false, ManualReactorSCRAM = false,
RCPTrip = false, RCPTrip = false,
RCSFlowLow = false, RCSFlowLow = false,
ReactorTempHigh = false, ReactorTempHigh = false,
@ -167,9 +169,15 @@ function unit.new(for_reactor, num_boilers, num_turbines)
if self.plc_s ~= nil then if self.plc_s ~= nil then
local plc_db = self.plc_i.get_db() local plc_db = self.plc_i.get_db()
-- update annunciator -- heartbeat blink about every second
self.db.annunciator.ReactorTrip = plc_db.rps_tripped if self.last_heartbeat + 1000 < plc_db.last_status_update then
self.db.annunciator.ManualReactorTrip = plc_db.rps_trip_cause == types.rps_status_t.manual 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.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.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 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 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 sfmismatch = sfmismatch or boiler_steam_dt_sum > 0 or boiler_water_dt_sum < 0
self.db.annunciator.SteamFeedMismatch = sfmismatch 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 -- check if steam dumps are open
for i = 1, #self.turbines do for i = 1, #self.turbines do

View File

@ -13,7 +13,7 @@ local svsessions = require("supervisor.session.svsessions")
local config = require("supervisor.config") local config = require("supervisor.config")
local supervisor = require("supervisor.supervisor") local supervisor = require("supervisor.supervisor")
local SUPERVISOR_VERSION = "beta-v0.5.9" local SUPERVISOR_VERSION = "beta-v0.5.10"
local print = util.print local print = util.print
local println = util.println local println = util.println