Merge branch 'devel' into color-update

This commit is contained in:
Mikayla Fischler 2024-03-09 18:51:21 -05:00
commit d5b166dcc6
11 changed files with 49 additions and 67 deletions

View File

@ -7,7 +7,7 @@ local boilerv_rtu = {}
---@param boiler table
---@return rtu_device interface, boolean faulted
function boilerv_rtu.new(boiler)
local unit = rtu.init_unit()
local unit = rtu.init_unit(boiler)
-- disable auto fault clearing
boiler.__p_clear_fault()

View File

@ -7,7 +7,7 @@ local dynamicv_rtu = {}
---@param dynamic_tank table
---@return rtu_device interface, boolean faulted
function dynamicv_rtu.new(dynamic_tank)
local unit = rtu.init_unit()
local unit = rtu.init_unit(dynamic_tank)
-- disable auto fault clearing
dynamic_tank.__p_clear_fault()

View File

@ -7,7 +7,7 @@ local envd_rtu = {}
---@param envd table
---@return rtu_device interface, boolean faulted
function envd_rtu.new(envd)
local unit = rtu.init_unit()
local unit = rtu.init_unit(envd)
-- disable auto fault clearing
envd.__p_clear_fault()

View File

@ -7,7 +7,7 @@ local imatrix_rtu = {}
---@param imatrix table
---@return rtu_device interface, boolean faulted
function imatrix_rtu.new(imatrix)
local unit = rtu.init_unit()
local unit = rtu.init_unit(imatrix)
-- disable auto fault clearing
imatrix.__p_clear_fault()

View File

@ -7,7 +7,7 @@ local sna_rtu = {}
---@param sna table
---@return rtu_device interface, boolean faulted
function sna_rtu.new(sna)
local unit = rtu.init_unit()
local unit = rtu.init_unit(sna)
-- disable auto fault clearing
sna.__p_clear_fault()

View File

@ -7,7 +7,7 @@ local sps_rtu = {}
---@param sps table
---@return rtu_device interface, boolean faulted
function sps_rtu.new(sps)
local unit = rtu.init_unit()
local unit = rtu.init_unit(sps)
-- disable auto fault clearing
sps.__p_clear_fault()

View File

@ -7,7 +7,7 @@ local turbinev_rtu = {}
---@param turbine table
---@return rtu_device interface, boolean faulted
function turbinev_rtu.new(turbine)
local unit = rtu.init_unit()
local unit = rtu.init_unit(turbine)
-- disable auto fault clearing
turbine.__p_clear_fault()

View File

@ -37,12 +37,7 @@ function modbus.new(rtu_dev, use_parallel_read)
end)
else
readings[i], access_fault = rtu_dev.read_coil(addr)
if access_fault then
return_ok = false
readings = MODBUS_EXCODE.SERVER_DEVICE_FAIL
break
end
if access_fault then break end
end
end
@ -86,12 +81,7 @@ function modbus.new(rtu_dev, use_parallel_read)
end)
else
readings[i], access_fault = rtu_dev.read_di(addr)
if access_fault then
return_ok = false
readings = MODBUS_EXCODE.SERVER_DEVICE_FAIL
break
end
if access_fault then break end
end
end
@ -135,12 +125,7 @@ function modbus.new(rtu_dev, use_parallel_read)
end)
else
readings[i], access_fault = rtu_dev.read_holding_reg(addr)
if access_fault then
return_ok = false
readings = MODBUS_EXCODE.SERVER_DEVICE_FAIL
break
end
if access_fault then break end
end
end
@ -184,12 +169,7 @@ function modbus.new(rtu_dev, use_parallel_read)
end)
else
readings[i], access_fault = rtu_dev.read_input_reg(addr)
if access_fault then
return_ok = false
readings = MODBUS_EXCODE.SERVER_DEVICE_FAIL
break
end
if access_fault then break end
end
end

View File

@ -77,9 +77,11 @@ function rtu.load_config()
return cfv.valid()
end
-- create a new RTU unit
-- create a new RTU unit<br>
-- if this is for a PPM peripheral, auto fault clearing MUST stay enabled once access begins
---@nodiscard
function rtu.init_unit()
---@param device table|nil peripheral device, if applicable
function rtu.init_unit(device)
local self = {
discrete_inputs = {},
coils = {},
@ -96,6 +98,10 @@ function rtu.init_unit()
---@class rtu
local protected = {}
-- function to check if the peripheral (if exists) is faulted
local function _is_faulted() return false end
if device then _is_faulted = device.__p_is_faulted end
-- refresh IO count
local function _count_io()
self.io_count_cache = { #self.discrete_inputs, #self.coils, #self.input_regs, #self.holding_regs }
@ -122,9 +128,8 @@ function rtu.init_unit()
---@param di_addr integer
---@return any value, boolean access_fault
function public.read_di(di_addr)
ppm.clear_fault()
local value = self.discrete_inputs[di_addr].read()
return value, ppm.is_faulted()
return value, _is_faulted()
end
-- coils: single bit read-write
@ -143,9 +148,8 @@ function rtu.init_unit()
---@param coil_addr integer
---@return any value, boolean access_fault
function public.read_coil(coil_addr)
ppm.clear_fault()
local value = self.coils[coil_addr].read()
return value, ppm.is_faulted()
return value, _is_faulted()
end
-- write coil
@ -153,9 +157,8 @@ function rtu.init_unit()
---@param value any
---@return boolean access_fault
function public.write_coil(coil_addr, value)
ppm.clear_fault()
self.coils[coil_addr].write(value)
return ppm.is_faulted()
return _is_faulted()
end
-- input registers: multi-bit read-only
@ -173,9 +176,8 @@ function rtu.init_unit()
---@param reg_addr integer
---@return any value, boolean access_fault
function public.read_input_reg(reg_addr)
ppm.clear_fault()
local value = self.input_regs[reg_addr].read()
return value, ppm.is_faulted()
return value, _is_faulted()
end
-- holding registers: multi-bit read-write
@ -194,9 +196,8 @@ function rtu.init_unit()
---@param reg_addr integer
---@return any value, boolean access_fault
function public.read_holding_reg(reg_addr)
ppm.clear_fault()
local value = self.holding_regs[reg_addr].read()
return value, ppm.is_faulted()
return value, _is_faulted()
end
-- write holding register
@ -204,9 +205,8 @@ function rtu.init_unit()
---@param value any
---@return boolean access_fault
function public.write_holding_reg(reg_addr, value)
ppm.clear_fault()
self.holding_regs[reg_addr].write(value)
return ppm.is_faulted()
return _is_faulted()
end
-- public RTU device access

View File

@ -131,6 +131,7 @@ local function peri_init(iface)
local mt = {
__index = function (_, key)
return (function ()
-- this will continuously be counting calls here as faults
-- unlike other functions, faults here can't be cleared as it is just not defined
if self.fault_counts[key] == nil then
@ -155,7 +156,8 @@ local function peri_init(iface)
self.fault_counts[key] = self.fault_counts[key] + 1
return (function () return UNDEFINED_FIELD end)
return UNDEFINED_FIELD
end)
end
}

View File

@ -22,7 +22,7 @@ local t_pack = table.pack
local util = {}
-- scada-common version
util.version = "1.1.18"
util.version = "1.1.19"
util.TICK_TIME_S = 0.05
util.TICK_TIME_MS = 50