code cleanup and bugfixes
This commit is contained in:
@@ -27,7 +27,7 @@ redstone_rtu.new = function ()
|
||||
return digital_read(rs.getInput(side))
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
self.rtu.connect_di(f_read)
|
||||
end
|
||||
|
||||
@@ -61,7 +61,7 @@ redstone_rtu.new = function ()
|
||||
rs.setOutput(side, digital_is_active(channel, level))
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
self.rtu.connect_coil(f_read, f_write)
|
||||
end
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ modbus.new = function (rtu_dev, use_parallel_read)
|
||||
local access_fault = false
|
||||
local discrete_inputs, _, _, _ = self.rtu.io_count()
|
||||
local return_ok = ((di_addr_start + count) <= discrete_inputs) and (count > 0)
|
||||
|
||||
|
||||
if return_ok then
|
||||
for i = 1, count do
|
||||
local addr = di_addr_start + i - 1
|
||||
@@ -197,7 +197,7 @@ modbus.new = function (rtu_dev, use_parallel_read)
|
||||
|
||||
if access_fault then
|
||||
return_ok = false
|
||||
readings = MODBUS_EXCODE.SERVER_DEVICE_FAIL
|
||||
response = MODBUS_EXCODE.SERVER_DEVICE_FAIL
|
||||
end
|
||||
else
|
||||
response = MODBUS_EXCODE.ILLEGAL_DATA_ADDR
|
||||
@@ -210,13 +210,13 @@ modbus.new = function (rtu_dev, use_parallel_read)
|
||||
local response = nil
|
||||
local _, _, _, hold_regs = self.rtu.io_count()
|
||||
local return_ok = hr_addr <= hold_regs
|
||||
|
||||
|
||||
if return_ok then
|
||||
local access_fault = self.rtu.write_holding_reg(hr_addr, value)
|
||||
|
||||
if access_fault then
|
||||
return_ok = false
|
||||
readings = MODBUS_EXCODE.SERVER_DEVICE_FAIL
|
||||
response = MODBUS_EXCODE.SERVER_DEVICE_FAIL
|
||||
end
|
||||
else
|
||||
response = MODBUS_EXCODE.ILLEGAL_DATA_ADDR
|
||||
@@ -238,7 +238,7 @@ modbus.new = function (rtu_dev, use_parallel_read)
|
||||
|
||||
if access_fault then
|
||||
return_ok = false
|
||||
readings = MODBUS_EXCODE.SERVER_DEVICE_FAIL
|
||||
response = MODBUS_EXCODE.SERVER_DEVICE_FAIL
|
||||
break
|
||||
end
|
||||
end
|
||||
@@ -262,7 +262,7 @@ modbus.new = function (rtu_dev, use_parallel_read)
|
||||
|
||||
if access_fault then
|
||||
return_ok = false
|
||||
readings = MODBUS_EXCODE.SERVER_DEVICE_FAIL
|
||||
response = MODBUS_EXCODE.SERVER_DEVICE_FAIL
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
12
rtu/rtu.lua
12
rtu/rtu.lua
@@ -1,6 +1,8 @@
|
||||
local comms = require("scada-common.comms")
|
||||
local ppm = require("scada-common.ppm")
|
||||
local log = require("scada-common.log")
|
||||
local types = require("scada-common.types")
|
||||
local util = require("scada-common.util")
|
||||
|
||||
local modbus = require("modbus")
|
||||
|
||||
@@ -12,6 +14,11 @@ local PROTOCOLS = comms.PROTOCOLS
|
||||
local SCADA_MGMT_TYPES = comms.SCADA_MGMT_TYPES
|
||||
local RTU_ADVERT_TYPES = comms.RTU_ADVERT_TYPES
|
||||
|
||||
local print = util.print
|
||||
local println = util.println
|
||||
local print_ts = util.print_ts
|
||||
local println_ts = util.println_ts
|
||||
|
||||
rtu.init_unit = function ()
|
||||
local self = {
|
||||
discrete_inputs = {},
|
||||
@@ -136,6 +143,8 @@ rtu.comms = function (modem, local_port, server_port, conn_watchdog)
|
||||
conn_watchdog = conn_watchdog
|
||||
}
|
||||
|
||||
local insert = table.insert
|
||||
|
||||
-- open modem
|
||||
if not self.modem.isOpen(self.l_port) then
|
||||
self.modem.open(self.l_port)
|
||||
@@ -337,7 +346,7 @@ rtu.comms = function (modem, local_port, server_port, conn_watchdog)
|
||||
send_advertisement(units)
|
||||
else
|
||||
-- not supported
|
||||
log.warning("RTU got unexpected SCADA message type " .. packet.type, true)
|
||||
log.warning("RTU got unexpected SCADA message type " .. packet.type)
|
||||
end
|
||||
else
|
||||
-- should be unreachable assuming packet is from parse_packet()
|
||||
@@ -352,7 +361,6 @@ rtu.comms = function (modem, local_port, server_port, conn_watchdog)
|
||||
parse_packet = parse_packet,
|
||||
handle_packet = handle_packet,
|
||||
send_advertisement = send_advertisement,
|
||||
send_heartbeat = send_heartbeat,
|
||||
unlink = unlink,
|
||||
close = close
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ local imatrix_rtu = require("dev.imatrix_rtu")
|
||||
local turbine_rtu = require("dev.turbine_rtu")
|
||||
local turbinev_rtu = require("dev.turbinev_rtu")
|
||||
|
||||
local RTU_VERSION = "alpha-v0.6.1"
|
||||
local RTU_VERSION = "alpha-v0.6.2"
|
||||
|
||||
local rtu_t = types.rtu_t
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
local comms = require("scada-common.comms")
|
||||
local log = require("scada-common.log")
|
||||
local mqueue = require("scada-common.mqueue")
|
||||
local ppm = require("scada-common.ppm")
|
||||
local types = require("scada-common.types")
|
||||
local util = require("scada-common.util")
|
||||
@@ -46,6 +47,7 @@ threads.thread__main = function (smem)
|
||||
|
||||
-- event loop
|
||||
while true do
|
||||
---@diagnostic disable-next-line: undefined-field
|
||||
local event, param1, param2, param3, param4, param5 = os.pullEventRaw()
|
||||
|
||||
if event == "timer" and param1 == loop_clock then
|
||||
@@ -210,6 +212,7 @@ threads.thread__unit_comms = function (smem, unit)
|
||||
|
||||
-- load in from shared memory
|
||||
local rtu_state = smem.rtu_state
|
||||
local rtu_comms = smem.rtu_sys.rtu_comms
|
||||
local packet_queue = unit.pkt_queue
|
||||
|
||||
local last_update = util.time()
|
||||
@@ -228,7 +231,7 @@ threads.thread__unit_comms = function (smem, unit)
|
||||
-- received a packet
|
||||
unit.modbus_busy = true
|
||||
local return_code, reply = unit.modbus_io.handle_packet(packet)
|
||||
rtu.send_modbus(reply)
|
||||
rtu_comms.send_modbus(reply)
|
||||
unit.modbus_busy = false
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user