mirror of
https://github.com/MikaylaFischler/cc-mek-scada.git
synced 2024-08-30 18:22:34 +00:00
#264 improvements to RTU speaker sounder
This commit is contained in:
parent
b3c7263bc4
commit
775d4dc95b
74
rtu/rtu.lua
74
rtu/rtu.lua
@ -432,41 +432,7 @@ function rtu.comms(version, nic, rtu_channel, svr_channel, range, conn_watchdog)
|
|||||||
elseif protocol == PROTOCOL.SCADA_MGMT then
|
elseif protocol == PROTOCOL.SCADA_MGMT then
|
||||||
---@cast packet mgmt_frame
|
---@cast packet mgmt_frame
|
||||||
-- SCADA management packet
|
-- SCADA management packet
|
||||||
if packet.type == SCADA_MGMT_TYPE.ESTABLISH then
|
if rtu_state.linked then
|
||||||
if packet.length == 1 then
|
|
||||||
local est_ack = packet.data[1]
|
|
||||||
|
|
||||||
if est_ack == ESTABLISH_ACK.ALLOW then
|
|
||||||
-- establish allowed
|
|
||||||
rtu_state.linked = true
|
|
||||||
self.sv_addr = packet.scada_frame.src_addr()
|
|
||||||
self.r_seq_num = nil
|
|
||||||
println_ts("supervisor connection established")
|
|
||||||
log.info("supervisor connection established")
|
|
||||||
else
|
|
||||||
-- establish denied
|
|
||||||
if est_ack ~= self.last_est_ack then
|
|
||||||
if est_ack == ESTABLISH_ACK.BAD_VERSION then
|
|
||||||
-- version mismatch
|
|
||||||
println_ts("supervisor comms version mismatch (try updating), retrying...")
|
|
||||||
log.warning("supervisor connection denied due to comms version mismatch, retrying")
|
|
||||||
else
|
|
||||||
println_ts("supervisor connection denied, retrying...")
|
|
||||||
log.warning("supervisor connection denied, retrying")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
public.unlink(rtu_state)
|
|
||||||
end
|
|
||||||
|
|
||||||
self.last_est_ack = est_ack
|
|
||||||
|
|
||||||
-- report link state
|
|
||||||
databus.tx_link_state(est_ack + 1)
|
|
||||||
else
|
|
||||||
log.debug("SCADA_MGMT establish packet length mismatch")
|
|
||||||
end
|
|
||||||
elseif rtu_state.linked then
|
|
||||||
if packet.type == SCADA_MGMT_TYPE.KEEP_ALIVE then
|
if packet.type == SCADA_MGMT_TYPE.KEEP_ALIVE then
|
||||||
-- keep alive request received, echo back
|
-- keep alive request received, echo back
|
||||||
if packet.length == 1 and type(packet.data[1]) == "number" then
|
if packet.length == 1 and type(packet.data[1]) == "number" then
|
||||||
@ -502,16 +468,46 @@ function rtu.comms(version, nic, rtu_channel, svr_channel, range, conn_watchdog)
|
|||||||
|
|
||||||
-- set tone states
|
-- set tone states
|
||||||
for id = 1, #states do s.stream.set_active(id, states[id]) end
|
for id = 1, #states do s.stream.set_active(id, states[id]) end
|
||||||
|
|
||||||
-- re-compute output if needed, then play audio if available
|
|
||||||
if s.stream.is_recompute_needed() then s.stream.compute_buffer() end
|
|
||||||
if s.stream.has_next_block() then s.play() else s.stop() end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
-- not supported
|
-- not supported
|
||||||
log.debug("received unsupported SCADA_MGMT message type " .. packet.type)
|
log.debug("received unsupported SCADA_MGMT message type " .. packet.type)
|
||||||
end
|
end
|
||||||
|
elseif packet.type == SCADA_MGMT_TYPE.ESTABLISH then
|
||||||
|
if packet.length == 1 then
|
||||||
|
local est_ack = packet.data[1]
|
||||||
|
|
||||||
|
if est_ack == ESTABLISH_ACK.ALLOW then
|
||||||
|
-- establish allowed
|
||||||
|
rtu_state.linked = true
|
||||||
|
self.sv_addr = packet.scada_frame.src_addr()
|
||||||
|
self.r_seq_num = nil
|
||||||
|
println_ts("supervisor connection established")
|
||||||
|
log.info("supervisor connection established")
|
||||||
|
else
|
||||||
|
-- establish denied
|
||||||
|
if est_ack ~= self.last_est_ack then
|
||||||
|
if est_ack == ESTABLISH_ACK.BAD_VERSION then
|
||||||
|
-- version mismatch
|
||||||
|
println_ts("supervisor comms version mismatch (try updating), retrying...")
|
||||||
|
log.warning("supervisor connection denied due to comms version mismatch, retrying")
|
||||||
|
else
|
||||||
|
println_ts("supervisor connection denied, retrying...")
|
||||||
|
log.warning("supervisor connection denied, retrying")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
public.unlink(rtu_state)
|
||||||
|
end
|
||||||
|
|
||||||
|
self.last_est_ack = est_ack
|
||||||
|
|
||||||
|
-- report link state
|
||||||
|
databus.tx_link_state(est_ack + 1)
|
||||||
|
else
|
||||||
|
log.debug("SCADA_MGMT establish packet length mismatch")
|
||||||
|
end
|
||||||
else
|
else
|
||||||
log.debug("discarding non-link SCADA_MGMT packet before linked")
|
log.debug("discarding non-link SCADA_MGMT packet before linked")
|
||||||
end
|
end
|
||||||
|
@ -25,7 +25,7 @@ local threads = {}
|
|||||||
local RTU_UNIT_TYPE = types.RTU_UNIT_TYPE
|
local RTU_UNIT_TYPE = types.RTU_UNIT_TYPE
|
||||||
local UNIT_HW_STATE = databus.RTU_UNIT_HW_STATE
|
local UNIT_HW_STATE = databus.RTU_UNIT_HW_STATE
|
||||||
|
|
||||||
local MAIN_CLOCK = 2 -- (2Hz, 40 ticks)
|
local MAIN_CLOCK = 0.5 -- (2Hz, 10 ticks)
|
||||||
local COMMS_SLEEP = 100 -- (100ms, 2 ticks)
|
local COMMS_SLEEP = 100 -- (100ms, 2 ticks)
|
||||||
|
|
||||||
-- main thread
|
-- main thread
|
||||||
@ -68,6 +68,15 @@ function threads.thread__main(smem)
|
|||||||
-- blink heartbeat indicator
|
-- blink heartbeat indicator
|
||||||
databus.heartbeat()
|
databus.heartbeat()
|
||||||
|
|
||||||
|
-- update speaker states
|
||||||
|
for _, sounder in pairs(sounders) do
|
||||||
|
-- re-compute output if needed, then play audio if available
|
||||||
|
if sounder.stream.is_recompute_needed() then
|
||||||
|
sounder.stream.compute_buffer()
|
||||||
|
if sounder.stream.has_next_block() then sounder.play() else sounder.stop() end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
-- start next clock timer
|
-- start next clock timer
|
||||||
loop_clock.start()
|
loop_clock.start()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user