From fc7b83a18a6109b508b702358bec807dbca80ef3 Mon Sep 17 00:00:00 2001 From: Mikayla Fischler Date: Sat, 4 Jun 2022 10:49:36 -0400 Subject: [PATCH] #28 #66 #59 new RTUs --- rtu/dev/envd_rtu.lua | 26 +++++++++++++++++++++ rtu/dev/sna_rtu.lua | 37 ++++++++++++++++++++++++++++++ rtu/dev/sps_rtu.lua | 47 ++++++++++++++++++++++++++++++++++++++ scada-common/comms.lua | 5 +++- scada-common/types.lua | 5 +++- supervisor/session/rtu.lua | 5 ++++ 6 files changed, 123 insertions(+), 2 deletions(-) create mode 100644 rtu/dev/envd_rtu.lua create mode 100644 rtu/dev/sna_rtu.lua create mode 100644 rtu/dev/sps_rtu.lua diff --git a/rtu/dev/envd_rtu.lua b/rtu/dev/envd_rtu.lua new file mode 100644 index 0000000..c09ee0c --- /dev/null +++ b/rtu/dev/envd_rtu.lua @@ -0,0 +1,26 @@ +local rtu = require("rtu.rtu") + +local envd_rtu = {} + +-- create new environment detector device +---@param envd table +function envd_rtu.new(envd) + local unit = rtu.init_unit() + + -- discrete inputs -- + -- none + + -- coils -- + -- none + + -- input registers -- + unit.connect_input_reg(envd.getRadiation) + unit.connect_input_reg(envd.getRadiationRaw) + + -- holding registers -- + -- none + + return unit.interface() +end + +return envd_rtu diff --git a/rtu/dev/sna_rtu.lua b/rtu/dev/sna_rtu.lua new file mode 100644 index 0000000..a4c250f --- /dev/null +++ b/rtu/dev/sna_rtu.lua @@ -0,0 +1,37 @@ +local rtu = require("rtu.rtu") + +local sna_rtu = {} + +-- create new solar neutron activator (sna) device +---@param sna table +function sna_rtu.new(sna) + local unit = rtu.init_unit() + + -- discrete inputs -- + -- none + + -- coils -- + -- none + + -- input registers -- + -- build properties + unit.connect_input_reg(sna.getInputCapacity) + unit.connect_input_reg(sna.getOutputCapacity) + -- current state + unit.connect_input_reg(sna.getProductionRate) + unit.connect_input_reg(sna.getPeakProductionRate) + -- tanks + unit.connect_input_reg(sna.getInput) + unit.connect_input_reg(sna.getInputNeeded) + unit.connect_input_reg(sna.getInputFilledPercentage) + unit.connect_input_reg(sna.getOutput) + unit.connect_input_reg(sna.getOutputNeeded) + unit.connect_input_reg(sna.getOutputFilledPercentage) + + -- holding registers -- + -- none + + return unit.interface() +end + +return sna_rtu diff --git a/rtu/dev/sps_rtu.lua b/rtu/dev/sps_rtu.lua new file mode 100644 index 0000000..3b7fdf1 --- /dev/null +++ b/rtu/dev/sps_rtu.lua @@ -0,0 +1,47 @@ +local rtu = require("rtu.rtu") + +local sps_rtu = {} + +-- create new super-critical phase shifter (sps) device +---@param sps table +function sps_rtu.new(sps) + local unit = rtu.init_unit() + + -- discrete inputs -- + unit.connect_di(sps.isFormed) + + -- coils -- + -- none + + -- input registers -- + -- multiblock properties + unit.connect_input_reg(sps.getLength) + unit.connect_input_reg(sps.getWidth) + unit.connect_input_reg(sps.getHeight) + unit.connect_input_reg(sps.getMinPos) + unit.connect_input_reg(sps.getMaxPos) + -- build properties + unit.connect_input_reg(sps.getCoils) + unit.connect_input_reg(sps.getInputCapacity) + unit.connect_input_reg(sps.getOutputCapacity) + unit.connect_input_reg(sps.getMaxEnergy) + -- current state + unit.connect_input_reg(sps.getProcessRate) + -- tanks + unit.connect_input_reg(sps.getInput) + unit.connect_input_reg(sps.getInputNeeded) + unit.connect_input_reg(sps.getInputFilledPercentage) + unit.connect_input_reg(sps.getOutput) + unit.connect_input_reg(sps.getOutputNeeded) + unit.connect_input_reg(sps.getOutputFilledPercentage) + unit.connect_input_reg(sps.getEnergy) + unit.connect_input_reg(sps.getEnergyNeeded) + unit.connect_input_reg(sps.getEnergyFilledPercentage) + + -- holding registers -- + -- none + + return unit.interface() +end + +return sps_rtu diff --git a/scada-common/comms.lua b/scada-common/comms.lua index 30cadcf..61a0836 100644 --- a/scada-common/comms.lua +++ b/scada-common/comms.lua @@ -56,7 +56,10 @@ local RTU_UNIT_TYPES = { TURBINE = 3, -- turbine TURBINE_VALVE = 4, -- turbine, mekanism 10.1+ EMACHINE = 5, -- energy machine - IMATRIX = 6 -- induction matrix + IMATRIX = 6, -- induction matrix + SPS = 7, -- SPS + SNA = 8, -- SNA + ENV_DETECTOR = 9 -- environment detector } comms.PROTOCOLS = PROTOCOLS diff --git a/scada-common/types.lua b/scada-common/types.lua index b1b5e8c..65aa19f 100644 --- a/scada-common/types.lua +++ b/scada-common/types.lua @@ -41,7 +41,10 @@ types.rtu_t = { turbine = "turbine", turbine_valve = "turbine_valve", energy_machine = "emachine", - induction_matrix = "induction_matrix" + induction_matrix = "induction_matrix", + sps = "sps", + sna = "sna", + env_detector = "environment_detector" } ---@alias rps_status_t string diff --git a/supervisor/session/rtu.lua b/supervisor/session/rtu.lua index 5454917..5598e82 100644 --- a/supervisor/session/rtu.lua +++ b/supervisor/session/rtu.lua @@ -101,6 +101,11 @@ function rtu.new_session(id, in_queue, out_queue, advertisement) unit = svrs_emachine.new(self.id, i, unit_advert, self.out_q) elseif u_type == RTU_UNIT_TYPES.IMATRIX then -- @todo Mekanism 10.1+ + elseif u_type == RTU_UNIT_TYPES.SPS then + -- @todo Mekanism 10.1+ + elseif u_type == RTU_UNIT_TYPES.SNA then + -- @todo Mekanism 10.1+ + elseif u_type == RTU_UNIT_TYPES.ENV_DETECTOR then else log.error(log_header .. "bad advertisement: encountered unsupported RTU type") end