From 824c22441a71f79cc43e6c1f2738bca8cb2168ed Mon Sep 17 00:00:00 2001 From: vux62295 Date: Fri, 11 Sep 2026 12:39:10 +0100 Subject: [PATCH 1/4] GEM OPC Implementation --- .../Db/GEM_Relay_Assignment.template | 17 ++++ .../Db/GEM_Sensor_Status.template | 19 ++++ .../Db/GEM_vacuum.substitutions | 46 +++++++++ OPCUA/OPCUA-IOC-01App/Db/GEM_vacuum_header.db | 97 +++++++++++++++++++ 4 files changed, 179 insertions(+) create mode 100644 OPCUA/OPCUA-IOC-01App/Db/GEM_Relay_Assignment.template create mode 100644 OPCUA/OPCUA-IOC-01App/Db/GEM_Sensor_Status.template create mode 100644 OPCUA/OPCUA-IOC-01App/Db/GEM_vacuum.substitutions create mode 100644 OPCUA/OPCUA-IOC-01App/Db/GEM_vacuum_header.db diff --git a/OPCUA/OPCUA-IOC-01App/Db/GEM_Relay_Assignment.template b/OPCUA/OPCUA-IOC-01App/Db/GEM_Relay_Assignment.template new file mode 100644 index 000000000..d6991f963 --- /dev/null +++ b/OPCUA/OPCUA-IOC-01App/Db/GEM_Relay_Assignment.template @@ -0,0 +1,17 @@ +record(mbbi, "$(P)$(R):$(PV_NAME)") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=$(NS);s=$(NAME_PREFIX)$(NAME_SUFFIX)") + field(SCAN, "I/O Intr") + field(ZRVL, "0") + field(ZRST, "None") + field(ONVL, "1") + field(ONST, "A1") + field(TWVL, "2") + field(TWST, "A2") + field(THVL, "3") + field(THST, "B1") + field(FRVL, "4") + field(FRST, "B2") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} diff --git a/OPCUA/OPCUA-IOC-01App/Db/GEM_Sensor_Status.template b/OPCUA/OPCUA-IOC-01App/Db/GEM_Sensor_Status.template new file mode 100644 index 000000000..d3af0bfa6 --- /dev/null +++ b/OPCUA/OPCUA-IOC-01App/Db/GEM_Sensor_Status.template @@ -0,0 +1,19 @@ +record(mbbi, "$(P)$(R):$(PV_NAME)") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=$(NS);s=$(NAME_PREFIX)$(NAME_SUFFIX)") + field(SCAN, "I/O Intr") + field(ZRVL, "0") + field(ZRST, "Data OK") + field(ONVL, "1") + field(ONST, "Under range") + field(TWVL, "2") + field(TWST, "Over range") + field(THVL, "3") + field(THST, "Error") + field(FRVL, "4") + field(FRST, "Off") + field(FVVL, "5") + field(FVST, "No hardware") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} diff --git a/OPCUA/OPCUA-IOC-01App/Db/GEM_vacuum.substitutions b/OPCUA/OPCUA-IOC-01App/Db/GEM_vacuum.substitutions new file mode 100644 index 000000000..a431dc2c5 --- /dev/null +++ b/OPCUA/OPCUA-IOC-01App/Db/GEM_vacuum.substitutions @@ -0,0 +1,46 @@ +global{NS="\$(NS)",P="\$(P)",SUBS="\$(SUBS)",DEBUG="\$(DEBUG=0)"} +file "$(TOP)/OPCUA-IOC-01App/Db/MAPS_vacuum.template" { + pattern{ RECORD_TYPE, PV_NAME, NAME_PREFIX, NAME_SUFFIX} + { "stringin", "UNIT", "\$(NAME_PREFIX)", ".ENG_UNIT" } + { "bi", "COMMS_ERROR", "\$(NAME_PREFIX)", ".COMM_ERROR" } + + { "stringin", "PRESSURE_A1", "\$(NAME_PREFIX)", ".TPG_A1.PRESSURE_VALUE" } + { "stringin", "NAME_A1", "\$(NAME_PREFIX)", ".TPG_A1.NAME" } + { "stringin", "THRESHOLD_LOW_A1", "\$(NAME_PREFIX)", ".RL1.MIN_ON_SP" } + { "stringin", "THRESHOLD_HI_A1", "\$(NAME_PREFIX)", ".RL1.MAX_OFF_SP" } + { "bi", "SWITCH_FUNC_STATUS_A1", "\$(NAME_PREFIX)", ".RL1.OUTPUT" } + + { "stringin", "PRESSURE_A2", "\$(NAME_PREFIX)", ".TPG_A2.PRESSURE_VALUE" } + { "stringin", "NAME_A2", "\$(NAME_PREFIX)", ".TPG_A2.NAME" } + { "stringin", "THRESHOLD_LOW_A2", "\$(NAME_PREFIX)", ".RL2.MIN_ON_SP" } + { "stringin", "THRESHOLD_HI_A2", "\$(NAME_PREFIX)", ".RL2.MAX_OFF_SP" } + { "bi", "SWITCH_FUNC_STATUS_A2", "\$(NAME_PREFIX)", ".RL2.OUTPUT" } + + { "stringin", "PRESSURE_B1", "\$(NAME_PREFIX)", ".TPG_B1.PRESSURE_VALUE" } + { "stringin", "NAME_B1", "\$(NAME_PREFIX)", ".TPG_B1.NAME" } + { "stringin", "THRESHOLD_LOW_B1", "\$(NAME_PREFIX)", ".RL3.MIN_ON_SP" } + { "stringin", "THRESHOLD_HI_B1", "\$(NAME_PREFIX)", ".RL3.MAX_OFF_SP" } + { "bi", "SWITCH_FUNC_STATUS_B1", "\$(NAME_PREFIX)", ".RL3.OUTPUT" } + + { "stringin", "PRESSURE_B2", "\$(NAME_PREFIX)", ".TPG_B2.PRESSURE_VALUE" } + { "stringin", "NAME_B2", "\$(NAME_PREFIX)", ".TPG_B2.NAME" } + { "stringin", "THRESHOLD_LOW_B2", "\$(NAME_PREFIX)", ".RL4.MIN_ON_SP" } + { "stringin", "THRESHOLD_HI_B2", "\$(NAME_PREFIX)", ".RL4.MAX_OFF_SP" } + { "bi", "SWITCH_FUNC_STATUS_B2", "\$(NAME_PREFIX)", ".RL4.OUTPUT" } +} + +file "$(TOP)/OPCUA-IOC-01App/Db/GEM_Relay_Assignment.template" { + pattern{ RECORD_TYPE, PV_NAME, NAME_PREFIX, NAME_SUFFIX} + { "mbbi", "SWITCH_FUNC_ASSIGN_A1", "\$(NAME_PREFIX)", ".RL1.ASSIGNED_CIRCUIT" } + { "mbbi", "SWITCH_FUNC_ASSIGN_A2", "\$(NAME_PREFIX)", ".RL2.ASSIGNED_CIRCUIT" } + { "mbbi", "SWITCH_FUNC_ASSIGN_B1", "\$(NAME_PREFIX)", ".RL3.ASSIGNED_CIRCUIT" } + { "mbbi", "SWITCH_FUNC_ASSIGN_B2", "\$(NAME_PREFIX)", ".RL4.ASSIGNED_CIRCUIT" } +} + +file "$(TOP)/OPCUA-IOC-01App/Db/GEM_Sensor_Status.template" { + pattern{ RECORD_TYPE, PV_NAME, NAME_PREFIX, NAME_SUFFIX} + { "mbbi", "MEASURED_VALUE_A1", "\$(NAME_PREFIX)", ".TPG_A1.PRESSURE_STATUS" } + { "mbbi", "MEASURED_VALUE_A2", "\$(NAME_PREFIX)", ".TPG_A2.PRESSURE_STATUS" } + { "mbbi", "MEASURED_VALUE_B1", "\$(NAME_PREFIX)", ".TPG_B1.PRESSURE_STATUS" } + { "mbbi", "MEASURED_VALUE_B2", "\$(NAME_PREFIX)", ".TPG_B2.PRESSURE_STATUS" } +} diff --git a/OPCUA/OPCUA-IOC-01App/Db/GEM_vacuum_header.db b/OPCUA/OPCUA-IOC-01App/Db/GEM_vacuum_header.db new file mode 100644 index 000000000..e81230308 --- /dev/null +++ b/OPCUA/OPCUA-IOC-01App/Db/GEM_vacuum_header.db @@ -0,0 +1,97 @@ +# PLC records: + +record(bo, "$(P)IS300") { + field(VAL, "1") + field(PINI, "YES") +} + +record(mbbi, "$(P)PLC:HIGH_VACUUM_VALVE") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=$(NS);s=Opc_GV2_STATUS") + field(SCAN, "I/O Intr") + field(ZRVL, "0") + field(ZRST, "Comm Lost") + field(ONVL, "1") + field(ONST, "Closed") + field(TWVL, "2") + field(TWST, "Opened") + field(THVL, "3") + field(THST, "Swiping") + field(FRVL, "4") + field(FRST, "Position Error") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(mbbi, "$(P)$(R1):ERROR") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=$(NS);s=OPC_TPG1_DATA.ALARM_ACTIVE") + field(ZRVL, "0") + field(ZRST, "No Error") + field(ONVL, "1") + field(ONST, "Some Error") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(mbbi, "$(P)$(R2):ERROR") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=$(NS);s=OPC_TPG2_DATA.ALARM_ACTIVE") + field(ZRVL, "0") + field(ZRST, "No Error") + field(ONVL, "1") + field(ONST, "Some Error") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(mbbi, "$(P)$(R1):UNIT:SP") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=$(NS);s=OPC_TPG1_DATA.ENG_UNIT") + field(ZRVL, "0") + field(ZRST, "mbar") + field(ONVL, "1") + field(ONST, "Torr") + field(TWVL, "2") + field(TWST, "Pa") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(mbbi, "$(P)$(R2):UNIT:SP") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=$(NS);s=OPC_TPG2_DATA.ENG_UNIT") + field(ZRVL, "0") + field(ZRST, "mbar") + field(ONVL, "1") + field(ONST, "Torr") + field(TWVL, "2") + field(TWST, "Pa") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(mbbi, "$(P)Opc_Tank_Window_Cycles") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=$(NS);s=Opc_TANK_WINDOW_CYCLES") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)Opc_Sample_Tank_Pressure") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=$(NS);s=Opc_ST_PRESSURE_STRING") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)Opc_Collimation_Tube_Pressure") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=$(NS);s=Opc_CT_PRESSURE_STRING") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + \ No newline at end of file From 6aff7655985fab74301807bf259f8b1eeacf55bb Mon Sep 17 00:00:00 2001 From: vux62295 Date: Mon, 14 Sep 2026 09:57:30 +0100 Subject: [PATCH 2/4] Makefile changes --- OPCUA/OPCUA-IOC-01App/Db/Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/OPCUA/OPCUA-IOC-01App/Db/Makefile b/OPCUA/OPCUA-IOC-01App/Db/Makefile index 85c8316e1..1756cdbaa 100644 --- a/OPCUA/OPCUA-IOC-01App/Db/Makefile +++ b/OPCUA/OPCUA-IOC-01App/Db/Makefile @@ -20,6 +20,8 @@ DB += Merlin_other_controllers.db DB += SSMUON_Header.db DB += SSMUON.db +DB += GEM_vacuum_header.db +DB += GEM_vacuum.db #---------------------------------------------------- # If .db template is not named *.template add # _template = From a30319d1468e7f4759bb10cf6923a06261cb1926 Mon Sep 17 00:00:00 2001 From: vux62295 Date: Tue, 15 Sep 2026 17:58:27 +0100 Subject: [PATCH 3/4] Created new template for Pressure Value --- .../Db/GEM_Vacuum_Pressure_Value.template | 8 ++++++++ OPCUA/OPCUA-IOC-01App/Db/GEM_vacuum.substitutions | 14 +++++++++----- 2 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 OPCUA/OPCUA-IOC-01App/Db/GEM_Vacuum_Pressure_Value.template diff --git a/OPCUA/OPCUA-IOC-01App/Db/GEM_Vacuum_Pressure_Value.template b/OPCUA/OPCUA-IOC-01App/Db/GEM_Vacuum_Pressure_Value.template new file mode 100644 index 000000000..da3540d30 --- /dev/null +++ b/OPCUA/OPCUA-IOC-01App/Db/GEM_Vacuum_Pressure_Value.template @@ -0,0 +1,8 @@ +record($(RECORD_TYPE), "$(P)$(R):$(PV_NAME)") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=$(NS);s=$(NAME_PREFIX)$(NAME_SUFFIX)") + field(PREC, "7") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} diff --git a/OPCUA/OPCUA-IOC-01App/Db/GEM_vacuum.substitutions b/OPCUA/OPCUA-IOC-01App/Db/GEM_vacuum.substitutions index a431dc2c5..a1a9fe00c 100644 --- a/OPCUA/OPCUA-IOC-01App/Db/GEM_vacuum.substitutions +++ b/OPCUA/OPCUA-IOC-01App/Db/GEM_vacuum.substitutions @@ -3,26 +3,22 @@ file "$(TOP)/OPCUA-IOC-01App/Db/MAPS_vacuum.template" { pattern{ RECORD_TYPE, PV_NAME, NAME_PREFIX, NAME_SUFFIX} { "stringin", "UNIT", "\$(NAME_PREFIX)", ".ENG_UNIT" } { "bi", "COMMS_ERROR", "\$(NAME_PREFIX)", ".COMM_ERROR" } - - { "stringin", "PRESSURE_A1", "\$(NAME_PREFIX)", ".TPG_A1.PRESSURE_VALUE" } + { "stringin", "NAME_A1", "\$(NAME_PREFIX)", ".TPG_A1.NAME" } { "stringin", "THRESHOLD_LOW_A1", "\$(NAME_PREFIX)", ".RL1.MIN_ON_SP" } { "stringin", "THRESHOLD_HI_A1", "\$(NAME_PREFIX)", ".RL1.MAX_OFF_SP" } { "bi", "SWITCH_FUNC_STATUS_A1", "\$(NAME_PREFIX)", ".RL1.OUTPUT" } - { "stringin", "PRESSURE_A2", "\$(NAME_PREFIX)", ".TPG_A2.PRESSURE_VALUE" } { "stringin", "NAME_A2", "\$(NAME_PREFIX)", ".TPG_A2.NAME" } { "stringin", "THRESHOLD_LOW_A2", "\$(NAME_PREFIX)", ".RL2.MIN_ON_SP" } { "stringin", "THRESHOLD_HI_A2", "\$(NAME_PREFIX)", ".RL2.MAX_OFF_SP" } { "bi", "SWITCH_FUNC_STATUS_A2", "\$(NAME_PREFIX)", ".RL2.OUTPUT" } - { "stringin", "PRESSURE_B1", "\$(NAME_PREFIX)", ".TPG_B1.PRESSURE_VALUE" } { "stringin", "NAME_B1", "\$(NAME_PREFIX)", ".TPG_B1.NAME" } { "stringin", "THRESHOLD_LOW_B1", "\$(NAME_PREFIX)", ".RL3.MIN_ON_SP" } { "stringin", "THRESHOLD_HI_B1", "\$(NAME_PREFIX)", ".RL3.MAX_OFF_SP" } { "bi", "SWITCH_FUNC_STATUS_B1", "\$(NAME_PREFIX)", ".RL3.OUTPUT" } - { "stringin", "PRESSURE_B2", "\$(NAME_PREFIX)", ".TPG_B2.PRESSURE_VALUE" } { "stringin", "NAME_B2", "\$(NAME_PREFIX)", ".TPG_B2.NAME" } { "stringin", "THRESHOLD_LOW_B2", "\$(NAME_PREFIX)", ".RL4.MIN_ON_SP" } { "stringin", "THRESHOLD_HI_B2", "\$(NAME_PREFIX)", ".RL4.MAX_OFF_SP" } @@ -44,3 +40,11 @@ file "$(TOP)/OPCUA-IOC-01App/Db/GEM_Sensor_Status.template" { { "mbbi", "MEASURED_VALUE_B1", "\$(NAME_PREFIX)", ".TPG_B1.PRESSURE_STATUS" } { "mbbi", "MEASURED_VALUE_B2", "\$(NAME_PREFIX)", ".TPG_B2.PRESSURE_STATUS" } } + +file "$(TOP)/OPCUA-IOC-01App/Db/GEM_Vacuum_Pressure_Value.template" { + pattern{ RECORD_TYPE, PV_NAME, NAME_PREFIX, NAME_SUFFIX} + { "ai", "PRESSURE_A1", "\$(NAME_PREFIX)", ".TPG_A1.PRESSURE_VALUE" } + { "ai", "PRESSURE_A2", "\$(NAME_PREFIX)", ".TPG_A2.PRESSURE_VALUE" } + { "ai", "PRESSURE_B1", "\$(NAME_PREFIX)", ".TPG_B1.PRESSURE_VALUE" } + { "ai", "PRESSURE_B2", "\$(NAME_PREFIX)", ".TPG_B2.PRESSURE_VALUE" } +} \ No newline at end of file From f4e3788f9fa1fd34e70c92fca9e19064bcf6d07c Mon Sep 17 00:00:00 2001 From: vux62295 Date: Tue, 15 Sep 2026 18:00:52 +0100 Subject: [PATCH 4/4] Added New Line --- OPCUA/OPCUA-IOC-01App/Db/GEM_vacuum.substitutions | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OPCUA/OPCUA-IOC-01App/Db/GEM_vacuum.substitutions b/OPCUA/OPCUA-IOC-01App/Db/GEM_vacuum.substitutions index a1a9fe00c..650e96557 100644 --- a/OPCUA/OPCUA-IOC-01App/Db/GEM_vacuum.substitutions +++ b/OPCUA/OPCUA-IOC-01App/Db/GEM_vacuum.substitutions @@ -47,4 +47,4 @@ file "$(TOP)/OPCUA-IOC-01App/Db/GEM_Vacuum_Pressure_Value.template" { { "ai", "PRESSURE_A2", "\$(NAME_PREFIX)", ".TPG_A2.PRESSURE_VALUE" } { "ai", "PRESSURE_B1", "\$(NAME_PREFIX)", ".TPG_B1.PRESSURE_VALUE" } { "ai", "PRESSURE_B2", "\$(NAME_PREFIX)", ".TPG_B2.PRESSURE_VALUE" } -} \ No newline at end of file +}