From fe3b8e6f88641e7c4b61eb9173c05dbef6743356 Mon Sep 17 00:00:00 2001 From: Mikayla Fischler Date: Wed, 27 Apr 2022 17:59:25 -0400 Subject: [PATCH] fixed up worker loop delay logic --- reactor-plc/startup.lua | 2 +- reactor-plc/threads.lua | 43 +++++++++++++++-------------------------- rtu/startup.lua | 2 +- rtu/threads.lua | 19 +++++++++--------- 4 files changed, 27 insertions(+), 39 deletions(-) diff --git a/reactor-plc/startup.lua b/reactor-plc/startup.lua index ae38449..2ceb289 100644 --- a/reactor-plc/startup.lua +++ b/reactor-plc/startup.lua @@ -12,7 +12,7 @@ os.loadAPI("config.lua") os.loadAPI("plc.lua") os.loadAPI("threads.lua") -local R_PLC_VERSION = "alpha-v0.4.4" +local R_PLC_VERSION = "alpha-v0.4.5" local print = util.print local println = util.println diff --git a/reactor-plc/threads.lua b/reactor-plc/threads.lua index b774dbb..ed1d93b 100644 --- a/reactor-plc/threads.lua +++ b/reactor-plc/threads.lua @@ -10,9 +10,9 @@ local println_ts = util.println_ts local psleep = util.psleep -local MAIN_CLOCK = 1 -- (1Hz, 20 ticks) -local ISS_CLOCK = 0.5 -- (2Hz, 10 ticks) -local COMMS_CLOCK = 0.25 -- (4Hz, 5 ticks) +local MAIN_CLOCK = 1 -- (1Hz, 20 ticks) +local ISS_SLEEP = 500 -- (500ms, 10 ticks) +local COMMS_SLEEP = 150 -- (150ms, 3 ticks) local MQ__ISS_CMD = { SCRAM = 1, @@ -44,9 +44,6 @@ function thread__main(smem, init) local plc_comms = smem.plc_sys.plc_comms local conn_watchdog = smem.plc_sys.conn_watchdog - -- debug - local last_update = util.time() - -- event loop while true do local event, param1, param2, param3, param4, param5 = os.pullEventRaw() @@ -71,11 +68,6 @@ function thread__main(smem, init) end end end - - -- debug - print(util.time() - last_update) - println("ms") - last_update = util.time() end elseif event == "modem_message" and networked and not plc_state.no_modem then -- got a packet @@ -271,8 +263,8 @@ function thread__iss(smem) -- received a packet end - -- quick yield if we are looping right back - if iss_queue.ready() then util.nop() end + -- quick yield + util.nop() end -- check for termination request @@ -300,13 +292,11 @@ function thread__iss(smem) -- println("ms") -- last_update = util.time() - -- delay before next check - local sleep_for = ISS_CLOCK - (util.time() - last_update) + -- delay before next check, only if >50ms since we did already yield + local sleep_for = ISS_SLEEP - (util.time() - last_update) last_update = util.time() - if sleep_for > 0 then - psleep(sleep_for) - else - psleep(0.05) + if sleep_for >= 50 then + psleep(sleep_for / 1000.0) end end end @@ -349,8 +339,8 @@ function thread__comms(smem) plc_comms.handle_packet(msg.message, plc_state) end - -- quick yield if we are looping right back - if comms_queue.ready() then util.nop() end + -- quick yield + util.nop() end -- check for termination request @@ -359,13 +349,12 @@ function thread__comms(smem) break end - -- delay before next check - local sleep_for = COMMS_CLOCK - (util.time() - last_update) + -- delay before next check, only if >50ms since we did already yield + local sleep_for = COMMS_SLEEP - (util.time() - last_update) last_update = util.time() - if sleep_for > 0 then - psleep(sleep_for) - else - psleep(0.05) + if sleep_for >= 50 then + println("sleep for " .. (sleep_for / 1000.0)) + psleep(sleep_for / 1000.0) end end end diff --git a/rtu/startup.lua b/rtu/startup.lua index 8fea859..f3e1a8d 100644 --- a/rtu/startup.lua +++ b/rtu/startup.lua @@ -19,7 +19,7 @@ os.loadAPI("dev/boiler_rtu.lua") os.loadAPI("dev/imatrix_rtu.lua") os.loadAPI("dev/turbine_rtu.lua") -local RTU_VERSION = "alpha-v0.4.4" +local RTU_VERSION = "alpha-v0.4.5" local print = util.print local println = util.println diff --git a/rtu/threads.lua b/rtu/threads.lua index c8abdd9..c2c1cfe 100644 --- a/rtu/threads.lua +++ b/rtu/threads.lua @@ -10,8 +10,8 @@ local println_ts = util.println_ts local psleep = util.psleep -local MAIN_CLOCK = 2 -- (2Hz, 40 ticks) -local COMMS_CLOCK = 0.25 -- (4Hz, 5 ticks) +local MAIN_CLOCK = 2 -- (2Hz, 40 ticks) +local COMMS_SLEEP = 150 -- (150ms, 3 ticks) -- main thread function thread__main(smem) @@ -134,8 +134,8 @@ function thread__comms(smem) rtu_comms.handle_packet(msg.message, units, rtu_state) end - -- quick yield if we are looping right back - if comms_queue.ready() then util.nop() end + -- quick yield + util.nop() end -- check for termination request @@ -144,13 +144,12 @@ function thread__comms(smem) break end - -- delay before next check - local sleep_for = COMMS_CLOCK - (util.time() - last_update) + -- delay before next check, only if >50ms since we did already yield + local sleep_for = COMMS_SLEEP - (util.time() - last_update) last_update = util.time() - if sleep_for > 0 then - psleep(sleep_for) - else - psleep(0.05) + if sleep_for >= 50 then + println("sleep for " .. (sleep_for / 1000.0)) + psleep(sleep_for / 1000.0) end end end