Merge branch 'devel' into color-update
This commit is contained in:
28
rtu/rtu.lua
28
rtu/rtu.lua
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user