mirror of
https://github.com/MikaylaFischler/cc-mek-scada.git
synced 2024-08-30 18:22:34 +00:00
#329 disable reactor rather than trip on auto control stop
This commit is contained in:
parent
b1c2c4d291
commit
c24766a4db
@ -238,8 +238,9 @@ function plc.rps_init(reactor, is_formed, emer_cool)
|
|||||||
self.state[state_keys.sys_fail] = true
|
self.state[state_keys.sys_fail] = true
|
||||||
end
|
end
|
||||||
|
|
||||||
-- SCRAM the reactor now (blocks waiting for server tick)
|
-- SCRAM the reactor now<br>
|
||||||
---@return boolean success
|
---@return boolean success
|
||||||
|
--- EVENT_CONSUMER: this function consumes events
|
||||||
function public.scram()
|
function public.scram()
|
||||||
log.info("RPS: reactor SCRAM")
|
log.info("RPS: reactor SCRAM")
|
||||||
|
|
||||||
@ -254,8 +255,9 @@ function plc.rps_init(reactor, is_formed, emer_cool)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
-- start the reactor now (blocks waiting for server tick)
|
-- start the reactor now<br>
|
||||||
---@return boolean success
|
---@return boolean success
|
||||||
|
--- EVENT_CONSUMER: this function consumes events
|
||||||
function public.activate()
|
function public.activate()
|
||||||
if not self.tripped then
|
if not self.tripped then
|
||||||
log.info("RPS: reactor start")
|
log.info("RPS: reactor start")
|
||||||
@ -612,10 +614,7 @@ function plc.comms(id, version, nic, plc_channel, svr_channel, range, reactor, r
|
|||||||
|
|
||||||
-- send structure properties (these should not change, server will cache these)
|
-- send structure properties (these should not change, server will cache these)
|
||||||
local function _send_struct()
|
local function _send_struct()
|
||||||
local min_pos = { x = 0, y = 0, z = 0 }
|
local mek_data = { false, 0, 0, 0, types.new_zero_coordinate(), types.new_zero_coordinate(), 0, 0, 0, 0, 0, 0, 0, 0 }
|
||||||
local max_pos = { x = 0, y = 0, z = 0 }
|
|
||||||
|
|
||||||
local mek_data = { false, 0, 0, 0, min_pos, max_pos, 0, 0, 0, 0, 0, 0, 0, 0 }
|
|
||||||
|
|
||||||
local tasks = {
|
local tasks = {
|
||||||
function () mek_data[1] = reactor.getLength() end,
|
function () mek_data[1] = reactor.getLength() end,
|
||||||
@ -685,10 +684,7 @@ function plc.comms(id, version, nic, plc_channel, svr_channel, range, reactor, r
|
|||||||
local heating_rate = 0.0 ---@type number
|
local heating_rate = 0.0 ---@type number
|
||||||
|
|
||||||
if (not no_reactor) and rps.is_formed() then
|
if (not no_reactor) and rps.is_formed() then
|
||||||
if _update_status_cache() then
|
if _update_status_cache() then mek_data = self.status_cache end
|
||||||
mek_data = self.status_cache
|
|
||||||
end
|
|
||||||
|
|
||||||
heating_rate = reactor.getHeatingRate()
|
heating_rate = reactor.getHeatingRate()
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -697,7 +693,7 @@ function plc.comms(id, version, nic, plc_channel, svr_channel, range, reactor, r
|
|||||||
(not self.scrammed), -- requested control state
|
(not self.scrammed), -- requested control state
|
||||||
no_reactor, -- no reactor peripheral connected
|
no_reactor, -- no reactor peripheral connected
|
||||||
formed, -- reactor formed
|
formed, -- reactor formed
|
||||||
self.auto_ack_token, -- token to indicate auto command has been received before this status update
|
self.auto_ack_token, -- indicate auto command received prior to this status update
|
||||||
heating_rate, -- heating rate
|
heating_rate, -- heating rate
|
||||||
mek_data -- mekanism status data
|
mek_data -- mekanism status data
|
||||||
}
|
}
|
||||||
@ -837,6 +833,10 @@ function plc.comms(id, version, nic, plc_channel, svr_channel, range, reactor, r
|
|||||||
-- enable the reactor
|
-- enable the reactor
|
||||||
self.scrammed = false
|
self.scrammed = false
|
||||||
_send_ack(packet.type, rps.activate())
|
_send_ack(packet.type, rps.activate())
|
||||||
|
elseif packet.type == RPLC_TYPE.RPS_DISABLE then
|
||||||
|
-- disable the reactor, but do not trip
|
||||||
|
self.scrammed = true
|
||||||
|
_send_ack(packet.type, rps.scram())
|
||||||
elseif packet.type == RPLC_TYPE.RPS_SCRAM then
|
elseif packet.type == RPLC_TYPE.RPS_SCRAM then
|
||||||
-- disable the reactor per manual request
|
-- disable the reactor per manual request
|
||||||
self.scrammed = true
|
self.scrammed = true
|
||||||
|
@ -19,7 +19,7 @@ local plc = require("reactor-plc.plc")
|
|||||||
local renderer = require("reactor-plc.renderer")
|
local renderer = require("reactor-plc.renderer")
|
||||||
local threads = require("reactor-plc.threads")
|
local threads = require("reactor-plc.threads")
|
||||||
|
|
||||||
local R_PLC_VERSION = "v1.5.8"
|
local R_PLC_VERSION = "v1.5.9"
|
||||||
|
|
||||||
local println = util.println
|
local println = util.println
|
||||||
local println_ts = util.println_ts
|
local println_ts = util.println_ts
|
||||||
|
@ -17,7 +17,7 @@ local max_distance = nil
|
|||||||
local comms = {}
|
local comms = {}
|
||||||
|
|
||||||
-- protocol version (non-protocol changes tracked by util.lua version)
|
-- protocol version (non-protocol changes tracked by util.lua version)
|
||||||
comms.version = "2.3.0"
|
comms.version = "2.4.0"
|
||||||
|
|
||||||
---@enum PROTOCOL
|
---@enum PROTOCOL
|
||||||
local PROTOCOL = {
|
local PROTOCOL = {
|
||||||
@ -33,13 +33,14 @@ local RPLC_TYPE = {
|
|||||||
MEK_STRUCT = 1, -- mekanism build structure
|
MEK_STRUCT = 1, -- mekanism build structure
|
||||||
MEK_BURN_RATE = 2, -- set burn rate
|
MEK_BURN_RATE = 2, -- set burn rate
|
||||||
RPS_ENABLE = 3, -- enable reactor
|
RPS_ENABLE = 3, -- enable reactor
|
||||||
RPS_SCRAM = 4, -- SCRAM reactor (manual request)
|
RPS_DISABLE = 4, -- disable the reactor
|
||||||
RPS_ASCRAM = 5, -- SCRAM reactor (automatic request)
|
RPS_SCRAM = 5, -- SCRAM reactor (manual request)
|
||||||
RPS_STATUS = 6, -- RPS status
|
RPS_ASCRAM = 6, -- SCRAM reactor (automatic request)
|
||||||
RPS_ALARM = 7, -- RPS alarm broadcast
|
RPS_STATUS = 7, -- RPS status
|
||||||
RPS_RESET = 8, -- clear RPS trip (if in bad state, will trip immediately)
|
RPS_ALARM = 8, -- RPS alarm broadcast
|
||||||
RPS_AUTO_RESET = 9, -- clear RPS trip if it is just a timeout or auto scram
|
RPS_RESET = 9, -- clear RPS trip (if in bad state, will trip immediately)
|
||||||
AUTO_BURN_RATE = 10 -- set an automatic burn rate, PLC will respond with status, enable toggle speed limited
|
RPS_AUTO_RESET = 10, -- clear RPS trip if it is just a timeout or auto scram
|
||||||
|
AUTO_BURN_RATE = 11 -- set an automatic burn rate, PLC will respond with status, enable toggle speed limited
|
||||||
}
|
}
|
||||||
|
|
||||||
---@enum MGMT_TYPE
|
---@enum MGMT_TYPE
|
||||||
@ -396,9 +397,7 @@ function comms.modbus_packet()
|
|||||||
|
|
||||||
-- populate raw array
|
-- populate raw array
|
||||||
self.raw = { self.txn_id, self.unit_id, self.func_code }
|
self.raw = { self.txn_id, self.unit_id, self.func_code }
|
||||||
for i = 1, self.length do
|
for i = 1, self.length do insert(self.raw, data[i]) end
|
||||||
insert(self.raw, data[i])
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
log.error("comms.modbus_packet.make(): data not table")
|
log.error("comms.modbus_packet.make(): data not table")
|
||||||
end
|
end
|
||||||
@ -484,9 +483,7 @@ function comms.rplc_packet()
|
|||||||
|
|
||||||
-- populate raw array
|
-- populate raw array
|
||||||
self.raw = { self.id, self.type }
|
self.raw = { self.id, self.type }
|
||||||
for i = 1, #data do
|
for i = 1, #data do insert(self.raw, data[i]) end
|
||||||
insert(self.raw, data[i])
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
log.error("comms.rplc_packet.make(): data not table")
|
log.error("comms.rplc_packet.make(): data not table")
|
||||||
end
|
end
|
||||||
@ -568,9 +565,7 @@ function comms.mgmt_packet()
|
|||||||
|
|
||||||
-- populate raw array
|
-- populate raw array
|
||||||
self.raw = { self.type }
|
self.raw = { self.type }
|
||||||
for i = 1, #data do
|
for i = 1, #data do insert(self.raw, data[i]) end
|
||||||
insert(self.raw, data[i])
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
log.error("comms.mgmt_packet.make(): data not table")
|
log.error("comms.mgmt_packet.make(): data not table")
|
||||||
end
|
end
|
||||||
@ -649,9 +644,7 @@ function comms.crdn_packet()
|
|||||||
|
|
||||||
-- populate raw array
|
-- populate raw array
|
||||||
self.raw = { self.type }
|
self.raw = { self.type }
|
||||||
for i = 1, #data do
|
for i = 1, #data do insert(self.raw, data[i]) end
|
||||||
insert(self.raw, data[i])
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
log.error("comms.crdn_packet.make(): data not table")
|
log.error("comms.crdn_packet.make(): data not table")
|
||||||
end
|
end
|
||||||
|
@ -402,7 +402,7 @@ function facility.new(num_reactors, cooling_conf)
|
|||||||
-- SCRAM reactors and disengage auto control
|
-- SCRAM reactors and disengage auto control
|
||||||
-- use manual SCRAM since inactive was requested, and automatic SCRAM trips an alarm
|
-- use manual SCRAM since inactive was requested, and automatic SCRAM trips an alarm
|
||||||
for _, u in pairs(self.prio_defs[i]) do
|
for _, u in pairs(self.prio_defs[i]) do
|
||||||
u.scram()
|
u.disable()
|
||||||
u.auto_disengage()
|
u.auto_disengage()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -25,8 +25,9 @@ local PLC_S_CMDS = {
|
|||||||
SCRAM = 1,
|
SCRAM = 1,
|
||||||
ASCRAM = 2,
|
ASCRAM = 2,
|
||||||
ENABLE = 3,
|
ENABLE = 3,
|
||||||
RPS_RESET = 4,
|
DISABLE = 4,
|
||||||
RPS_AUTO_RESET = 5
|
RPS_RESET = 5,
|
||||||
|
RPS_AUTO_RESET = 6
|
||||||
}
|
}
|
||||||
|
|
||||||
local PLC_S_DATA = {
|
local PLC_S_DATA = {
|
||||||
@ -80,6 +81,7 @@ function plc.new_session(id, s_addr, reactor_id, in_queue, out_queue, timeout, f
|
|||||||
retry_times = {
|
retry_times = {
|
||||||
struct_req = (util.time() + 500),
|
struct_req = (util.time() + 500),
|
||||||
status_req = (util.time() + 500),
|
status_req = (util.time() + 500),
|
||||||
|
disable_req = 0,
|
||||||
scram_req = 0,
|
scram_req = 0,
|
||||||
ascram_req = 0,
|
ascram_req = 0,
|
||||||
burn_rate_req = 0,
|
burn_rate_req = 0,
|
||||||
@ -87,6 +89,7 @@ function plc.new_session(id, s_addr, reactor_id, in_queue, out_queue, timeout, f
|
|||||||
},
|
},
|
||||||
-- command acknowledgements
|
-- command acknowledgements
|
||||||
acks = {
|
acks = {
|
||||||
|
disable = true,
|
||||||
scram = true,
|
scram = true,
|
||||||
ascram = true,
|
ascram = true,
|
||||||
burn_rate = true,
|
burn_rate = true,
|
||||||
@ -627,6 +630,11 @@ function plc.new_session(id, s_addr, reactor_id, in_queue, out_queue, timeout, f
|
|||||||
if not self.auto_lock then
|
if not self.auto_lock then
|
||||||
_send(RPLC_TYPE.RPS_ENABLE, {})
|
_send(RPLC_TYPE.RPS_ENABLE, {})
|
||||||
end
|
end
|
||||||
|
elseif cmd == PLC_S_CMDS.DISABLE then
|
||||||
|
-- disable the reactor
|
||||||
|
self.acks.disable = false
|
||||||
|
self.retry_times.disable_req = util.time() + INITIAL_WAIT
|
||||||
|
_send(RPLC_TYPE.RPS_DISABLE, {})
|
||||||
elseif cmd == PLC_S_CMDS.SCRAM then
|
elseif cmd == PLC_S_CMDS.SCRAM then
|
||||||
-- SCRAM reactor
|
-- SCRAM reactor
|
||||||
self.acks.scram = false
|
self.acks.scram = false
|
||||||
@ -780,6 +788,15 @@ function plc.new_session(id, s_addr, reactor_id, in_queue, out_queue, timeout, f
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- reactor disable request retry
|
||||||
|
|
||||||
|
if not self.acks.disable then
|
||||||
|
if rtimes.disable_req - util.time() <= 0 then
|
||||||
|
_send(RPLC_TYPE.RPS_DISABLE, {})
|
||||||
|
rtimes.disable_req = util.time() + RETRY_PERIOD
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- SCRAM request retry
|
-- SCRAM request retry
|
||||||
|
|
||||||
if not self.acks.scram then
|
if not self.acks.scram then
|
||||||
|
@ -21,7 +21,7 @@ local supervisor = require("supervisor.supervisor")
|
|||||||
|
|
||||||
local svsessions = require("supervisor.session.svsessions")
|
local svsessions = require("supervisor.session.svsessions")
|
||||||
|
|
||||||
local SUPERVISOR_VERSION = "v1.0.4"
|
local SUPERVISOR_VERSION = "v1.0.5"
|
||||||
|
|
||||||
local println = util.println
|
local println = util.println
|
||||||
local println_ts = util.println_ts
|
local println_ts = util.println_ts
|
||||||
|
@ -645,6 +645,13 @@ function unit.new(reactor_id, num_boilers, num_turbines)
|
|||||||
-- OPERATIONS --
|
-- OPERATIONS --
|
||||||
--#region
|
--#region
|
||||||
|
|
||||||
|
-- queue a command to disable the reactor
|
||||||
|
function public.disable()
|
||||||
|
if self.plc_s ~= nil then
|
||||||
|
self.plc_s.in_queue.push_command(PLC_S_CMDS.DISABLE)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- queue a command to SCRAM the reactor
|
-- queue a command to SCRAM the reactor
|
||||||
function public.scram()
|
function public.scram()
|
||||||
if self.plc_s ~= nil then
|
if self.plc_s ~= nil then
|
||||||
|
Loading…
Reference in New Issue
Block a user