#401 supervisor support of pocket computer list app
This commit is contained in:
parent
acaa9369f4
commit
4fb39213f2
@ -17,7 +17,7 @@ local max_distance = nil
|
|||||||
local comms = {}
|
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.7"
|
comms.version = "3.0.8"
|
||||||
comms.api_version = "0.0.10"
|
comms.api_version = "0.0.10"
|
||||||
|
|
||||||
---@enum PROTOCOL
|
---@enum PROTOCOL
|
||||||
@ -52,9 +52,10 @@ local MGMT_TYPE = {
|
|||||||
RTU_ADVERT = 3, -- RTU capability advertisement
|
RTU_ADVERT = 3, -- RTU capability advertisement
|
||||||
RTU_DEV_REMOUNT = 4, -- RTU multiblock possbily changed (formed, unformed) due to PPM remount
|
RTU_DEV_REMOUNT = 4, -- RTU multiblock possbily changed (formed, unformed) due to PPM remount
|
||||||
RTU_TONE_ALARM = 5, -- instruct RTUs to play specified alarm tones
|
RTU_TONE_ALARM = 5, -- instruct RTUs to play specified alarm tones
|
||||||
DIAG_TONE_GET = 6, -- diagnostic: get alarm tones
|
DIAG_TONE_GET = 6, -- (API) diagnostic: get alarm tones
|
||||||
DIAG_TONE_SET = 7, -- diagnostic: set alarm tones
|
DIAG_TONE_SET = 7, -- (API) diagnostic: set alarm tones
|
||||||
DIAG_ALARM_SET = 8 -- diagnostic: set alarm to simulate audio for
|
DIAG_ALARM_SET = 8, -- (API) diagnostic: set alarm to simulate audio for
|
||||||
|
INFO_LIST_CMP = 9 -- (API) info: list all computers on the network
|
||||||
}
|
}
|
||||||
|
|
||||||
---@enum CRDN_TYPE
|
---@enum CRDN_TYPE
|
||||||
|
|||||||
@ -6,6 +6,7 @@ local databus = require("supervisor.databus")
|
|||||||
|
|
||||||
local pocket = {}
|
local pocket = {}
|
||||||
|
|
||||||
|
local DEV_TYPE = comms.DEVICE_TYPE
|
||||||
local PROTOCOL = comms.PROTOCOL
|
local PROTOCOL = comms.PROTOCOL
|
||||||
local MGMT_TYPE = comms.MGMT_TYPE
|
local MGMT_TYPE = comms.MGMT_TYPE
|
||||||
|
|
||||||
@ -34,9 +35,10 @@ local PERIODICS = {
|
|||||||
---@param in_queue mqueue in message queue
|
---@param in_queue mqueue in message queue
|
||||||
---@param out_queue mqueue out message queue
|
---@param out_queue mqueue out message queue
|
||||||
---@param timeout number communications timeout
|
---@param timeout number communications timeout
|
||||||
|
---@param sessions svsessions_list list of computer sessions, read-only
|
||||||
---@param facility facility facility data table
|
---@param facility facility facility data table
|
||||||
---@param fp_ok boolean if the front panel UI is running
|
---@param fp_ok boolean if the front panel UI is running
|
||||||
function pocket.new_session(id, s_addr, i_seq_num, in_queue, out_queue, timeout, facility, fp_ok)
|
function pocket.new_session(id, s_addr, i_seq_num, in_queue, out_queue, timeout, sessions, facility, fp_ok)
|
||||||
-- print a log message to the terminal as long as the UI isn't running
|
-- print a log message to the terminal as long as the UI isn't running
|
||||||
local function println(message) if not fp_ok then util.println_ts(message) end end
|
local function println(message) if not fp_ok then util.println_ts(message) end end
|
||||||
|
|
||||||
@ -182,6 +184,38 @@ function pocket.new_session(id, s_addr, i_seq_num, in_queue, out_queue, timeout,
|
|||||||
end
|
end
|
||||||
|
|
||||||
if not valid then _send_mgmt(MGMT_TYPE.DIAG_ALARM_SET, { false }) end
|
if not valid then _send_mgmt(MGMT_TYPE.DIAG_ALARM_SET, { false }) end
|
||||||
|
elseif pkt.type == MGMT_TYPE.INFO_LIST_CMP then
|
||||||
|
local read = databus.ps.get
|
||||||
|
|
||||||
|
---@diagnostic disable-next-line: undefined-field
|
||||||
|
local devices = { { DEV_TYPE.SVR, os.getComputerID(), read("version"), 0 } }
|
||||||
|
|
||||||
|
-- add the coordinator if connected
|
||||||
|
if read("crd_conn") then
|
||||||
|
table.insert(devices, { DEV_TYPE.CRD, read("crd_addr"), read("crd_fw"), databus.read("crd_rtt") })
|
||||||
|
end
|
||||||
|
|
||||||
|
-- add the PLCs if connected
|
||||||
|
for i = 1, #facility.get_units() do
|
||||||
|
local tag = "plc_" .. i
|
||||||
|
if read(tag .. "_conn") then
|
||||||
|
table.insert(devices, { DEV_TYPE.CRD, read(tag .. "_addr"), read(tag .. "_fw"), read(tag .. "_rtt") })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- add connected RTUs
|
||||||
|
for i = 1, #sessions.rtu do
|
||||||
|
local s = sessions.rtu[i]
|
||||||
|
table.insert(devices, { DEV_TYPE.RTU, s.s_addr, s.version, read(s.instance.get_id() .. "_rtt") })
|
||||||
|
end
|
||||||
|
|
||||||
|
-- add connected pocket computers
|
||||||
|
for i = 1, #sessions.pdg do
|
||||||
|
local s = sessions.pdg[i]
|
||||||
|
table.insert(devices, { DEV_TYPE.PKT, s.s_addr, s.version, read(s.instance.get_id() .. "_rtt") })
|
||||||
|
end
|
||||||
|
|
||||||
|
_send_mgmt(MGMT_TYPE.INFO_LIST_CMP, devices)
|
||||||
else
|
else
|
||||||
log.debug(log_tag .. "handler received unsupported SCADA_MGMT packet type " .. pkt.type)
|
log.debug(log_tag .. "handler received unsupported SCADA_MGMT packet type " .. pkt.type)
|
||||||
end
|
end
|
||||||
|
|||||||
@ -47,12 +47,13 @@ local self = {
|
|||||||
facility = nil, ---@type facility|nil
|
facility = nil, ---@type facility|nil
|
||||||
plc_ini_reset = {},
|
plc_ini_reset = {},
|
||||||
-- lists of connected sessions
|
-- lists of connected sessions
|
||||||
|
---@class svsessions_list
|
||||||
---@diagnostic disable: missing-fields
|
---@diagnostic disable: missing-fields
|
||||||
sessions = {
|
sessions = {
|
||||||
rtu = {}, ---@type rtu_session_struct
|
rtu = {}, ---@type rtu_session_struct[]
|
||||||
plc = {}, ---@type plc_session_struct
|
plc = {}, ---@type plc_session_struct[]
|
||||||
crd = {}, ---@type crd_session_struct
|
crd = {}, ---@type crd_session_struct[]
|
||||||
pdg = {} ---@type pdg_session_struct
|
pdg = {} ---@type pdg_session_struct[]
|
||||||
},
|
},
|
||||||
---@diagnostic enable: missing-fields
|
---@diagnostic enable: missing-fields
|
||||||
-- next session IDs
|
-- next session IDs
|
||||||
@ -621,7 +622,7 @@ function svsessions.establish_pdg_session(source_addr, i_seq_num, version)
|
|||||||
|
|
||||||
local id = self.next_ids.pdg
|
local id = self.next_ids.pdg
|
||||||
|
|
||||||
pdg_s.instance = pocket.new_session(id, source_addr, i_seq_num, pdg_s.in_queue, pdg_s.out_queue, self.config.PKT_Timeout, self.facility, self.fp_ok)
|
pdg_s.instance = pocket.new_session(id, source_addr, i_seq_num, pdg_s.in_queue, pdg_s.out_queue, self.config.PKT_Timeout, self.sessions, self.facility, self.fp_ok)
|
||||||
table.insert(self.sessions.pdg, pdg_s)
|
table.insert(self.sessions.pdg, pdg_s)
|
||||||
|
|
||||||
local mt = {
|
local mt = {
|
||||||
|
|||||||
@ -23,7 +23,7 @@ local supervisor = require("supervisor.supervisor")
|
|||||||
|
|
||||||
local svsessions = require("supervisor.session.svsessions")
|
local svsessions = require("supervisor.session.svsessions")
|
||||||
|
|
||||||
local SUPERVISOR_VERSION = "v1.7.0"
|
local SUPERVISOR_VERSION = "v1.7.1"
|
||||||
|
|
||||||
local println = util.println
|
local println = util.println
|
||||||
local println_ts = util.println_ts
|
local println_ts = util.println_ts
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user