#183 RTU front panel

This commit is contained in:
Mikayla Fischler
2023-04-20 20:40:28 -04:00
parent df45f6c984
commit d143015cc7
16 changed files with 471 additions and 45 deletions

View File

@@ -4,6 +4,7 @@
require("/initenv").init_env()
local comms = require("scada-common.comms")
local crash = require("scada-common.crash")
local log = require("scada-common.log")
local mqueue = require("scada-common.mqueue")
@@ -13,7 +14,9 @@ local types = require("scada-common.types")
local util = require("scada-common.util")
local config = require("rtu.config")
local databus = require("rtu.databus")
local modbus = require("rtu.modbus")
local renderer = require("rtu.renderer")
local rtu = require("rtu.rtu")
local threads = require("rtu.threads")
@@ -25,9 +28,10 @@ local sna_rtu = require("rtu.dev.sna_rtu")
local sps_rtu = require("rtu.dev.sps_rtu")
local turbinev_rtu = require("rtu.dev.turbinev_rtu")
local RTU_VERSION = "v0.13.5"
local RTU_VERSION = "v1.0.0"
local RTU_UNIT_TYPE = types.RTU_UNIT_TYPE
local RTU_UNIT_HW_STATE = databus.RTU_UNIT_HW_STATE
local println = util.println
local println_ts = util.println_ts
@@ -71,6 +75,9 @@ local function main()
-- startup
----------------------------------------
-- record firmware versions and ID
databus.tx_versions(RTU_VERSION, comms.version)
-- mount connected devices
ppm.mount_all()
@@ -79,6 +86,7 @@ local function main()
-- RTU system state flags
---@class rtu_state
rtu_state = {
fp_ok = false,
linked = false,
shutdown = false
},
@@ -111,6 +119,8 @@ local function main()
return
end
databus.tx_hw_modem(true)
----------------------------------------
-- interpret config and init units
----------------------------------------
@@ -250,6 +260,8 @@ local function main()
log.info(util.c("configure> initialized RTU unit #", #units, ": redstone_io (redstone) [1] for ", for_message))
unit.uid = #units
databus.tx_unit_hw_status(unit.uid, RTU_UNIT_HW_STATE.OK)
end
end
@@ -409,6 +421,20 @@ local function main()
log.info(util.c("configure> initialized RTU unit #", #units, ": ", name, " (", types.rtu_type_to_string(rtu_type), ") [", index, "] for ", for_message))
rtu_unit.uid = #units
-- report hardware status
if rtu_unit.type == RTU_UNIT_TYPE.VIRTUAL then
databus.tx_unit_hw_status(rtu_unit.uid, RTU_UNIT_HW_STATE.OFFLINE)
else
if rtu_unit.is_multiblock then
databus.tx_unit_hw_status(rtu_unit.uid, util.trinary(rtu_unit.formed == true, RTU_UNIT_HW_STATE.OK, RTU_UNIT_HW_STATE.UNFORMED))
elseif faulted then
databus.tx_unit_hw_status(rtu_unit.uid, RTU_UNIT_HW_STATE.FAULTED)
else
databus.tx_unit_hw_status(rtu_unit.uid, RTU_UNIT_HW_STATE.OK)
end
end
end
-- we made it through all that trusting-user-to-write-a-config-file chaos
@@ -419,9 +445,23 @@ local function main()
-- start system
----------------------------------------
local rtu_state = __shared_memory.rtu_state
log.debug("boot> running configure()")
if configure() then
-- start UI
local message
rtu_state.fp_ok, message = pcall(renderer.start_ui, units)
if not rtu_state.fp_ok then
renderer.close_ui()
println_ts(util.c("UI error: ", message))
println("init> running without front panel")
log.error(util.c("GUI crashed with error ", message))
log.info("init> running in headless mode without front panel")
end
-- start connection watchdog
smem_sys.conn_watchdog = util.new_watchdog(config.COMMS_TIMEOUT)
log.debug("startup> conn watchdog started")
@@ -451,6 +491,8 @@ local function main()
println("configuration failed, exiting...")
end
renderer.close_ui()
println_ts("exited")
log.info("exited")
end