mirror of
https://github.com/MikaylaFischler/cc-mek-scada.git
synced 2024-08-30 18:22:34 +00:00
threaded RTU/PLC bugfixes
This commit is contained in:
parent
14377e7348
commit
67a93016c0
@ -12,7 +12,7 @@ os.loadAPI("config.lua")
|
|||||||
os.loadAPI("plc.lua")
|
os.loadAPI("plc.lua")
|
||||||
os.loadAPI("threads.lua")
|
os.loadAPI("threads.lua")
|
||||||
|
|
||||||
local R_PLC_VERSION = "alpha-v0.4.0"
|
local R_PLC_VERSION = "alpha-v0.4.1"
|
||||||
|
|
||||||
local print = util.print
|
local print = util.print
|
||||||
local println = util.println
|
local println = util.println
|
||||||
@ -58,7 +58,7 @@ local __shared_memory = {
|
|||||||
-- message queues
|
-- message queues
|
||||||
q = {
|
q = {
|
||||||
mq_iss = mqueue.new(),
|
mq_iss = mqueue.new(),
|
||||||
mq_comms = mqeueu.new()
|
mq_comms = mqueue.new()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,6 +26,8 @@ local MQ__COMM_CMD = {
|
|||||||
function thread__main(smem, init)
|
function thread__main(smem, init)
|
||||||
-- execute thread
|
-- execute thread
|
||||||
local exec = function ()
|
local exec = function ()
|
||||||
|
log._debug("main thread init, clock inactive")
|
||||||
|
|
||||||
-- send status updates at 2Hz (every 10 server ticks) (every loop tick)
|
-- send status updates at 2Hz (every 10 server ticks) (every loop tick)
|
||||||
-- send link requests at 0.5Hz (every 40 server ticks) (every 4 loop ticks)
|
-- send link requests at 0.5Hz (every 40 server ticks) (every 4 loop ticks)
|
||||||
local LINK_TICKS = 4
|
local LINK_TICKS = 4
|
||||||
@ -168,7 +170,7 @@ function thread__main(smem, init)
|
|||||||
elseif event == "clock_start" then
|
elseif event == "clock_start" then
|
||||||
-- start loop clock
|
-- start loop clock
|
||||||
loop_clock = os.startTimer(MAIN_CLOCK)
|
loop_clock = os.startTimer(MAIN_CLOCK)
|
||||||
log._debug("main thread started")
|
log._debug("main thread clock started")
|
||||||
end
|
end
|
||||||
|
|
||||||
-- check for termination request
|
-- check for termination request
|
||||||
@ -188,6 +190,8 @@ end
|
|||||||
function thread__iss(smem)
|
function thread__iss(smem)
|
||||||
-- execute thread
|
-- execute thread
|
||||||
local exec = function ()
|
local exec = function ()
|
||||||
|
log._debug("iss thread start")
|
||||||
|
|
||||||
-- load in from shared memory
|
-- load in from shared memory
|
||||||
local networked = smem.networked
|
local networked = smem.networked
|
||||||
local plc_state = smem.plc_state
|
local plc_state = smem.plc_state
|
||||||
@ -233,8 +237,8 @@ function thread__iss(smem)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- check for messages in the message queue
|
-- check for messages in the message queue
|
||||||
while comms_queue.ready() do
|
while iss_queue.ready() do
|
||||||
local msg = comms_queue.pop()
|
local msg = iss_queue.pop()
|
||||||
|
|
||||||
if msg.qtype == mqueue.TYPE.COMMAND then
|
if msg.qtype == mqueue.TYPE.COMMAND then
|
||||||
-- received a command
|
-- received a command
|
||||||
@ -265,7 +269,7 @@ function thread__iss(smem)
|
|||||||
-- received a packet
|
-- received a packet
|
||||||
end
|
end
|
||||||
|
|
||||||
-- quick yield
|
-- quick yield if we are looping right back
|
||||||
if iss_queue.ready() then util.nop() end
|
if iss_queue.ready() then util.nop() end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -296,8 +300,11 @@ function thread__iss(smem)
|
|||||||
|
|
||||||
-- delay before next check
|
-- delay before next check
|
||||||
local sleep_for = ISS_CLOCK - (util.time() - last_update)
|
local sleep_for = ISS_CLOCK - (util.time() - last_update)
|
||||||
if sleep_for > 0.05 then
|
last_update = util.time()
|
||||||
|
if sleep_for > 0 then
|
||||||
sleep(sleep_for)
|
sleep(sleep_for)
|
||||||
|
else
|
||||||
|
sleep(0.05)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@ -309,6 +316,8 @@ end
|
|||||||
function thread__comms(smem)
|
function thread__comms(smem)
|
||||||
-- execute thread
|
-- execute thread
|
||||||
local exec = function ()
|
local exec = function ()
|
||||||
|
log._debug("comms thread start")
|
||||||
|
|
||||||
-- load in from shared memory
|
-- load in from shared memory
|
||||||
local plc_state = smem.plc_state
|
local plc_state = smem.plc_state
|
||||||
local plc_comms = smem.plc_sys.plc_comms
|
local plc_comms = smem.plc_sys.plc_comms
|
||||||
@ -338,7 +347,7 @@ function thread__comms(smem)
|
|||||||
plc_comms.handle_packet(msg.message, plc_state)
|
plc_comms.handle_packet(msg.message, plc_state)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- quick yield
|
-- quick yield if we are looping right back
|
||||||
if comms_queue.ready() then util.nop() end
|
if comms_queue.ready() then util.nop() end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -350,9 +359,14 @@ function thread__comms(smem)
|
|||||||
|
|
||||||
-- delay before next check
|
-- delay before next check
|
||||||
local sleep_for = COMMS_CLOCK - (util.time() - last_update)
|
local sleep_for = COMMS_CLOCK - (util.time() - last_update)
|
||||||
if sleep_for > 0.05 then
|
last_update = util.time()
|
||||||
|
if sleep_for > 0 then
|
||||||
sleep(sleep_for)
|
sleep(sleep_for)
|
||||||
|
else
|
||||||
|
sleep(0.05)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
return { exec = exec }
|
||||||
end
|
end
|
||||||
|
@ -19,7 +19,7 @@ os.loadAPI("dev/boiler_rtu.lua")
|
|||||||
os.loadAPI("dev/imatrix_rtu.lua")
|
os.loadAPI("dev/imatrix_rtu.lua")
|
||||||
os.loadAPI("dev/turbine_rtu.lua")
|
os.loadAPI("dev/turbine_rtu.lua")
|
||||||
|
|
||||||
local RTU_VERSION = "alpha-v0.4.0"
|
local RTU_VERSION = "alpha-v0.4.1"
|
||||||
|
|
||||||
local print = util.print
|
local print = util.print
|
||||||
local println = util.println
|
local println = util.println
|
||||||
@ -58,11 +58,12 @@ local __shared_memory = {
|
|||||||
|
|
||||||
-- message queues
|
-- message queues
|
||||||
q = {
|
q = {
|
||||||
mq_comms = mqeueu.new()
|
mq_comms = mqueue.new()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
local smem_dev = __shared_memory.rtu_dev
|
local smem_dev = __shared_memory.rtu_dev
|
||||||
|
local smem_sys = __shared_memory.rtu_sys
|
||||||
|
|
||||||
-- get modem
|
-- get modem
|
||||||
if smem_dev.modem == nil then
|
if smem_dev.modem == nil then
|
||||||
@ -71,7 +72,7 @@ if smem_dev.modem == nil then
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
local rtu_comms = rtu.rtu_comms(modem, config.LISTEN_PORT, config.SERVER_PORT)
|
smem_sys.rtu_comms = rtu.rtu_comms(smem_dev.modem, config.LISTEN_PORT, config.SERVER_PORT)
|
||||||
|
|
||||||
----------------------------------------
|
----------------------------------------
|
||||||
-- interpret config and init units
|
-- interpret config and init units
|
||||||
|
@ -15,6 +15,8 @@ local COMMS_CLOCK = 0.25 -- (4Hz, 5 ticks)
|
|||||||
function thread__main(smem)
|
function thread__main(smem)
|
||||||
-- execute thread
|
-- execute thread
|
||||||
local exec = function ()
|
local exec = function ()
|
||||||
|
log._debug("main thread start")
|
||||||
|
|
||||||
-- advertisement/heartbeat clock
|
-- advertisement/heartbeat clock
|
||||||
local loop_clock = os.startTimer(MAIN_CLOCK)
|
local loop_clock = os.startTimer(MAIN_CLOCK)
|
||||||
|
|
||||||
@ -22,6 +24,7 @@ function thread__main(smem)
|
|||||||
local rtu_state = smem.rtu_state
|
local rtu_state = smem.rtu_state
|
||||||
local rtu_dev = smem.rtu_dev
|
local rtu_dev = smem.rtu_dev
|
||||||
local rtu_comms = smem.rtu_sys.rtu_comms
|
local rtu_comms = smem.rtu_sys.rtu_comms
|
||||||
|
local units = smem.rtu_sys.units
|
||||||
|
|
||||||
-- event loop
|
-- event loop
|
||||||
while true do
|
while true do
|
||||||
@ -102,6 +105,8 @@ end
|
|||||||
function thread__comms(smem)
|
function thread__comms(smem)
|
||||||
-- execute thread
|
-- execute thread
|
||||||
local exec = function ()
|
local exec = function ()
|
||||||
|
log._debug("comms thread start")
|
||||||
|
|
||||||
-- load in from shared memory
|
-- load in from shared memory
|
||||||
local rtu_state = smem.rtu_state
|
local rtu_state = smem.rtu_state
|
||||||
local rtu_comms = smem.rtu_sys.rtu_comms
|
local rtu_comms = smem.rtu_sys.rtu_comms
|
||||||
@ -127,7 +132,7 @@ function thread__comms(smem)
|
|||||||
rtu_comms.handle_packet(msg.message, units, rtu_state)
|
rtu_comms.handle_packet(msg.message, units, rtu_state)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- quick yield
|
-- quick yield if we are looping right back
|
||||||
if comms_queue.ready() then util.nop() end
|
if comms_queue.ready() then util.nop() end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -139,9 +144,14 @@ function thread__comms(smem)
|
|||||||
|
|
||||||
-- delay before next check
|
-- delay before next check
|
||||||
local sleep_for = COMMS_CLOCK - (util.time() - last_update)
|
local sleep_for = COMMS_CLOCK - (util.time() - last_update)
|
||||||
if sleep_for > 0.05 then
|
last_update = util.time()
|
||||||
|
if sleep_for > 0 then
|
||||||
sleep(sleep_for)
|
sleep(sleep_for)
|
||||||
|
else
|
||||||
|
sleep(0.05)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
return { exec = exec }
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user