added control app update message for better performance

This commit is contained in:
Mikayla 2024-10-04 02:33:26 +00:00
parent 35bbd14cbc
commit 966ca94775
7 changed files with 100 additions and 14 deletions

View File

@ -238,6 +238,26 @@ function pocket.new_session(id, s_addr, i_seq_num, in_queue, out_queue, timeout)
_send(CRDN_TYPE.API_GET_UNIT, data) _send(CRDN_TYPE.API_GET_UNIT, data)
end end
end end
elseif pkt.type == CRDN_TYPE.API_GET_CTRL then
local data = {}
for i = 1, #db.units do
local u = db.units[i]
data[i] = {
u.connected,
u.reactor_data.rps_tripped,
u.reactor_data.mek_status.status,
u.reactor_data.mek_status.temp,
u.reactor_data.mek_status.burn_rate,
u.reactor_data.mek_status.act_burn_rate,
u.reactor_data.mek_struct.max_burn,
u.annunciator.AutoControl,
u.a_group
}
_send(CRDN_TYPE.API_GET_CTRL, data)
end
else else
log.debug(log_tag .. "handler received unsupported CRDN packet type " .. pkt.type) log.debug(log_tag .. "handler received unsupported CRDN packet type " .. pkt.type)
end end

View File

@ -19,7 +19,7 @@ local renderer = require("coordinator.renderer")
local sounder = require("coordinator.sounder") local sounder = require("coordinator.sounder")
local threads = require("coordinator.threads") local threads = require("coordinator.threads")
local COORDINATOR_VERSION = "v1.5.10" local COORDINATOR_VERSION = "v1.5.11"
local CHUNK_LOAD_DELAY_S = 30.0 local CHUNK_LOAD_DELAY_S = 30.0

View File

@ -6,6 +6,7 @@ local const = require("scada-common.constants")
local psil = require("scada-common.psil") local psil = require("scada-common.psil")
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 process = require("pocket.process") local process = require("pocket.process")
@ -92,7 +93,8 @@ function iocontrol.init_core(pkt_comms, nav, cfg)
-- API access -- API access
---@class pocket_ioctl_api ---@class pocket_ioctl_api
io.api = { io.api = {
get_unit = function (unit) comms.api__get_unit(unit) end get_unit = function (unit) comms.api__get_unit(unit) end,
get_ctrl = function () comms.api__get_control() end
} }
end end
@ -526,6 +528,12 @@ function iocontrol.record_unit_data(data)
end end
end end
if type(unit.reactor_data.mek_struct) == "table" then
for key, val in pairs(unit.reactor_data.mek_struct) do
unit.unit_ps.publish(key, val)
end
end
if type(unit.reactor_data.mek_status) == "table" then if type(unit.reactor_data.mek_status) == "table" then
for key, val in pairs(unit.reactor_data.mek_status) do for key, val in pairs(unit.reactor_data.mek_status) do
unit.unit_ps.publish(key, val) unit.unit_ps.publish(key, val)
@ -823,6 +831,54 @@ function iocontrol.record_unit_data(data)
--#endregion --#endregion
end end
---@param data table
function iocontrol.record_control_data(data)
for u_id = 1, #data do
local unit = io.units[u_id]
local u_data = data[u_id]
if type(u_data) ~= "table" then
log.debug(util.c("iocontrol.record_control_data: unit ", u_id, " data invalid"))
else
unit.connected = u_data[1]
unit.reactor_data.rps_tripped = u_data[2]
unit.unit_ps.publish("rps_tripped", u_data[2])
unit.reactor_data.mek_status.status = u_data[3]
unit.unit_ps.publish("status", u_data[3])
unit.reactor_data.mek_status.temp = u_data[4]
unit.unit_ps.publish("temp", u_data[4])
unit.reactor_data.mek_status.burn_rate = u_data[5]
unit.unit_ps.publish("burn_rate", u_data[5])
unit.reactor_data.mek_status.act_burn_rate = u_data[6]
unit.unit_ps.publish("act_burn_rate", u_data[6])
unit.reactor_data.mek_struct.max_burn = u_data[7]
unit.unit_ps.publish("max_burn", u_data[7])
unit.annunciator.AutoControl = u_data[8]
unit.unit_ps.publish("AutoControl", u_data[8])
unit.a_group = u_data[9]
unit.unit_ps.publish("auto_group_id", unit.a_group)
unit.unit_ps.publish("auto_group", types.AUTO_GROUP_NAMES[unit.a_group + 1])
local control_status = 1
if unit.connected then
if unit.reactor_data.rps_tripped then
control_status = 2
end
if unit.reactor_data.mek_status.status then
control_status = util.trinary(unit.annunciator.AutoControl, 4, 3)
end
end
unit.unit_ps.publish("U_ControlStatus", control_status)
end
end
end
-- get the IO controller database -- get the IO controller database
function iocontrol.get_db() return io end function iocontrol.get_db() return io end

View File

@ -550,6 +550,11 @@ function pocket.comms(version, nic, sv_watchdog, api_watchdog, nav)
if self.api.linked then _send_api(CRDN_TYPE.API_GET_UNIT, { unit }) end if self.api.linked then _send_api(CRDN_TYPE.API_GET_UNIT, { unit }) end
end end
-- coordinator get control app data
function public.api__get_control()
if self.api.linked then _send_api(CRDN_TYPE.API_GET_CTRL, {}) end
end
-- send a facility command -- send a facility command
---@param cmd FAC_COMMAND command ---@param cmd FAC_COMMAND command
---@param option any? optional option options for the optional options (like waste mode) ---@param option any? optional option options for the optional options (like waste mode)
@ -702,6 +707,10 @@ function pocket.comms(version, nic, sv_watchdog, api_watchdog, nav)
if _check_length(packet, 12) and type(packet.data[1]) == "number" and iocontrol.get_db().units[packet.data[1]] then if _check_length(packet, 12) and type(packet.data[1]) == "number" and iocontrol.get_db().units[packet.data[1]] then
iocontrol.record_unit_data(packet.data) iocontrol.record_unit_data(packet.data)
end end
elseif packet.type == CRDN_TYPE.API_GET_CTRL then
if _check_length(packet, #iocontrol.get_db().units) then
iocontrol.record_control_data(packet.data)
end
else _fail_type(packet) end else _fail_type(packet) end
else else
log.debug("discarding coordinator SCADA_CRDN packet before linked") log.debug("discarding coordinator SCADA_CRDN packet before linked")

View File

@ -20,7 +20,7 @@ local pocket = require("pocket.pocket")
local renderer = require("pocket.renderer") local renderer = require("pocket.renderer")
local threads = require("pocket.threads") local threads = require("pocket.threads")
local POCKET_VERSION = "v0.12.2-alpha" local POCKET_VERSION = "v0.12.3-alpha"
local println = util.println local println = util.println
local println_ts = util.println_ts local println_ts = util.println_ts

View File

@ -105,21 +105,21 @@ local function new_view(root)
app.switcher(active_unit) app.switcher(active_unit)
end end
local last_update = 0
-- refresh data callback, every 500ms it will re-send the query
local function update()
if util.time_ms() - last_update >= 500 then
db.api.get_ctrl()
last_update = util.time_ms()
end
end
for i = 1, db.facility.num_units do for i = 1, db.facility.num_units do
local u_pane = panes[i] local u_pane = panes[i]
local u_div = Div{parent=u_pane,x=2,width=main.get_width()-2} local u_div = Div{parent=u_pane,x=2,width=main.get_width()-2}
local unit = db.units[i] local unit = db.units[i]
local u_ps = unit.unit_ps local u_ps = unit.unit_ps
-- refresh data callback, every 500ms it will re-send the query
local last_update = 0
local function update()
if util.time_ms() - last_update >= 500 then
db.api.get_unit(i)
last_update = util.time_ms()
end
end
local u_page = app.new_page(nil, i) local u_page = app.new_page(nil, i)
u_page.tasks = { update } u_page.tasks = { update }

View File

@ -18,7 +18,7 @@ local comms = {}
-- protocol/data versions (protocol/data independent changes tracked by util.lua version) -- protocol/data versions (protocol/data independent changes tracked by util.lua version)
comms.version = "3.0.0" comms.version = "3.0.0"
comms.api_version = "0.0.4" comms.api_version = "0.0.5"
---@enum PROTOCOL ---@enum PROTOCOL
local PROTOCOL = { local PROTOCOL = {
@ -67,7 +67,8 @@ local CRDN_TYPE = {
UNIT_STATUSES = 5, -- state of each of the reactor units UNIT_STATUSES = 5, -- state of each of the reactor units
UNIT_CMD = 6, -- command a reactor unit UNIT_CMD = 6, -- command a reactor unit
API_GET_FAC = 7, -- API: get all the facility data API_GET_FAC = 7, -- API: get all the facility data
API_GET_UNIT = 8 -- API: get reactor unit data API_GET_UNIT = 8, -- API: get reactor unit data
API_GET_CTRL = 9 -- API: get data used for the control app
} }
---@enum ESTABLISH_ACK ---@enum ESTABLISH_ACK