diff --git a/OPCUA/Makefile b/OPCUA/Makefile new file mode 100644 index 000000000..f0d9ad762 --- /dev/null +++ b/OPCUA/Makefile @@ -0,0 +1,17 @@ +#Makefile at top of application tree +TOP = . +include $(TOP)/configure/CONFIG +DIRS := $(DIRS) $(filter-out $(DIRS), configure) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *App)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard iocBoot)) + +define DIR_template + $(1)_DEPEND_DIRS = configure +endef +$(foreach dir, $(filter-out configure,$(DIRS)),$(eval $(call DIR_template,$(dir)))) + +iocBoot_DEPEND_DIRS += $(filter %App,$(DIRS)) + +include $(TOP)/configure/RULES_TOP + + diff --git a/OPCUA/OPCUA-IOC-01App/Db/Makefile b/OPCUA/OPCUA-IOC-01App/Db/Makefile new file mode 100644 index 000000000..e95b65977 --- /dev/null +++ b/OPCUA/OPCUA-IOC-01App/Db/Makefile @@ -0,0 +1,23 @@ +TOP=../.. +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE + +#---------------------------------------------------- +# Optimization of db files using dbst (DEFAULT: NO) +#DB_OPT = YES + +#---------------------------------------------------- +# Create and install (or just install) into /db +# databases, templates, substitutions like this +DB += OMRON-Sysmac-server-1.db +DB += OMRON-Sysmac-server-2.db + +#---------------------------------------------------- +# If .db template is not named *.template add +# _template = + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE + diff --git a/OPCUA/OPCUA-IOC-01App/Db/OMRON-Sysmac-server-1.db b/OPCUA/OPCUA-IOC-01App/Db/OMRON-Sysmac-server-1.db new file mode 100644 index 000000000..8f71d0bad --- /dev/null +++ b/OPCUA/OPCUA-IOC-01App/Db/OMRON-Sysmac-server-1.db @@ -0,0 +1,612 @@ +## IOC for the 1st TPG300 on MAPS, which makes use of an OPC UA server to serve values to the network + +## PLC records: ## + +record(bi, "$(P)PLC:HEARTBEAT") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_Plc_Heartbeat") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(bo, "$(P)IS300") { + field(VAL, "1") + field(PINI, "YES") +} + +record(mbbi, "$(P)PLC:HIGH_VACUUM_VALVE") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_High_Vac_Valve_Status") + field(SCAN, "I/O Intr") + field(ONVL, "1") + field(ONST, "closed") + field(TWVL, "2") + field(TWST, "opened") + field(THVL, "3") + field(THST, "sweeping") + field(FRVL, "4") + field(FRST, "fault") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(mbbo, "$(P)$(R):UNIT:SP") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=4;s=Opc_TPG1_Unit_Request") + 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)") +} + +## TPG1 Status records: ## + +record(stringin, "$(P)$(R):PE_UNDERRANGE") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Statuses.PE_Underrange_Control") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):UNIT") { #units read from TPG + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Statuses.Pressure_Unit") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):ERROR") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Statuses.TPG_Error") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(bi, "$(P)$(R):HEALTHY") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Statuses.TPG_Healthy") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + + +## TPG1 Sensor A1 records: ## + +record(ai, "$(P)$(R):PRESSURE_A1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_A1.Pressure") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R):THRESHOLD_LOW_A1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_A1.Lower_Threshold") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R):THRESHOLD_HI_A1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_A1.Upper_Threshold") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):MEASURED_VALUE_A1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_A1.Measured_Value_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):MEASURING_CIRCUIT_A1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_A1.Measuring_Circuit_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):SWITCH_FUNC_ASSIGN_A1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_A1.Switching_Function_Assignment") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):SWITCH_FUNC_STATUS_A1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_A1.Switching_Function_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):FILTER_TIME_CONST_A1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_A1.Filter_Time_Constant") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +## TPG1 Sensor A2 records: ## + +record(ai, "$(P)$(R):PRESSURE_A2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_A2.Pressure") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R):THRESHOLD_LOW_A2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_A2.Lower_Threshold") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R):THRESHOLD_HI_A2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_A2.Upper_Threshold") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):MEASURED_VALUE_A2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_A2.Measured_Value_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):MEASURING_CIRCUIT_A2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_A2.Measuring_Circuit_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):SWITCH_FUNC_ASSIGN_A2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_A2.Switching_Function_Assignment") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):SWITCH_FUNC_STATUS_A2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_A2.Switching_Function_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):FILTER_TIME_CONST_A2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_A2.Filter_Time_Constant") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +## TPG1 Sensor B1 records: ## + +record(ai, "$(P)$(R):PRESSURE_B1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_B1.Pressure") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R):THRESHOLD_LOW_B1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_B1.Lower_Threshold") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R):THRESHOLD_HI_B1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_B1.Upper_Threshold") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):MEASURED_VALUE_B1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_B1.Measured_Value_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):MEASURING_CIRCUIT_B1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_B1.Measuring_Circuit_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):SWITCH_FUNC_ASSIGN_B1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_B1.Switching_Function_Assignment") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):SWITCH_FUNC_STATUS_B1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_B1.Switching_Function_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):FILTER_TIME_CONST_B1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_B1.Filter_Time_Constant") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +## TPG1 Sensor B2 records: ## + +record(ai, "$(P)$(R):PRESSURE_B2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_B2.Pressure") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R):THRESHOLD_LOW_B2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_B2.Lower_Threshold") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R):THRESHOLD_HI_B2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_B2.Upper_Threshold") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):MEASURED_VALUE_B2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_B2.Measured_Value_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):MEASURING_CIRCUIT_B2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_B2.Measuring_Circuit_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):SWITCH_FUNC_ASSIGN_B2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_B2.Switching_Function_Assignment") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):SWITCH_FUNC_STATUS_B2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_B2.Switching_Function_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):FILTER_TIME_CONST_B2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG1_Sensor_B2.Filter_Time_Constant") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +############# + +## TPG2 Sensor A1 records: ## + +record(ai, "$(P)$(R)2:PRESSURE_A1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A1.Pressure") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R)2:THRESHOLD_LOW_A1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A1.Lower_Threshold") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R)2:THRESHOLD_HI_A1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A1.Upper_Threshold") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R)2:MEASURED_VALUE_A1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A1.Measured_Value_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R)2:MEASURING_CIRCUIT_A1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A1.Measuring_Circuit_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R)2:SWITCH_FUNC_ASSIGN_A1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A1.Switching_Function_Assignment") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R)2:SWITCH_FUNC_STATUS_A1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A1.Switching_Function_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R)2:FILTER_TIME_CONST_A1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A1.Filter_Time_Constant") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +## TPG2 Sensor A2 records: ## + +record(ai, "$(P)$(R)2:PRESSURE_A2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A2.Pressure") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R)2:THRESHOLD_LOW_A2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A2.Lower_Threshold") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R)2:THRESHOLD_HI_A2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A2.Upper_Threshold") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R)2:MEASURED_VALUE_A2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A2.Measured_Value_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R)2:MEASURING_CIRCUIT_A2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A2.Measuring_Circuit_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R)2:SWITCH_FUNC_ASSIGN_A2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A2.Switching_Function_Assignment") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R)2:SWITCH_FUNC_STATUS_A2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A2.Switching_Function_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R)2:FILTER_TIME_CONST_A2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A2.Filter_Time_Constant") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +## TPG2 Sensor B1 records: ## + +record(ai, "$(P)$(R)2:PRESSURE_B1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B1.Pressure") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R)2:THRESHOLD_LOW_B1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B1.Lower_Threshold") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R)2:THRESHOLD_HI_B1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B1.Upper_Threshold") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R)2:MEASURED_VALUE_B1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B1.Measured_Value_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R)2:MEASURING_CIRCUIT_B1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B1.Measuring_Circuit_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R)2:SWITCH_FUNC_ASSIGN_B1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B1.Switching_Function_Assignment") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R)2:SWITCH_FUNC_STATUS_B1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B1.Switching_Function_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R)2:FILTER_TIME_CONST_B1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B1.Filter_Time_Constant") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +## TPG2 Sensor B2 records: ## + +record(ai, "$(P)$(R)2:PRESSURE_B2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B2.Pressure") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R)2:THRESHOLD_LOW_B2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B2.Lower_Threshold") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R)2:THRESHOLD_HI_B2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B2.Upper_Threshold") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R)2:MEASURED_VALUE_B2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B2.Measured_Value_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R)2:MEASURING_CIRCUIT_B2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B2.Measuring_Circuit_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R)2:SWITCH_FUNC_ASSIGN_B2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B2.Switching_Function_Assignment") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R)2:SWITCH_FUNC_STATUS_B2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B2.Switching_Function_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R)2:FILTER_TIME_CONST_B2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B2.Filter_Time_Constant") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +############# diff --git a/OPCUA/OPCUA-IOC-01App/Db/OMRON-Sysmac-server-2.db b/OPCUA/OPCUA-IOC-01App/Db/OMRON-Sysmac-server-2.db new file mode 100644 index 000000000..7f9e117b1 --- /dev/null +++ b/OPCUA/OPCUA-IOC-01App/Db/OMRON-Sysmac-server-2.db @@ -0,0 +1,318 @@ +## IOC for the 2nd TPG300 on MAPS, which makes use of an OPC UA server to serve values to the network + +## PLC records: ## + +record(mbbo, "$(P)$(R):UNIT:SP") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=4;s=Opc_TPG2_Unit_Request") + 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)") +} + +## TPG2 Status records: ## + +record(stringin, "$(P)$(R):PE_UNDERRANGE") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Statuses.PE_Underrange_Control") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):UNIT") { #units read from TPG + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Statuses.Pressure_Unit") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):ERROR") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Statuses.TPG_Error") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(bi, "$(P)$(R):HEALTHY") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Statuses.TPG_Healthy") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +############# + +## TPG2 Sensor A1 records: ## + +record(ai, "$(P)$(R):PRESSURE_A1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A1.Pressure") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R):THRESHOLD_LOW_A1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A1.Lower_Threshold") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R):THRESHOLD_HI_A1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A1.Upper_Threshold") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):MEASURED_VALUE_A1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A1.Measured_Value_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):MEASURING_CIRCUIT_A1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A1.Measuring_Circuit_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):SWITCH_FUNC_ASSIGN_A1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A1.Switching_Function_Assignment") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):SWITCH_FUNC_STATUS_A1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A1.Switching_Function_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):FILTER_TIME_CONST_A1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A1.Filter_Time_Constant") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +## TPG2 Sensor A2 records: ## + +record(ai, "$(P)$(R):PRESSURE_A2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A2.Pressure") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R):THRESHOLD_LOW_A2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A2.Lower_Threshold") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R):THRESHOLD_HI_A2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A2.Upper_Threshold") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):MEASURED_VALUE_A2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A2.Measured_Value_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):MEASURING_CIRCUIT_A2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A2.Measuring_Circuit_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):SWITCH_FUNC_ASSIGN_A2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A2.Switching_Function_Assignment") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):SWITCH_FUNC_STATUS_A2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A2.Switching_Function_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):FILTER_TIME_CONST_A2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_A2.Filter_Time_Constant") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +## TPG2 Sensor B1 records: ## + +record(ai, "$(P)$(R):PRESSURE_B1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B1.Pressure") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R):THRESHOLD_LOW_B1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B1.Lower_Threshold") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R):THRESHOLD_HI_B1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B1.Upper_Threshold") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):MEASURED_VALUE_B1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B1.Measured_Value_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):MEASURING_CIRCUIT_B1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B1.Measuring_Circuit_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):SWITCH_FUNC_ASSIGN_B1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B1.Switching_Function_Assignment") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):SWITCH_FUNC_STATUS_B1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B1.Switching_Function_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):FILTER_TIME_CONST_B1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B1.Filter_Time_Constant") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +## TPG2 Sensor B2 records: ## + +record(ai, "$(P)$(R):PRESSURE_B2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B2.Pressure") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R):THRESHOLD_LOW_B2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B2.Lower_Threshold") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R):THRESHOLD_HI_B2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B2.Upper_Threshold") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):MEASURED_VALUE_B2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B2.Measured_Value_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):MEASURING_CIRCUIT_B2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B2.Measuring_Circuit_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):SWITCH_FUNC_ASSIGN_B2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B2.Switching_Function_Assignment") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):SWITCH_FUNC_STATUS_B2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B2.Switching_Function_Status") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R):FILTER_TIME_CONST_B2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=4;s=Opc_TPG2_Sensor_B2.Filter_Time_Constant") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +############# diff --git a/OPCUA/OPCUA-IOC-01App/Makefile b/OPCUA/OPCUA-IOC-01App/Makefile new file mode 100644 index 000000000..10e0126aa --- /dev/null +++ b/OPCUA/OPCUA-IOC-01App/Makefile @@ -0,0 +1,8 @@ +TOP = .. +include $(TOP)/configure/CONFIG +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *db*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Db*)) +include $(TOP)/configure/RULES_DIRS + diff --git a/OPCUA/OPCUA-IOC-01App/src/Makefile b/OPCUA/OPCUA-IOC-01App/src/Makefile new file mode 100644 index 000000000..fec3b3364 --- /dev/null +++ b/OPCUA/OPCUA-IOC-01App/src/Makefile @@ -0,0 +1,9 @@ +TOP=../.. +# This file should do very little - it's purpose is to set the APPNAME and then load build.mak + +# this definition is used in build.mak +APPNAME=OPCUA-IOC-01 + +# If we are ###-IOC-01 leave this as is, if we are ###-IOC-02 or higher change to ###-IOC-01 and delete build.mak from this directory +# there should only be a single build.mak for all IOCs of a given family and it is located in the ###-IOC-01 directory +include $(TOP)/OPCUA-IOC-01App/src/build.mak diff --git a/OPCUA/OPCUA-IOC-01App/src/OPCUA-IOC-01Main.cpp b/OPCUA/OPCUA-IOC-01App/src/OPCUA-IOC-01Main.cpp new file mode 100644 index 000000000..69d68fa33 --- /dev/null +++ b/OPCUA/OPCUA-IOC-01App/src/OPCUA-IOC-01Main.cpp @@ -0,0 +1,23 @@ +/* OPCUA-IOC-01Main.cpp */ +/* Author: Evan Smith Date: 03 MARCH 2025 */ + +#include +#include +#include +#include +#include + +#include "epicsExit.h" +#include "epicsThread.h" +#include "iocsh.h" + +int main(int argc,char *argv[]) +{ + if(argc>=2) { + iocsh(argv[1]); + epicsThreadSleep(.2); + } + iocsh(NULL); + epicsExit(0); + return(0); +} diff --git a/OPCUA/OPCUA-IOC-01App/src/build.mak b/OPCUA/OPCUA-IOC-01App/src/build.mak new file mode 100644 index 000000000..16fc980a3 --- /dev/null +++ b/OPCUA/OPCUA-IOC-01App/src/build.mak @@ -0,0 +1,70 @@ +TOP=../.. + +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE +#============================= + +### NOTE: there should only be one build.mak for a given IOC family and this should be located in the ###-IOC-01 directory + +#============================= +# Build the IOC application OPCUA-IOC-01 +# We actually use $(APPNAME) below so this file can be included by multiple IOCs + +PROD_IOC = $(APPNAME) +# OPCUA-IOC-01.dbd will be created and installed +DBD += $(APPNAME).dbd + +# OPCUA-IOC-01.dbd will be made up from these files: +$(APPNAME)_DBD += base.dbd +## ISIS standard dbd ## +$(APPNAME)_DBD += icpconfig.dbd +$(APPNAME)_DBD += pvdump.dbd +$(APPNAME)_DBD += asSupport.dbd +$(APPNAME)_DBD += devIocStats.dbd +$(APPNAME)_DBD += caPutLog.dbd +$(APPNAME)_DBD += utilities.dbd +## add other dbd here ## +$(APPNAME)_DBD += asyn.dbd +$(APPNAME)_DBD += opcua.dbd + +# Add all the support libraries needed by this IOC +## ISIS standard libraries ## +$(APPNAME)_LIBS += seq pv +$(APPNAME)_LIBS += devIocStats +$(APPNAME)_LIBS += pvdump $(MYSQLLIB) easySQLite sqlite +$(APPNAME)_LIBS += caPutLog +$(APPNAME)_LIBS += icpconfig pugixml +$(APPNAME)_LIBS += autosave +$(APPNAME)_LIBS += utilities pcrecpp pcre +$(APPNAME)_LIBS += OPCUA +$(APPNAME)_LIBS += asyn +## Add other libraries here ## +#$(APPNAME)_LIBS += xxx + +# OPCUA-IOC-01_registerRecordDeviceDriver.cpp derives from OPCUA-IOC-01.dbd +$(APPNAME)_SRCS += $(APPNAME)_registerRecordDeviceDriver.cpp + +# Build the main IOC entry point on workstation OSs. +$(APPNAME)_SRCS_DEFAULT += $(APPNAME)Main.cpp +$(APPNAME)_SRCS_vxWorks += -nil- + +# Add support from base/src/vxWorks if needed +#$(APPNAME)_OBJS_vxWorks += $(EPICS_BASE_BIN)/vxComLibrary + +# Finally link to the EPICS Base libraries +## area detector already includes PVA, so avoid including it twice +ifeq ($(AREA_DETECTOR),) +include $(CONFIG)/CONFIG_PVA_ISIS +endif + +$(APPNAME)_LIBS += $(EPICS_BASE_IOC_LIBS) + +$(APPNAME)_SYS_LIBS_WIN32 += ws2_32 + +#=========================== + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE + diff --git a/OPCUA/configure/CONFIG b/OPCUA/configure/CONFIG new file mode 100644 index 000000000..c1a470322 --- /dev/null +++ b/OPCUA/configure/CONFIG @@ -0,0 +1,29 @@ +# CONFIG - Load build configuration data +# +# Do not make changes to this file! + +# Allow user to override where the build rules come from +RULES = $(EPICS_BASE) + +# RELEASE files point to other application tops +include $(TOP)/configure/RELEASE +-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).Common +ifdef T_A +-include $(TOP)/configure/RELEASE.Common.$(T_A) +-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A) +endif + +CONFIG = $(RULES)/configure +include $(CONFIG)/CONFIG + +# Override the Base definition: +INSTALL_LOCATION = $(TOP) + +# CONFIG_SITE files contain other build configuration settings +include $(TOP)/configure/CONFIG_SITE +-include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).Common +ifdef T_A + -include $(TOP)/configure/CONFIG_SITE.Common.$(T_A) + -include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A) +endif + diff --git a/OPCUA/configure/CONFIG_SITE b/OPCUA/configure/CONFIG_SITE new file mode 100644 index 000000000..72b399d43 --- /dev/null +++ b/OPCUA/configure/CONFIG_SITE @@ -0,0 +1,33 @@ +# CONFIG_SITE + +# Make any application-specific changes to the EPICS build +# configuration variables in this file. +# +# Host/target specific settings can be specified in files named +# CONFIG_SITE.$(EPICS_HOST_ARCH).Common +# CONFIG_SITE.Common.$(T_A) +# CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A) + +# CHECK_RELEASE controls the consistency checking of the support +# applications pointed to by the RELEASE* files. +# Normally CHECK_RELEASE should be set to YES. +# Set CHECK_RELEASE to NO to disable checking completely. +# Set CHECK_RELEASE to WARN to perform consistency checking but +# continue building anyway if conflicts are found. +CHECK_RELEASE = YES + +# Set this when you only want to compile this application +# for a subset of the cross-compiled target architectures +# that Base is built for. +#CROSS_COMPILER_TARGET_ARCHS = vxWorks-68040 + +# To install files into a location other than $(TOP) define +# INSTALL_LOCATION here. +#INSTALL_LOCATION= + +# Set this when your IOC and the host use different paths +# to access the application. This will be needed to boot +# from a Microsoft FTP server or with some NFS mounts. +# You must rebuild in the iocBoot directory for this to +# take effect. +#IOCS_APPL_TOP = diff --git a/OPCUA/configure/Makefile b/OPCUA/configure/Makefile new file mode 100644 index 000000000..925430940 --- /dev/null +++ b/OPCUA/configure/Makefile @@ -0,0 +1,8 @@ +TOP=.. + +include $(TOP)/configure/CONFIG + +TARGETS = $(CONFIG_TARGETS) +CONFIGS += $(subst ../,,$(wildcard $(CONFIG_INSTALLS))) + +include $(TOP)/configure/RULES diff --git a/OPCUA/configure/RELEASE b/OPCUA/configure/RELEASE new file mode 100644 index 000000000..5fcd57fc6 --- /dev/null +++ b/OPCUA/configure/RELEASE @@ -0,0 +1,74 @@ +# RELEASE - Location of external support modules +# +# IF YOU MAKE ANY CHANGES to this file you must subsequently +# do a "gnumake rebuild" in this application's top level +# directory. +# +# The build process does not check dependencies against files +# that are outside this application, thus you should do a +# "gnumake rebuild" in the top level directory after EPICS_BASE +# or any other external module pointed to below is rebuilt. +# +# Host- or target-specific settings can be given in files named +# RELEASE.$(EPICS_HOST_ARCH).Common +# RELEASE.Common.$(T_A) +# RELEASE.$(EPICS_HOST_ARCH).$(T_A) +# +# This file is parsed by both GNUmake and an EPICS Perl script, +# so it can ONLY contain definitions of paths to other support +# modules, variable definitions that are used in module paths, +# and include statements that pull in other RELEASE files. +# Variables may be used before their values have been set. +# Build variables that are NOT used in paths should be set in +# the CONFIG_SITE file. + +# Variables and paths to dependent modules: +#MODULES = /path/to/modules +#MYMODULE = $(MODULES)/my-module + +# If using the sequencer, point SNCSEQ at its top directory: +#SNCSEQ = $(MODULES)/seq-ver + +# EPICS_BASE should appear last so earlier modules can override stuff: +EPICS_BASE = C:/Instrument/Apps/EPICS/base/master + +# Set RULES here if you want to use build rules from somewhere +# other than EPICS_BASE: +#RULES = $(MODULES)/build-rules + +# These allow developers to override the RELEASE variable settings +# without having to modify the configure/RELEASE file itself. +-include $(TOP)/../RELEASE.local +-include $(TOP)/configure/RELEASE.local + +# Macros required for basic ioc/stream device +ACCESSSECURITY=$(SUPPORT)/AccessSecurity/master +ASUBFUNCTIONS=$(SUPPORT)/asubFunctions/master +ASYN=$(SUPPORT)/asyn/master +AUTOSAVE=$(SUPPORT)/autosave/master +CALC=$(SUPPORT)/calc/master +CAPUTLOG=$(SUPPORT)/caPutLog/master +DEVIOCSTATS=$(SUPPORT)/devIocStats/master +ICPCONFIG=$(SUPPORT)/icpconfig/master +LIBJSON=$(SUPPORT)/libjson/master +MYSQL=$(SUPPORT)/MySQL/master +ONCRPC=$(SUPPORT)/oncrpc/master +PCRE=$(SUPPORT)/pcre/master +PUGIXML=$(SUPPORT)/pugixml/master +PVDUMP=$(SUPPORT)/pvdump/master +SNCSEQ=$(SUPPORT)/seq/master +SQLITE=$(SUPPORT)/sqlite/master +SSCAN=$(SUPPORT)/sscan/master +STREAMDEVICE=$(SUPPORT)/StreamDevice/master +UTILITIES=$(SUPPORT)/utilities/master +ZLIB=$(SUPPORT)/zlib/master + +# optional extra local definitions here +-include $(TOP)/configure/RELEASE.private + +include $(TOP)/../../../ISIS_CONFIG +-include $(TOP)/../../../ISIS_CONFIG.$(EPICS_HOST_ARCH) + +# IOC-specific support module +OPCUA=$(SUPPORT)/OPCUA/master +TPG=$(SUPPORT)/TPG/master \ No newline at end of file diff --git a/OPCUA/configure/RULES b/OPCUA/configure/RULES new file mode 100644 index 000000000..6d56e14e8 --- /dev/null +++ b/OPCUA/configure/RULES @@ -0,0 +1,6 @@ +# RULES + +include $(CONFIG)/RULES + +# Library should be rebuilt because LIBOBJS may have changed. +$(LIBNAME): ../Makefile diff --git a/OPCUA/configure/RULES.ioc b/OPCUA/configure/RULES.ioc new file mode 100644 index 000000000..901987c6c --- /dev/null +++ b/OPCUA/configure/RULES.ioc @@ -0,0 +1,2 @@ +#RULES.ioc +include $(CONFIG)/RULES.ioc diff --git a/OPCUA/configure/RULES_DIRS b/OPCUA/configure/RULES_DIRS new file mode 100644 index 000000000..3ba269dcc --- /dev/null +++ b/OPCUA/configure/RULES_DIRS @@ -0,0 +1,2 @@ +#RULES_DIRS +include $(CONFIG)/RULES_DIRS diff --git a/OPCUA/configure/RULES_TOP b/OPCUA/configure/RULES_TOP new file mode 100644 index 000000000..d09d668d5 --- /dev/null +++ b/OPCUA/configure/RULES_TOP @@ -0,0 +1,3 @@ +#RULES_TOP +include $(CONFIG)/RULES_TOP + diff --git a/OPCUA/exampleTop/DeviceDbApp/.Db/Makefile b/OPCUA/exampleTop/DeviceDbApp/.Db/Makefile new file mode 100644 index 000000000..983981d40 --- /dev/null +++ b/OPCUA/exampleTop/DeviceDbApp/.Db/Makefile @@ -0,0 +1,22 @@ +TOP=../.. +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE + +#---------------------------------------------------- +# Optimization of db files using dbst (DEFAULT: NO) +#DB_OPT = YES + +#---------------------------------------------------- +# Create and install (or just install) into /db +# databases, templates, substitutions like this +#DB += xxx.db + +#---------------------------------------------------- +# If .db template is not named *.template add +# _template = + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE + diff --git a/OPCUA/exampleTop/DeviceDbApp/Makefile b/OPCUA/exampleTop/DeviceDbApp/Makefile new file mode 100644 index 000000000..ab15bfb1c --- /dev/null +++ b/OPCUA/exampleTop/DeviceDbApp/Makefile @@ -0,0 +1,7 @@ +TOP = .. +include $(TOP)/configure/CONFIG +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *db*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Db*)) +include $(TOP)/configure/RULES_DIRS diff --git a/OPCUA/exampleTop/DeviceDbApp/S7-1500Db/Makefile b/OPCUA/exampleTop/DeviceDbApp/S7-1500Db/Makefile new file mode 100644 index 000000000..f7872d1bb --- /dev/null +++ b/OPCUA/exampleTop/DeviceDbApp/S7-1500Db/Makefile @@ -0,0 +1,25 @@ +TOP=../.. +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE + +#---------------------------------------------------- +# Optimization of db files using dbst (DEFAULT: NO) +#DB_OPT = YES + +#---------------------------------------------------- +# Create and install (or just install) into /db +# databases, templates, substitutions like this +#DB += xxx.db + +DB += S7-1500-server.db +DB += S7-1500-DB1.db + +#---------------------------------------------------- +# If .db template is not named *.template add +# _template = + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE + diff --git a/OPCUA/exampleTop/DeviceDbApp/S7-1500Db/README.md b/OPCUA/exampleTop/DeviceDbApp/S7-1500Db/README.md new file mode 100644 index 000000000..b48ecec89 --- /dev/null +++ b/OPCUA/exampleTop/DeviceDbApp/S7-1500Db/README.md @@ -0,0 +1,94 @@ +# Siemens S7 1500 Series PLC + +Siemens S7 1500 series PLCs provide an embedded OPC UA server +running on the PLC itself. + +## Enable the OPC UA Server + +Inside TIA Portal, for your PLC, inside the "Properties" / "General" tab, +under "OPC UA" / "Server", enable the OPC UA server. + +Take note of the URL for your server. + +Under "Runtime licenses" / "OPC UA", select the type of license +you acquired for your PLC. + +_The PLC has to be disconnected for this configuration._ + +## Mark the items you want to access + +In the list view of a Data Block, the checkboxes for +"Accessible from HMI/OPC UA" and "Writable from HMI/OPC UA" +determine which data are accessible and which are writable. + +## The example databases + +The S7-1500 provides all PLC data items in OPC UA namespace 3. + +The example databases use a few static items created in DB1 +(aka `Data_block_1`). + +| Name | Data Type | OPC UA Node Name | +| -------- | --------- | --------------------------- | +| myInt | Int | `"Data_block_1"."myInt"` | +| myWord | Word | `"Data_block_1"."myWord"` | +| myString | String | `"Data_block_1"."myString"` | +| myBool | Bool | `"Data_block_1"."myBool"` | +| myDouble | Double | `"Data_block_1"."myDouble"` | + +The double quotes are part of the OPC UA node name and have to be escaped +inside EPICS database field values. + +## Use a GUI to check + +When developing, using a professional GUI client for OPC UA is strongly +suggested. +The free [UaExpert][uaexpert] tool from Unified Automation is a good choice. + +## S7-1500 Firmware versions + +With every update of the firmware, Siemens changes the server behavior a lot, +increasing limitations, fixing bugs and improving the "user experience". + +It is generally advisable to update the PLC to the newest available firmware. + +Regularly check the [detailed release notes][release_notes_1500] to see what +things were fixed. + +Known issues: + +* Firmware V2.6.0 is needed for subscriptions on registered items to work. + +* All known firmware versions have a limit of 1000 items per low-level + OPC UA service call. To enforce this limit in the client IOC, call + ```sh + opcuaSetOption batch-nodes 1000 + ``` + for every S7-1500 session that you want to use for more than 1000 items. + +## OPC UA Device Support Documentation + +The documentation folder of the Device Support module contains the +[Requirements Specification (SRS)][requirements.pdf] giving an introduction +and the list of requirements that should convey a good idea of the planned +features. + +The [Cheat Sheet][cheatsheet.pdf] explains the configuration in the startup +script and the database links. + +## Feedback / Reporting issues + +Please use the OPC UA Device Support Module's GitHub +[issue tracker](https://github.com/ralphlange/opcua/issues). + +## License + +This example application is part of the OPC UA Device Support module +that is distributed subject to a Software License Agreement found +in file LICENSE that is included with its distribution. + + +[requirements.pdf]: https://docs.google.com/viewer?url=https://raw.githubusercontent.com/ralphlange/opcua/master/documentation/EPICS%20Support%20for%20OPC%20UA%20-%20SRS.pdf +[cheatsheet.pdf]: https://docs.google.com/viewer?url=https://raw.githubusercontent.com/ralphlange/opcua/master/documentation/EPICS%20Support%20for%20OPC%20UA%20-%20Cheat%20Sheet.pdf +[uaexpert]: https://www.unified-automation.com/products/development-tools/uaexpert.html +[release_notes_1500]: https://support.industry.siemens.com/cs/document/109478459/firmware-update-s7-1500-cpus-incl-displays-and-et200-cpus-(et200sp-et200pro)?dti=0&lc=en-WW diff --git a/OPCUA/exampleTop/DeviceDbApp/S7-1500Db/S7-1500-DB1.db b/OPCUA/exampleTop/DeviceDbApp/S7-1500Db/S7-1500-DB1.db new file mode 100644 index 000000000..a9bb8d0d4 --- /dev/null +++ b/OPCUA/exampleTop/DeviceDbApp/S7-1500Db/S7-1500-DB1.db @@ -0,0 +1,110 @@ +# Database connecting to a manually created global data block +# DB1 with some example items +# The namespace for the SIEMENS Simatic S7 OPCUA is ns=3 + +# Set of longin/longout, working on an Integer type data item +# Both set up monitors, i.e. the output is bidirectional + +record(longin, "$(P)$(R)li1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myInt\"") + field(SCAN, "I/O Intr") +} +record(longout, "$(P)$(R)lo1") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myInt\"") +} + +# This longin/longout pair is working on data of type Word +# The input uses server timestamps, the output is unidirectional +record(longin, "$(P)$(R)li2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myWord\"") + field(SCAN, "I/O Intr") + field(TSE, "-2") +} +record(longout, "$(P)$(R)lo2") { + field(DTYP, "OPCUA") + field(OUT, "@$(SESS) ns=3;s=\"Data_block_1\".\"myWord\" monitor=n") +} + +# An enum pair working on the same Word type data item +record(mbbi, "$(P)$(R)mbbi1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myWord\"") + field(SCAN, "I/O Intr") + field(ZRST, "zero") + field(ZRVL, "1") + field(ONST, "one") + field(ONVL, "2") + field(TWST, "two") + field(TWVL, "4") + field(THST, "three") + field(THVL, "8") +} +record(mbbo, "$(P)$(R)mbbo1") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myWord\"") + field(ZRST, "zero") + field(ZRVL, "1") + field(ONST, "one") + field(ONVL, "2") + field(TWST, "two") + field(TWVL, "4") + field(THST, "three") + field(THVL, "8") +} + +# A pair of ai/ao working on a double data item +# The other input uses SLOPE conversion +record(ai, "$(P)$(R)ai1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myDouble\"") + field(SCAN, "I/O Intr") +} +record(ao, "$(P)$(R)ao1") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myDouble\"") +} +record(ai, "$(P)$(R)ai2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myDouble\"") + field(SCAN, "I/O Intr") + field(LINR, "SLOPE") + field(ESLO, "5e6") + field(EOFF, "1e3") +} + +# A pair of bi/bo working on a Boolean data item +record(bi, "$(P)$(R)bi1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myBool\"") + field(SCAN, "I/O Intr") +} +record(bo, "$(P)$(R)bo1") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myBool\"") +} + +# A pair of stringin/stringout and their "long string" versions +# all working on a String data item +record(stringin, "$(P)$(R)si1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myString\"") + field(SCAN, "I/O Intr") +} +record(stringout, "$(P)$(R)so1") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myString\"") +} +record(lsi, "$(P)$(R)lsi1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myString\"") + field(SCAN, "I/O Intr") + field(SIZV, "255") +} +record(lso, "$(P)$(R)lso1") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myString\"") + field(SIZV, "255") +} diff --git a/OPCUA/exampleTop/DeviceDbApp/S7-1500Db/S7-1500-server.substitutions b/OPCUA/exampleTop/DeviceDbApp/S7-1500Db/S7-1500-server.substitutions new file mode 100644 index 000000000..77343b9da --- /dev/null +++ b/OPCUA/exampleTop/DeviceDbApp/S7-1500Db/S7-1500-server.substitutions @@ -0,0 +1,7 @@ +file opcuaServerInfo.template { +{ P="$(P=)", R="$(R=)", SESS=$(SESS) } +} + +file opcuaServerStats.template { +{ P="$(P=)", R="$(R=)", SESS=$(SESS), SUBS=$(SUBS) } +} diff --git a/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.Dynamic.Arrays.db b/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.Dynamic.Arrays.db new file mode 100644 index 000000000..71e0f5bb0 --- /dev/null +++ b/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.Dynamic.Arrays.db @@ -0,0 +1,96 @@ +# Database connecting to the UaServerCpp example server +# that is part of all Unified Automation bundles + +# Dynamic part of the Demo server + +# waveform records connecting to arrays of different types + +record(waveform, "$(P)$(R)wfchar") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Arrays.SByte") + field(FTVL, "CHAR") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(waveform, "$(P)$(R)wfint16") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Arrays.Int16") + field(FTVL, "SHORT") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(waveform, "$(P)$(R)wfint32") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Arrays.Int32") + field(FTVL, "LONG") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(waveform, "$(P)$(R)wfuchar") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Arrays.Byte") + field(FTVL, "UCHAR") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(waveform, "$(P)$(R)wfuint16") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Arrays.UInt16") + field(FTVL, "USHORT") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(waveform, "$(P)$(R)wfuint32") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Arrays.UInt32") + field(FTVL, "ULONG") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(waveform, "$(P)$(R)wffloat") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Arrays.Float") + field(FTVL, "FLOAT") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(waveform, "$(P)$(R)wfdouble") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Arrays.Double") + field(FTVL, "DOUBLE") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(waveform, "$(P)$(R)wfstring") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Arrays.String") + field(FTVL, "STRING") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} diff --git a/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.Dynamic.ArraysE7.db b/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.Dynamic.ArraysE7.db new file mode 100644 index 000000000..ee11fcd9a --- /dev/null +++ b/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.Dynamic.ArraysE7.db @@ -0,0 +1,28 @@ +# Database connecting to the UaServerCpp example server +# that is part of all Unified Automation bundles + +# Dynamic part of the Demo server + +# int64/uint64 waveform records connecting to array variables + +# This database works only on EPICS 7 !! + +record(waveform, "$(P)$(R)wfint64") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Arrays.Int64") + field(FTVL, "INT64") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(waveform, "$(P)$(R)wfuint64") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Arrays.UInt64") + field(FTVL, "UINT64") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} diff --git a/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.Dynamic.Scalar.db b/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.Dynamic.Scalar.db new file mode 100644 index 000000000..5bbf331fa --- /dev/null +++ b/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.Dynamic.Scalar.db @@ -0,0 +1,89 @@ +# Database connecting to the UaServerCpp example server +# that is part of all Unified Automation bundles + +# Dynamic part of the Demo server + +# records connecting to variables of different types + +record(longin, "$(P)$(R)lichar") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.SByte") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(longin, "$(P)$(R)liint16") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.Int16") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(longin, "$(P)$(R)liint32") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.Int32") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(longin, "$(P)$(R)liuchar") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.Byte") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(longin, "$(P)$(R)liuint16") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.UInt16") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(longin, "$(P)$(R)liuint32") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.UInt32") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R)aifloat") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.Float") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R)aidouble") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.Double") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R)aiint32") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.Int32") + field(LINR, "SLOPE") + field(ESLO, "0.1") + field(PREC, "1") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R)sistring") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.String") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} diff --git a/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.Dynamic.ScalarE7.db b/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.Dynamic.ScalarE7.db new file mode 100644 index 000000000..ea1165aa6 --- /dev/null +++ b/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.Dynamic.ScalarE7.db @@ -0,0 +1,24 @@ +# Database connecting to the UaServerCpp example server +# that is part of all Unified Automation bundles + +# Dynamic part of the Demo server + +# int64 records connecting to variables of different types + +# This database works only on EPICS 7 !! + +record(int64in, "$(P)$(R)int64in") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.Int64") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(int64in, "$(P)$(R)uint64in") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.UInt64") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} diff --git a/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.Static.Arrays.db b/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.Static.Arrays.db new file mode 100644 index 000000000..b0733323c --- /dev/null +++ b/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.Static.Arrays.db @@ -0,0 +1,158 @@ +# Database connecting to the UaServerCpp example server +# that is part of all Unified Automation bundles + +# Dynamic part of the Demo server + +# aai/aao records connecting to arrays of different types + +record(aai, "$(P)$(R)aaichar") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Arrays.SByte") + field(FTVL, "CHAR") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aao, "$(P)$(R)aaochar") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Arrays.SByte") + field(FTVL, "CHAR") + field(NELM, "10") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aai, "$(P)$(R)aaiint16") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Arrays.Int16") + field(FTVL, "SHORT") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aao, "$(P)$(R)aaoint16") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Arrays.Int16") + field(FTVL, "SHORT") + field(NELM, "10") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aai, "$(P)$(R)aaiint32") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Arrays.Int32") + field(FTVL, "LONG") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aao, "$(P)$(R)aaoint32") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Arrays.Int32") + field(FTVL, "LONG") + field(NELM, "10") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aai, "$(P)$(R)aaiuchar") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Arrays.Byte") + field(FTVL, "UCHAR") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aao, "$(P)$(R)aaouchar") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Arrays.Byte") + field(FTVL, "UCHAR") + field(NELM, "10") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aai, "$(P)$(R)aaiuint32") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Arrays.UInt32") + field(FTVL, "ULONG") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aao, "$(P)$(R)aaouint32") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Arrays.UInt32") + field(FTVL, "ULONG") + field(NELM, "10") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aai, "$(P)$(R)aaifloat") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Arrays.Float") + field(FTVL, "FLOAT") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aao, "$(P)$(R)aaofloat") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Arrays.Float") + field(FTVL, "FLOAT") + field(NELM, "10") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aai, "$(P)$(R)aaidouble") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Arrays.Double") + field(FTVL, "DOUBLE") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aao, "$(P)$(R)aaodouble") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Arrays.Double") + field(FTVL, "DOUBLE") + field(NELM, "10") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aai, "$(P)$(R)aaistring") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Arrays.String") + field(FTVL, "STRING") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aao, "$(P)$(R)aaostring") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Arrays.String") + field(FTVL, "STRING") + field(NELM, "10") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} diff --git a/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.Static.ArraysE7.db b/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.Static.ArraysE7.db new file mode 100644 index 000000000..36cd4dfbf --- /dev/null +++ b/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.Static.ArraysE7.db @@ -0,0 +1,46 @@ +# Database connecting to the UaServerCpp example server +# that is part of all Unified Automation bundles + +# Dynamic part of the Demo server + +# int64/uint64 aai/aao records connecting to array variables + +# This database works only on EPICS 7 !! + +record(aai, "$(P)$(R)aaiint64") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Arrays.Int64") + field(FTVL, "INT64") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aao, "$(P)$(R)aaoint64") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Arrays.Int64") + field(FTVL, "INT64") + field(NELM, "10") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aai, "$(P)$(R)aaiuint64") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Arrays.UInt64") + field(FTVL, "UINT64") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aao, "$(P)$(R)aaouint64") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Arrays.UInt64") + field(FTVL, "UINT64") + field(NELM, "10") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} diff --git a/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.Static.Scalar.db b/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.Static.Scalar.db new file mode 100644 index 000000000..d1e8998b2 --- /dev/null +++ b/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.Static.Scalar.db @@ -0,0 +1,166 @@ +# Database connecting to the UaServerCpp example server +# that is part of all Unified Automation bundles + +# Static part of the Demo server + +# Records connecting to variables of different types + +# bi/bo - Bool +# - the "...x" variants are not monitored + +record(bi, "$(P)$(R)bibool") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Boolean") + field(ZNAM, "false") + field(ONAM, "true") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(bo, "$(P)$(R)bobool") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Boolean") + field(ZNAM, "false") + field(ONAM, "true") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(bi, "$(P)$(R)biboolx") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Boolean monitor=n") + field(ZNAM, "false") + field(ONAM, "true") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(bo, "$(P)$(R)boboolx") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Boolean monitor=n") + field(ZNAM, "false") + field(ONAM, "true") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +# mbbi/mbbo - Byte + +record(mbbi, "$(P)$(R)mbbibyte") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Byte") + field(ZRST, "zero") + field(ONST, "one") + field(TWST, "two") + field(THST, "three") + field(FRST, "four") + field(FVST, "five") + field(SXST, "six") + field(SVST, "seven") + field(EIST, "eight") + field(NIST, "nine") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(mbbo, "$(P)$(R)mbbobyte") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Byte") + field(ZRST, "zero") + field(ONST, "one") + field(TWST, "two") + field(THST, "three") + field(FRST, "four") + field(FVST, "five") + field(SXST, "six") + field(SVST, "seven") + field(EIST, "eight") + field(NIST, "nine") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(longin, "$(P)$(R)libyte") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Byte") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +# mbbiDirect/mbboDirect - UInt32 + +record(mbbiDirect, "$(P)$(R)mbbiduint32") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Scalar.UInt32") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(mbboDirect, "$(P)$(R)mbboduint32") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Scalar.UInt32") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +# ai/ao - Double + +record(ai, "$(P)$(R)aidouble") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Double") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ao, "$(P)$(R)aodouble") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Double") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +# ai/ao - int32 (using linear conversion) + +record(ai, "$(P)$(R)aiint32") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Int32") + field(LINR, "LINEAR") + field(EGUL, "-1e3") + field(EGUF, "1e3") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ao, "$(P)$(R)aoint32") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Int32") + field(LINR, "LINEAR") + field(EGUL, "-1e3") + field(EGUF, "1e3") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +# si/so - String + +record(stringin, "$(P)$(R)sistring") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Scalar.String") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringout, "$(P)$(R)sostring") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Scalar.String") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} diff --git a/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.Static.ScalarE7.db b/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.Static.ScalarE7.db new file mode 100644 index 000000000..286380b0e --- /dev/null +++ b/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.Static.ScalarE7.db @@ -0,0 +1,42 @@ +# Database connecting to the UaServerCpp example server +# that is part of all Unified Automation bundles + +# Dynamic part of the Demo server + +# int64 and long string records connecting to scalar variables + +# This database works only on EPICS 7 !! + +# int64in/int64out - Int64 + +record(int64in, "$(P)$(R)int64in") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Int64") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(int64out, "$(P)$(R)int64out") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Int64") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +# lsi/lso - String + +record(lsi, "$(P)$(R)lsistring") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Scalar.String") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(lso, "$(P)$(R)lsostring") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Scalar.String") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} diff --git a/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.WorkOrder.substitutions b/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.WorkOrder.substitutions new file mode 100644 index 000000000..9e42d096d --- /dev/null +++ b/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.WorkOrder.substitutions @@ -0,0 +1,4 @@ +file Demo.WorkOrderVariable.template { +{ P="$(P=)", R=WOVAR:, SESS=$(SESS), SUBS=$(SUBS), WO_NODEID=Demo.WorkOrder.WorkOrderVariable } +{ P="$(P=)", R=WOVAR2:, SESS=$(SESS), SUBS=$(SUBS), WO_NODEID=Demo.WorkOrder.WorkOrderVariable2 } +} diff --git a/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.WorkOrderVariable.template b/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.WorkOrderVariable.template new file mode 100644 index 000000000..83e01692f --- /dev/null +++ b/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Demo.WorkOrderVariable.template @@ -0,0 +1,55 @@ +# Database connecting to the UaServerCpp example server +# that is part of all Unified Automation bundles + +# WorkOrder part of the Demo server (user defined structures) + +# Records connecting to an instance of WorkOrder Variable + +# Macros: +# P = Record name prefix +# R = Record name prefix of the structure +# SESS = Session name +# SUBS = Subscription name +# WO_NODEID = Complete node name of the OPC UA variable + +# R/W version (bidirectional output records) + +record(opcuaItem, "$(P)$(R)item") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=$(WO_NODEID)") + field(TSE, "-2") +} + +record(stringout, "$(P)$(R)assetid") { + field(DTYP, "OPCUA") + field(OUT, "@$(P)$(R)item element=AssetID") + field(TSE, "-2") +} + +record(stringout, "$(P)$(R)starttime") { + field(DTYP, "OPCUA") + field(OUT, "@$(P)$(R)item element=StartTime") + field(TSE, "-2") +} + + +# R/O version (input records) + +record(opcuaItem, "$(P)$(R)itemRBK") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=$(WO_NODEID)") + field(TSE, "-2") +} + +record(stringin, "$(P)$(R)assetidRBK") { + field(DTYP, "OPCUA") + field(INP, "@$(P)$(R)itemRBK element=AssetID") + field(TSE, "-2") +} + +record(stringin, "$(P)$(R)starttimeRBK") { + field(DTYP, "OPCUA") + field(INP, "@$(P)$(R)itemRBK element=StartTime") + field(SCAN, "I/O Intr") + field(TSE, "-2") +} diff --git a/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Makefile b/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Makefile new file mode 100644 index 000000000..9e724294e --- /dev/null +++ b/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/Makefile @@ -0,0 +1,36 @@ +TOP=../.. +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE + +#---------------------------------------------------- +# Optimization of db files using dbst (DEFAULT: NO) +#DB_OPT = YES + +#---------------------------------------------------- +# Create and install (or just install) into /db +# databases, templates, substitutions like this +#DB += xxx.db + +DB += UaDemoServer-server.db + +DB += Demo.Dynamic.Arrays.db +DB += Demo.Dynamic.ArraysE7.db +DB += Demo.Dynamic.Scalar.db +DB += Demo.Dynamic.ScalarE7.db + +DB += Demo.Static.Arrays.db +DB += Demo.Static.ArraysE7.db +DB += Demo.Static.Scalar.db +DB += Demo.Static.ScalarE7.db + +DB += Demo.WorkOrder.db + +#---------------------------------------------------- +# If .db template is not named *.template add +# _template = + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE + diff --git a/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/README.md b/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/README.md new file mode 100644 index 000000000..fae935a0d --- /dev/null +++ b/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/README.md @@ -0,0 +1,57 @@ +# Unified Automation Example Server (UaServerCpp) + +All bundles by Unified Automation provide an example server for +demonstration and testing. + +## Start the Example Server + +Change into the `bin` subdirectory of the UA software bundle and +start the `uaservercpp` binary. + +## Provided Variables + +When developing, using a professional GUI client for OPC UA is strongly +suggested. +The free [UaExpert][uaexpert] tool from Unified Automation is a good choice. + +Use that GUI client to browse the server: +Under `Demo`, there are examples of all OPC UA types and features that the +Unified Automation stack supports. The example IOC connects to a number +of selected variables. + +## OPC UA Security + +The example server supports all modes of OPC UA security and is a good +way to check your certificate setup. + +The server's PKI file store is located under the `bin` subdirectory of +the UA software bundle inside `pkiserver`. + +The PKI file store for verification of user authentication certificates +is located under the same `bin` subdirectory inside `pkiuser`. + +## OPC UA Device Support Documentation + +The documentation folder of the Device Support module contains the +[Requirements Specification (SRS)][requirements.pdf] giving an introduction +and the list of requirements that should convey a good idea of the planned +features. + +The [Cheat Sheet][cheatsheet.pdf] explains the configuration in the startup +script and the database links. + +## Feedback / Reporting issues + +Please use the OPC UA Device Support Module's GitHub +[issue tracker](https://github.com/ralphlange/opcua/issues). + +## License + +This example application is part of the OPC UA Device Support module +that is distributed subject to a Software License Agreement found +in file LICENSE that is included with its distribution. + + +[requirements.pdf]: https://docs.google.com/viewer?url=https://raw.githubusercontent.com/ralphlange/opcua/master/documentation/EPICS%20Support%20for%20OPC%20UA%20-%20SRS.pdf +[cheatsheet.pdf]: https://docs.google.com/viewer?url=https://raw.githubusercontent.com/ralphlange/opcua/master/documentation/EPICS%20Support%20for%20OPC%20UA%20-%20Cheat%20Sheet.pdf +[uaexpert]: https://www.unified-automation.com/products/development-tools/uaexpert.html diff --git a/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/UaDemoServer-server.substitutions b/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/UaDemoServer-server.substitutions new file mode 100644 index 000000000..77343b9da --- /dev/null +++ b/OPCUA/exampleTop/DeviceDbApp/UaDemoServerDb/UaDemoServer-server.substitutions @@ -0,0 +1,7 @@ +file opcuaServerInfo.template { +{ P="$(P=)", R="$(R=)", SESS=$(SESS) } +} + +file opcuaServerStats.template { +{ P="$(P=)", R="$(R=)", SESS=$(SESS), SUBS=$(SUBS) } +} diff --git a/OPCUA/exampleTop/Makefile b/OPCUA/exampleTop/Makefile new file mode 100644 index 000000000..19c9068d1 --- /dev/null +++ b/OPCUA/exampleTop/Makefile @@ -0,0 +1,31 @@ +# Makefile at top of application tree +TOP = . +include $(TOP)/configure/CONFIG + +# Directories to build, any order +DIRS += configure +DIRS += $(wildcard *Sup) +DIRS += $(wildcard *App) +DIRS += $(wildcard *Top) +DIRS += $(wildcard iocBoot) + +# The build order is controlled by these dependency rules: + +# All dirs except configure depend on configure +$(foreach dir, $(filter-out configure, $(DIRS)), \ + $(eval $(dir)_DEPEND_DIRS += configure)) + +# Any *App dirs depend on all *Sup dirs +$(foreach dir, $(filter %App, $(DIRS)), \ + $(eval $(dir)_DEPEND_DIRS += $(filter %Sup, $(DIRS)))) + +# Any *Top dirs depend on all *Sup and *App dirs +$(foreach dir, $(filter %Top, $(DIRS)), \ + $(eval $(dir)_DEPEND_DIRS += $(filter %Sup %App, $(DIRS)))) + +# iocBoot depends on all *App dirs +iocBoot_DEPEND_DIRS += $(filter %App,$(DIRS)) + +# Add any additional dependency rules here: + +include $(TOP)/configure/RULES_TOP diff --git a/OPCUA/exampleTop/README.md b/OPCUA/exampleTop/README.md new file mode 100644 index 000000000..73f8d543c --- /dev/null +++ b/OPCUA/exampleTop/README.md @@ -0,0 +1,112 @@ +# exampleTop - Example Application for OPC UA Support + +This is an example application that shows how to build an IOC +that connects to an OPC UA server. + +The only intention is to get you started. +The examples are not necessarily intended as a template for a real world +application. They don't cover all features, and they are not the one +and only way to do things. + +## Preparing the Module + +There are two ways to build the example application: + +1. __As an embedded module inside the OPC UA Support.__ + This is the original setup. This module (named `exampleTop`) is built + inside the Device Support module. All configuration is set up to use the + configuration of the parent module. + The example is being built as part of the hierarchical parent module build. + Obviously, you can also just `cd` into the example and rebuild it + without touching the parent module. + + Note: If you set `INSTALL_LOCATION` in the parent (Device Support) module, + you have to create a file `RELEASE.local` inside `configure` (or at one + of the other usual places) that sets `OPCUA` to the absolute path + (`INSTALL_LOCATION`) of the OPC UA Device Support + +2. __As a standalone module.__ + After copying the `exampleTop` module into your workspace (feel free to + rename it), you will have to adapt its configuration. + + * At the bottom of `configure/CONFIG_SITE` and `configure/RELEASE`, + adjust the commented-out sections to match your case. + + * Create a file `RELEASE.local` inside `configure` (or at one of the + other usual places) that sets `OPCUA` and `EPICS_BASE` to the absolute + path of the OPC UA Device Support and EPICS Base modules. + +## Building the Module + +Run `make` at the top level of the module. + +## Preparing the IOC + +Edit the example IOC startup script (`iocBoot/iocopcuaEx/st.cmd`): + +* Change the call to `opcuaCreateSession` to match your OPC UA server URL. + +* Uncomment the `dbLoadRecords` commands loading the example databases + for your server, adapting their macro settings if necessary. + +## Running the IOC + +Run the IOC, loading the startup script. + +Look at the database files to see which records are available. + +## Contents of the Example Module + +### TemplateDbSup + +Template databases used by the device example databases. + +`AnyServerDb` contains templates for namespace 0 (server namespace) that +should be implemented by any OPC UA server. + +### DeviceDbApp + +Example databases for different OPC UA servers. + +Please refer to the README files inside the device directories for details. + +The directory `.Db` is not being built, but intended as a template +when creating example databases for a new OPC UA device. + +## OPC UA Device Support Documentation + +The documentation folder of the Device Support module contains the +[Requirements Specification (SRS)][requirements.pdf] giving an introduction +and the list of requirements that should convey a good idea of the planned +features. + +The [Cheat Sheet][cheatsheet.pdf] explains the configuration in the startup +script and the database links. + +## Feedback / Reporting issues + +Please use the OPC UA Device Support Module's GitHub +[issue tracker](https://github.com/ralphlange/opcua/issues). + +## Contributing + +Contributions are welcome, preferably in the form of GitHub pull requests. + +An example for a new OPC UA device should contain: + +* a `DeviceDbApp` sub-directory that creates all necessary EPICS databases + +* a `README.md` file describing how to prepare the device to work + with the example application + +* a snippet for the startup script that loads the example databases. + +## License + +This example application is part of the OPC UA Device Support module +that is distributed subject to a Software License Agreement found +in file LICENSE that is included with its distribution. + + +[requirements.pdf]: https://docs.google.com/viewer?url=https://raw.githubusercontent.com/ralphlange/opcua/master/documentation/EPICS%20Support%20for%20OPC%20UA%20-%20SRS.pdf +[cheatsheet.pdf]: https://docs.google.com/viewer?url=https://raw.githubusercontent.com/ralphlange/opcua/master/documentation/EPICS%20Support%20for%20OPC%20UA%20-%20Cheat%20Sheet.pdf diff --git a/OPCUA/exampleTop/TemplateDbSup/AnyServerDb/Makefile b/OPCUA/exampleTop/TemplateDbSup/AnyServerDb/Makefile new file mode 100644 index 000000000..9e980f15d --- /dev/null +++ b/OPCUA/exampleTop/TemplateDbSup/AnyServerDb/Makefile @@ -0,0 +1,25 @@ +TOP=../.. +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE + +#---------------------------------------------------- +# Optimization of db files using dbst (DEFAULT: NO) +#DB_OPT = YES + +#---------------------------------------------------- +# Create and install (or just install) into /db +# databases, templates, substitutions like this +#DB += xxx.db + +DB += opcuaServerInfo.template +DB += opcuaServerStats.template + +#---------------------------------------------------- +# If .db template is not named *.template add +# _template = + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE + diff --git a/OPCUA/exampleTop/TemplateDbSup/AnyServerDb/opcuaServerInfo.template b/OPCUA/exampleTop/TemplateDbSup/AnyServerDb/opcuaServerInfo.template new file mode 100644 index 000000000..8aad2af2e --- /dev/null +++ b/OPCUA/exampleTop/TemplateDbSup/AnyServerDb/opcuaServerInfo.template @@ -0,0 +1,21 @@ +# OPC UA Generic Server (namespace 0) +# Server information + +# Macros: +# P device prefix +# R device suffix +# SESS session name + +# static information (read when connecting) +record(stringin, "$(P)$(R)ManufacturerName") { + field(DTYP, "OPCUA") + field(INP, "@$(SESS) i=2263 monitor=n") +} +record(stringin, "$(P)$(R)ProductName") { + field(DTYP, "OPCUA") + field(INP, "@$(SESS) i=2261 monitor=n") +} +record(stringin, "$(P)$(R)SoftwareVersion") { + field(DTYP, "OPCUA") + field(INP, "@$(SESS) i=2264 monitor=n") +} diff --git a/OPCUA/exampleTop/TemplateDbSup/AnyServerDb/opcuaServerStats.template b/OPCUA/exampleTop/TemplateDbSup/AnyServerDb/opcuaServerStats.template new file mode 100644 index 000000000..fa7a18e0f --- /dev/null +++ b/OPCUA/exampleTop/TemplateDbSup/AnyServerDb/opcuaServerStats.template @@ -0,0 +1,54 @@ +# OPC UA Generic Server (namespace 0) +# Server statistics and health + +# Macros: +# P device prefix +# R device suffix +# SESS session name +# SUBS subscription name + +# dynamic information (read on subscription) +record(stringin, "$(P)$(R)CurrentTime") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) i=2258") + field(SCAN, "I/O Intr") +} +record(mbbi, "$(P)$(R)ServerState") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) i=2259") + field(SCAN, "I/O Intr") + field(ZRST, "Running") + field(ONST, "Failed") + field(TWST, "NoConfiguration") + field(THST, "Suspended") + field(FRST, "Shutdown") + field(FVST, "Test") + field(SXST, "CommunicationFault") + field(SVST, "Unknown") +} +record(longin, "$(P)$(R)CurrentSessionCount") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) i=2277") + field(SCAN, "I/O Intr") +} +record(longin, "$(P)$(R)CurrentSubscriptionCount") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) i=2285") + field(SCAN, "I/O Intr") +} +record(longin, "$(P)$(R)CumulatedSessionCount") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) i=2278") + field(SCAN, "I/O Intr") +} +record(longin, "$(P)$(R)CumulatedSubscriptionCount") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) i=2286") + field(SCAN, "I/O Intr") +} + +# static information (read when connecting) +record(stringin, "$(P)$(R)StartTime") { + field(DTYP, "OPCUA") + field(INP, "@$(SESS) i=2257 monitor=n") +} diff --git a/OPCUA/exampleTop/TemplateDbSup/Makefile b/OPCUA/exampleTop/TemplateDbSup/Makefile new file mode 100644 index 000000000..ab15bfb1c --- /dev/null +++ b/OPCUA/exampleTop/TemplateDbSup/Makefile @@ -0,0 +1,7 @@ +TOP = .. +include $(TOP)/configure/CONFIG +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Src*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *db*)) +DIRS := $(DIRS) $(filter-out $(DIRS), $(wildcard *Db*)) +include $(TOP)/configure/RULES_DIRS diff --git a/OPCUA/exampleTop/bin/windows-x64/opcuaIoc.exe b/OPCUA/exampleTop/bin/windows-x64/opcuaIoc.exe new file mode 100644 index 000000000..88e23a7fe Binary files /dev/null and b/OPCUA/exampleTop/bin/windows-x64/opcuaIoc.exe differ diff --git a/OPCUA/exampleTop/configure/CONFIG b/OPCUA/exampleTop/configure/CONFIG new file mode 100644 index 000000000..c1a470322 --- /dev/null +++ b/OPCUA/exampleTop/configure/CONFIG @@ -0,0 +1,29 @@ +# CONFIG - Load build configuration data +# +# Do not make changes to this file! + +# Allow user to override where the build rules come from +RULES = $(EPICS_BASE) + +# RELEASE files point to other application tops +include $(TOP)/configure/RELEASE +-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).Common +ifdef T_A +-include $(TOP)/configure/RELEASE.Common.$(T_A) +-include $(TOP)/configure/RELEASE.$(EPICS_HOST_ARCH).$(T_A) +endif + +CONFIG = $(RULES)/configure +include $(CONFIG)/CONFIG + +# Override the Base definition: +INSTALL_LOCATION = $(TOP) + +# CONFIG_SITE files contain other build configuration settings +include $(TOP)/configure/CONFIG_SITE +-include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).Common +ifdef T_A + -include $(TOP)/configure/CONFIG_SITE.Common.$(T_A) + -include $(TOP)/configure/CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A) +endif + diff --git a/OPCUA/exampleTop/configure/CONFIG_SITE b/OPCUA/exampleTop/configure/CONFIG_SITE new file mode 100644 index 000000000..defada296 --- /dev/null +++ b/OPCUA/exampleTop/configure/CONFIG_SITE @@ -0,0 +1,68 @@ +# CONFIG_SITE + +# Make any application-specific changes to the EPICS build +# configuration variables in this file. +# +# Host/target specific settings can be specified in files named +# CONFIG_SITE.$(EPICS_HOST_ARCH).Common +# CONFIG_SITE.Common.$(T_A) +# CONFIG_SITE.$(EPICS_HOST_ARCH).$(T_A) + +# CHECK_RELEASE controls the consistency checking of the support +# applications pointed to by the RELEASE* files. +# Normally CHECK_RELEASE should be set to YES. +# Set CHECK_RELEASE to NO to disable checking completely. +# Set CHECK_RELEASE to WARN to perform consistency checking but +# continue building even if conflicts are found. +CHECK_RELEASE = YES + +# Set this when you only want to compile this application +# for a subset of the cross-compiled target architectures +# that Base is built for. +#CROSS_COMPILER_TARGET_ARCHS = vxWorks-ppc32 + +# To install files into a location other than $(TOP) define +# INSTALL_LOCATION here. +#INSTALL_LOCATION= + +# Set this when the IOC and build host use different paths +# to the install location. This may be needed to boot from +# a Microsoft FTP server say, or on some NFS configurations. +#IOCS_APPL_TOP = + +# For application debugging purposes, override the HOST_OPT and/ +# or CROSS_OPT settings from base/configure/CONFIG_SITE +#HOST_OPT = NO +#CROSS_OPT = NO + +# Path to the Unified Automation OPC UA C++ SDK +#UASDK = $(TOP)/../../uasdkcppclient-v1.5.3-346/sdk + +# How the Unified Automation SDK shared libraries are deployed +# SYSTEM = shared libs are in a system location +# PROVIDED = shared libs are in $(UASDK_SHRLIB_DIR) +# INSTALL = shared libs are installed (copied) into this module +# EMBED = link SDK code statically into libopcua, +# SDK libraries are not required on target system +UASDK_DEPLOY_MODE = PROVIDED +UASDK_LIB_DIR = $(UASDK)/lib +UASDK_SHRLIB_DIR = $(UASDK_LIB_DIR) +# How the Unified Automation SDK libraries were built +UASDK_USE_CRYPTO = YES +UASDK_USE_XMLPARSER = YES + +# These allow developers to override the CONFIG_SITE variable +# settings without having to modify the configure/CONFIG_SITE +# file itself. + +# Inside an embedded TOP, use the following definitions +# pointing to the configuration of the parent module +-include $(TOP)/../../CONFIG_SITE.local +-include $(TOP)/../../configure/CONFIG_SITE.local +-include $(TOP)/../configure/CONFIG_SITE.local +-include $(TOP)/configure/CONFIG_SITE.local + +# Inside a standalone TOP, use the following definitions instead +#-include $(TOP)/../CONFIG_SITE.local +#-include $(TOP)/../configure/CONFIG_SITE.local +#-include $(TOP)/configure/CONFIG_SITE.local diff --git a/OPCUA/exampleTop/configure/Makefile b/OPCUA/exampleTop/configure/Makefile new file mode 100644 index 000000000..925430940 --- /dev/null +++ b/OPCUA/exampleTop/configure/Makefile @@ -0,0 +1,8 @@ +TOP=.. + +include $(TOP)/configure/CONFIG + +TARGETS = $(CONFIG_TARGETS) +CONFIGS += $(subst ../,,$(wildcard $(CONFIG_INSTALLS))) + +include $(TOP)/configure/RULES diff --git a/OPCUA/exampleTop/configure/RELEASE b/OPCUA/exampleTop/configure/RELEASE new file mode 100644 index 000000000..9af7915ab --- /dev/null +++ b/OPCUA/exampleTop/configure/RELEASE @@ -0,0 +1,52 @@ +# RELEASE - Location of external support modules +# +# IF YOU MAKE ANY CHANGES to this file you must subsequently +# do a "gnumake rebuild" in this application's top level +# directory. +# +# The build process does not check dependencies against files +# that are outside this application, thus you should do a +# "gnumake rebuild" in the top level directory after EPICS_BASE +# or any other external module pointed to below is rebuilt. +# +# Host- or target-specific settings can be given in files named +# RELEASE.$(EPICS_HOST_ARCH).Common +# RELEASE.Common.$(T_A) +# RELEASE.$(EPICS_HOST_ARCH).$(T_A) +# +# This file is parsed by both GNUmake and an EPICS Perl script, +# so it can ONLY contain definititions of paths to other support +# modules, variable definitions that are used in module paths, +# and include statements that pull in other RELEASE files. +# Variables may be used before their values have been set. +# Build variables that are NOT used in paths should be set in +# the CONFIG_SITE file. + +# Variables and paths to dependent modules: +#MODULES = /path/to/modules +#MYMODULE = $(MODULES)/my-module + +# When used as an embedded TOP +OPCUA = $(TOP)/.. +# NOTE: if the parent module sets INSTALL_LOCATION, OPCUA must be set +# explicitly to the absolute path of that, preferably in a RELEASE.local +# file. (See README and issue #63) + +# EPICS_BASE should appear last so earlier modules can override stuff: +#EPICS_BASE = /opt/epics/3.15.5 + +# Set RULES here if you want to use build rules from somewhere +# other than EPICS_BASE: +#RULES = $(MODULES)/build-rules + +# Inside an embedded TOP, use the following definitions +# pointing to the configuration of the parent module +-include $(TOP)/../../RELEASE.local +-include $(TOP)/../../configure/RELEASE.local +#-include $(TOP)/../configure/RELEASE.local +-include $(TOP)/configure/RELEASE.local + +# Inside a standalone TOP, use the following definitions instead +#-include $(TOP)/../RELEASE.local +#-include $(TOP)/../configure/RELEASE.local +#-include $(TOP)/configure/RELEASE.local diff --git a/OPCUA/exampleTop/configure/RELEASE.local b/OPCUA/exampleTop/configure/RELEASE.local new file mode 100644 index 000000000..51ed7a215 --- /dev/null +++ b/OPCUA/exampleTop/configure/RELEASE.local @@ -0,0 +1,10 @@ +LIBXML2 = $(SUPPORT)/libxml2/master +LIBXML2_DIR = $(SUPPORT)/libxml2/master/lib/$(EPICS_HOST_ARCH) +OPENSSL = $(SUPPORT)/OpenSSL/master +ZLIB = $(SUPPORT)/zlib/master +ICONV = $(SUPPORT)/libiconv/master +ICONV_DIR = $(SUPPORT)/libiconv/master/lib/$(EPICS_HOST_ARCH) + + +include $(TOP)/../../../../ISIS_CONFIG +-include $(TOP)/../../../../ISIS_CONFIG.$(EPICS_HOST_ARCH) diff --git a/OPCUA/exampleTop/configure/RULES b/OPCUA/exampleTop/configure/RULES new file mode 100644 index 000000000..6d56e14e8 --- /dev/null +++ b/OPCUA/exampleTop/configure/RULES @@ -0,0 +1,6 @@ +# RULES + +include $(CONFIG)/RULES + +# Library should be rebuilt because LIBOBJS may have changed. +$(LIBNAME): ../Makefile diff --git a/OPCUA/exampleTop/configure/RULES.ioc b/OPCUA/exampleTop/configure/RULES.ioc new file mode 100644 index 000000000..901987c6c --- /dev/null +++ b/OPCUA/exampleTop/configure/RULES.ioc @@ -0,0 +1,2 @@ +#RULES.ioc +include $(CONFIG)/RULES.ioc diff --git a/OPCUA/exampleTop/configure/RULES_DIRS b/OPCUA/exampleTop/configure/RULES_DIRS new file mode 100644 index 000000000..3ba269dcc --- /dev/null +++ b/OPCUA/exampleTop/configure/RULES_DIRS @@ -0,0 +1,2 @@ +#RULES_DIRS +include $(CONFIG)/RULES_DIRS diff --git a/OPCUA/exampleTop/configure/RULES_TOP b/OPCUA/exampleTop/configure/RULES_TOP new file mode 100644 index 000000000..d09d668d5 --- /dev/null +++ b/OPCUA/exampleTop/configure/RULES_TOP @@ -0,0 +1,3 @@ +#RULES_TOP +include $(CONFIG)/RULES_TOP + diff --git a/OPCUA/exampleTop/db/Demo.Dynamic.Arrays.db b/OPCUA/exampleTop/db/Demo.Dynamic.Arrays.db new file mode 100644 index 000000000..71e0f5bb0 --- /dev/null +++ b/OPCUA/exampleTop/db/Demo.Dynamic.Arrays.db @@ -0,0 +1,96 @@ +# Database connecting to the UaServerCpp example server +# that is part of all Unified Automation bundles + +# Dynamic part of the Demo server + +# waveform records connecting to arrays of different types + +record(waveform, "$(P)$(R)wfchar") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Arrays.SByte") + field(FTVL, "CHAR") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(waveform, "$(P)$(R)wfint16") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Arrays.Int16") + field(FTVL, "SHORT") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(waveform, "$(P)$(R)wfint32") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Arrays.Int32") + field(FTVL, "LONG") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(waveform, "$(P)$(R)wfuchar") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Arrays.Byte") + field(FTVL, "UCHAR") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(waveform, "$(P)$(R)wfuint16") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Arrays.UInt16") + field(FTVL, "USHORT") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(waveform, "$(P)$(R)wfuint32") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Arrays.UInt32") + field(FTVL, "ULONG") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(waveform, "$(P)$(R)wffloat") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Arrays.Float") + field(FTVL, "FLOAT") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(waveform, "$(P)$(R)wfdouble") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Arrays.Double") + field(FTVL, "DOUBLE") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(waveform, "$(P)$(R)wfstring") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Arrays.String") + field(FTVL, "STRING") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} diff --git a/OPCUA/exampleTop/db/Demo.Dynamic.ArraysE7.db b/OPCUA/exampleTop/db/Demo.Dynamic.ArraysE7.db new file mode 100644 index 000000000..ee11fcd9a --- /dev/null +++ b/OPCUA/exampleTop/db/Demo.Dynamic.ArraysE7.db @@ -0,0 +1,28 @@ +# Database connecting to the UaServerCpp example server +# that is part of all Unified Automation bundles + +# Dynamic part of the Demo server + +# int64/uint64 waveform records connecting to array variables + +# This database works only on EPICS 7 !! + +record(waveform, "$(P)$(R)wfint64") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Arrays.Int64") + field(FTVL, "INT64") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(waveform, "$(P)$(R)wfuint64") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Arrays.UInt64") + field(FTVL, "UINT64") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} diff --git a/OPCUA/exampleTop/db/Demo.Dynamic.Scalar.db b/OPCUA/exampleTop/db/Demo.Dynamic.Scalar.db new file mode 100644 index 000000000..5bbf331fa --- /dev/null +++ b/OPCUA/exampleTop/db/Demo.Dynamic.Scalar.db @@ -0,0 +1,89 @@ +# Database connecting to the UaServerCpp example server +# that is part of all Unified Automation bundles + +# Dynamic part of the Demo server + +# records connecting to variables of different types + +record(longin, "$(P)$(R)lichar") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.SByte") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(longin, "$(P)$(R)liint16") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.Int16") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(longin, "$(P)$(R)liint32") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.Int32") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(longin, "$(P)$(R)liuchar") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.Byte") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(longin, "$(P)$(R)liuint16") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.UInt16") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(longin, "$(P)$(R)liuint32") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.UInt32") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R)aifloat") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.Float") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R)aidouble") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.Double") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ai, "$(P)$(R)aiint32") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.Int32") + field(LINR, "SLOPE") + field(ESLO, "0.1") + field(PREC, "1") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringin, "$(P)$(R)sistring") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.String") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} diff --git a/OPCUA/exampleTop/db/Demo.Dynamic.ScalarE7.db b/OPCUA/exampleTop/db/Demo.Dynamic.ScalarE7.db new file mode 100644 index 000000000..ea1165aa6 --- /dev/null +++ b/OPCUA/exampleTop/db/Demo.Dynamic.ScalarE7.db @@ -0,0 +1,24 @@ +# Database connecting to the UaServerCpp example server +# that is part of all Unified Automation bundles + +# Dynamic part of the Demo server + +# int64 records connecting to variables of different types + +# This database works only on EPICS 7 !! + +record(int64in, "$(P)$(R)int64in") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.Int64") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(int64in, "$(P)$(R)uint64in") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.UInt64") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} diff --git a/OPCUA/exampleTop/db/Demo.Static.Arrays.db b/OPCUA/exampleTop/db/Demo.Static.Arrays.db new file mode 100644 index 000000000..b0733323c --- /dev/null +++ b/OPCUA/exampleTop/db/Demo.Static.Arrays.db @@ -0,0 +1,158 @@ +# Database connecting to the UaServerCpp example server +# that is part of all Unified Automation bundles + +# Dynamic part of the Demo server + +# aai/aao records connecting to arrays of different types + +record(aai, "$(P)$(R)aaichar") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Arrays.SByte") + field(FTVL, "CHAR") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aao, "$(P)$(R)aaochar") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Arrays.SByte") + field(FTVL, "CHAR") + field(NELM, "10") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aai, "$(P)$(R)aaiint16") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Arrays.Int16") + field(FTVL, "SHORT") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aao, "$(P)$(R)aaoint16") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Arrays.Int16") + field(FTVL, "SHORT") + field(NELM, "10") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aai, "$(P)$(R)aaiint32") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Arrays.Int32") + field(FTVL, "LONG") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aao, "$(P)$(R)aaoint32") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Arrays.Int32") + field(FTVL, "LONG") + field(NELM, "10") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aai, "$(P)$(R)aaiuchar") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Arrays.Byte") + field(FTVL, "UCHAR") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aao, "$(P)$(R)aaouchar") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Arrays.Byte") + field(FTVL, "UCHAR") + field(NELM, "10") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aai, "$(P)$(R)aaiuint32") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Arrays.UInt32") + field(FTVL, "ULONG") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aao, "$(P)$(R)aaouint32") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Arrays.UInt32") + field(FTVL, "ULONG") + field(NELM, "10") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aai, "$(P)$(R)aaifloat") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Arrays.Float") + field(FTVL, "FLOAT") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aao, "$(P)$(R)aaofloat") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Arrays.Float") + field(FTVL, "FLOAT") + field(NELM, "10") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aai, "$(P)$(R)aaidouble") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Arrays.Double") + field(FTVL, "DOUBLE") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aao, "$(P)$(R)aaodouble") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Arrays.Double") + field(FTVL, "DOUBLE") + field(NELM, "10") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aai, "$(P)$(R)aaistring") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Arrays.String") + field(FTVL, "STRING") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aao, "$(P)$(R)aaostring") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Arrays.String") + field(FTVL, "STRING") + field(NELM, "10") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} diff --git a/OPCUA/exampleTop/db/Demo.Static.ArraysE7.db b/OPCUA/exampleTop/db/Demo.Static.ArraysE7.db new file mode 100644 index 000000000..36cd4dfbf --- /dev/null +++ b/OPCUA/exampleTop/db/Demo.Static.ArraysE7.db @@ -0,0 +1,46 @@ +# Database connecting to the UaServerCpp example server +# that is part of all Unified Automation bundles + +# Dynamic part of the Demo server + +# int64/uint64 aai/aao records connecting to array variables + +# This database works only on EPICS 7 !! + +record(aai, "$(P)$(R)aaiint64") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Arrays.Int64") + field(FTVL, "INT64") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aao, "$(P)$(R)aaoint64") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Arrays.Int64") + field(FTVL, "INT64") + field(NELM, "10") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aai, "$(P)$(R)aaiuint64") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Arrays.UInt64") + field(FTVL, "UINT64") + field(NELM, "10") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(aao, "$(P)$(R)aaouint64") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Arrays.UInt64") + field(FTVL, "UINT64") + field(NELM, "10") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} diff --git a/OPCUA/exampleTop/db/Demo.Static.Scalar.db b/OPCUA/exampleTop/db/Demo.Static.Scalar.db new file mode 100644 index 000000000..d1e8998b2 --- /dev/null +++ b/OPCUA/exampleTop/db/Demo.Static.Scalar.db @@ -0,0 +1,166 @@ +# Database connecting to the UaServerCpp example server +# that is part of all Unified Automation bundles + +# Static part of the Demo server + +# Records connecting to variables of different types + +# bi/bo - Bool +# - the "...x" variants are not monitored + +record(bi, "$(P)$(R)bibool") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Boolean") + field(ZNAM, "false") + field(ONAM, "true") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(bo, "$(P)$(R)bobool") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Boolean") + field(ZNAM, "false") + field(ONAM, "true") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(bi, "$(P)$(R)biboolx") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Boolean monitor=n") + field(ZNAM, "false") + field(ONAM, "true") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(bo, "$(P)$(R)boboolx") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Boolean monitor=n") + field(ZNAM, "false") + field(ONAM, "true") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +# mbbi/mbbo - Byte + +record(mbbi, "$(P)$(R)mbbibyte") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Byte") + field(ZRST, "zero") + field(ONST, "one") + field(TWST, "two") + field(THST, "three") + field(FRST, "four") + field(FVST, "five") + field(SXST, "six") + field(SVST, "seven") + field(EIST, "eight") + field(NIST, "nine") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(mbbo, "$(P)$(R)mbbobyte") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Byte") + field(ZRST, "zero") + field(ONST, "one") + field(TWST, "two") + field(THST, "three") + field(FRST, "four") + field(FVST, "five") + field(SXST, "six") + field(SVST, "seven") + field(EIST, "eight") + field(NIST, "nine") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(longin, "$(P)$(R)libyte") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Byte") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +# mbbiDirect/mbboDirect - UInt32 + +record(mbbiDirect, "$(P)$(R)mbbiduint32") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Scalar.UInt32") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(mbboDirect, "$(P)$(R)mbboduint32") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Scalar.UInt32") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +# ai/ao - Double + +record(ai, "$(P)$(R)aidouble") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Double") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ao, "$(P)$(R)aodouble") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Double") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +# ai/ao - int32 (using linear conversion) + +record(ai, "$(P)$(R)aiint32") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Int32") + field(LINR, "LINEAR") + field(EGUL, "-1e3") + field(EGUF, "1e3") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(ao, "$(P)$(R)aoint32") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Int32") + field(LINR, "LINEAR") + field(EGUL, "-1e3") + field(EGUF, "1e3") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +# si/so - String + +record(stringin, "$(P)$(R)sistring") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Scalar.String") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(stringout, "$(P)$(R)sostring") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Scalar.String") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} diff --git a/OPCUA/exampleTop/db/Demo.Static.ScalarE7.db b/OPCUA/exampleTop/db/Demo.Static.ScalarE7.db new file mode 100644 index 000000000..286380b0e --- /dev/null +++ b/OPCUA/exampleTop/db/Demo.Static.ScalarE7.db @@ -0,0 +1,42 @@ +# Database connecting to the UaServerCpp example server +# that is part of all Unified Automation bundles + +# Dynamic part of the Demo server + +# int64 and long string records connecting to scalar variables + +# This database works only on EPICS 7 !! + +# int64in/int64out - Int64 + +record(int64in, "$(P)$(R)int64in") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Int64") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(int64out, "$(P)$(R)int64out") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Int64") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +# lsi/lso - String + +record(lsi, "$(P)$(R)lsistring") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.Static.Scalar.String") + field(SCAN, "I/O Intr") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} + +record(lso, "$(P)$(R)lsostring") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Scalar.String") + field(TSE, "-2") + field(TPRO, "$(DEBUG=0)") +} diff --git a/OPCUA/exampleTop/db/Demo.WorkOrder.db b/OPCUA/exampleTop/db/Demo.WorkOrder.db new file mode 100644 index 000000000..ec730945c --- /dev/null +++ b/OPCUA/exampleTop/db/Demo.WorkOrder.db @@ -0,0 +1,110 @@ +# Database connecting to the UaServerCpp example server +# that is part of all Unified Automation bundles + +# WorkOrder part of the Demo server (user defined structures) + +# Records connecting to an instance of WorkOrder Variable + +# Macros: +# P = Record name prefix +# R = Record name prefix of the structure +# SESS = Session name +# SUBS = Subscription name +# WO_NODEID = Complete node name of the OPC UA variable + +# R/W version (bidirectional output records) + +record(opcuaItem, "$(P)WOVAR:item") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.WorkOrder.WorkOrderVariable") + field(TSE, "-2") +} + +record(stringout, "$(P)WOVAR:assetid") { + field(DTYP, "OPCUA") + field(OUT, "@$(P)WOVAR:item element=AssetID") + field(TSE, "-2") +} + +record(stringout, "$(P)WOVAR:starttime") { + field(DTYP, "OPCUA") + field(OUT, "@$(P)WOVAR:item element=StartTime") + field(TSE, "-2") +} + + +# R/O version (input records) + +record(opcuaItem, "$(P)WOVAR:itemRBK") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.WorkOrder.WorkOrderVariable") + field(TSE, "-2") +} + +record(stringin, "$(P)WOVAR:assetidRBK") { + field(DTYP, "OPCUA") + field(INP, "@$(P)WOVAR:itemRBK element=AssetID") + field(TSE, "-2") +} + +record(stringin, "$(P)WOVAR:starttimeRBK") { + field(DTYP, "OPCUA") + field(INP, "@$(P)WOVAR:itemRBK element=StartTime") + field(SCAN, "I/O Intr") + field(TSE, "-2") +} +# Database connecting to the UaServerCpp example server +# that is part of all Unified Automation bundles + +# WorkOrder part of the Demo server (user defined structures) + +# Records connecting to an instance of WorkOrder Variable + +# Macros: +# P = Record name prefix +# R = Record name prefix of the structure +# SESS = Session name +# SUBS = Subscription name +# WO_NODEID = Complete node name of the OPC UA variable + +# R/W version (bidirectional output records) + +record(opcuaItem, "$(P)WOVAR2:item") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.WorkOrder.WorkOrderVariable2") + field(TSE, "-2") +} + +record(stringout, "$(P)WOVAR2:assetid") { + field(DTYP, "OPCUA") + field(OUT, "@$(P)WOVAR2:item element=AssetID") + field(TSE, "-2") +} + +record(stringout, "$(P)WOVAR2:starttime") { + field(DTYP, "OPCUA") + field(OUT, "@$(P)WOVAR2:item element=StartTime") + field(TSE, "-2") +} + + +# R/O version (input records) + +record(opcuaItem, "$(P)WOVAR2:itemRBK") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=2;s=Demo.WorkOrder.WorkOrderVariable2") + field(TSE, "-2") +} + +record(stringin, "$(P)WOVAR2:assetidRBK") { + field(DTYP, "OPCUA") + field(INP, "@$(P)WOVAR2:itemRBK element=AssetID") + field(TSE, "-2") +} + +record(stringin, "$(P)WOVAR2:starttimeRBK") { + field(DTYP, "OPCUA") + field(INP, "@$(P)WOVAR2:itemRBK element=StartTime") + field(SCAN, "I/O Intr") + field(TSE, "-2") +} diff --git a/OPCUA/exampleTop/db/S7-1500-DB1.db b/OPCUA/exampleTop/db/S7-1500-DB1.db new file mode 100644 index 000000000..a9bb8d0d4 --- /dev/null +++ b/OPCUA/exampleTop/db/S7-1500-DB1.db @@ -0,0 +1,110 @@ +# Database connecting to a manually created global data block +# DB1 with some example items +# The namespace for the SIEMENS Simatic S7 OPCUA is ns=3 + +# Set of longin/longout, working on an Integer type data item +# Both set up monitors, i.e. the output is bidirectional + +record(longin, "$(P)$(R)li1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myInt\"") + field(SCAN, "I/O Intr") +} +record(longout, "$(P)$(R)lo1") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myInt\"") +} + +# This longin/longout pair is working on data of type Word +# The input uses server timestamps, the output is unidirectional +record(longin, "$(P)$(R)li2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myWord\"") + field(SCAN, "I/O Intr") + field(TSE, "-2") +} +record(longout, "$(P)$(R)lo2") { + field(DTYP, "OPCUA") + field(OUT, "@$(SESS) ns=3;s=\"Data_block_1\".\"myWord\" monitor=n") +} + +# An enum pair working on the same Word type data item +record(mbbi, "$(P)$(R)mbbi1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myWord\"") + field(SCAN, "I/O Intr") + field(ZRST, "zero") + field(ZRVL, "1") + field(ONST, "one") + field(ONVL, "2") + field(TWST, "two") + field(TWVL, "4") + field(THST, "three") + field(THVL, "8") +} +record(mbbo, "$(P)$(R)mbbo1") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myWord\"") + field(ZRST, "zero") + field(ZRVL, "1") + field(ONST, "one") + field(ONVL, "2") + field(TWST, "two") + field(TWVL, "4") + field(THST, "three") + field(THVL, "8") +} + +# A pair of ai/ao working on a double data item +# The other input uses SLOPE conversion +record(ai, "$(P)$(R)ai1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myDouble\"") + field(SCAN, "I/O Intr") +} +record(ao, "$(P)$(R)ao1") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myDouble\"") +} +record(ai, "$(P)$(R)ai2") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myDouble\"") + field(SCAN, "I/O Intr") + field(LINR, "SLOPE") + field(ESLO, "5e6") + field(EOFF, "1e3") +} + +# A pair of bi/bo working on a Boolean data item +record(bi, "$(P)$(R)bi1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myBool\"") + field(SCAN, "I/O Intr") +} +record(bo, "$(P)$(R)bo1") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myBool\"") +} + +# A pair of stringin/stringout and their "long string" versions +# all working on a String data item +record(stringin, "$(P)$(R)si1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myString\"") + field(SCAN, "I/O Intr") +} +record(stringout, "$(P)$(R)so1") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myString\"") +} +record(lsi, "$(P)$(R)lsi1") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myString\"") + field(SCAN, "I/O Intr") + field(SIZV, "255") +} +record(lso, "$(P)$(R)lso1") { + field(DTYP, "OPCUA") + field(OUT, "@$(SUBS) ns=3;s=\"Data_block_1\".\"myString\"") + field(SIZV, "255") +} diff --git a/OPCUA/exampleTop/db/S7-1500-server.db b/OPCUA/exampleTop/db/S7-1500-server.db new file mode 100644 index 000000000..46345e67e --- /dev/null +++ b/OPCUA/exampleTop/db/S7-1500-server.db @@ -0,0 +1,75 @@ +# OPC UA Generic Server (namespace 0) +# Server information + +# Macros: +# P device prefix +# R device suffix +# SESS session name + +# static information (read when connecting) +record(stringin, "$(P)$(R)ManufacturerName") { + field(DTYP, "OPCUA") + field(INP, "@$(SESS) i=2263 monitor=n") +} +record(stringin, "$(P)$(R)ProductName") { + field(DTYP, "OPCUA") + field(INP, "@$(SESS) i=2261 monitor=n") +} +record(stringin, "$(P)$(R)SoftwareVersion") { + field(DTYP, "OPCUA") + field(INP, "@$(SESS) i=2264 monitor=n") +} +# OPC UA Generic Server (namespace 0) +# Server statistics and health + +# Macros: +# P device prefix +# R device suffix +# SESS session name +# SUBS subscription name + +# dynamic information (read on subscription) +record(stringin, "$(P)$(R)CurrentTime") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) i=2258") + field(SCAN, "I/O Intr") +} +record(mbbi, "$(P)$(R)ServerState") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) i=2259") + field(SCAN, "I/O Intr") + field(ZRST, "Running") + field(ONST, "Failed") + field(TWST, "NoConfiguration") + field(THST, "Suspended") + field(FRST, "Shutdown") + field(FVST, "Test") + field(SXST, "CommunicationFault") + field(SVST, "Unknown") +} +record(longin, "$(P)$(R)CurrentSessionCount") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) i=2277") + field(SCAN, "I/O Intr") +} +record(longin, "$(P)$(R)CurrentSubscriptionCount") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) i=2285") + field(SCAN, "I/O Intr") +} +record(longin, "$(P)$(R)CumulatedSessionCount") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) i=2278") + field(SCAN, "I/O Intr") +} +record(longin, "$(P)$(R)CumulatedSubscriptionCount") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) i=2286") + field(SCAN, "I/O Intr") +} + +# static information (read when connecting) +record(stringin, "$(P)$(R)StartTime") { + field(DTYP, "OPCUA") + field(INP, "@$(SESS) i=2257 monitor=n") +} diff --git a/OPCUA/exampleTop/db/UaDemoServer-server.db b/OPCUA/exampleTop/db/UaDemoServer-server.db new file mode 100644 index 000000000..46345e67e --- /dev/null +++ b/OPCUA/exampleTop/db/UaDemoServer-server.db @@ -0,0 +1,75 @@ +# OPC UA Generic Server (namespace 0) +# Server information + +# Macros: +# P device prefix +# R device suffix +# SESS session name + +# static information (read when connecting) +record(stringin, "$(P)$(R)ManufacturerName") { + field(DTYP, "OPCUA") + field(INP, "@$(SESS) i=2263 monitor=n") +} +record(stringin, "$(P)$(R)ProductName") { + field(DTYP, "OPCUA") + field(INP, "@$(SESS) i=2261 monitor=n") +} +record(stringin, "$(P)$(R)SoftwareVersion") { + field(DTYP, "OPCUA") + field(INP, "@$(SESS) i=2264 monitor=n") +} +# OPC UA Generic Server (namespace 0) +# Server statistics and health + +# Macros: +# P device prefix +# R device suffix +# SESS session name +# SUBS subscription name + +# dynamic information (read on subscription) +record(stringin, "$(P)$(R)CurrentTime") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) i=2258") + field(SCAN, "I/O Intr") +} +record(mbbi, "$(P)$(R)ServerState") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) i=2259") + field(SCAN, "I/O Intr") + field(ZRST, "Running") + field(ONST, "Failed") + field(TWST, "NoConfiguration") + field(THST, "Suspended") + field(FRST, "Shutdown") + field(FVST, "Test") + field(SXST, "CommunicationFault") + field(SVST, "Unknown") +} +record(longin, "$(P)$(R)CurrentSessionCount") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) i=2277") + field(SCAN, "I/O Intr") +} +record(longin, "$(P)$(R)CurrentSubscriptionCount") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) i=2285") + field(SCAN, "I/O Intr") +} +record(longin, "$(P)$(R)CumulatedSessionCount") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) i=2278") + field(SCAN, "I/O Intr") +} +record(longin, "$(P)$(R)CumulatedSubscriptionCount") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) i=2286") + field(SCAN, "I/O Intr") +} + +# static information (read when connecting) +record(stringin, "$(P)$(R)StartTime") { + field(DTYP, "OPCUA") + field(INP, "@$(SESS) i=2257 monitor=n") +} diff --git a/OPCUA/exampleTop/db/opcuaServerInfo.template b/OPCUA/exampleTop/db/opcuaServerInfo.template new file mode 100644 index 000000000..8aad2af2e --- /dev/null +++ b/OPCUA/exampleTop/db/opcuaServerInfo.template @@ -0,0 +1,21 @@ +# OPC UA Generic Server (namespace 0) +# Server information + +# Macros: +# P device prefix +# R device suffix +# SESS session name + +# static information (read when connecting) +record(stringin, "$(P)$(R)ManufacturerName") { + field(DTYP, "OPCUA") + field(INP, "@$(SESS) i=2263 monitor=n") +} +record(stringin, "$(P)$(R)ProductName") { + field(DTYP, "OPCUA") + field(INP, "@$(SESS) i=2261 monitor=n") +} +record(stringin, "$(P)$(R)SoftwareVersion") { + field(DTYP, "OPCUA") + field(INP, "@$(SESS) i=2264 monitor=n") +} diff --git a/OPCUA/exampleTop/db/opcuaServerStats.template b/OPCUA/exampleTop/db/opcuaServerStats.template new file mode 100644 index 000000000..fa7a18e0f --- /dev/null +++ b/OPCUA/exampleTop/db/opcuaServerStats.template @@ -0,0 +1,54 @@ +# OPC UA Generic Server (namespace 0) +# Server statistics and health + +# Macros: +# P device prefix +# R device suffix +# SESS session name +# SUBS subscription name + +# dynamic information (read on subscription) +record(stringin, "$(P)$(R)CurrentTime") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) i=2258") + field(SCAN, "I/O Intr") +} +record(mbbi, "$(P)$(R)ServerState") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) i=2259") + field(SCAN, "I/O Intr") + field(ZRST, "Running") + field(ONST, "Failed") + field(TWST, "NoConfiguration") + field(THST, "Suspended") + field(FRST, "Shutdown") + field(FVST, "Test") + field(SXST, "CommunicationFault") + field(SVST, "Unknown") +} +record(longin, "$(P)$(R)CurrentSessionCount") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) i=2277") + field(SCAN, "I/O Intr") +} +record(longin, "$(P)$(R)CurrentSubscriptionCount") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) i=2285") + field(SCAN, "I/O Intr") +} +record(longin, "$(P)$(R)CumulatedSessionCount") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) i=2278") + field(SCAN, "I/O Intr") +} +record(longin, "$(P)$(R)CumulatedSubscriptionCount") { + field(DTYP, "OPCUA") + field(INP, "@$(SUBS) i=2286") + field(SCAN, "I/O Intr") +} + +# static information (read when connecting) +record(stringin, "$(P)$(R)StartTime") { + field(DTYP, "OPCUA") + field(INP, "@$(SESS) i=2257 monitor=n") +} diff --git a/OPCUA/exampleTop/dbd/opcuaIoc.dbd b/OPCUA/exampleTop/dbd/opcuaIoc.dbd new file mode 100644 index 000000000..d9beca908 --- /dev/null +++ b/OPCUA/exampleTop/dbd/opcuaIoc.dbd @@ -0,0 +1,18855 @@ +menu(aSubEFLG) { + choice(aSubEFLG_NEVER, "NEVER") + choice(aSubEFLG_ON_CHANGE, "ON CHANGE") + choice(aSubEFLG_ALWAYS, "ALWAYS") +} +menu(aSubLFLG) { + choice(aSubLFLG_IGNORE, "IGNORE") + choice(aSubLFLG_READ, "READ") +} +menu(aaiPOST) { + choice(aaiPOST_Always, "Always") + choice(aaiPOST_OnChange, "On Change") +} +menu(aaoPOST) { + choice(aaoPOST_Always, "Always") + choice(aaoPOST_OnChange, "On Change") +} +menu(aoOIF) { + choice(aoOIF_Full, "Full") + choice(aoOIF_Incremental, "Incremental") +} +menu(bufferingALG) { + choice(bufferingALG_FIFO, "FIFO Buffer") + choice(bufferingALG_LIFO, "LIFO Buffer") +} +menu(calcoutDOPT) { + choice(calcoutDOPT_Use_VAL, "Use CALC") + choice(calcoutDOPT_Use_OVAL, "Use OCAL") +} +menu(calcoutINAV) { + choice(calcoutINAV_EXT_NC, "Ext PV NC") + choice(calcoutINAV_EXT, "Ext PV OK") + choice(calcoutINAV_LOC, "Local PV") + choice(calcoutINAV_CON, "Constant") +} +menu(calcoutOOPT) { + choice(calcoutOOPT_Every_Time, "Every Time") + choice(calcoutOOPT_On_Change, "On Change") + choice(calcoutOOPT_When_Zero, "When Zero") + choice(calcoutOOPT_When_Non_zero, "When Non-zero") + choice(calcoutOOPT_Transition_To_Zero, "Transition To Zero") + choice(calcoutOOPT_Transition_To_Non_zero, "Transition To Non-zero") +} +menu(compressALG) { + choice(compressALG_N_to_1_Low_Value, "N to 1 Low Value") + choice(compressALG_N_to_1_High_Value, "N to 1 High Value") + choice(compressALG_N_to_1_Average, "N to 1 Average") + choice(compressALG_Average, "Average") + choice(compressALG_Circular_Buffer, "Circular Buffer") + choice(compressALG_N_to_1_Median, "N to 1 Median") +} +menu(dfanoutSELM) { + choice(dfanoutSELM_All, "All") + choice(dfanoutSELM_Specified, "Specified") + choice(dfanoutSELM_Mask, "Mask") +} +menu(fanoutSELM) { + choice(fanoutSELM_All, "All") + choice(fanoutSELM_Specified, "Specified") + choice(fanoutSELM_Mask, "Mask") +} +menu(histogramCMD) { + choice(histogramCMD_Read, "Read") + choice(histogramCMD_Clear, "Clear") + choice(histogramCMD_Start, "Start") + choice(histogramCMD_Stop, "Stop") +} +menu(longoutOOPT) { + choice(longoutOOPT_Every_Time, "Every Time") + choice(longoutOOPT_On_Change, "On Change") + choice(longoutOOPT_When_Zero, "When Zero") + choice(longoutOOPT_When_Non_zero, "When Non-zero") + choice(longoutOOPT_Transition_To_Zero, "Transition To Zero") + choice(longoutOOPT_Transition_To_Non_zero, "Transition To Non-zero") +} +menu(menuAlarmSevr) { + choice(menuAlarmSevrNO_ALARM, "NO_ALARM") + choice(menuAlarmSevrMINOR, "MINOR") + choice(menuAlarmSevrMAJOR, "MAJOR") + choice(menuAlarmSevrINVALID, "INVALID") +} +menu(menuAlarmStat) { + choice(menuAlarmStatNO_ALARM, "NO_ALARM") + choice(menuAlarmStatREAD, "READ") + choice(menuAlarmStatWRITE, "WRITE") + choice(menuAlarmStatHIHI, "HIHI") + choice(menuAlarmStatHIGH, "HIGH") + choice(menuAlarmStatLOLO, "LOLO") + choice(menuAlarmStatLOW, "LOW") + choice(menuAlarmStatSTATE, "STATE") + choice(menuAlarmStatCOS, "COS") + choice(menuAlarmStatCOMM, "COMM") + choice(menuAlarmStatTIMEOUT, "TIMEOUT") + choice(menuAlarmStatHWLIMIT, "HWLIMIT") + choice(menuAlarmStatCALC, "CALC") + choice(menuAlarmStatSCAN, "SCAN") + choice(menuAlarmStatLINK, "LINK") + choice(menuAlarmStatSOFT, "SOFT") + choice(menuAlarmStatBAD_SUB, "BAD_SUB") + choice(menuAlarmStatUDF, "UDF") + choice(menuAlarmStatDISABLE, "DISABLE") + choice(menuAlarmStatSIMM, "SIMM") + choice(menuAlarmStatREAD_ACCESS, "READ_ACCESS") + choice(menuAlarmStatWRITE_ACCESS, "WRITE_ACCESS") +} +menu(menuBini) { + choice(menuBiniREAD, "read") + choice(menuBiniIGNORE, "ignore") + choice(menuBiniWRITE, "write") +} +menu(menuConvert) { + choice(menuConvertNO_CONVERSION, "NO CONVERSION") + choice(menuConvertSLOPE, "SLOPE") + choice(menuConvertLINEAR, "LINEAR") + choice(menuConverttypeKdegF, "typeKdegF") + choice(menuConverttypeKdegC, "typeKdegC") + choice(menuConverttypeJdegF, "typeJdegF") + choice(menuConverttypeJdegC, "typeJdegC") + choice(menuConverttypeEdegF, "typeEdegF(ixe only)") + choice(menuConverttypeEdegC, "typeEdegC(ixe only)") + choice(menuConverttypeTdegF, "typeTdegF") + choice(menuConverttypeTdegC, "typeTdegC") + choice(menuConverttypeRdegF, "typeRdegF") + choice(menuConverttypeRdegC, "typeRdegC") + choice(menuConverttypeSdegF, "typeSdegF") + choice(menuConverttypeSdegC, "typeSdegC") +} +menu(menuDefAction) { + choice(menuDefActionREAD, "read") + choice(menuDefActionWRITE, "write") +} +menu(menuFtype) { + choice(menuFtypeSTRING, "STRING") + choice(menuFtypeCHAR, "CHAR") + choice(menuFtypeUCHAR, "UCHAR") + choice(menuFtypeSHORT, "SHORT") + choice(menuFtypeUSHORT, "USHORT") + choice(menuFtypeLONG, "LONG") + choice(menuFtypeULONG, "ULONG") + choice(menuFtypeINT64, "INT64") + choice(menuFtypeUINT64, "UINT64") + choice(menuFtypeFLOAT, "FLOAT") + choice(menuFtypeDOUBLE, "DOUBLE") + choice(menuFtypeENUM, "ENUM") +} +menu(menuIvoa) { + choice(menuIvoaContinue_normally, "Continue normally") + choice(menuIvoaDon_t_drive_outputs, "Don't drive outputs") + choice(menuIvoaSet_output_to_IVOV, "Set output to IVOV") +} +menu(menuOmsl) { + choice(menuOmslsupervisory, "supervisory") + choice(menuOmslclosed_loop, "closed_loop") +} +menu(menuPini) { + choice(menuPiniNO, "NO") + choice(menuPiniYES, "YES") + choice(menuPiniRUN, "RUN") + choice(menuPiniRUNNING, "RUNNING") + choice(menuPiniPAUSE, "PAUSE") + choice(menuPiniPAUSED, "PAUSED") +} +menu(menuPost) { + choice(menuPost_OnChange, "On Change") + choice(menuPost_Always, "Always") +} +menu(menuPriority) { + choice(menuPriorityLOW, "LOW") + choice(menuPriorityMEDIUM, "MEDIUM") + choice(menuPriorityHIGH, "HIGH") +} +menu(menuScan) { + choice(menuScanPassive, "Passive") + choice(menuScanEvent, "Event") + choice(menuScanI_O_Intr, "I/O Intr") + choice(menuScan10_second, "10 second") + choice(menuScan5_second, "5 second") + choice(menuScan2_second, "2 second") + choice(menuScan1_second, "1 second") + choice(menuScan_5_second, ".5 second") + choice(menuScan_2_second, ".2 second") + choice(menuScan_1_second, ".1 second") +} +menu(menuSimm) { + choice(menuSimmNO, "NO") + choice(menuSimmYES, "YES") + choice(menuSimmRAW, "RAW") +} +menu(menuWoc) { + choice(menuWocMANUAL, "manual") + choice(menuWocIMMEDIATE, "immediate") +} +menu(menuYesNo) { + choice(menuYesNoNO, "NO") + choice(menuYesNoYES, "YES") +} +menu(selSELM) { + choice(selSELM_Specified, "Specified") + choice(selSELM_High_Signal, "High Signal") + choice(selSELM_Low_Signal, "Low Signal") + choice(selSELM_Median_Signal, "Median Signal") +} +menu(seqSELM) { + choice(seqSELM_All, "All") + choice(seqSELM_Specified, "Specified") + choice(seqSELM_Mask, "Mask") +} +menu(stringinPOST) { + choice(stringinPOST_OnChange, "On Change") + choice(stringinPOST_Always, "Always") +} +menu(stringoutPOST) { + choice(stringoutPOST_OnChange, "On Change") + choice(stringoutPOST_Always, "Always") +} +menu(waveformPOST) { + choice(waveformPOST_Always, "Always") + choice(waveformPOST_OnChange, "On Change") +} +recordtype(aSub) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %struct aSubRecord; + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_LONG) { + prompt("Subr. return value") + asl(ASL0) + } + field(OVAL, DBF_LONG) { + prompt("Old return value") + interest(3) + special(SPC_NOMOD) + } + field(INAM, DBF_STRING) { + size(41) + prompt("Initialize Subr. Name") + promptgroup("30 - Action") + interest(1) + special(SPC_NOMOD) + } + field(LFLG, DBF_MENU) { + prompt("Subr. Input Enable") + menu(aSubLFLG) + promptgroup("30 - Action") + interest(1) + } + field(SUBL, DBF_INLINK) { + prompt("Subroutine Name Link") + promptgroup("30 - Action") + interest(1) + special(SPC_NOMOD) + } + field(SNAM, DBF_STRING) { + size(41) + prompt("Process Subr. Name") + promptgroup("30 - Action") + interest(1) + special(SPC_MOD) + } + field(ONAM, DBF_STRING) { + size(41) + prompt("Old Subr. Name") + promptgroup("30 - Action") + interest(3) + special(SPC_NOMOD) + } + field(SADR, DBF_NOACCESS) { + prompt("Subroutine Address") + extra("long (*sadr)(struct aSubRecord *)") + interest(2) + special(SPC_NOMOD) + } + field(CADR, DBF_NOACCESS) { + prompt("Subroutine Cleanup Address") + extra("void (*cadr)(struct aSubRecord *)") + interest(2) + special(SPC_NOMOD) + } + field(BRSV, DBF_MENU) { + pp(TRUE) + prompt("Bad Return Severity") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(PREC, DBF_SHORT) { + prompt("Display Precision") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(EFLG, DBF_MENU) { + initial("1") + prompt("Output Event Flag") + menu(aSubEFLG) + promptgroup("50 - Output") + interest(1) + } + field(INPA, DBF_INLINK) { + prompt("Input Link A") + promptgroup("41 - Input A-G") + interest(1) + } + field(INPB, DBF_INLINK) { + prompt("Input Link B") + promptgroup("41 - Input A-G") + interest(1) + } + field(INPC, DBF_INLINK) { + prompt("Input Link C") + promptgroup("41 - Input A-G") + interest(1) + } + field(INPD, DBF_INLINK) { + prompt("Input Link D") + promptgroup("41 - Input A-G") + interest(1) + } + field(INPE, DBF_INLINK) { + prompt("Input Link E") + promptgroup("41 - Input A-G") + interest(1) + } + field(INPF, DBF_INLINK) { + prompt("Input Link F") + promptgroup("41 - Input A-G") + interest(1) + } + field(INPG, DBF_INLINK) { + prompt("Input Link G") + promptgroup("41 - Input A-G") + interest(1) + } + field(INPH, DBF_INLINK) { + prompt("Input Link H") + promptgroup("42 - Input H-N") + interest(1) + } + field(INPI, DBF_INLINK) { + prompt("Input Link I") + promptgroup("42 - Input H-N") + interest(1) + } + field(INPJ, DBF_INLINK) { + prompt("Input Link J") + promptgroup("42 - Input H-N") + interest(1) + } + field(INPK, DBF_INLINK) { + prompt("Input Link K") + promptgroup("42 - Input H-N") + interest(1) + } + field(INPL, DBF_INLINK) { + prompt("Input Link L") + promptgroup("42 - Input H-N") + interest(1) + } + field(INPM, DBF_INLINK) { + prompt("Input Link M") + promptgroup("42 - Input H-N") + interest(1) + } + field(INPN, DBF_INLINK) { + prompt("Input Link N") + promptgroup("42 - Input H-N") + interest(1) + } + field(INPO, DBF_INLINK) { + prompt("Input Link O") + promptgroup("43 - Input O-U") + interest(1) + } + field(INPP, DBF_INLINK) { + prompt("Input Link P") + promptgroup("43 - Input O-U") + interest(1) + } + field(INPQ, DBF_INLINK) { + prompt("Input Link Q") + promptgroup("43 - Input O-U") + interest(1) + } + field(INPR, DBF_INLINK) { + prompt("Input Link R") + promptgroup("43 - Input O-U") + interest(1) + } + field(INPS, DBF_INLINK) { + prompt("Input Link S") + promptgroup("43 - Input O-U") + interest(1) + } + field(INPT, DBF_INLINK) { + prompt("Input Link T") + promptgroup("43 - Input O-U") + interest(1) + } + field(INPU, DBF_INLINK) { + prompt("Input Link U") + promptgroup("43 - Input O-U") + interest(1) + } + field(A, DBF_NOACCESS) { + prompt("Input value A") + extra("void *a") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(B, DBF_NOACCESS) { + prompt("Input value B") + extra("void *b") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(C, DBF_NOACCESS) { + prompt("Input value C") + extra("void *c") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(D, DBF_NOACCESS) { + prompt("Input value D") + extra("void *d") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(E, DBF_NOACCESS) { + prompt("Input value E") + extra("void *e") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(F, DBF_NOACCESS) { + prompt("Input value F") + extra("void *f") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(G, DBF_NOACCESS) { + prompt("Input value G") + extra("void *g") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(H, DBF_NOACCESS) { + prompt("Input value H") + extra("void *h") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(I, DBF_NOACCESS) { + prompt("Input value I") + extra("void *i") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(J, DBF_NOACCESS) { + prompt("Input value J") + extra("void *j") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(K, DBF_NOACCESS) { + prompt("Input value K") + extra("void *k") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(L, DBF_NOACCESS) { + prompt("Input value L") + extra("void *l") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(M, DBF_NOACCESS) { + prompt("Input value M") + extra("void *m") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(N, DBF_NOACCESS) { + prompt("Input value N") + extra("void *n") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(O, DBF_NOACCESS) { + prompt("Input value O") + extra("void *o") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(P, DBF_NOACCESS) { + prompt("Input value P") + extra("void *p") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(Q, DBF_NOACCESS) { + prompt("Input value Q") + extra("void *q") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(R, DBF_NOACCESS) { + prompt("Input value R") + extra("void *r") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(S, DBF_NOACCESS) { + prompt("Input value S") + extra("void *s") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(T, DBF_NOACCESS) { + prompt("Input value T") + extra("void *t") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(U, DBF_NOACCESS) { + prompt("Input value U") + extra("void *u") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(FTA, DBF_MENU) { + initial("DOUBLE") + prompt("Type of A") + menu(menuFtype) + promptgroup("41 - Input A-G") + interest(1) + special(SPC_NOMOD) + } + field(FTB, DBF_MENU) { + initial("DOUBLE") + prompt("Type of B") + menu(menuFtype) + promptgroup("41 - Input A-G") + interest(1) + special(SPC_NOMOD) + } + field(FTC, DBF_MENU) { + initial("DOUBLE") + prompt("Type of C") + menu(menuFtype) + promptgroup("41 - Input A-G") + interest(1) + special(SPC_NOMOD) + } + field(FTD, DBF_MENU) { + initial("DOUBLE") + prompt("Type of D") + menu(menuFtype) + promptgroup("41 - Input A-G") + interest(1) + special(SPC_NOMOD) + } + field(FTE, DBF_MENU) { + initial("DOUBLE") + prompt("Type of E") + menu(menuFtype) + promptgroup("41 - Input A-G") + interest(1) + special(SPC_NOMOD) + } + field(FTF, DBF_MENU) { + initial("DOUBLE") + prompt("Type of F") + menu(menuFtype) + promptgroup("41 - Input A-G") + interest(1) + special(SPC_NOMOD) + } + field(FTG, DBF_MENU) { + initial("DOUBLE") + prompt("Type of G") + menu(menuFtype) + promptgroup("41 - Input A-G") + interest(1) + special(SPC_NOMOD) + } + field(FTH, DBF_MENU) { + initial("DOUBLE") + prompt("Type of H") + menu(menuFtype) + promptgroup("42 - Input H-N") + interest(1) + special(SPC_NOMOD) + } + field(FTI, DBF_MENU) { + initial("DOUBLE") + prompt("Type of I") + menu(menuFtype) + promptgroup("42 - Input H-N") + interest(1) + special(SPC_NOMOD) + } + field(FTJ, DBF_MENU) { + initial("DOUBLE") + prompt("Type of J") + menu(menuFtype) + promptgroup("42 - Input H-N") + interest(1) + special(SPC_NOMOD) + } + field(FTK, DBF_MENU) { + initial("DOUBLE") + prompt("Type of K") + menu(menuFtype) + promptgroup("42 - Input H-N") + interest(1) + special(SPC_NOMOD) + } + field(FTL, DBF_MENU) { + initial("DOUBLE") + prompt("Type of L") + menu(menuFtype) + promptgroup("42 - Input H-N") + interest(1) + special(SPC_NOMOD) + } + field(FTM, DBF_MENU) { + initial("DOUBLE") + prompt("Type of M") + menu(menuFtype) + promptgroup("42 - Input H-N") + interest(1) + special(SPC_NOMOD) + } + field(FTN, DBF_MENU) { + initial("DOUBLE") + prompt("Type of N") + menu(menuFtype) + promptgroup("42 - Input H-N") + interest(1) + special(SPC_NOMOD) + } + field(FTO, DBF_MENU) { + initial("DOUBLE") + prompt("Type of O") + menu(menuFtype) + promptgroup("43 - Input O-U") + interest(1) + special(SPC_NOMOD) + } + field(FTP, DBF_MENU) { + initial("DOUBLE") + prompt("Type of P") + menu(menuFtype) + promptgroup("43 - Input O-U") + interest(1) + special(SPC_NOMOD) + } + field(FTQ, DBF_MENU) { + initial("DOUBLE") + prompt("Type of Q") + menu(menuFtype) + promptgroup("43 - Input O-U") + interest(1) + special(SPC_NOMOD) + } + field(FTR, DBF_MENU) { + initial("DOUBLE") + prompt("Type of R") + menu(menuFtype) + promptgroup("43 - Input O-U") + interest(1) + special(SPC_NOMOD) + } + field(FTS, DBF_MENU) { + initial("DOUBLE") + prompt("Type of S") + menu(menuFtype) + promptgroup("43 - Input O-U") + interest(1) + special(SPC_NOMOD) + } + field(FTT, DBF_MENU) { + initial("DOUBLE") + prompt("Type of T") + menu(menuFtype) + promptgroup("43 - Input O-U") + interest(1) + special(SPC_NOMOD) + } + field(FTU, DBF_MENU) { + initial("DOUBLE") + prompt("Type of U") + menu(menuFtype) + promptgroup("43 - Input O-U") + interest(1) + special(SPC_NOMOD) + } + field(NOA, DBF_ULONG) { + initial("1") + prompt("Max. elements in A") + promptgroup("41 - Input A-G") + interest(1) + special(SPC_NOMOD) + } + field(NOB, DBF_ULONG) { + initial("1") + prompt("Max. elements in B") + promptgroup("41 - Input A-G") + interest(1) + special(SPC_NOMOD) + } + field(NOC, DBF_ULONG) { + initial("1") + prompt("Max. elements in C") + promptgroup("41 - Input A-G") + interest(1) + special(SPC_NOMOD) + } + field(NOD, DBF_ULONG) { + initial("1") + prompt("Max. elements in D") + promptgroup("41 - Input A-G") + interest(1) + special(SPC_NOMOD) + } + field(NOE, DBF_ULONG) { + initial("1") + prompt("Max. elements in E") + promptgroup("41 - Input A-G") + interest(1) + special(SPC_NOMOD) + } + field(NOF, DBF_ULONG) { + initial("1") + prompt("Max. elements in F") + promptgroup("41 - Input A-G") + interest(1) + special(SPC_NOMOD) + } + field(NOG, DBF_ULONG) { + initial("1") + prompt("Max. elements in G") + promptgroup("41 - Input A-G") + interest(1) + special(SPC_NOMOD) + } + field(NOH, DBF_ULONG) { + initial("1") + prompt("Max. elements in H") + promptgroup("42 - Input H-N") + interest(1) + special(SPC_NOMOD) + } + field(NOI, DBF_ULONG) { + initial("1") + prompt("Max. elements in I") + promptgroup("42 - Input H-N") + interest(1) + special(SPC_NOMOD) + } + field(NOJ, DBF_ULONG) { + initial("1") + prompt("Max. elements in J") + promptgroup("42 - Input H-N") + interest(1) + special(SPC_NOMOD) + } + field(NOK, DBF_ULONG) { + initial("1") + prompt("Max. elements in K") + promptgroup("42 - Input H-N") + interest(1) + special(SPC_NOMOD) + } + field(NOL, DBF_ULONG) { + initial("1") + prompt("Max. elements in L") + promptgroup("42 - Input H-N") + interest(1) + special(SPC_NOMOD) + } + field(NOM, DBF_ULONG) { + initial("1") + prompt("Max. elements in M") + promptgroup("42 - Input H-N") + interest(1) + special(SPC_NOMOD) + } + field(NON, DBF_ULONG) { + initial("1") + prompt("Max. elements in N") + promptgroup("42 - Input H-N") + interest(1) + special(SPC_NOMOD) + } + field(NOO, DBF_ULONG) { + initial("1") + prompt("Max. elements in O") + promptgroup("43 - Input O-U") + interest(1) + special(SPC_NOMOD) + } + field(NOP, DBF_ULONG) { + initial("1") + prompt("Max. elements in P") + promptgroup("43 - Input O-U") + interest(1) + special(SPC_NOMOD) + } + field(NOQ, DBF_ULONG) { + initial("1") + prompt("Max. elements in Q") + promptgroup("43 - Input O-U") + interest(1) + special(SPC_NOMOD) + } + field(NOR, DBF_ULONG) { + initial("1") + prompt("Max. elements in R") + promptgroup("43 - Input O-U") + interest(1) + special(SPC_NOMOD) + } + field(NOS, DBF_ULONG) { + initial("1") + prompt("Max. elements in S") + promptgroup("43 - Input O-U") + interest(1) + special(SPC_NOMOD) + } + field(NOT, DBF_ULONG) { + initial("1") + prompt("Max. elements in T") + promptgroup("43 - Input O-U") + interest(1) + special(SPC_NOMOD) + } + field(NOU, DBF_ULONG) { + initial("1") + prompt("Max. elements in U") + promptgroup("43 - Input O-U") + interest(1) + special(SPC_NOMOD) + } + field(NEA, DBF_ULONG) { + initial("1") + prompt("Num. elements in A") + interest(3) + special(SPC_NOMOD) + } + field(NEB, DBF_ULONG) { + initial("1") + prompt("Num. elements in B") + interest(3) + special(SPC_NOMOD) + } + field(NEC, DBF_ULONG) { + initial("1") + prompt("Num. elements in C") + interest(3) + special(SPC_NOMOD) + } + field(NED, DBF_ULONG) { + initial("1") + prompt("Num. elements in D") + interest(3) + special(SPC_NOMOD) + } + field(NEE, DBF_ULONG) { + initial("1") + prompt("Num. elements in E") + interest(3) + special(SPC_NOMOD) + } + field(NEF, DBF_ULONG) { + initial("1") + prompt("Num. elements in F") + interest(3) + special(SPC_NOMOD) + } + field(NEG, DBF_ULONG) { + initial("1") + prompt("Num. elements in G") + interest(3) + special(SPC_NOMOD) + } + field(NEH, DBF_ULONG) { + initial("1") + prompt("Num. elements in H") + interest(3) + special(SPC_NOMOD) + } + field(NEI, DBF_ULONG) { + initial("1") + prompt("Num. elements in I") + interest(3) + special(SPC_NOMOD) + } + field(NEJ, DBF_ULONG) { + initial("1") + prompt("Num. elements in J") + interest(3) + special(SPC_NOMOD) + } + field(NEK, DBF_ULONG) { + initial("1") + prompt("Num. elements in K") + interest(3) + special(SPC_NOMOD) + } + field(NEL, DBF_ULONG) { + initial("1") + prompt("Num. elements in L") + interest(3) + special(SPC_NOMOD) + } + field(NEM, DBF_ULONG) { + initial("1") + prompt("Num. elements in M") + interest(3) + special(SPC_NOMOD) + } + field(NEN, DBF_ULONG) { + initial("1") + prompt("Num. elements in N") + interest(3) + special(SPC_NOMOD) + } + field(NEO, DBF_ULONG) { + initial("1") + prompt("Num. elements in O") + interest(3) + special(SPC_NOMOD) + } + field(NEP, DBF_ULONG) { + initial("1") + prompt("Num. elements in P") + interest(3) + special(SPC_NOMOD) + } + field(NEQ, DBF_ULONG) { + initial("1") + prompt("Num. elements in Q") + interest(3) + special(SPC_NOMOD) + } + field(NER, DBF_ULONG) { + initial("1") + prompt("Num. elements in R") + interest(3) + special(SPC_NOMOD) + } + field(NES, DBF_ULONG) { + initial("1") + prompt("Num. elements in S") + interest(3) + special(SPC_NOMOD) + } + field(NET, DBF_ULONG) { + initial("1") + prompt("Num. elements in T") + interest(3) + special(SPC_NOMOD) + } + field(NEU, DBF_ULONG) { + initial("1") + prompt("Num. elements in U") + interest(3) + special(SPC_NOMOD) + } + field(OUTA, DBF_OUTLINK) { + prompt("Output Link A") + promptgroup("51 - Output A-G") + interest(1) + } + field(OUTB, DBF_OUTLINK) { + prompt("Output Link B") + promptgroup("51 - Output A-G") + interest(1) + } + field(OUTC, DBF_OUTLINK) { + prompt("Output Link C") + promptgroup("51 - Output A-G") + interest(1) + } + field(OUTD, DBF_OUTLINK) { + prompt("Output Link D") + promptgroup("51 - Output A-G") + interest(1) + } + field(OUTE, DBF_OUTLINK) { + prompt("Output Link E") + promptgroup("51 - Output A-G") + interest(1) + } + field(OUTF, DBF_OUTLINK) { + prompt("Output Link F") + promptgroup("51 - Output A-G") + interest(1) + } + field(OUTG, DBF_OUTLINK) { + prompt("Output Link G") + promptgroup("51 - Output A-G") + interest(1) + } + field(OUTH, DBF_OUTLINK) { + prompt("Output Link H") + promptgroup("52 - Output H-N") + interest(1) + } + field(OUTI, DBF_OUTLINK) { + prompt("Output Link I") + promptgroup("52 - Output H-N") + interest(1) + } + field(OUTJ, DBF_OUTLINK) { + prompt("Output Link J") + promptgroup("52 - Output H-N") + interest(1) + } + field(OUTK, DBF_OUTLINK) { + prompt("Output Link K") + promptgroup("52 - Output H-N") + interest(1) + } + field(OUTL, DBF_OUTLINK) { + prompt("Output Link L") + promptgroup("52 - Output H-N") + interest(1) + } + field(OUTM, DBF_OUTLINK) { + prompt("Output Link M") + promptgroup("52 - Output H-N") + interest(1) + } + field(OUTN, DBF_OUTLINK) { + prompt("Output Link N") + promptgroup("52 - Output H-N") + interest(1) + } + field(OUTO, DBF_OUTLINK) { + prompt("Output Link O") + promptgroup("53 - Output O-U") + interest(1) + } + field(OUTP, DBF_OUTLINK) { + prompt("Output Link P") + promptgroup("53 - Output O-U") + interest(1) + } + field(OUTQ, DBF_OUTLINK) { + prompt("Output Link Q") + promptgroup("53 - Output O-U") + interest(1) + } + field(OUTR, DBF_OUTLINK) { + prompt("Output Link R") + promptgroup("53 - Output O-U") + interest(1) + } + field(OUTS, DBF_OUTLINK) { + prompt("Output Link S") + promptgroup("53 - Output O-U") + interest(1) + } + field(OUTT, DBF_OUTLINK) { + prompt("Output Link T") + promptgroup("53 - Output O-U") + interest(1) + } + field(OUTU, DBF_OUTLINK) { + prompt("Output Link U") + promptgroup("53 - Output O-U") + interest(1) + } + field(VALA, DBF_NOACCESS) { + prompt("Output value A") + extra("void *vala") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(VALB, DBF_NOACCESS) { + prompt("Output value B") + extra("void *valb") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(VALC, DBF_NOACCESS) { + prompt("Output value C") + extra("void *valc") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(VALD, DBF_NOACCESS) { + prompt("Output value D") + extra("void *vald") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(VALE, DBF_NOACCESS) { + prompt("Output value E") + extra("void *vale") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(VALF, DBF_NOACCESS) { + prompt("Output value F") + extra("void *valf") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(VALG, DBF_NOACCESS) { + prompt("Output value G") + extra("void *valg") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(VALH, DBF_NOACCESS) { + prompt("Output value H") + extra("void *valh") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(VALI, DBF_NOACCESS) { + prompt("Output value I") + extra("void *vali") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(VALJ, DBF_NOACCESS) { + prompt("Output value J") + extra("void *valj") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(VALK, DBF_NOACCESS) { + prompt("Output value K") + extra("void *valk") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(VALL, DBF_NOACCESS) { + prompt("Output value L") + extra("void *vall") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(VALM, DBF_NOACCESS) { + prompt("Output value M") + extra("void *valm") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(VALN, DBF_NOACCESS) { + prompt("Output value N") + extra("void *valn") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(VALO, DBF_NOACCESS) { + prompt("Output value O") + extra("void *valo") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(VALP, DBF_NOACCESS) { + prompt("Output value P") + extra("void *valp") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(VALQ, DBF_NOACCESS) { + prompt("Output value Q") + extra("void *valq") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(VALR, DBF_NOACCESS) { + prompt("Output value R") + extra("void *valr") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(VALS, DBF_NOACCESS) { + prompt("Output value S") + extra("void *vals") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(VALT, DBF_NOACCESS) { + prompt("Output value T") + extra("void *valt") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(VALU, DBF_NOACCESS) { + prompt("Output value U") + extra("void *valu") + asl(ASL0) + interest(2) + special(SPC_DBADDR) + } + field(OVLA, DBF_NOACCESS) { + prompt("Old Output A") + extra("void *ovla") + asl(ASL0) + interest(4) + special(SPC_NOMOD) + } + field(OVLB, DBF_NOACCESS) { + prompt("Old Output B") + extra("void *ovlb") + asl(ASL0) + interest(4) + special(SPC_NOMOD) + } + field(OVLC, DBF_NOACCESS) { + prompt("Old Output C") + extra("void *ovlc") + asl(ASL0) + interest(4) + special(SPC_NOMOD) + } + field(OVLD, DBF_NOACCESS) { + prompt("Old Output D") + extra("void *ovld") + asl(ASL0) + interest(4) + special(SPC_NOMOD) + } + field(OVLE, DBF_NOACCESS) { + prompt("Old Output E") + extra("void *ovle") + asl(ASL0) + interest(4) + special(SPC_NOMOD) + } + field(OVLF, DBF_NOACCESS) { + prompt("Old Output F") + extra("void *ovlf") + asl(ASL0) + interest(4) + special(SPC_NOMOD) + } + field(OVLG, DBF_NOACCESS) { + prompt("Old Output G") + extra("void *ovlg") + asl(ASL0) + interest(4) + special(SPC_NOMOD) + } + field(OVLH, DBF_NOACCESS) { + prompt("Old Output H") + extra("void *ovlh") + asl(ASL0) + interest(4) + special(SPC_NOMOD) + } + field(OVLI, DBF_NOACCESS) { + prompt("Old Output I") + extra("void *ovli") + asl(ASL0) + interest(4) + special(SPC_NOMOD) + } + field(OVLJ, DBF_NOACCESS) { + prompt("Old Output J") + extra("void *ovlj") + asl(ASL0) + interest(4) + special(SPC_NOMOD) + } + field(OVLK, DBF_NOACCESS) { + prompt("Old Output K") + extra("void *ovlk") + asl(ASL0) + interest(4) + special(SPC_NOMOD) + } + field(OVLL, DBF_NOACCESS) { + prompt("Old Output L") + extra("void *ovll") + asl(ASL0) + interest(4) + special(SPC_NOMOD) + } + field(OVLM, DBF_NOACCESS) { + prompt("Old Output M") + extra("void *ovlm") + asl(ASL0) + interest(4) + special(SPC_NOMOD) + } + field(OVLN, DBF_NOACCESS) { + prompt("Old Output N") + extra("void *ovln") + asl(ASL0) + interest(4) + special(SPC_NOMOD) + } + field(OVLO, DBF_NOACCESS) { + prompt("Old Output O") + extra("void *ovlo") + asl(ASL0) + interest(4) + special(SPC_NOMOD) + } + field(OVLP, DBF_NOACCESS) { + prompt("Old Output P") + extra("void *ovlp") + asl(ASL0) + interest(4) + special(SPC_NOMOD) + } + field(OVLQ, DBF_NOACCESS) { + prompt("Old Output Q") + extra("void *ovlq") + asl(ASL0) + interest(4) + special(SPC_NOMOD) + } + field(OVLR, DBF_NOACCESS) { + prompt("Old Output R") + extra("void *ovlr") + asl(ASL0) + interest(4) + special(SPC_NOMOD) + } + field(OVLS, DBF_NOACCESS) { + prompt("Old Output S") + extra("void *ovls") + asl(ASL0) + interest(4) + special(SPC_NOMOD) + } + field(OVLT, DBF_NOACCESS) { + prompt("Old Output T") + extra("void *ovlt") + asl(ASL0) + interest(4) + special(SPC_NOMOD) + } + field(OVLU, DBF_NOACCESS) { + prompt("Old Output U") + extra("void *ovlu") + asl(ASL0) + interest(4) + special(SPC_NOMOD) + } + field(FTVA, DBF_MENU) { + initial("DOUBLE") + prompt("Type of VALA") + menu(menuFtype) + promptgroup("51 - Output A-G") + interest(1) + special(SPC_NOMOD) + } + field(FTVB, DBF_MENU) { + initial("DOUBLE") + prompt("Type of VALB") + menu(menuFtype) + promptgroup("51 - Output A-G") + interest(1) + special(SPC_NOMOD) + } + field(FTVC, DBF_MENU) { + initial("DOUBLE") + prompt("Type of VALC") + menu(menuFtype) + promptgroup("51 - Output A-G") + interest(1) + special(SPC_NOMOD) + } + field(FTVD, DBF_MENU) { + initial("DOUBLE") + prompt("Type of VALD") + menu(menuFtype) + promptgroup("51 - Output A-G") + interest(1) + special(SPC_NOMOD) + } + field(FTVE, DBF_MENU) { + initial("DOUBLE") + prompt("Type of VALE") + menu(menuFtype) + promptgroup("51 - Output A-G") + interest(1) + special(SPC_NOMOD) + } + field(FTVF, DBF_MENU) { + initial("DOUBLE") + prompt("Type of VALF") + menu(menuFtype) + promptgroup("51 - Output A-G") + interest(1) + special(SPC_NOMOD) + } + field(FTVG, DBF_MENU) { + initial("DOUBLE") + prompt("Type of VALG") + menu(menuFtype) + promptgroup("51 - Output A-G") + interest(1) + special(SPC_NOMOD) + } + field(FTVH, DBF_MENU) { + initial("DOUBLE") + prompt("Type of VALH") + menu(menuFtype) + promptgroup("52 - Output H-N") + interest(1) + special(SPC_NOMOD) + } + field(FTVI, DBF_MENU) { + initial("DOUBLE") + prompt("Type of VALI") + menu(menuFtype) + promptgroup("52 - Output H-N") + interest(1) + special(SPC_NOMOD) + } + field(FTVJ, DBF_MENU) { + initial("DOUBLE") + prompt("Type of VALJ") + menu(menuFtype) + promptgroup("52 - Output H-N") + interest(1) + special(SPC_NOMOD) + } + field(FTVK, DBF_MENU) { + initial("DOUBLE") + prompt("Type of VALK") + menu(menuFtype) + promptgroup("52 - Output H-N") + interest(1) + special(SPC_NOMOD) + } + field(FTVL, DBF_MENU) { + initial("DOUBLE") + prompt("Type of VALL") + menu(menuFtype) + promptgroup("52 - Output H-N") + interest(1) + special(SPC_NOMOD) + } + field(FTVM, DBF_MENU) { + initial("DOUBLE") + prompt("Type of VALM") + menu(menuFtype) + promptgroup("52 - Output H-N") + interest(1) + special(SPC_NOMOD) + } + field(FTVN, DBF_MENU) { + initial("DOUBLE") + prompt("Type of VALN") + menu(menuFtype) + promptgroup("52 - Output H-N") + interest(1) + special(SPC_NOMOD) + } + field(FTVO, DBF_MENU) { + initial("DOUBLE") + prompt("Type of VALO") + menu(menuFtype) + promptgroup("53 - Output O-U") + interest(1) + special(SPC_NOMOD) + } + field(FTVP, DBF_MENU) { + initial("DOUBLE") + prompt("Type of VALP") + menu(menuFtype) + promptgroup("53 - Output O-U") + interest(1) + special(SPC_NOMOD) + } + field(FTVQ, DBF_MENU) { + initial("DOUBLE") + prompt("Type of VALQ") + menu(menuFtype) + promptgroup("53 - Output O-U") + interest(1) + special(SPC_NOMOD) + } + field(FTVR, DBF_MENU) { + initial("DOUBLE") + prompt("Type of VALR") + menu(menuFtype) + promptgroup("53 - Output O-U") + interest(1) + special(SPC_NOMOD) + } + field(FTVS, DBF_MENU) { + initial("DOUBLE") + prompt("Type of VALS") + menu(menuFtype) + promptgroup("53 - Output O-U") + interest(1) + special(SPC_NOMOD) + } + field(FTVT, DBF_MENU) { + initial("DOUBLE") + prompt("Type of VALT") + menu(menuFtype) + promptgroup("53 - Output O-U") + interest(1) + special(SPC_NOMOD) + } + field(FTVU, DBF_MENU) { + initial("DOUBLE") + prompt("Type of VALU") + menu(menuFtype) + promptgroup("53 - Output O-U") + interest(1) + special(SPC_NOMOD) + } + field(NOVA, DBF_ULONG) { + initial("1") + prompt("Max. elements in VALA") + promptgroup("51 - Output A-G") + interest(1) + special(SPC_NOMOD) + } + field(NOVB, DBF_ULONG) { + initial("1") + prompt("Max. elements in VALB") + promptgroup("51 - Output A-G") + interest(1) + special(SPC_NOMOD) + } + field(NOVC, DBF_ULONG) { + initial("1") + prompt("Max. elements in VALC") + promptgroup("51 - Output A-G") + interest(1) + special(SPC_NOMOD) + } + field(NOVD, DBF_ULONG) { + initial("1") + prompt("Max. elements in VALD") + promptgroup("51 - Output A-G") + interest(1) + special(SPC_NOMOD) + } + field(NOVE, DBF_ULONG) { + initial("1") + prompt("Max. elements in VALE") + promptgroup("51 - Output A-G") + interest(1) + special(SPC_NOMOD) + } + field(NOVF, DBF_ULONG) { + initial("1") + prompt("Max. elements in VALF") + promptgroup("51 - Output A-G") + interest(1) + special(SPC_NOMOD) + } + field(NOVG, DBF_ULONG) { + initial("1") + prompt("Max. elements in VALG") + promptgroup("51 - Output A-G") + interest(1) + special(SPC_NOMOD) + } + field(NOVH, DBF_ULONG) { + initial("1") + prompt("Max. elements in VAlH") + promptgroup("52 - Output H-N") + interest(1) + special(SPC_NOMOD) + } + field(NOVI, DBF_ULONG) { + initial("1") + prompt("Max. elements in VALI") + promptgroup("52 - Output H-N") + interest(1) + special(SPC_NOMOD) + } + field(NOVJ, DBF_ULONG) { + initial("1") + prompt("Max. elements in VALJ") + promptgroup("52 - Output H-N") + interest(1) + special(SPC_NOMOD) + } + field(NOVK, DBF_ULONG) { + initial("1") + prompt("Max. elements in VALK") + promptgroup("52 - Output H-N") + interest(1) + special(SPC_NOMOD) + } + field(NOVL, DBF_ULONG) { + initial("1") + prompt("Max. elements in VALL") + promptgroup("52 - Output H-N") + interest(1) + special(SPC_NOMOD) + } + field(NOVM, DBF_ULONG) { + initial("1") + prompt("Max. elements in VALM") + promptgroup("52 - Output H-N") + interest(1) + special(SPC_NOMOD) + } + field(NOVN, DBF_ULONG) { + initial("1") + prompt("Max. elements in VALN") + promptgroup("52 - Output H-N") + interest(1) + special(SPC_NOMOD) + } + field(NOVO, DBF_ULONG) { + initial("1") + prompt("Max. elements in VALO") + promptgroup("53 - Output O-U") + interest(1) + special(SPC_NOMOD) + } + field(NOVP, DBF_ULONG) { + initial("1") + prompt("Max. elements in VALP") + promptgroup("53 - Output O-U") + interest(1) + special(SPC_NOMOD) + } + field(NOVQ, DBF_ULONG) { + initial("1") + prompt("Max. elements in VALQ") + promptgroup("53 - Output O-U") + interest(1) + special(SPC_NOMOD) + } + field(NOVR, DBF_ULONG) { + initial("1") + prompt("Max. elements in VALR") + promptgroup("53 - Output O-U") + interest(1) + special(SPC_NOMOD) + } + field(NOVS, DBF_ULONG) { + initial("1") + prompt("Max. elements in VALS") + promptgroup("53 - Output O-U") + interest(1) + special(SPC_NOMOD) + } + field(NOVT, DBF_ULONG) { + initial("1") + prompt("Max. elements in VALT") + promptgroup("53 - Output O-U") + interest(1) + special(SPC_NOMOD) + } + field(NOVU, DBF_ULONG) { + initial("1") + prompt("Max. elements in VALU") + promptgroup("53 - Output O-U") + interest(1) + special(SPC_NOMOD) + } + field(NEVA, DBF_ULONG) { + initial("1") + prompt("Num. elements in VALA") + interest(3) + special(SPC_NOMOD) + } + field(NEVB, DBF_ULONG) { + initial("1") + prompt("Num. elements in VALB") + interest(3) + special(SPC_NOMOD) + } + field(NEVC, DBF_ULONG) { + initial("1") + prompt("Num. elements in VALC") + interest(3) + special(SPC_NOMOD) + } + field(NEVD, DBF_ULONG) { + initial("1") + prompt("Num. elements in VALD") + interest(3) + special(SPC_NOMOD) + } + field(NEVE, DBF_ULONG) { + initial("1") + prompt("Num. elements in VALE") + interest(3) + special(SPC_NOMOD) + } + field(NEVF, DBF_ULONG) { + initial("1") + prompt("Num. elements in VALF") + interest(3) + special(SPC_NOMOD) + } + field(NEVG, DBF_ULONG) { + initial("1") + prompt("Num. elements in VALG") + interest(3) + special(SPC_NOMOD) + } + field(NEVH, DBF_ULONG) { + initial("1") + prompt("Num. elements in VAlH") + interest(3) + special(SPC_NOMOD) + } + field(NEVI, DBF_ULONG) { + initial("1") + prompt("Num. elements in VALI") + interest(3) + special(SPC_NOMOD) + } + field(NEVJ, DBF_ULONG) { + initial("1") + prompt("Num. elements in VALJ") + interest(3) + special(SPC_NOMOD) + } + field(NEVK, DBF_ULONG) { + initial("1") + prompt("Num. elements in VALK") + interest(3) + special(SPC_NOMOD) + } + field(NEVL, DBF_ULONG) { + initial("1") + prompt("Num. elements in VALL") + interest(3) + special(SPC_NOMOD) + } + field(NEVM, DBF_ULONG) { + initial("1") + prompt("Num. elements in VALM") + interest(3) + special(SPC_NOMOD) + } + field(NEVN, DBF_ULONG) { + initial("1") + prompt("Num. elements in VALN") + interest(3) + special(SPC_NOMOD) + } + field(NEVO, DBF_ULONG) { + initial("1") + prompt("Num. elements in VALO") + interest(3) + special(SPC_NOMOD) + } + field(NEVP, DBF_ULONG) { + initial("1") + prompt("Num. elements in VALP") + interest(3) + special(SPC_NOMOD) + } + field(NEVQ, DBF_ULONG) { + initial("1") + prompt("Num. elements in VALQ") + interest(3) + special(SPC_NOMOD) + } + field(NEVR, DBF_ULONG) { + initial("1") + prompt("Num. elements in VALR") + interest(3) + special(SPC_NOMOD) + } + field(NEVS, DBF_ULONG) { + initial("1") + prompt("Num. elements in VALS") + interest(3) + special(SPC_NOMOD) + } + field(NEVT, DBF_ULONG) { + initial("1") + prompt("Num. elements in VALT") + interest(3) + special(SPC_NOMOD) + } + field(NEVU, DBF_ULONG) { + initial("1") + prompt("Num. elements in VALU") + interest(3) + special(SPC_NOMOD) + } + field(ONVA, DBF_ULONG) { + initial("1") + prompt("Num. elements in OVLA") + interest(4) + special(SPC_NOMOD) + } + field(ONVB, DBF_ULONG) { + initial("1") + prompt("Num. elements in OVLB") + interest(4) + special(SPC_NOMOD) + } + field(ONVC, DBF_ULONG) { + initial("1") + prompt("Num. elements in OVLC") + interest(4) + special(SPC_NOMOD) + } + field(ONVD, DBF_ULONG) { + initial("1") + prompt("Num. elements in OVLD") + interest(4) + special(SPC_NOMOD) + } + field(ONVE, DBF_ULONG) { + initial("1") + prompt("Num. elements in OVLE") + interest(4) + special(SPC_NOMOD) + } + field(ONVF, DBF_ULONG) { + initial("1") + prompt("Num. elements in OVLF") + interest(4) + special(SPC_NOMOD) + } + field(ONVG, DBF_ULONG) { + initial("1") + prompt("Num. elements in OVLG") + interest(4) + special(SPC_NOMOD) + } + field(ONVH, DBF_ULONG) { + initial("1") + prompt("Num. elements in VAlH") + interest(4) + special(SPC_NOMOD) + } + field(ONVI, DBF_ULONG) { + initial("1") + prompt("Num. elements in OVLI") + interest(4) + special(SPC_NOMOD) + } + field(ONVJ, DBF_ULONG) { + initial("1") + prompt("Num. elements in OVLJ") + interest(4) + special(SPC_NOMOD) + } + field(ONVK, DBF_ULONG) { + initial("1") + prompt("Num. elements in OVLK") + interest(4) + special(SPC_NOMOD) + } + field(ONVL, DBF_ULONG) { + initial("1") + prompt("Num. elements in OVLL") + interest(4) + special(SPC_NOMOD) + } + field(ONVM, DBF_ULONG) { + initial("1") + prompt("Num. elements in OVLM") + interest(4) + special(SPC_NOMOD) + } + field(ONVN, DBF_ULONG) { + initial("1") + prompt("Num. elements in OVLN") + interest(4) + special(SPC_NOMOD) + } + field(ONVO, DBF_ULONG) { + initial("1") + prompt("Num. elements in OVLO") + interest(4) + special(SPC_NOMOD) + } + field(ONVP, DBF_ULONG) { + initial("1") + prompt("Num. elements in OVLP") + interest(4) + special(SPC_NOMOD) + } + field(ONVQ, DBF_ULONG) { + initial("1") + prompt("Num. elements in OVLQ") + interest(4) + special(SPC_NOMOD) + } + field(ONVR, DBF_ULONG) { + initial("1") + prompt("Num. elements in OVLR") + interest(4) + special(SPC_NOMOD) + } + field(ONVS, DBF_ULONG) { + initial("1") + prompt("Num. elements in OVLS") + interest(4) + special(SPC_NOMOD) + } + field(ONVT, DBF_ULONG) { + initial("1") + prompt("Num. elements in OVLT") + interest(4) + special(SPC_NOMOD) + } + field(ONVU, DBF_ULONG) { + initial("1") + prompt("Num. elements in OVLU") + interest(4) + special(SPC_NOMOD) + } +} +recordtype(aai) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aaiRecord; + %typedef struct aaidset { + % dset common; /*init_record returns: (-1,0,AAI_DEVINIT_PASS1)=>(failure,success,callback)*/ + % long (*read_aai)(struct aaiRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaidset; + %#define HAS_aaidset + %#define AAI_DEVINIT_PASS1 2 + % + %#include "callback.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_NOACCESS) { + pp(TRUE) + prompt("Value") + extra("void * val") + asl(ASL0) + special(SPC_DBADDR) + } + field(PREC, DBF_SHORT) { + prompt("Display Precision") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(INP, DBF_INLINK) { + prompt("Input Specification") + promptgroup("40 - Input") + interest(1) + } + field(EGU, DBF_STRING) { + size(16) + prompt("Engineering Units") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(HOPR, DBF_DOUBLE) { + prompt("High Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(LOPR, DBF_DOUBLE) { + prompt("Low Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(NELM, DBF_ULONG) { + initial("1") + prompt("Number of Elements") + promptgroup("30 - Action") + interest(1) + special(SPC_NOMOD) + } + field(FTVL, DBF_MENU) { + prompt("Field Type of Value") + menu(menuFtype) + promptgroup("30 - Action") + interest(1) + special(SPC_NOMOD) + } + field(NORD, DBF_ULONG) { + prompt("Number elements read") + special(SPC_NOMOD) + } + field(BPTR, DBF_NOACCESS) { + prompt("Buffer Pointer") + extra("void * bptr") + interest(4) + special(SPC_NOMOD) + } + field(SIML, DBF_INLINK) { + prompt("Simulation Mode Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SIMM, DBF_MENU) { + prompt("Simulation Mode") + menu(menuYesNo) + interest(1) + special(SPC_MOD) + } + field(SIMS, DBF_MENU) { + prompt("Simulation Mode Severity") + menu(menuAlarmSevr) + promptgroup("90 - Simulate") + interest(2) + } + field(SIOL, DBF_INLINK) { + prompt("Simulation Input Link") + promptgroup("90 - Simulate") + interest(1) + } + field(OLDSIMM, DBF_MENU) { + prompt("Prev. Simulation Mode") + menu(menuSimm) + interest(4) + special(SPC_NOMOD) + } + field(SSCN, DBF_MENU) { + initial("65535") + prompt("Sim. Mode Scan") + menu(menuScan) + promptgroup("90 - Simulate") + interest(1) + } + field(SDLY, DBF_DOUBLE) { + initial("-1.0") + prompt("Sim. Mode Async Delay") + promptgroup("90 - Simulate") + interest(2) + } + field(SIMPVT, DBF_NOACCESS) { + prompt("Sim. Mode Private") + extra("epicsCallback *simpvt") + interest(4) + special(SPC_NOMOD) + } + field(MPST, DBF_MENU) { + prompt("Post Value Monitors") + menu(aaiPOST) + promptgroup("80 - Display") + interest(1) + } + field(APST, DBF_MENU) { + prompt("Post Archive Monitors") + menu(aaiPOST) + promptgroup("80 - Display") + interest(1) + } + field(HASH, DBF_ULONG) { + prompt("Hash of OnChange data.") + interest(3) + } +} +device(aai, CONSTANT, devAaiSoft, "Soft Channel") +device(aai, INST_IO, devAaiOpcua, "OPCUA") +recordtype(aao) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aaoRecord; + %typedef struct aaodset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_aao)(struct aaoRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} aaodset; + %#define HAS_aaodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_NOACCESS) { + pp(TRUE) + prompt("Value") + extra("void * val") + asl(ASL0) + special(SPC_DBADDR) + } + field(PREC, DBF_SHORT) { + prompt("Display Precision") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(OUT, DBF_OUTLINK) { + prompt("Output Specification") + promptgroup("50 - Output") + interest(1) + } + field(DOL, DBF_INLINK) { + prompt("Desired Output Link") + promptgroup("40 - Input") + interest(1) + } + field(OMSL, DBF_MENU) { + prompt("Output Mode Select") + menu(menuOmsl) + promptgroup("50 - Output") + interest(1) + } + field(EGU, DBF_STRING) { + size(16) + prompt("Engineering Units") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(HOPR, DBF_DOUBLE) { + prompt("High Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(LOPR, DBF_DOUBLE) { + prompt("Low Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(NELM, DBF_ULONG) { + initial("1") + prompt("Number of Elements") + promptgroup("30 - Action") + interest(1) + special(SPC_NOMOD) + } + field(FTVL, DBF_MENU) { + prompt("Field Type of Value") + menu(menuFtype) + promptgroup("30 - Action") + interest(1) + special(SPC_NOMOD) + } + field(NORD, DBF_ULONG) { + prompt("Number elements read") + special(SPC_NOMOD) + } + field(BPTR, DBF_NOACCESS) { + prompt("Buffer Pointer") + extra("void * bptr") + interest(4) + special(SPC_NOMOD) + } + field(SIML, DBF_INLINK) { + prompt("Simulation Mode Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SIMM, DBF_MENU) { + prompt("Simulation Mode") + menu(menuYesNo) + interest(1) + special(SPC_MOD) + } + field(SIMS, DBF_MENU) { + prompt("Simulation Mode Severity") + menu(menuAlarmSevr) + promptgroup("90 - Simulate") + interest(2) + } + field(SIOL, DBF_OUTLINK) { + prompt("Simulation Output Link") + promptgroup("90 - Simulate") + interest(1) + } + field(OLDSIMM, DBF_MENU) { + prompt("Prev. Simulation Mode") + menu(menuSimm) + interest(4) + special(SPC_NOMOD) + } + field(SSCN, DBF_MENU) { + initial("65535") + prompt("Sim. Mode Scan") + menu(menuScan) + promptgroup("90 - Simulate") + interest(1) + } + field(SDLY, DBF_DOUBLE) { + initial("-1.0") + prompt("Sim. Mode Async Delay") + promptgroup("90 - Simulate") + interest(2) + } + field(SIMPVT, DBF_NOACCESS) { + prompt("Sim. Mode Private") + extra("epicsCallback *simpvt") + interest(4) + special(SPC_NOMOD) + } + field(MPST, DBF_MENU) { + prompt("Post Value Monitors") + menu(aaoPOST) + promptgroup("80 - Display") + interest(1) + } + field(APST, DBF_MENU) { + prompt("Post Archive Monitors") + menu(aaoPOST) + promptgroup("80 - Display") + interest(1) + } + field(HASH, DBF_ULONG) { + prompt("Hash of OnChange data.") + interest(3) + } +} +device(aao, CONSTANT, devAaoSoft, "Soft Channel") +device(aao, INST_IO, devAaoOpcua, "OPCUA") +recordtype(ai) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aiRecord; + %typedef struct aidset { + % dset common; + % long (*read_ai)(struct aiRecord *prec); + % long (*special_linconv)(struct aiRecord *prec, int after); + %} aidset; + %#define HAS_aidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_DOUBLE) { + pp(TRUE) + prompt("Current EGU Value") + asl(ASL0) + promptgroup("40 - Input") + } + field(INP, DBF_INLINK) { + prompt("Input Specification") + promptgroup("40 - Input") + interest(1) + } + field(PREC, DBF_SHORT) { + prompt("Display Precision") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(LINR, DBF_MENU) { + pp(TRUE) + prompt("Linearization") + menu(menuConvert) + promptgroup("60 - Convert") + interest(1) + special(SPC_LINCONV) + } + field(EGUF, DBF_DOUBLE) { + pp(TRUE) + prompt("Engineer Units Full") + promptgroup("60 - Convert") + interest(1) + special(SPC_LINCONV) + } + field(EGUL, DBF_DOUBLE) { + pp(TRUE) + prompt("Engineer Units Low") + promptgroup("60 - Convert") + interest(1) + special(SPC_LINCONV) + } + field(EGU, DBF_STRING) { + size(16) + prompt("Engineering Units") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(HOPR, DBF_DOUBLE) { + prompt("High Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(LOPR, DBF_DOUBLE) { + prompt("Low Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(AOFF, DBF_DOUBLE) { + pp(TRUE) + prompt("Adjustment Offset") + promptgroup("60 - Convert") + interest(1) + } + field(ASLO, DBF_DOUBLE) { + initial("1") + pp(TRUE) + prompt("Adjustment Slope") + promptgroup("60 - Convert") + interest(1) + } + field(SMOO, DBF_DOUBLE) { + prompt("Smoothing") + promptgroup("60 - Convert") + interest(1) + } + field(HIHI, DBF_DOUBLE) { + pp(TRUE) + prompt("Hihi Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LOLO, DBF_DOUBLE) { + pp(TRUE) + prompt("Lolo Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HIGH, DBF_DOUBLE) { + pp(TRUE) + prompt("High Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LOW, DBF_DOUBLE) { + pp(TRUE) + prompt("Low Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HHSV, DBF_MENU) { + prompt("Hihi Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LLSV, DBF_MENU) { + prompt("Lolo Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HSV, DBF_MENU) { + prompt("High Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LSV, DBF_MENU) { + prompt("Low Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HYST, DBF_DOUBLE) { + prompt("Alarm Deadband") + promptgroup("70 - Alarm") + interest(1) + } + field(AFTC, DBF_DOUBLE) { + prompt("Alarm Filter Time Constant") + promptgroup("70 - Alarm") + interest(1) + } + field(ADEL, DBF_DOUBLE) { + prompt("Archive Deadband") + promptgroup("80 - Display") + interest(1) + } + field(MDEL, DBF_DOUBLE) { + prompt("Monitor Deadband") + promptgroup("80 - Display") + interest(1) + } + field(LALM, DBF_DOUBLE) { + prompt("Last Value Alarmed") + interest(3) + special(SPC_NOMOD) + } + field(AFVL, DBF_DOUBLE) { + prompt("Alarm Filter Value") + interest(3) + special(SPC_NOMOD) + } + field(ALST, DBF_DOUBLE) { + prompt("Last Value Archived") + interest(3) + special(SPC_NOMOD) + } + field(MLST, DBF_DOUBLE) { + prompt("Last Val Monitored") + interest(3) + special(SPC_NOMOD) + } + field(ESLO, DBF_DOUBLE) { + initial("1") + pp(TRUE) + prompt("Raw to EGU Slope") + promptgroup("60 - Convert") + interest(2) + } + field(EOFF, DBF_DOUBLE) { + pp(TRUE) + prompt("Raw to EGU Offset") + promptgroup("60 - Convert") + interest(2) + } + field(ROFF, DBF_ULONG) { + pp(TRUE) + prompt("Raw Offset") + interest(2) + } + field(PBRK, DBF_NOACCESS) { + prompt("Ptrto brkTable") + extra("void * pbrk") + interest(4) + special(SPC_NOMOD) + } + field(INIT, DBF_SHORT) { + prompt("Initialized?") + interest(3) + special(SPC_NOMOD) + } + field(LBRK, DBF_SHORT) { + prompt("LastBreak Point") + interest(3) + special(SPC_NOMOD) + } + field(RVAL, DBF_LONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(ORAW, DBF_LONG) { + prompt("Previous Raw Value") + interest(3) + special(SPC_NOMOD) + } + field(SIOL, DBF_INLINK) { + prompt("Simulation Input Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SVAL, DBF_DOUBLE) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + prompt("Simulation Mode Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SIMM, DBF_MENU) { + prompt("Simulation Mode") + menu(menuSimm) + interest(1) + special(SPC_MOD) + } + field(SIMS, DBF_MENU) { + prompt("Simulation Mode Severity") + menu(menuAlarmSevr) + promptgroup("90 - Simulate") + interest(2) + } + field(OLDSIMM, DBF_MENU) { + prompt("Prev. Simulation Mode") + menu(menuSimm) + interest(4) + special(SPC_NOMOD) + } + field(SSCN, DBF_MENU) { + initial("65535") + prompt("Sim. Mode Scan") + menu(menuScan) + promptgroup("90 - Simulate") + interest(1) + } + field(SDLY, DBF_DOUBLE) { + initial("-1.0") + prompt("Sim. Mode Async Delay") + promptgroup("90 - Simulate") + interest(2) + } + field(SIMPVT, DBF_NOACCESS) { + prompt("Sim. Mode Private") + extra("epicsCallback *simpvt") + interest(4) + special(SPC_NOMOD) + } +} +device(ai, CONSTANT, devAiSoft, "Soft Channel") +device(ai, CONSTANT, devAiSoftRaw, "Raw Soft Channel") +device(ai, CONSTANT, devAiSoftCallback, "Async Soft Channel") +device(ai, INST_IO, devTimestampAI, "Soft Timestamp") +device(ai, INST_IO, devAiGeneralTime, "General Time") +device(ai, INST_IO, devAiOpcua, "OPCUA") +recordtype(ao) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct aoRecord; + %typedef struct aodset { + % dset common; /*init_record returns: (0,2)=>(success,success no convert)*/ + % long (*write_ao)(struct aoRecord *prec); /*(0)=>(success ) */ + % long (*special_linconv)(struct aoRecord *prec, int after); + %} aodset; + %#define HAS_aodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_DOUBLE) { + pp(TRUE) + prompt("Desired Output") + asl(ASL0) + promptgroup("50 - Output") + } + field(OVAL, DBF_DOUBLE) { + prompt("Output Value") + } + field(OUT, DBF_OUTLINK) { + prompt("Output Specification") + promptgroup("50 - Output") + interest(1) + } + field(OROC, DBF_DOUBLE) { + prompt("Output Rate of Change") + promptgroup("50 - Output") + interest(1) + } + field(DOL, DBF_INLINK) { + prompt("Desired Output Link") + promptgroup("40 - Input") + interest(1) + } + field(OMSL, DBF_MENU) { + prompt("Output Mode Select") + menu(menuOmsl) + promptgroup("50 - Output") + interest(1) + } + field(OIF, DBF_MENU) { + prompt("Out Full/Incremental") + menu(aoOIF) + promptgroup("50 - Output") + interest(1) + } + field(PREC, DBF_SHORT) { + prompt("Display Precision") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(LINR, DBF_MENU) { + pp(TRUE) + prompt("Linearization") + menu(menuConvert) + promptgroup("60 - Convert") + interest(1) + special(SPC_LINCONV) + } + field(EGUF, DBF_DOUBLE) { + pp(TRUE) + prompt("Eng Units Full") + promptgroup("60 - Convert") + interest(1) + special(SPC_LINCONV) + } + field(EGUL, DBF_DOUBLE) { + pp(TRUE) + prompt("Eng Units Low") + promptgroup("60 - Convert") + interest(1) + special(SPC_LINCONV) + } + field(EGU, DBF_STRING) { + size(16) + prompt("Engineering Units") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(ROFF, DBF_ULONG) { + pp(TRUE) + prompt("Raw Offset") + interest(2) + } + field(EOFF, DBF_DOUBLE) { + pp(TRUE) + prompt("EGU to Raw Offset") + promptgroup("60 - Convert") + interest(2) + } + field(ESLO, DBF_DOUBLE) { + initial("1") + pp(TRUE) + prompt("EGU to Raw Slope") + promptgroup("60 - Convert") + interest(2) + } + field(DRVH, DBF_DOUBLE) { + pp(TRUE) + prompt("Drive High Limit") + prop(YES) + promptgroup("30 - Action") + interest(1) + } + field(DRVL, DBF_DOUBLE) { + pp(TRUE) + prompt("Drive Low Limit") + prop(YES) + promptgroup("30 - Action") + interest(1) + } + field(HOPR, DBF_DOUBLE) { + prompt("High Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(LOPR, DBF_DOUBLE) { + prompt("Low Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(AOFF, DBF_DOUBLE) { + pp(TRUE) + prompt("Adjustment Offset") + promptgroup("60 - Convert") + interest(1) + } + field(ASLO, DBF_DOUBLE) { + pp(TRUE) + prompt("Adjustment Slope") + promptgroup("60 - Convert") + interest(1) + } + field(HIHI, DBF_DOUBLE) { + pp(TRUE) + prompt("Hihi Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LOLO, DBF_DOUBLE) { + pp(TRUE) + prompt("Lolo Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HIGH, DBF_DOUBLE) { + pp(TRUE) + prompt("High Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LOW, DBF_DOUBLE) { + pp(TRUE) + prompt("Low Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HHSV, DBF_MENU) { + prompt("Hihi Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LLSV, DBF_MENU) { + prompt("Lolo Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HSV, DBF_MENU) { + prompt("High Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LSV, DBF_MENU) { + prompt("Low Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HYST, DBF_DOUBLE) { + prompt("Alarm Deadband") + promptgroup("70 - Alarm") + interest(1) + } + field(ADEL, DBF_DOUBLE) { + prompt("Archive Deadband") + promptgroup("80 - Display") + interest(1) + } + field(MDEL, DBF_DOUBLE) { + prompt("Monitor Deadband") + promptgroup("80 - Display") + interest(1) + } + field(RVAL, DBF_LONG) { + pp(TRUE) + prompt("Current Raw Value") + } + field(ORAW, DBF_LONG) { + prompt("Previous Raw Value") + interest(3) + special(SPC_NOMOD) + } + field(RBV, DBF_LONG) { + prompt("Readback Value") + special(SPC_NOMOD) + } + field(ORBV, DBF_LONG) { + prompt("Prev Readback Value") + interest(3) + special(SPC_NOMOD) + } + field(PVAL, DBF_DOUBLE) { + prompt("Previous value") + interest(3) + special(SPC_NOMOD) + } + field(LALM, DBF_DOUBLE) { + prompt("Last Value Alarmed") + interest(3) + special(SPC_NOMOD) + } + field(ALST, DBF_DOUBLE) { + prompt("Last Value Archived") + interest(3) + special(SPC_NOMOD) + } + field(MLST, DBF_DOUBLE) { + prompt("Last Val Monitored") + interest(3) + special(SPC_NOMOD) + } + field(PBRK, DBF_NOACCESS) { + prompt("Ptrto brkTable") + extra("void * pbrk") + interest(4) + special(SPC_NOMOD) + } + field(INIT, DBF_SHORT) { + prompt("Initialized?") + interest(3) + special(SPC_NOMOD) + } + field(LBRK, DBF_SHORT) { + prompt("LastBreak Point") + interest(3) + special(SPC_NOMOD) + } + field(SIOL, DBF_OUTLINK) { + prompt("Simulation Output Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SIML, DBF_INLINK) { + prompt("Simulation Mode Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SIMM, DBF_MENU) { + prompt("Simulation Mode") + menu(menuSimm) + interest(1) + special(SPC_MOD) + } + field(SIMS, DBF_MENU) { + prompt("Simulation Mode Severity") + menu(menuAlarmSevr) + promptgroup("90 - Simulate") + interest(2) + } + field(OLDSIMM, DBF_MENU) { + prompt("Prev. Simulation Mode") + menu(menuSimm) + interest(4) + special(SPC_NOMOD) + } + field(SSCN, DBF_MENU) { + initial("65535") + prompt("Sim. Mode Scan") + menu(menuScan) + promptgroup("90 - Simulate") + interest(1) + } + field(SDLY, DBF_DOUBLE) { + initial("-1.0") + prompt("Sim. Mode Async Delay") + promptgroup("90 - Simulate") + interest(2) + } + field(SIMPVT, DBF_NOACCESS) { + prompt("Sim. Mode Private") + extra("epicsCallback *simpvt") + interest(4) + special(SPC_NOMOD) + } + field(IVOA, DBF_MENU) { + prompt("INVALID output action") + menu(menuIvoa) + promptgroup("50 - Output") + interest(2) + } + field(IVOV, DBF_DOUBLE) { + prompt("INVALID output value") + promptgroup("50 - Output") + interest(2) + } + field(OMOD, DBF_UCHAR) { + prompt("Was OVAL modified?") + special(SPC_NOMOD) + } +} +device(ao, CONSTANT, devAoSoft, "Soft Channel") +device(ao, CONSTANT, devAoSoftRaw, "Raw Soft Channel") +device(ao, CONSTANT, devAoSoftCallback, "Async Soft Channel") +device(ao, INST_IO, devAoOpcua, "OPCUA") +recordtype(bi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct biRecord; + %typedef struct bidset { + % dset common; + % long (*read_bi)(struct biRecord *prec); + %} bidset; + %#define HAS_bidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(INP, DBF_INLINK) { + prompt("Input Specification") + promptgroup("40 - Input") + interest(1) + } + field(VAL, DBF_ENUM) { + pp(TRUE) + prompt("Current Value") + asl(ASL0) + promptgroup("40 - Input") + } + field(ZSV, DBF_MENU) { + pp(TRUE) + prompt("Zero Error Severity") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(OSV, DBF_MENU) { + pp(TRUE) + prompt("One Error Severity") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(COSV, DBF_MENU) { + pp(TRUE) + prompt("Change of State Svr") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(ZNAM, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Zero Name") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(ONAM, DBF_STRING) { + size(26) + pp(TRUE) + prompt("One Name") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + prompt("prev Raw Value") + interest(3) + special(SPC_NOMOD) + } + field(MASK, DBF_ULONG) { + prompt("Hardware Mask") + interest(1) + special(SPC_NOMOD) + } + field(LALM, DBF_USHORT) { + prompt("Last Value Alarmed") + interest(3) + special(SPC_NOMOD) + } + field(MLST, DBF_USHORT) { + prompt("Last Value Monitored") + interest(3) + special(SPC_NOMOD) + } + field(SIOL, DBF_INLINK) { + prompt("Simulation Input Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SVAL, DBF_ULONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + prompt("Simulation Mode Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SIMM, DBF_MENU) { + prompt("Simulation Mode") + menu(menuSimm) + interest(1) + special(SPC_MOD) + } + field(SIMS, DBF_MENU) { + prompt("Simulation Mode Severity") + menu(menuAlarmSevr) + promptgroup("90 - Simulate") + interest(2) + } + field(OLDSIMM, DBF_MENU) { + prompt("Prev. Simulation Mode") + menu(menuSimm) + interest(4) + special(SPC_NOMOD) + } + field(SSCN, DBF_MENU) { + initial("65535") + prompt("Sim. Mode Scan") + menu(menuScan) + promptgroup("90 - Simulate") + interest(1) + } + field(SDLY, DBF_DOUBLE) { + initial("-1.0") + prompt("Sim. Mode Async Delay") + promptgroup("90 - Simulate") + interest(2) + } + field(SIMPVT, DBF_NOACCESS) { + prompt("Sim. Mode Private") + extra("epicsCallback *simpvt") + interest(4) + special(SPC_NOMOD) + } +} +device(bi, CONSTANT, devBiSoft, "Soft Channel") +device(bi, CONSTANT, devBiSoftRaw, "Raw Soft Channel") +device(bi, CONSTANT, devBiSoftCallback, "Async Soft Channel") +device(bi, INST_IO, devBiDbState, "Db State") +device(bi, INST_IO, devBiOpcua, "OPCUA") +recordtype(bo) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct boRecord; + %typedef struct bodset { + % dset common; /*init_record returns:(0,2)=>(success,success no convert*/ + % long (*write_bo)(struct boRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} bodset; + %#define HAS_bodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_ENUM) { + pp(TRUE) + prompt("Current Value") + asl(ASL0) + promptgroup("50 - Output") + } + field(OMSL, DBF_MENU) { + prompt("Output Mode Select") + menu(menuOmsl) + promptgroup("50 - Output") + interest(1) + } + field(DOL, DBF_INLINK) { + prompt("Desired Output Link") + promptgroup("40 - Input") + interest(1) + } + field(OUT, DBF_OUTLINK) { + prompt("Output Specification") + promptgroup("50 - Output") + interest(1) + } + field(HIGH, DBF_DOUBLE) { + prompt("Seconds to Hold High") + promptgroup("30 - Action") + interest(1) + } + field(ZNAM, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Zero Name") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(ONAM, DBF_STRING) { + size(26) + pp(TRUE) + prompt("One Name") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + prompt("prev Raw Value") + interest(3) + special(SPC_NOMOD) + } + field(MASK, DBF_ULONG) { + prompt("Hardware Mask") + interest(1) + special(SPC_NOMOD) + } + field(RPVT, DBF_NOACCESS) { + prompt("Record Private") + extra("void * rpvt") + interest(4) + special(SPC_NOMOD) + } + field(WDPT, DBF_NOACCESS) { + prompt("Watch Dog Timer ID") + extra("void * wdpt") + interest(4) + special(SPC_NOMOD) + } + field(ZSV, DBF_MENU) { + pp(TRUE) + prompt("Zero Error Severity") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(OSV, DBF_MENU) { + pp(TRUE) + prompt("One Error Severity") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(COSV, DBF_MENU) { + pp(TRUE) + prompt("Change of State Sevr") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(RBV, DBF_ULONG) { + prompt("Readback Value") + special(SPC_NOMOD) + } + field(ORBV, DBF_ULONG) { + prompt("Prev Readback Value") + interest(3) + special(SPC_NOMOD) + } + field(MLST, DBF_USHORT) { + prompt("Last Value Monitored") + interest(3) + special(SPC_NOMOD) + } + field(LALM, DBF_USHORT) { + prompt("Last Value Alarmed") + interest(3) + special(SPC_NOMOD) + } + field(SIOL, DBF_OUTLINK) { + prompt("Simulation Output Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SIML, DBF_INLINK) { + prompt("Simulation Mode Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SIMM, DBF_MENU) { + prompt("Simulation Mode") + menu(menuSimm) + interest(1) + special(SPC_MOD) + } + field(SIMS, DBF_MENU) { + prompt("Simulation Mode Severity") + menu(menuAlarmSevr) + promptgroup("90 - Simulate") + interest(2) + } + field(OLDSIMM, DBF_MENU) { + prompt("Prev. Simulation Mode") + menu(menuSimm) + interest(4) + special(SPC_NOMOD) + } + field(SSCN, DBF_MENU) { + initial("65535") + prompt("Sim. Mode Scan") + menu(menuScan) + promptgroup("90 - Simulate") + interest(1) + } + field(SDLY, DBF_DOUBLE) { + initial("-1.0") + prompt("Sim. Mode Async Delay") + promptgroup("90 - Simulate") + interest(2) + } + field(SIMPVT, DBF_NOACCESS) { + prompt("Sim. Mode Private") + extra("epicsCallback *simpvt") + interest(4) + special(SPC_NOMOD) + } + field(IVOA, DBF_MENU) { + prompt("INVALID outpt action") + menu(menuIvoa) + promptgroup("50 - Output") + interest(2) + } + field(IVOV, DBF_USHORT) { + prompt("INVALID output value") + promptgroup("50 - Output") + interest(2) + } +} +device(bo, CONSTANT, devBoSoft, "Soft Channel") +device(bo, CONSTANT, devBoSoftRaw, "Raw Soft Channel") +device(bo, CONSTANT, devBoSoftCallback, "Async Soft Channel") +device(bo, INST_IO, devBoGeneralTime, "General Time") +device(bo, INST_IO, devBoDbState, "Db State") +device(bo, INST_IO, devBoOpcua, "OPCUA") +recordtype(calc) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %#include "postfix.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_DOUBLE) { + prompt("Result") + asl(ASL0) + promptgroup("50 - Output") + } + field(CALC, DBF_STRING) { + initial("0") + prompt("Calculation") + special(SPC_CALC) + size(80) + pp(TRUE) + promptgroup("30 - Action") + } + field(INPA, DBF_INLINK) { + prompt("Input A") + promptgroup("41 - Input A-F") + interest(1) + } + field(INPB, DBF_INLINK) { + prompt("Input B") + promptgroup("41 - Input A-F") + interest(1) + } + field(INPC, DBF_INLINK) { + prompt("Input C") + promptgroup("41 - Input A-F") + interest(1) + } + field(INPD, DBF_INLINK) { + prompt("Input D") + promptgroup("41 - Input A-F") + interest(1) + } + field(INPE, DBF_INLINK) { + prompt("Input E") + promptgroup("41 - Input A-F") + interest(1) + } + field(INPF, DBF_INLINK) { + prompt("Input F") + promptgroup("41 - Input A-F") + interest(1) + } + field(INPG, DBF_INLINK) { + prompt("Input G") + promptgroup("42 - Input G-L") + interest(1) + } + field(INPH, DBF_INLINK) { + prompt("Input H") + promptgroup("42 - Input G-L") + interest(1) + } + field(INPI, DBF_INLINK) { + prompt("Input I") + promptgroup("42 - Input G-L") + interest(1) + } + field(INPJ, DBF_INLINK) { + prompt("Input J") + promptgroup("42 - Input G-L") + interest(1) + } + field(INPK, DBF_INLINK) { + prompt("Input K") + promptgroup("42 - Input G-L") + interest(1) + } + field(INPL, DBF_INLINK) { + prompt("Input L") + promptgroup("42 - Input G-L") + interest(1) + } + field(EGU, DBF_STRING) { + size(16) + prompt("Engineering Units") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(PREC, DBF_SHORT) { + prompt("Display Precision") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(HOPR, DBF_DOUBLE) { + prompt("High Operating Rng") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(LOPR, DBF_DOUBLE) { + prompt("Low Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(HIHI, DBF_DOUBLE) { + pp(TRUE) + prompt("Hihi Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LOLO, DBF_DOUBLE) { + pp(TRUE) + prompt("Lolo Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HIGH, DBF_DOUBLE) { + pp(TRUE) + prompt("High Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LOW, DBF_DOUBLE) { + pp(TRUE) + prompt("Low Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HHSV, DBF_MENU) { + prompt("Hihi Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LLSV, DBF_MENU) { + prompt("Lolo Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HSV, DBF_MENU) { + prompt("High Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LSV, DBF_MENU) { + prompt("Low Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(AFTC, DBF_DOUBLE) { + prompt("Alarm Filter Time Constant") + promptgroup("70 - Alarm") + interest(1) + } + field(AFVL, DBF_DOUBLE) { + prompt("Alarm Filter Value") + interest(3) + special(SPC_NOMOD) + } + field(HYST, DBF_DOUBLE) { + prompt("Alarm Deadband") + promptgroup("70 - Alarm") + interest(1) + } + field(ADEL, DBF_DOUBLE) { + prompt("Archive Deadband") + promptgroup("80 - Display") + interest(1) + } + field(MDEL, DBF_DOUBLE) { + prompt("Monitor Deadband") + promptgroup("80 - Display") + interest(1) + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + prompt("Prev Value of A") + interest(3) + special(SPC_NOMOD) + } + field(LB, DBF_DOUBLE) { + prompt("Prev Value of B") + interest(3) + special(SPC_NOMOD) + } + field(LC, DBF_DOUBLE) { + prompt("Prev Value of C") + interest(3) + special(SPC_NOMOD) + } + field(LD, DBF_DOUBLE) { + prompt("Prev Value of D") + interest(3) + special(SPC_NOMOD) + } + field(LE, DBF_DOUBLE) { + prompt("Prev Value of E") + interest(3) + special(SPC_NOMOD) + } + field(LF, DBF_DOUBLE) { + prompt("Prev Value of F") + interest(3) + special(SPC_NOMOD) + } + field(LG, DBF_DOUBLE) { + prompt("Prev Value of G") + interest(3) + special(SPC_NOMOD) + } + field(LH, DBF_DOUBLE) { + prompt("Prev Value of H") + interest(3) + special(SPC_NOMOD) + } + field(LI, DBF_DOUBLE) { + prompt("Prev Value of I") + interest(3) + special(SPC_NOMOD) + } + field(LJ, DBF_DOUBLE) { + prompt("Prev Value of J") + interest(3) + special(SPC_NOMOD) + } + field(LK, DBF_DOUBLE) { + prompt("Prev Value of K") + interest(3) + special(SPC_NOMOD) + } + field(LL, DBF_DOUBLE) { + prompt("Prev Value of L") + interest(3) + special(SPC_NOMOD) + } + field(LALM, DBF_DOUBLE) { + prompt("Last Value Alarmed") + interest(3) + special(SPC_NOMOD) + } + field(ALST, DBF_DOUBLE) { + prompt("Last Value Archived") + interest(3) + special(SPC_NOMOD) + } + field(MLST, DBF_DOUBLE) { + prompt("Last Val Monitored") + interest(3) + special(SPC_NOMOD) + } + field(RPCL, DBF_NOACCESS) { + prompt("Reverse Polish Calc") + extra("char rpcl[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + special(SPC_NOMOD) + } +} +recordtype(calcout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct calcoutRecord; + %typedef struct calcoutdset { + % dset common; + % long (*write)(struct calcoutRecord *prec); + %} calcoutdset; + %#define HAS_calcoutdset + % + %#include "dbScan.h" + %#include "postfix.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(RPVT, DBF_NOACCESS) { + prompt("Record Private") + extra("struct rpvtStruct *rpvt") + interest(4) + special(SPC_NOMOD) + } + field(VAL, DBF_DOUBLE) { + prompt("Result") + asl(ASL0) + promptgroup("50 - Output") + } + field(PVAL, DBF_DOUBLE) { + prompt("Previous Value") + } + field(CALC, DBF_STRING) { + initial("0") + prompt("Calculation") + special(SPC_CALC) + size(80) + pp(TRUE) + promptgroup("30 - Action") + } + field(CLCV, DBF_LONG) { + prompt("CALC Valid") + interest(1) + } + field(INPA, DBF_INLINK) { + prompt("Input A") + promptgroup("41 - Input A-F") + interest(1) + special(SPC_MOD) + } + field(INPB, DBF_INLINK) { + prompt("Input B") + promptgroup("41 - Input A-F") + interest(1) + special(SPC_MOD) + } + field(INPC, DBF_INLINK) { + prompt("Input C") + promptgroup("41 - Input A-F") + interest(1) + special(SPC_MOD) + } + field(INPD, DBF_INLINK) { + prompt("Input D") + promptgroup("41 - Input A-F") + interest(1) + special(SPC_MOD) + } + field(INPE, DBF_INLINK) { + prompt("Input E") + promptgroup("41 - Input A-F") + interest(1) + special(SPC_MOD) + } + field(INPF, DBF_INLINK) { + prompt("Input F") + promptgroup("41 - Input A-F") + interest(1) + special(SPC_MOD) + } + field(INPG, DBF_INLINK) { + prompt("Input G") + promptgroup("42 - Input G-L") + interest(1) + special(SPC_MOD) + } + field(INPH, DBF_INLINK) { + prompt("Input H") + promptgroup("42 - Input G-L") + interest(1) + special(SPC_MOD) + } + field(INPI, DBF_INLINK) { + prompt("Input I") + promptgroup("42 - Input G-L") + interest(1) + special(SPC_MOD) + } + field(INPJ, DBF_INLINK) { + prompt("Input J") + promptgroup("42 - Input G-L") + interest(1) + special(SPC_MOD) + } + field(INPK, DBF_INLINK) { + prompt("Input K") + promptgroup("42 - Input G-L") + interest(1) + special(SPC_MOD) + } + field(INPL, DBF_INLINK) { + prompt("Input L") + promptgroup("42 - Input G-L") + interest(1) + special(SPC_MOD) + } + field(OUT, DBF_OUTLINK) { + prompt("Output Specification") + promptgroup("50 - Output") + interest(1) + special(SPC_MOD) + } + field(INAV, DBF_MENU) { + initial("1") + prompt("INPA PV Status") + menu(calcoutINAV) + interest(1) + special(SPC_NOMOD) + } + field(INBV, DBF_MENU) { + initial("1") + prompt("INPB PV Status") + menu(calcoutINAV) + interest(1) + special(SPC_NOMOD) + } + field(INCV, DBF_MENU) { + initial("1") + prompt("INPC PV Status") + menu(calcoutINAV) + interest(1) + special(SPC_NOMOD) + } + field(INDV, DBF_MENU) { + initial("1") + prompt("INPD PV Status") + menu(calcoutINAV) + interest(1) + special(SPC_NOMOD) + } + field(INEV, DBF_MENU) { + initial("1") + prompt("INPE PV Status") + menu(calcoutINAV) + interest(1) + special(SPC_NOMOD) + } + field(INFV, DBF_MENU) { + initial("1") + prompt("INPF PV Status") + menu(calcoutINAV) + interest(1) + special(SPC_NOMOD) + } + field(INGV, DBF_MENU) { + initial("1") + prompt("INPG PV Status") + menu(calcoutINAV) + interest(1) + special(SPC_NOMOD) + } + field(INHV, DBF_MENU) { + initial("1") + prompt("INPH PV Status") + menu(calcoutINAV) + interest(1) + special(SPC_NOMOD) + } + field(INIV, DBF_MENU) { + initial("1") + prompt("INPI PV Status") + menu(calcoutINAV) + interest(1) + special(SPC_NOMOD) + } + field(INJV, DBF_MENU) { + initial("1") + prompt("INPJ PV Status") + menu(calcoutINAV) + interest(1) + special(SPC_NOMOD) + } + field(INKV, DBF_MENU) { + initial("1") + prompt("INPK PV Status") + menu(calcoutINAV) + interest(1) + special(SPC_NOMOD) + } + field(INLV, DBF_MENU) { + initial("1") + prompt("INPL PV Status") + menu(calcoutINAV) + interest(1) + special(SPC_NOMOD) + } + field(OUTV, DBF_MENU) { + prompt("OUT PV Status") + menu(calcoutINAV) + interest(1) + special(SPC_NOMOD) + } + field(OOPT, DBF_MENU) { + prompt("Output Execute Opt") + menu(calcoutOOPT) + promptgroup("50 - Output") + interest(1) + } + field(ODLY, DBF_DOUBLE) { + prompt("Output Execute Delay") + asl(ASL0) + promptgroup("50 - Output") + interest(1) + } + field(DLYA, DBF_USHORT) { + prompt("Output Delay Active") + asl(ASL0) + special(SPC_NOMOD) + } + field(DOPT, DBF_MENU) { + prompt("Output Data Opt") + menu(calcoutDOPT) + promptgroup("30 - Action") + interest(1) + } + field(OCAL, DBF_STRING) { + initial("0") + prompt("Output Calculation") + special(SPC_CALC) + size(80) + pp(TRUE) + promptgroup("30 - Action") + } + field(OCLV, DBF_LONG) { + prompt("OCAL Valid") + interest(1) + } + field(OEVT, DBF_STRING) { + size(40) + prompt("Event To Issue") + asl(ASL0) + promptgroup("30 - Action") + special(SPC_MOD) + } + field(EPVT, DBF_NOACCESS) { + prompt("Event private") + extra("EVENTPVT epvt") + interest(4) + special(SPC_NOMOD) + } + field(IVOA, DBF_MENU) { + prompt("INVALID output action") + menu(menuIvoa) + promptgroup("50 - Output") + interest(2) + } + field(IVOV, DBF_DOUBLE) { + prompt("INVALID output value") + promptgroup("50 - Output") + interest(2) + } + field(EGU, DBF_STRING) { + size(16) + prompt("Engineering Units") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(PREC, DBF_SHORT) { + prompt("Display Precision") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(HOPR, DBF_DOUBLE) { + prompt("High Operating Rng") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(LOPR, DBF_DOUBLE) { + prompt("Low Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(HIHI, DBF_DOUBLE) { + pp(TRUE) + prompt("Hihi Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LOLO, DBF_DOUBLE) { + pp(TRUE) + prompt("Lolo Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HIGH, DBF_DOUBLE) { + pp(TRUE) + prompt("High Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LOW, DBF_DOUBLE) { + pp(TRUE) + prompt("Low Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HHSV, DBF_MENU) { + prompt("Hihi Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LLSV, DBF_MENU) { + prompt("Lolo Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HSV, DBF_MENU) { + prompt("High Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LSV, DBF_MENU) { + prompt("Low Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HYST, DBF_DOUBLE) { + prompt("Alarm Deadband") + promptgroup("70 - Alarm") + interest(1) + } + field(ADEL, DBF_DOUBLE) { + prompt("Archive Deadband") + promptgroup("80 - Display") + interest(1) + } + field(MDEL, DBF_DOUBLE) { + prompt("Monitor Deadband") + promptgroup("80 - Display") + interest(1) + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(OVAL, DBF_DOUBLE) { + prompt("Output Value") + asl(ASL0) + } + field(LA, DBF_DOUBLE) { + prompt("Prev Value of A") + interest(3) + special(SPC_NOMOD) + } + field(LB, DBF_DOUBLE) { + prompt("Prev Value of B") + interest(3) + special(SPC_NOMOD) + } + field(LC, DBF_DOUBLE) { + prompt("Prev Value of C") + interest(3) + special(SPC_NOMOD) + } + field(LD, DBF_DOUBLE) { + prompt("Prev Value of D") + interest(3) + special(SPC_NOMOD) + } + field(LE, DBF_DOUBLE) { + prompt("Prev Value of E") + interest(3) + special(SPC_NOMOD) + } + field(LF, DBF_DOUBLE) { + prompt("Prev Value of F") + interest(3) + special(SPC_NOMOD) + } + field(LG, DBF_DOUBLE) { + prompt("Prev Value of G") + interest(3) + special(SPC_NOMOD) + } + field(LH, DBF_DOUBLE) { + prompt("Prev Value of H") + interest(3) + special(SPC_NOMOD) + } + field(LI, DBF_DOUBLE) { + prompt("Prev Value of I") + interest(3) + special(SPC_NOMOD) + } + field(LJ, DBF_DOUBLE) { + prompt("Prev Value of J") + interest(3) + special(SPC_NOMOD) + } + field(LK, DBF_DOUBLE) { + prompt("Prev Value of K") + interest(3) + special(SPC_NOMOD) + } + field(LL, DBF_DOUBLE) { + prompt("Prev Value of L") + interest(3) + special(SPC_NOMOD) + } + field(POVL, DBF_DOUBLE) { + prompt("Prev Value of OVAL") + asl(ASL0) + } + field(LALM, DBF_DOUBLE) { + prompt("Last Value Alarmed") + interest(3) + special(SPC_NOMOD) + } + field(ALST, DBF_DOUBLE) { + prompt("Last Value Archived") + interest(3) + special(SPC_NOMOD) + } + field(MLST, DBF_DOUBLE) { + prompt("Last Val Monitored") + interest(3) + special(SPC_NOMOD) + } + field(RPCL, DBF_NOACCESS) { + prompt("Reverse Polish Calc") + extra("char rpcl[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + special(SPC_NOMOD) + } + field(ORPC, DBF_NOACCESS) { + prompt("Reverse Polish OCalc") + extra("char orpc[INFIX_TO_POSTFIX_SIZE(80)]") + interest(4) + special(SPC_NOMOD) + } +} +device(calcout, CONSTANT, devCalcoutSoft, "Soft Channel") +device(calcout, CONSTANT, devCalcoutSoftCallback, "Async Soft Channel") +recordtype(compress) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_NOACCESS) { + pp(TRUE) + prompt("Value") + extra("void * val") + asl(ASL0) + special(SPC_DBADDR) + } + field(INP, DBF_INLINK) { + prompt("Input Specification") + promptgroup("40 - Input") + interest(1) + } + field(RES, DBF_SHORT) { + prompt("Reset") + asl(ASL0) + interest(3) + special(SPC_RESET) + } + field(ALG, DBF_MENU) { + prompt("Compression Algorithm") + menu(compressALG) + promptgroup("30 - Action") + interest(1) + special(SPC_RESET) + } + field(PBUF, DBF_MENU) { + initial("NO") + prompt("Use Partial buffers") + menu(menuYesNo) + promptgroup("30 - Action") + interest(1) + special(SPC_RESET) + } + field(BALG, DBF_MENU) { + prompt("Buffering Algorithm") + menu(bufferingALG) + promptgroup("30 - Action") + interest(1) + special(SPC_RESET) + } + field(NSAM, DBF_ULONG) { + initial("1") + prompt("Number of Values") + promptgroup("30 - Action") + interest(1) + special(SPC_NOMOD) + } + field(N, DBF_ULONG) { + initial("1") + prompt("N to 1 Compression") + promptgroup("30 - Action") + interest(1) + special(SPC_RESET) + } + field(IHIL, DBF_DOUBLE) { + prompt("Init High Interest Lim") + promptgroup("30 - Action") + interest(1) + } + field(ILIL, DBF_DOUBLE) { + prompt("Init Low Interest Lim") + promptgroup("30 - Action") + interest(1) + } + field(HOPR, DBF_DOUBLE) { + prompt("High Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(LOPR, DBF_DOUBLE) { + prompt("Low Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(PREC, DBF_SHORT) { + prompt("Display Precision") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(EGU, DBF_STRING) { + size(16) + prompt("Engineering Units") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(OFF, DBF_ULONG) { + prompt("Offset") + special(SPC_NOMOD) + } + field(NUSE, DBF_ULONG) { + prompt("Number Used") + special(SPC_NOMOD) + } + field(OUSE, DBF_ULONG) { + prompt("Old Number Used") + special(SPC_NOMOD) + } + field(BPTR, DBF_NOACCESS) { + prompt("Buffer Pointer") + extra("double *bptr") + interest(4) + special(SPC_NOMOD) + } + field(SPTR, DBF_NOACCESS) { + prompt("Summing Buffer Ptr") + extra("double *sptr") + interest(4) + special(SPC_NOMOD) + } + field(WPTR, DBF_NOACCESS) { + prompt("Working Buffer Ptr") + extra("double *wptr") + interest(4) + special(SPC_NOMOD) + } + field(INPN, DBF_LONG) { + prompt("Number of elements in Working Buffer") + interest(4) + special(SPC_NOMOD) + } + field(CVB, DBF_DOUBLE) { + prompt("Compress Value Buffer") + interest(3) + special(SPC_NOMOD) + } + field(INX, DBF_ULONG) { + prompt("Current number of readings") + interest(3) + special(SPC_NOMOD) + } +} +recordtype(dfanout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_DOUBLE) { + pp(TRUE) + prompt("Desired Output") + asl(ASL0) + promptgroup("40 - Input") + } + field(SELM, DBF_MENU) { + prompt("Select Mechanism") + menu(dfanoutSELM) + promptgroup("30 - Action") + interest(1) + } + field(SELN, DBF_USHORT) { + initial("1") + prompt("Link Selection") + interest(1) + } + field(SELL, DBF_INLINK) { + prompt("Link Selection Loc") + promptgroup("30 - Action") + interest(1) + } + field(OUTA, DBF_OUTLINK) { + prompt("Output Spec A") + promptgroup("50 - Output") + interest(1) + } + field(OUTB, DBF_OUTLINK) { + prompt("Output Spec B") + promptgroup("50 - Output") + interest(1) + } + field(OUTC, DBF_OUTLINK) { + prompt("Output Spec C") + promptgroup("50 - Output") + interest(1) + } + field(OUTD, DBF_OUTLINK) { + prompt("Output Spec D") + promptgroup("50 - Output") + interest(1) + } + field(OUTE, DBF_OUTLINK) { + prompt("Output Spec E") + promptgroup("50 - Output") + interest(1) + } + field(OUTF, DBF_OUTLINK) { + prompt("Output Spec F") + promptgroup("50 - Output") + interest(1) + } + field(OUTG, DBF_OUTLINK) { + prompt("Output Spec G") + promptgroup("50 - Output") + interest(1) + } + field(OUTH, DBF_OUTLINK) { + prompt("Output Spec H") + promptgroup("50 - Output") + interest(1) + } + field(DOL, DBF_INLINK) { + prompt("Desired Output Link") + promptgroup("40 - Input") + interest(1) + } + field(OMSL, DBF_MENU) { + prompt("Output Mode Select") + menu(menuOmsl) + promptgroup("50 - Output") + interest(1) + } + field(EGU, DBF_STRING) { + size(16) + prompt("Engineering Units") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(PREC, DBF_SHORT) { + prompt("Display Precision") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(HOPR, DBF_DOUBLE) { + prompt("High Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(LOPR, DBF_DOUBLE) { + prompt("Low Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(HIHI, DBF_DOUBLE) { + pp(TRUE) + prompt("Hihi Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LOLO, DBF_DOUBLE) { + pp(TRUE) + prompt("Lolo Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HIGH, DBF_DOUBLE) { + pp(TRUE) + prompt("High Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LOW, DBF_DOUBLE) { + pp(TRUE) + prompt("Low Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HHSV, DBF_MENU) { + prompt("Hihi Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LLSV, DBF_MENU) { + prompt("Lolo Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HSV, DBF_MENU) { + prompt("High Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LSV, DBF_MENU) { + prompt("Low Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HYST, DBF_DOUBLE) { + prompt("Alarm Deadband") + promptgroup("70 - Alarm") + interest(1) + } + field(ADEL, DBF_DOUBLE) { + prompt("Archive Deadband") + promptgroup("80 - Display") + interest(1) + } + field(MDEL, DBF_DOUBLE) { + prompt("Monitor Deadband") + promptgroup("80 - Display") + interest(1) + } + field(LALM, DBF_DOUBLE) { + prompt("Last Value Alarmed") + interest(3) + special(SPC_NOMOD) + } + field(ALST, DBF_DOUBLE) { + prompt("Last Value Archived") + interest(3) + special(SPC_NOMOD) + } + field(MLST, DBF_DOUBLE) { + prompt("Last Val Monitored") + interest(3) + special(SPC_NOMOD) + } +} +recordtype(event) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct eventRecord; + %typedef struct eventdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_event)(struct eventRecord *prec); /*(0)=> success */ + %} eventdset; + %#define HAS_eventdset + % + %#include "dbScan.h" + %#include "callback.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_STRING) { + size(40) + prompt("Event Name To Post") + asl(ASL0) + promptgroup("40 - Input") + special(SPC_MOD) + } + field(EPVT, DBF_NOACCESS) { + prompt("Event private") + extra("EVENTPVT epvt") + interest(4) + special(SPC_NOMOD) + } + field(INP, DBF_INLINK) { + prompt("Input Specification") + promptgroup("40 - Input") + interest(1) + } + field(SIOL, DBF_INLINK) { + prompt("Sim Input Specifctn") + promptgroup("90 - Simulate") + interest(1) + } + field(SVAL, DBF_STRING) { + size(40) + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + prompt("Sim Mode Location") + promptgroup("90 - Simulate") + interest(1) + } + field(SIMM, DBF_MENU) { + prompt("Simulation Mode") + menu(menuYesNo) + interest(1) + special(SPC_MOD) + } + field(SIMS, DBF_MENU) { + prompt("Sim mode Alarm Svrty") + menu(menuAlarmSevr) + promptgroup("90 - Simulate") + interest(2) + } + field(OLDSIMM, DBF_MENU) { + prompt("Prev. Simulation Mode") + menu(menuSimm) + interest(4) + special(SPC_NOMOD) + } + field(SSCN, DBF_MENU) { + initial("65535") + prompt("Sim. Mode Scan") + menu(menuScan) + promptgroup("90 - Simulate") + interest(1) + } + field(SDLY, DBF_DOUBLE) { + initial("-1.0") + prompt("Sim. Mode Async Delay") + promptgroup("90 - Simulate") + interest(2) + } + field(SIMPVT, DBF_NOACCESS) { + prompt("Sim. Mode Private") + extra("epicsCallback *simpvt") + interest(4) + special(SPC_NOMOD) + } +} +device(event, CONSTANT, devEventSoft, "Soft Channel") +recordtype(fanout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_LONG) { + pp(TRUE) + prompt("Used to trigger") + asl(ASL0) + } + field(SELM, DBF_MENU) { + prompt("Select Mechanism") + menu(fanoutSELM) + promptgroup("30 - Action") + interest(1) + } + field(SELN, DBF_USHORT) { + initial("1") + prompt("Link Selection") + interest(1) + } + field(SELL, DBF_INLINK) { + prompt("Link Selection Loc") + promptgroup("30 - Action") + interest(1) + } + field(OFFS, DBF_SHORT) { + initial("0") + prompt("Offset for Specified") + promptgroup("30 - Action") + interest(1) + } + field(SHFT, DBF_SHORT) { + initial("-1") + prompt("Shift for Mask mode") + promptgroup("30 - Action") + interest(1) + } + field(LNK0, DBF_FWDLINK) { + prompt("Forward Link 0") + promptgroup("51 - Output 0-7") + interest(1) + } + field(LNK1, DBF_FWDLINK) { + prompt("Forward Link 1") + promptgroup("51 - Output 0-7") + interest(1) + } + field(LNK2, DBF_FWDLINK) { + prompt("Forward Link 2") + promptgroup("51 - Output 0-7") + interest(1) + } + field(LNK3, DBF_FWDLINK) { + prompt("Forward Link 3") + promptgroup("51 - Output 0-7") + interest(1) + } + field(LNK4, DBF_FWDLINK) { + prompt("Forward Link 4") + promptgroup("51 - Output 0-7") + interest(1) + } + field(LNK5, DBF_FWDLINK) { + prompt("Forward Link 5") + promptgroup("51 - Output 0-7") + interest(1) + } + field(LNK6, DBF_FWDLINK) { + prompt("Forward Link 6") + promptgroup("51 - Output 0-7") + interest(1) + } + field(LNK7, DBF_FWDLINK) { + prompt("Forward Link 7") + promptgroup("51 - Output 0-7") + interest(1) + } + field(LNK8, DBF_FWDLINK) { + prompt("Forward Link 8") + promptgroup("52 - Output 8-F") + interest(1) + } + field(LNK9, DBF_FWDLINK) { + prompt("Forward Link 9") + promptgroup("52 - Output 8-F") + interest(1) + } + field(LNKA, DBF_FWDLINK) { + prompt("Forward Link 10") + promptgroup("52 - Output 8-F") + interest(1) + } + field(LNKB, DBF_FWDLINK) { + prompt("Forward Link 11") + promptgroup("52 - Output 8-F") + interest(1) + } + field(LNKC, DBF_FWDLINK) { + prompt("Forward Link 12") + promptgroup("52 - Output 8-F") + interest(1) + } + field(LNKD, DBF_FWDLINK) { + prompt("Forward Link 13") + promptgroup("52 - Output 8-F") + interest(1) + } + field(LNKE, DBF_FWDLINK) { + prompt("Forward Link 14") + promptgroup("52 - Output 8-F") + interest(1) + } + field(LNKF, DBF_FWDLINK) { + prompt("Forward Link 15") + promptgroup("52 - Output 8-F") + interest(1) + } +} +recordtype(histogram) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct histogramRecord; + %typedef struct histogramdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_histogram)(struct histogramRecord *prec); /*(0,2)=> success and add_count, don't add_count); if add_count then sgnl added to array*/ + % long (*special_linconv)(struct histogramRecord *prec, int after); + %} histogramdset; + %#define HAS_histogramdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_NOACCESS) { + prompt("Value") + extra("void * val") + asl(ASL0) + special(SPC_DBADDR) + } + field(NELM, DBF_USHORT) { + initial("1") + prompt("Num of Array Elements") + promptgroup("30 - Action") + interest(1) + special(SPC_NOMOD) + } + field(CSTA, DBF_SHORT) { + initial("1") + prompt("Collection Status") + interest(1) + special(SPC_NOMOD) + } + field(CMD, DBF_MENU) { + prompt("Collection Control") + menu(histogramCMD) + asl(ASL0) + interest(1) + special(SPC_CALC) + } + field(ULIM, DBF_DOUBLE) { + prompt("Upper Signal Limit") + prop(YES) + promptgroup("30 - Action") + interest(1) + special(SPC_RESET) + } + field(LLIM, DBF_DOUBLE) { + prompt("Lower Signal Limit ") + prop(YES) + promptgroup("30 - Action") + interest(1) + special(SPC_RESET) + } + field(WDTH, DBF_DOUBLE) { + prompt("Element Width") + interest(3) + special(SPC_NOMOD) + } + field(SGNL, DBF_DOUBLE) { + prompt("Signal Value") + special(SPC_MOD) + } + field(PREC, DBF_SHORT) { + prompt("Display Precision") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(SVL, DBF_INLINK) { + prompt("Signal Value Location") + promptgroup("40 - Input") + interest(1) + } + field(BPTR, DBF_NOACCESS) { + prompt("Buffer Pointer") + extra("epicsUInt32 *bptr") + interest(4) + special(SPC_NOMOD) + } + field(WDOG, DBF_NOACCESS) { + prompt("Watchdog callback") + extra("void * wdog") + interest(4) + special(SPC_NOMOD) + } + field(MDEL, DBF_SHORT) { + prompt("Monitor Count Deadband") + promptgroup("80 - Display") + interest(1) + } + field(MCNT, DBF_SHORT) { + prompt("Counts Since Monitor") + interest(3) + special(SPC_NOMOD) + } + field(SDEL, DBF_DOUBLE) { + prompt("Monitor Seconds Dband") + promptgroup("80 - Display") + interest(1) + special(SPC_RESET) + } + field(SIOL, DBF_INLINK) { + prompt("Simulation Input Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SVAL, DBF_DOUBLE) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + prompt("Simulation Mode Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SIMM, DBF_MENU) { + prompt("Simulation Mode") + menu(menuYesNo) + interest(1) + special(SPC_MOD) + } + field(SIMS, DBF_MENU) { + prompt("Simulation Mode Severity") + menu(menuAlarmSevr) + promptgroup("90 - Simulate") + interest(2) + } + field(OLDSIMM, DBF_MENU) { + prompt("Prev. Simulation Mode") + menu(menuSimm) + interest(4) + special(SPC_NOMOD) + } + field(SSCN, DBF_MENU) { + initial("65535") + prompt("Sim. Mode Scan") + menu(menuScan) + promptgroup("90 - Simulate") + interest(1) + } + field(SDLY, DBF_DOUBLE) { + initial("-1.0") + prompt("Sim. Mode Async Delay") + promptgroup("90 - Simulate") + interest(2) + } + field(SIMPVT, DBF_NOACCESS) { + prompt("Sim. Mode Private") + extra("epicsCallback *simpvt") + interest(4) + special(SPC_NOMOD) + } + field(HOPR, DBF_ULONG) { + prompt("High Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(LOPR, DBF_ULONG) { + prompt("Low Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } +} +device(histogram, CONSTANT, devHistogramSoft, "Soft Channel") +recordtype(int64in) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct int64inRecord; + %typedef struct int64indset { + % dset common; + % long (*read_int64in)(struct int64inRecord *prec); + %} int64indset; + %#define HAS_int64indset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_INT64) { + pp(TRUE) + prompt("Current value") + asl(ASL0) + promptgroup("40 - Input") + } + field(INP, DBF_INLINK) { + prompt("Input Specification") + promptgroup("40 - Input") + interest(1) + } + field(EGU, DBF_STRING) { + size(16) + prompt("Units name") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(HOPR, DBF_INT64) { + prompt("High Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(LOPR, DBF_INT64) { + prompt("Low Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(HIHI, DBF_INT64) { + pp(TRUE) + prompt("Hihi Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LOLO, DBF_INT64) { + pp(TRUE) + prompt("Lolo Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HIGH, DBF_INT64) { + pp(TRUE) + prompt("High Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LOW, DBF_INT64) { + pp(TRUE) + prompt("Low Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HHSV, DBF_MENU) { + pp(TRUE) + prompt("Hihi Severity") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LLSV, DBF_MENU) { + pp(TRUE) + prompt("Lolo Severity") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(HSV, DBF_MENU) { + pp(TRUE) + prompt("High Severity") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LSV, DBF_MENU) { + pp(TRUE) + prompt("Low Severity") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(HYST, DBF_INT64) { + prompt("Alarm Deadband") + promptgroup("70 - Alarm") + interest(1) + } + field(AFTC, DBF_DOUBLE) { + prompt("Alarm Filter Time Constant") + promptgroup("70 - Alarm") + interest(1) + } + field(AFVL, DBF_DOUBLE) { + prompt("Alarm Filter Value") + interest(3) + special(SPC_NOMOD) + } + field(ADEL, DBF_INT64) { + prompt("Archive Deadband") + promptgroup("80 - Display") + interest(1) + } + field(MDEL, DBF_INT64) { + prompt("Monitor Deadband") + promptgroup("80 - Display") + interest(1) + } + field(LALM, DBF_INT64) { + prompt("Last Value Alarmed") + interest(3) + special(SPC_NOMOD) + } + field(ALST, DBF_INT64) { + prompt("Last Value Archived") + interest(3) + special(SPC_NOMOD) + } + field(MLST, DBF_INT64) { + prompt("Last Val Monitored") + interest(3) + special(SPC_NOMOD) + } + field(SIOL, DBF_INLINK) { + prompt("Simulation Input Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SVAL, DBF_INT64) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + prompt("Simulation Mode Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SIMM, DBF_MENU) { + prompt("Simulation Mode") + menu(menuYesNo) + interest(1) + special(SPC_MOD) + } + field(SIMS, DBF_MENU) { + prompt("Simulation Mode Severity") + menu(menuAlarmSevr) + promptgroup("90 - Simulate") + interest(2) + } + field(OLDSIMM, DBF_MENU) { + prompt("Prev. Simulation Mode") + menu(menuSimm) + interest(4) + special(SPC_NOMOD) + } + field(SSCN, DBF_MENU) { + initial("65535") + prompt("Sim. Mode Scan") + menu(menuScan) + promptgroup("90 - Simulate") + interest(1) + } + field(SDLY, DBF_DOUBLE) { + initial("-1.0") + prompt("Sim. Mode Async Delay") + promptgroup("90 - Simulate") + interest(2) + } + field(SIMPVT, DBF_NOACCESS) { + prompt("Sim. Mode Private") + extra("epicsCallback *simpvt") + interest(4) + special(SPC_NOMOD) + } +} +device(int64in, CONSTANT, devI64inSoft, "Soft Channel") +device(int64in, CONSTANT, devI64inSoftCallback, "Async Soft Channel") +device(int64in, INST_IO, devInt64inOpcua, "OPCUA") +recordtype(int64out) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct int64outRecord; + %typedef struct int64outdset { + % dset common; + % long (*write_int64out)(struct int64outRecord *prec); + %} int64outdset; + %#define HAS_int64outdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_INT64) { + pp(TRUE) + prompt("Desired Output") + asl(ASL0) + promptgroup("50 - Output") + } + field(OUT, DBF_OUTLINK) { + prompt("Output Specification") + promptgroup("50 - Output") + interest(1) + } + field(DOL, DBF_INLINK) { + prompt("Desired Output Link") + promptgroup("40 - Input") + interest(1) + } + field(OMSL, DBF_MENU) { + prompt("Output Mode Select") + menu(menuOmsl) + promptgroup("50 - Output") + interest(1) + } + field(EGU, DBF_STRING) { + size(16) + prompt("Units name") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(DRVH, DBF_INT64) { + pp(TRUE) + prompt("Drive High Limit") + prop(YES) + promptgroup("30 - Action") + interest(1) + } + field(DRVL, DBF_INT64) { + pp(TRUE) + prompt("Drive Low Limit") + prop(YES) + promptgroup("30 - Action") + interest(1) + } + field(HOPR, DBF_INT64) { + prompt("High Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(LOPR, DBF_INT64) { + prompt("Low Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(HIHI, DBF_INT64) { + pp(TRUE) + prompt("Hihi Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LOLO, DBF_INT64) { + pp(TRUE) + prompt("Lolo Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HIGH, DBF_INT64) { + pp(TRUE) + prompt("High Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LOW, DBF_INT64) { + pp(TRUE) + prompt("Low Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HHSV, DBF_MENU) { + pp(TRUE) + prompt("Hihi Severity") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LLSV, DBF_MENU) { + pp(TRUE) + prompt("Lolo Severity") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(HSV, DBF_MENU) { + pp(TRUE) + prompt("High Severity") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LSV, DBF_MENU) { + pp(TRUE) + prompt("Low Severity") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(HYST, DBF_INT64) { + prompt("Alarm Deadband") + promptgroup("70 - Alarm") + interest(1) + } + field(ADEL, DBF_INT64) { + prompt("Archive Deadband") + promptgroup("80 - Display") + interest(1) + } + field(MDEL, DBF_INT64) { + prompt("Monitor Deadband") + promptgroup("80 - Display") + interest(1) + } + field(LALM, DBF_INT64) { + prompt("Last Value Alarmed") + interest(3) + special(SPC_NOMOD) + } + field(ALST, DBF_INT64) { + prompt("Last Value Archived") + interest(3) + special(SPC_NOMOD) + } + field(MLST, DBF_INT64) { + prompt("Last Val Monitored") + interest(3) + special(SPC_NOMOD) + } + field(SIOL, DBF_OUTLINK) { + prompt("Simulation Output Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SIML, DBF_INLINK) { + prompt("Simulation Mode Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SIMM, DBF_MENU) { + prompt("Simulation Mode") + menu(menuYesNo) + interest(1) + special(SPC_MOD) + } + field(SIMS, DBF_MENU) { + prompt("Simulation Mode Severity") + menu(menuAlarmSevr) + promptgroup("90 - Simulate") + interest(2) + } + field(OLDSIMM, DBF_MENU) { + prompt("Prev. Simulation Mode") + menu(menuSimm) + interest(4) + special(SPC_NOMOD) + } + field(SSCN, DBF_MENU) { + initial("65535") + prompt("Sim. Mode Scan") + menu(menuScan) + promptgroup("90 - Simulate") + interest(1) + } + field(SDLY, DBF_DOUBLE) { + initial("-1.0") + prompt("Sim. Mode Async Delay") + promptgroup("90 - Simulate") + interest(2) + } + field(SIMPVT, DBF_NOACCESS) { + prompt("Sim. Mode Private") + extra("epicsCallback *simpvt") + interest(4) + special(SPC_NOMOD) + } + field(IVOA, DBF_MENU) { + prompt("INVALID output action") + menu(menuIvoa) + promptgroup("50 - Output") + interest(2) + } + field(IVOV, DBF_INT64) { + prompt("INVALID output value") + promptgroup("50 - Output") + interest(2) + } +} +device(int64out, CONSTANT, devI64outSoft, "Soft Channel") +device(int64out, CONSTANT, devI64outSoftCallback, "Async Soft Channel") +device(int64out, INST_IO, devInt64outOpcua, "OPCUA") +recordtype(longin) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct longinRecord; + %typedef struct longindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_longin)(struct longinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} longindset; + %#define HAS_longindset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_LONG) { + pp(TRUE) + prompt("Current value") + asl(ASL0) + promptgroup("40 - Input") + } + field(INP, DBF_INLINK) { + prompt("Input Specification") + promptgroup("40 - Input") + interest(1) + } + field(EGU, DBF_STRING) { + size(16) + prompt("Engineering Units") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(HOPR, DBF_LONG) { + prompt("High Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(LOPR, DBF_LONG) { + prompt("Low Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(HIHI, DBF_LONG) { + pp(TRUE) + prompt("Hihi Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LOLO, DBF_LONG) { + pp(TRUE) + prompt("Lolo Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HIGH, DBF_LONG) { + pp(TRUE) + prompt("High Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LOW, DBF_LONG) { + pp(TRUE) + prompt("Low Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HHSV, DBF_MENU) { + pp(TRUE) + prompt("Hihi Severity") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LLSV, DBF_MENU) { + pp(TRUE) + prompt("Lolo Severity") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(HSV, DBF_MENU) { + pp(TRUE) + prompt("High Severity") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LSV, DBF_MENU) { + pp(TRUE) + prompt("Low Severity") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(HYST, DBF_LONG) { + prompt("Alarm Deadband") + promptgroup("70 - Alarm") + interest(1) + } + field(AFTC, DBF_DOUBLE) { + prompt("Alarm Filter Time Constant") + promptgroup("70 - Alarm") + interest(1) + } + field(AFVL, DBF_DOUBLE) { + prompt("Alarm Filter Value") + interest(3) + special(SPC_NOMOD) + } + field(ADEL, DBF_LONG) { + prompt("Archive Deadband") + promptgroup("80 - Display") + interest(1) + } + field(MDEL, DBF_LONG) { + prompt("Monitor Deadband") + promptgroup("80 - Display") + interest(1) + } + field(LALM, DBF_LONG) { + prompt("Last Value Alarmed") + interest(3) + special(SPC_NOMOD) + } + field(ALST, DBF_LONG) { + prompt("Last Value Archived") + interest(3) + special(SPC_NOMOD) + } + field(MLST, DBF_LONG) { + prompt("Last Val Monitored") + interest(3) + special(SPC_NOMOD) + } + field(SIOL, DBF_INLINK) { + prompt("Sim Input Specifctn") + promptgroup("90 - Simulate") + interest(1) + } + field(SVAL, DBF_LONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + prompt("Sim Mode Location") + promptgroup("90 - Simulate") + interest(1) + } + field(SIMM, DBF_MENU) { + prompt("Simulation Mode") + menu(menuYesNo) + interest(1) + special(SPC_MOD) + } + field(SIMS, DBF_MENU) { + prompt("Sim mode Alarm Svrty") + menu(menuAlarmSevr) + promptgroup("90 - Simulate") + interest(2) + } + field(OLDSIMM, DBF_MENU) { + prompt("Prev. Simulation Mode") + menu(menuSimm) + interest(4) + special(SPC_NOMOD) + } + field(SSCN, DBF_MENU) { + initial("65535") + prompt("Sim. Mode Scan") + menu(menuScan) + promptgroup("90 - Simulate") + interest(1) + } + field(SDLY, DBF_DOUBLE) { + initial("-1.0") + prompt("Sim. Mode Async Delay") + promptgroup("90 - Simulate") + interest(2) + } + field(SIMPVT, DBF_NOACCESS) { + prompt("Sim. Mode Private") + extra("epicsCallback *simpvt") + interest(4) + special(SPC_NOMOD) + } +} +device(longin, CONSTANT, devLiSoft, "Soft Channel") +device(longin, CONSTANT, devLiSoftCallback, "Async Soft Channel") +device(longin, INST_IO, devLiGeneralTime, "General Time") +device(longin, INST_IO, devLiOpcua, "OPCUA") +recordtype(longout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct longoutRecord; + %typedef struct longoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_longout)(struct longoutRecord *prec); /*(-1,0)=>(failure,success*/ + %} longoutdset; + %#define HAS_longoutdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_LONG) { + pp(TRUE) + prompt("Desired Output") + asl(ASL0) + promptgroup("50 - Output") + } + field(OUT, DBF_OUTLINK) { + prompt("Output Specification") + promptgroup("50 - Output") + interest(1) + special(SPC_MOD) + } + field(DOL, DBF_INLINK) { + prompt("Desired Output Link") + promptgroup("40 - Input") + interest(1) + } + field(OMSL, DBF_MENU) { + prompt("Output Mode Select") + menu(menuOmsl) + promptgroup("50 - Output") + interest(1) + } + field(EGU, DBF_STRING) { + size(16) + prompt("Engineering Units") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(DRVH, DBF_LONG) { + pp(TRUE) + prompt("Drive High Limit") + prop(YES) + promptgroup("30 - Action") + interest(1) + } + field(DRVL, DBF_LONG) { + pp(TRUE) + prompt("Drive Low Limit") + prop(YES) + promptgroup("30 - Action") + interest(1) + } + field(HOPR, DBF_LONG) { + prompt("High Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(LOPR, DBF_LONG) { + prompt("Low Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(HIHI, DBF_LONG) { + pp(TRUE) + prompt("Hihi Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LOLO, DBF_LONG) { + pp(TRUE) + prompt("Lolo Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HIGH, DBF_LONG) { + pp(TRUE) + prompt("High Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LOW, DBF_LONG) { + pp(TRUE) + prompt("Low Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HHSV, DBF_MENU) { + pp(TRUE) + prompt("Hihi Severity") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LLSV, DBF_MENU) { + pp(TRUE) + prompt("Lolo Severity") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(HSV, DBF_MENU) { + pp(TRUE) + prompt("High Severity") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LSV, DBF_MENU) { + pp(TRUE) + prompt("Low Severity") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(HYST, DBF_LONG) { + prompt("Alarm Deadband") + promptgroup("70 - Alarm") + interest(1) + } + field(ADEL, DBF_LONG) { + prompt("Archive Deadband") + promptgroup("80 - Display") + interest(1) + } + field(MDEL, DBF_LONG) { + prompt("Monitor Deadband") + promptgroup("80 - Display") + interest(1) + } + field(LALM, DBF_LONG) { + prompt("Last Value Alarmed") + interest(3) + special(SPC_NOMOD) + } + field(ALST, DBF_LONG) { + prompt("Last Value Archived") + interest(3) + special(SPC_NOMOD) + } + field(MLST, DBF_LONG) { + prompt("Last Val Monitored") + interest(3) + special(SPC_NOMOD) + } + field(SIOL, DBF_OUTLINK) { + prompt("Sim Output Specifctn") + promptgroup("90 - Simulate") + interest(1) + } + field(SIML, DBF_INLINK) { + prompt("Sim Mode Location") + promptgroup("90 - Simulate") + interest(1) + } + field(SIMM, DBF_MENU) { + prompt("Simulation Mode") + menu(menuYesNo) + interest(1) + special(SPC_MOD) + } + field(SIMS, DBF_MENU) { + prompt("Sim mode Alarm Svrty") + menu(menuAlarmSevr) + promptgroup("90 - Simulate") + interest(2) + } + field(OLDSIMM, DBF_MENU) { + prompt("Prev. Simulation Mode") + menu(menuSimm) + interest(4) + special(SPC_NOMOD) + } + field(SSCN, DBF_MENU) { + initial("65535") + prompt("Sim. Mode Scan") + menu(menuScan) + promptgroup("90 - Simulate") + interest(1) + } + field(SDLY, DBF_DOUBLE) { + initial("-1.0") + prompt("Sim. Mode Async Delay") + promptgroup("90 - Simulate") + interest(2) + } + field(SIMPVT, DBF_NOACCESS) { + prompt("Sim. Mode Private") + extra("epicsCallback *simpvt") + interest(4) + special(SPC_NOMOD) + } + field(IVOA, DBF_MENU) { + prompt("INVALID output action") + menu(menuIvoa) + promptgroup("50 - Output") + interest(2) + } + field(IVOV, DBF_LONG) { + prompt("INVALID output value") + promptgroup("50 - Output") + interest(2) + } + field(PVAL, DBF_LONG) { + prompt("Previous Value") + } + field(OUTPVT, DBF_NOACCESS) { + prompt("Output Write Control Private") + extra("epicsEnum16 outpvt") + interest(4) + special(SPC_NOMOD) + } + field(OOCH, DBF_MENU) { + initial("1") + prompt("Output Exec. On Change (Opt)") + menu(menuYesNo) + promptgroup("50 - Output") + interest(1) + } + field(OOPT, DBF_MENU) { + initial("0") + prompt("Output Execute Opt") + menu(longoutOOPT) + promptgroup("50 - Output") + interest(1) + } +} +device(longout, CONSTANT, devLoSoft, "Soft Channel") +device(longout, CONSTANT, devLoSoftCallback, "Async Soft Channel") +device(longout, INST_IO, devLoOpcua, "OPCUA") +recordtype(lsi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct lsiRecord; + %typedef struct lsidset { + % dset common; + % long (*read_string)(struct lsiRecord *prec); + %} lsidset; + %#define HAS_lsidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_NOACCESS) { + pp(TRUE) + prompt("Current Value") + extra("char *val") + asl(ASL0) + special(SPC_DBADDR) + } + field(OVAL, DBF_NOACCESS) { + prompt("Old Value") + extra("char *oval") + interest(3) + special(SPC_DBADDR) + } + field(SIZV, DBF_USHORT) { + initial("41") + prompt("Size of buffers") + promptgroup("40 - Input") + interest(1) + special(SPC_NOMOD) + } + field(LEN, DBF_ULONG) { + prompt("Length of VAL") + special(SPC_NOMOD) + } + field(OLEN, DBF_ULONG) { + prompt("Length of OVAL") + special(SPC_NOMOD) + } + field(INP, DBF_INLINK) { + prompt("Input Specification") + promptgroup("40 - Input") + interest(1) + } + field(MPST, DBF_MENU) { + prompt("Post Value Monitors") + menu(menuPost) + promptgroup("80 - Display") + interest(1) + } + field(APST, DBF_MENU) { + prompt("Post Archive Monitors") + menu(menuPost) + promptgroup("80 - Display") + interest(1) + } + field(SIML, DBF_INLINK) { + prompt("Simulation Mode Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SIMM, DBF_MENU) { + prompt("Simulation Mode") + menu(menuYesNo) + interest(1) + special(SPC_MOD) + } + field(SIMS, DBF_MENU) { + prompt("Simulation Mode Severity") + menu(menuAlarmSevr) + promptgroup("90 - Simulate") + interest(2) + } + field(SIOL, DBF_INLINK) { + prompt("Simulation Input Link") + promptgroup("90 - Simulate") + interest(1) + } + field(OLDSIMM, DBF_MENU) { + prompt("Prev. Simulation Mode") + menu(menuSimm) + interest(4) + special(SPC_NOMOD) + } + field(SSCN, DBF_MENU) { + initial("65535") + prompt("Sim. Mode Scan") + menu(menuScan) + promptgroup("90 - Simulate") + interest(1) + } + field(SDLY, DBF_DOUBLE) { + initial("-1.0") + prompt("Sim. Mode Async Delay") + promptgroup("90 - Simulate") + interest(2) + } + field(SIMPVT, DBF_NOACCESS) { + prompt("Sim. Mode Private") + extra("epicsCallback *simpvt") + interest(4) + special(SPC_NOMOD) + } +} +device(lsi, CONSTANT, devLsiSoft, "Soft Channel") +device(lsi, INST_IO, devLsiEnviron, "getenv") +device(lsi, INST_IO, devLsiOpcua, "OPCUA") +recordtype(lso) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct lsoRecord; + %typedef struct lsodset { + % dset common; + % long (*write_string)(struct lsoRecord *prec); + %} lsodset; + %#define HAS_lsodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_NOACCESS) { + pp(TRUE) + prompt("Current Value") + extra("char *val") + asl(ASL0) + special(SPC_DBADDR) + } + field(OVAL, DBF_NOACCESS) { + prompt("Previous Value") + extra("char *oval") + interest(3) + special(SPC_DBADDR) + } + field(SIZV, DBF_USHORT) { + initial("41") + prompt("Size of buffers") + promptgroup("50 - Output") + interest(1) + special(SPC_NOMOD) + } + field(LEN, DBF_ULONG) { + prompt("Length of VAL") + special(SPC_NOMOD) + } + field(OLEN, DBF_ULONG) { + prompt("Length of OVAL") + interest(3) + special(SPC_NOMOD) + } + field(DOL, DBF_INLINK) { + prompt("Desired Output Link") + promptgroup("40 - Input") + interest(1) + } + field(IVOA, DBF_MENU) { + prompt("INVALID Output Action") + menu(menuIvoa) + promptgroup("50 - Output") + interest(2) + } + field(IVOV, DBF_STRING) { + size(40) + prompt("INVALID Output Value") + promptgroup("50 - Output") + interest(2) + } + field(OMSL, DBF_MENU) { + prompt("Output Mode Select") + menu(menuOmsl) + promptgroup("50 - Output") + interest(1) + } + field(OUT, DBF_OUTLINK) { + prompt("Output Specification") + promptgroup("50 - Output") + interest(1) + } + field(MPST, DBF_MENU) { + prompt("Post Value Monitors") + menu(menuPost) + promptgroup("80 - Display") + interest(1) + } + field(APST, DBF_MENU) { + prompt("Post Archive Monitors") + menu(menuPost) + promptgroup("80 - Display") + interest(1) + } + field(SIML, DBF_INLINK) { + prompt("Simulation Mode link") + promptgroup("90 - Simulate") + interest(1) + } + field(SIMM, DBF_MENU) { + prompt("Simulation Mode") + menu(menuYesNo) + interest(1) + special(SPC_MOD) + } + field(SIMS, DBF_MENU) { + prompt("Simulation Mode Severity") + menu(menuAlarmSevr) + promptgroup("90 - Simulate") + interest(2) + } + field(SIOL, DBF_OUTLINK) { + prompt("Simulation Output Link") + promptgroup("90 - Simulate") + interest(1) + } + field(OLDSIMM, DBF_MENU) { + prompt("Prev. Simulation Mode") + menu(menuSimm) + interest(4) + special(SPC_NOMOD) + } + field(SSCN, DBF_MENU) { + initial("65535") + prompt("Sim. Mode Scan") + menu(menuScan) + promptgroup("90 - Simulate") + interest(1) + } + field(SDLY, DBF_DOUBLE) { + initial("-1.0") + prompt("Sim. Mode Async Delay") + promptgroup("90 - Simulate") + interest(2) + } + field(SIMPVT, DBF_NOACCESS) { + prompt("Sim. Mode Private") + extra("epicsCallback *simpvt") + interest(4) + special(SPC_NOMOD) + } +} +device(lso, CONSTANT, devLsoSoft, "Soft Channel") +device(lso, CONSTANT, devLsoSoftCallback, "Async Soft Channel") +device(lso, INST_IO, devLsoStdio, "stdio") +device(lso, INST_IO, devLsoOpcua, "OPCUA") +recordtype(mbbi) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbbiRecord; + %typedef struct mbbidset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidset; + %#define HAS_mbbidset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_ENUM) { + pp(TRUE) + prompt("Current Value") + asl(ASL0) + promptgroup("40 - Input") + } + field(NOBT, DBF_USHORT) { + prompt("Number of Bits") + promptgroup("40 - Input") + interest(1) + special(SPC_NOMOD) + } + field(INP, DBF_INLINK) { + prompt("Input Specification") + promptgroup("40 - Input") + interest(1) + } + field(ZRVL, DBF_ULONG) { + prompt("Zero Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("41 - Input 0-7") + interest(1) + } + field(ONVL, DBF_ULONG) { + prompt("One Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("41 - Input 0-7") + interest(1) + } + field(TWVL, DBF_ULONG) { + prompt("Two Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("41 - Input 0-7") + interest(1) + } + field(THVL, DBF_ULONG) { + prompt("Three Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("41 - Input 0-7") + interest(1) + } + field(FRVL, DBF_ULONG) { + prompt("Four Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("41 - Input 0-7") + interest(1) + } + field(FVVL, DBF_ULONG) { + prompt("Five Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("41 - Input 0-7") + interest(1) + } + field(SXVL, DBF_ULONG) { + prompt("Six Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("41 - Input 0-7") + interest(1) + } + field(SVVL, DBF_ULONG) { + prompt("Seven Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("41 - Input 0-7") + interest(1) + } + field(EIVL, DBF_ULONG) { + prompt("Eight Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("42 - Input 8-15") + interest(1) + } + field(NIVL, DBF_ULONG) { + prompt("Nine Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("42 - Input 8-15") + interest(1) + } + field(TEVL, DBF_ULONG) { + prompt("Ten Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("42 - Input 8-15") + interest(1) + } + field(ELVL, DBF_ULONG) { + prompt("Eleven Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("42 - Input 8-15") + interest(1) + } + field(TVVL, DBF_ULONG) { + prompt("Twelve Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("42 - Input 8-15") + interest(1) + } + field(TTVL, DBF_ULONG) { + prompt("Thirteen Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("42 - Input 8-15") + interest(1) + } + field(FTVL, DBF_ULONG) { + prompt("Fourteen Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("42 - Input 8-15") + interest(1) + } + field(FFVL, DBF_ULONG) { + prompt("Fifteen Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("42 - Input 8-15") + interest(1) + } + field(ZRST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Zero String") + promptgroup("81 - Display 0-7") + interest(1) + special(SPC_MOD) + } + field(ONST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("One String") + promptgroup("81 - Display 0-7") + interest(1) + special(SPC_MOD) + } + field(TWST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Two String") + promptgroup("81 - Display 0-7") + interest(1) + special(SPC_MOD) + } + field(THST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Three String") + promptgroup("81 - Display 0-7") + interest(1) + special(SPC_MOD) + } + field(FRST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Four String") + promptgroup("81 - Display 0-7") + interest(1) + special(SPC_MOD) + } + field(FVST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Five String") + promptgroup("81 - Display 0-7") + interest(1) + special(SPC_MOD) + } + field(SXST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Six String") + promptgroup("81 - Display 0-7") + interest(1) + special(SPC_MOD) + } + field(SVST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Seven String") + promptgroup("81 - Display 0-7") + interest(1) + special(SPC_MOD) + } + field(EIST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Eight String") + promptgroup("82 - Display 8-15") + interest(1) + special(SPC_MOD) + } + field(NIST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Nine String") + promptgroup("82 - Display 8-15") + interest(1) + special(SPC_MOD) + } + field(TEST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Ten String") + promptgroup("82 - Display 8-15") + interest(1) + special(SPC_MOD) + } + field(ELST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Eleven String") + promptgroup("82 - Display 8-15") + interest(1) + special(SPC_MOD) + } + field(TVST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Twelve String") + promptgroup("82 - Display 8-15") + interest(1) + special(SPC_MOD) + } + field(TTST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Thirteen String") + promptgroup("82 - Display 8-15") + interest(1) + special(SPC_MOD) + } + field(FTST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Fourteen String") + promptgroup("82 - Display 8-15") + interest(1) + special(SPC_MOD) + } + field(FFST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Fifteen String") + promptgroup("82 - Display 8-15") + interest(1) + special(SPC_MOD) + } + field(ZRSV, DBF_MENU) { + pp(TRUE) + prompt("State Zero Severity") + menu(menuAlarmSevr) + promptgroup("71 - Alarm 0-7") + interest(1) + } + field(ONSV, DBF_MENU) { + pp(TRUE) + prompt("State One Severity") + menu(menuAlarmSevr) + promptgroup("71 - Alarm 0-7") + interest(1) + } + field(TWSV, DBF_MENU) { + pp(TRUE) + prompt("State Two Severity") + menu(menuAlarmSevr) + promptgroup("71 - Alarm 0-7") + interest(1) + } + field(THSV, DBF_MENU) { + pp(TRUE) + prompt("State Three Severity") + menu(menuAlarmSevr) + promptgroup("71 - Alarm 0-7") + interest(1) + } + field(FRSV, DBF_MENU) { + pp(TRUE) + prompt("State Four Severity") + menu(menuAlarmSevr) + promptgroup("71 - Alarm 0-7") + interest(1) + } + field(FVSV, DBF_MENU) { + pp(TRUE) + prompt("State Five Severity") + menu(menuAlarmSevr) + promptgroup("71 - Alarm 0-7") + interest(1) + } + field(SXSV, DBF_MENU) { + pp(TRUE) + prompt("State Six Severity") + menu(menuAlarmSevr) + promptgroup("71 - Alarm 0-7") + interest(1) + } + field(SVSV, DBF_MENU) { + pp(TRUE) + prompt("State Seven Severity") + menu(menuAlarmSevr) + promptgroup("71 - Alarm 0-7") + interest(1) + } + field(EISV, DBF_MENU) { + pp(TRUE) + prompt("State Eight Severity") + menu(menuAlarmSevr) + promptgroup("72 - Alarm 8-15") + interest(1) + } + field(NISV, DBF_MENU) { + pp(TRUE) + prompt("State Nine Severity") + menu(menuAlarmSevr) + promptgroup("72 - Alarm 8-15") + interest(1) + } + field(TESV, DBF_MENU) { + pp(TRUE) + prompt("State Ten Severity") + menu(menuAlarmSevr) + promptgroup("72 - Alarm 8-15") + interest(1) + } + field(ELSV, DBF_MENU) { + pp(TRUE) + prompt("State Eleven Severity") + menu(menuAlarmSevr) + promptgroup("72 - Alarm 8-15") + interest(1) + } + field(TVSV, DBF_MENU) { + pp(TRUE) + prompt("State Twelve Severity") + menu(menuAlarmSevr) + promptgroup("72 - Alarm 8-15") + interest(1) + } + field(TTSV, DBF_MENU) { + pp(TRUE) + prompt("State Thirteen Sevr") + menu(menuAlarmSevr) + promptgroup("72 - Alarm 8-15") + interest(1) + } + field(FTSV, DBF_MENU) { + pp(TRUE) + prompt("State Fourteen Sevr") + menu(menuAlarmSevr) + promptgroup("72 - Alarm 8-15") + interest(1) + } + field(FFSV, DBF_MENU) { + pp(TRUE) + prompt("State Fifteen Severity") + menu(menuAlarmSevr) + promptgroup("72 - Alarm 8-15") + interest(1) + } + field(AFTC, DBF_DOUBLE) { + prompt("Alarm Filter Time Constant") + promptgroup("70 - Alarm") + interest(1) + } + field(AFVL, DBF_DOUBLE) { + prompt("Alarm Filter Value") + interest(3) + special(SPC_NOMOD) + } + field(UNSV, DBF_MENU) { + pp(TRUE) + prompt("Unknown State Severity") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(COSV, DBF_MENU) { + pp(TRUE) + prompt("Change of State Svr") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + prompt("Prev Raw Value") + interest(3) + special(SPC_NOMOD) + } + field(MASK, DBF_ULONG) { + prompt("Hardware Mask") + interest(1) + special(SPC_NOMOD) + } + field(MLST, DBF_USHORT) { + prompt("Last Value Monitored") + interest(3) + special(SPC_NOMOD) + } + field(LALM, DBF_USHORT) { + prompt("Last Value Alarmed") + interest(3) + special(SPC_NOMOD) + } + field(SDEF, DBF_SHORT) { + prompt("States Defined") + interest(3) + special(SPC_NOMOD) + } + field(SHFT, DBF_USHORT) { + prompt("Shift") + promptgroup("40 - Input") + interest(1) + } + field(SIOL, DBF_INLINK) { + prompt("Simulation Input Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SVAL, DBF_ULONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + prompt("Simulation Mode Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SIMM, DBF_MENU) { + prompt("Simulation Mode") + menu(menuSimm) + interest(1) + special(SPC_MOD) + } + field(SIMS, DBF_MENU) { + prompt("Simulation Mode Severity") + menu(menuAlarmSevr) + promptgroup("90 - Simulate") + interest(2) + } + field(OLDSIMM, DBF_MENU) { + prompt("Prev. Simulation Mode") + menu(menuSimm) + interest(4) + special(SPC_NOMOD) + } + field(SSCN, DBF_MENU) { + initial("65535") + prompt("Sim. Mode Scan") + menu(menuScan) + promptgroup("90 - Simulate") + interest(1) + } + field(SDLY, DBF_DOUBLE) { + initial("-1.0") + prompt("Sim. Mode Async Delay") + promptgroup("90 - Simulate") + interest(2) + } + field(SIMPVT, DBF_NOACCESS) { + prompt("Sim. Mode Private") + extra("epicsCallback *simpvt") + interest(4) + special(SPC_NOMOD) + } +} +device(mbbi, CONSTANT, devMbbiSoft, "Soft Channel") +device(mbbi, CONSTANT, devMbbiSoftRaw, "Raw Soft Channel") +device(mbbi, CONSTANT, devMbbiSoftCallback, "Async Soft Channel") +device(mbbi, INST_IO, devMbbiOpcua, "OPCUA") +recordtype(mbbiDirect) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbbiDirectRecord; + %typedef struct mbbidirectdset { + % dset common; /* init_record returns: (-1,0) => (failure, success)*/ + % long (*read_mbbi)(struct mbbiDirectRecord *prec); /* (0, 2) => (success, success no convert)*/ + %} mbbidirectdset; + %#define HAS_mbbidirectdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_LONG) { + pp(TRUE) + prompt("Current Value") + asl(ASL0) + promptgroup("40 - Input") + } + field(NOBT, DBF_SHORT) { + prompt("Number of Bits") + promptgroup("40 - Input") + interest(1) + special(SPC_NOMOD) + } + field(INP, DBF_INLINK) { + prompt("Input Specification") + promptgroup("40 - Input") + interest(1) + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + prompt("Prev Raw Value") + interest(3) + special(SPC_NOMOD) + } + field(MASK, DBF_ULONG) { + prompt("Hardware Mask") + interest(1) + special(SPC_NOMOD) + } + field(MLST, DBF_LONG) { + prompt("Last Value Monitored") + interest(3) + special(SPC_NOMOD) + } + field(SHFT, DBF_USHORT) { + prompt("Shift") + promptgroup("40 - Input") + interest(1) + } + field(SIOL, DBF_INLINK) { + prompt("Simulation Input Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SVAL, DBF_LONG) { + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + prompt("Simulation Mode Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SIMM, DBF_MENU) { + prompt("Simulation Mode") + menu(menuSimm) + interest(1) + special(SPC_MOD) + } + field(SIMS, DBF_MENU) { + prompt("Simulation Mode Severity") + menu(menuAlarmSevr) + promptgroup("90 - Simulate") + interest(2) + } + field(OLDSIMM, DBF_MENU) { + prompt("Prev. Simulation Mode") + menu(menuSimm) + interest(4) + special(SPC_NOMOD) + } + field(SSCN, DBF_MENU) { + initial("65535") + prompt("Sim. Mode Scan") + menu(menuScan) + promptgroup("90 - Simulate") + interest(1) + } + field(SDLY, DBF_DOUBLE) { + initial("-1.0") + prompt("Sim. Mode Async Delay") + promptgroup("90 - Simulate") + interest(2) + } + field(SIMPVT, DBF_NOACCESS) { + prompt("Sim. Mode Private") + extra("epicsCallback *simpvt") + interest(4) + special(SPC_NOMOD) + } + field(B0, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 0") + interest(1) + } + field(B1, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 1") + interest(1) + } + field(B2, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 2") + interest(1) + } + field(B3, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 3") + interest(1) + } + field(B4, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 4") + interest(1) + } + field(B5, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 5") + interest(1) + } + field(B6, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 6") + interest(1) + } + field(B7, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 7") + interest(1) + } + field(B8, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 8") + interest(1) + } + field(B9, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 9") + interest(1) + } + field(BA, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 10") + interest(1) + } + field(BB, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 11") + interest(1) + } + field(BC, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 12") + interest(1) + } + field(BD, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 13") + interest(1) + } + field(BE, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 14") + interest(1) + } + field(BF, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 15") + interest(1) + } + field(B10, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 16") + interest(1) + } + field(B11, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 17") + interest(1) + } + field(B12, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 18") + interest(1) + } + field(B13, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 19") + interest(1) + } + field(B14, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 20") + interest(1) + } + field(B15, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 21") + interest(1) + } + field(B16, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 22") + interest(1) + } + field(B17, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 23") + interest(1) + } + field(B18, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 24") + interest(1) + } + field(B19, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 25") + interest(1) + } + field(B1A, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 26") + interest(1) + } + field(B1B, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 27") + interest(1) + } + field(B1C, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 28") + interest(1) + } + field(B1D, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 29") + interest(1) + } + field(B1E, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 30") + interest(1) + } + field(B1F, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 31") + interest(1) + } +} +device(mbbiDirect, CONSTANT, devMbbiDirectSoft, "Soft Channel") +device(mbbiDirect, CONSTANT, devMbbiDirectSoftRaw, "Raw Soft Channel") +device(mbbiDirect, CONSTANT, devMbbiDirectSoftCallback, "Async Soft Channel") +device(mbbiDirect, INST_IO, devMbbiDirectOpcua, "OPCUA") +recordtype(mbbo) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbboRecord; + %typedef struct mbbodset { + % dset common; /*init_record returns: (0, 2) => (success, success no convert)*/ + % long (*write_mbbo)(struct mbboRecord *prec); /*returns: (0, 2) => (success, success no convert)*/ + %} mbbodset; + %#define HAS_mbbodset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_ENUM) { + pp(TRUE) + prompt("Desired Value") + asl(ASL0) + promptgroup("50 - Output") + special(SPC_DBADDR) + } + field(DOL, DBF_INLINK) { + prompt("Desired Output Link") + promptgroup("40 - Input") + interest(1) + } + field(OMSL, DBF_MENU) { + prompt("Output Mode Select") + menu(menuOmsl) + promptgroup("50 - Output") + interest(1) + } + field(NOBT, DBF_USHORT) { + prompt("Number of Bits") + promptgroup("50 - Output") + interest(1) + special(SPC_NOMOD) + } + field(OUT, DBF_OUTLINK) { + prompt("Output Specification") + promptgroup("50 - Output") + interest(1) + } + field(ZRVL, DBF_ULONG) { + prompt("Zero Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("51 - Output 0-7") + interest(1) + } + field(ONVL, DBF_ULONG) { + prompt("One Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("51 - Output 0-7") + interest(1) + } + field(TWVL, DBF_ULONG) { + prompt("Two Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("51 - Output 0-7") + interest(1) + } + field(THVL, DBF_ULONG) { + prompt("Three Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("51 - Output 0-7") + interest(1) + } + field(FRVL, DBF_ULONG) { + prompt("Four Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("51 - Output 0-7") + interest(1) + } + field(FVVL, DBF_ULONG) { + prompt("Five Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("51 - Output 0-7") + interest(1) + } + field(SXVL, DBF_ULONG) { + prompt("Six Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("51 - Output 0-7") + interest(1) + } + field(SVVL, DBF_ULONG) { + prompt("Seven Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("51 - Output 0-7") + interest(1) + } + field(EIVL, DBF_ULONG) { + prompt("Eight Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("52 - Output 8-15") + interest(1) + } + field(NIVL, DBF_ULONG) { + prompt("Nine Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("52 - Output 8-15") + interest(1) + } + field(TEVL, DBF_ULONG) { + prompt("Ten Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("52 - Output 8-15") + interest(1) + } + field(ELVL, DBF_ULONG) { + prompt("Eleven Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("52 - Output 8-15") + interest(1) + } + field(TVVL, DBF_ULONG) { + prompt("Twelve Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("52 - Output 8-15") + interest(1) + } + field(TTVL, DBF_ULONG) { + prompt("Thirteen Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("52 - Output 8-15") + interest(1) + } + field(FTVL, DBF_ULONG) { + prompt("Fourteen Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("52 - Output 8-15") + interest(1) + } + field(FFVL, DBF_ULONG) { + prompt("Fifteen Value") + base(HEX) + special(SPC_MOD) + pp(TRUE) + promptgroup("52 - Output 8-15") + interest(1) + } + field(ZRST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Zero String") + promptgroup("81 - Display 0-7") + interest(1) + special(SPC_MOD) + } + field(ONST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("One String") + promptgroup("81 - Display 0-7") + interest(1) + special(SPC_MOD) + } + field(TWST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Two String") + promptgroup("81 - Display 0-7") + interest(1) + special(SPC_MOD) + } + field(THST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Three String") + promptgroup("81 - Display 0-7") + interest(1) + special(SPC_MOD) + } + field(FRST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Four String") + promptgroup("81 - Display 0-7") + interest(1) + special(SPC_MOD) + } + field(FVST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Five String") + promptgroup("81 - Display 0-7") + interest(1) + special(SPC_MOD) + } + field(SXST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Six String") + promptgroup("81 - Display 0-7") + interest(1) + special(SPC_MOD) + } + field(SVST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Seven String") + promptgroup("81 - Display 0-7") + interest(1) + special(SPC_MOD) + } + field(EIST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Eight String") + promptgroup("82 - Display 8-15") + interest(1) + special(SPC_MOD) + } + field(NIST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Nine String") + promptgroup("82 - Display 8-15") + interest(1) + special(SPC_MOD) + } + field(TEST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Ten String") + promptgroup("82 - Display 8-15") + interest(1) + special(SPC_MOD) + } + field(ELST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Eleven String") + promptgroup("82 - Display 8-15") + interest(1) + special(SPC_MOD) + } + field(TVST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Twelve String") + promptgroup("82 - Display 8-15") + interest(1) + special(SPC_MOD) + } + field(TTST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Thirteen String") + promptgroup("82 - Display 8-15") + interest(1) + special(SPC_MOD) + } + field(FTST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Fourteen String") + promptgroup("82 - Display 8-15") + interest(1) + special(SPC_MOD) + } + field(FFST, DBF_STRING) { + size(26) + pp(TRUE) + prompt("Fifteen String") + promptgroup("82 - Display 8-15") + interest(1) + special(SPC_MOD) + } + field(ZRSV, DBF_MENU) { + pp(TRUE) + prompt("State Zero Severity") + menu(menuAlarmSevr) + promptgroup("71 - Alarm 0-7") + interest(1) + } + field(ONSV, DBF_MENU) { + pp(TRUE) + prompt("State One Severity") + menu(menuAlarmSevr) + promptgroup("71 - Alarm 0-7") + interest(1) + } + field(TWSV, DBF_MENU) { + pp(TRUE) + prompt("State Two Severity") + menu(menuAlarmSevr) + promptgroup("71 - Alarm 0-7") + interest(1) + } + field(THSV, DBF_MENU) { + pp(TRUE) + prompt("State Three Severity") + menu(menuAlarmSevr) + promptgroup("71 - Alarm 0-7") + interest(1) + } + field(FRSV, DBF_MENU) { + pp(TRUE) + prompt("State Four Severity") + menu(menuAlarmSevr) + promptgroup("71 - Alarm 0-7") + interest(1) + } + field(FVSV, DBF_MENU) { + pp(TRUE) + prompt("State Five Severity") + menu(menuAlarmSevr) + promptgroup("71 - Alarm 0-7") + interest(1) + } + field(SXSV, DBF_MENU) { + pp(TRUE) + prompt("State Six Severity") + menu(menuAlarmSevr) + promptgroup("71 - Alarm 0-7") + interest(1) + } + field(SVSV, DBF_MENU) { + pp(TRUE) + prompt("State Seven Severity") + menu(menuAlarmSevr) + promptgroup("71 - Alarm 0-7") + interest(1) + } + field(EISV, DBF_MENU) { + pp(TRUE) + prompt("State Eight Severity") + menu(menuAlarmSevr) + promptgroup("72 - Alarm 8-15") + interest(1) + } + field(NISV, DBF_MENU) { + pp(TRUE) + prompt("State Nine Severity") + menu(menuAlarmSevr) + promptgroup("72 - Alarm 8-15") + interest(1) + } + field(TESV, DBF_MENU) { + pp(TRUE) + prompt("State Ten Severity") + menu(menuAlarmSevr) + promptgroup("72 - Alarm 8-15") + interest(1) + } + field(ELSV, DBF_MENU) { + pp(TRUE) + prompt("State Eleven Severity") + menu(menuAlarmSevr) + promptgroup("72 - Alarm 8-15") + interest(1) + } + field(TVSV, DBF_MENU) { + pp(TRUE) + prompt("State Twelve Severity") + menu(menuAlarmSevr) + promptgroup("72 - Alarm 8-15") + interest(1) + } + field(TTSV, DBF_MENU) { + pp(TRUE) + prompt("State Thirteen Sevr") + menu(menuAlarmSevr) + promptgroup("72 - Alarm 8-15") + interest(1) + } + field(FTSV, DBF_MENU) { + pp(TRUE) + prompt("State Fourteen Sevr") + menu(menuAlarmSevr) + promptgroup("72 - Alarm 8-15") + interest(1) + } + field(FFSV, DBF_MENU) { + pp(TRUE) + prompt("State Fifteen Sevr") + menu(menuAlarmSevr) + promptgroup("72 - Alarm 8-15") + interest(1) + } + field(UNSV, DBF_MENU) { + pp(TRUE) + prompt("Unknown State Sevr") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(COSV, DBF_MENU) { + pp(TRUE) + prompt("Change of State Sevr") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + } + field(ORAW, DBF_ULONG) { + prompt("Prev Raw Value") + interest(3) + special(SPC_NOMOD) + } + field(RBV, DBF_ULONG) { + prompt("Readback Value") + special(SPC_NOMOD) + } + field(ORBV, DBF_ULONG) { + prompt("Prev Readback Value") + interest(3) + special(SPC_NOMOD) + } + field(MASK, DBF_ULONG) { + prompt("Hardware Mask") + interest(1) + special(SPC_NOMOD) + } + field(MLST, DBF_USHORT) { + prompt("Last Value Monitored") + interest(3) + special(SPC_NOMOD) + } + field(LALM, DBF_USHORT) { + prompt("Last Value Alarmed") + interest(3) + special(SPC_NOMOD) + } + field(SDEF, DBF_SHORT) { + prompt("States Defined") + interest(3) + special(SPC_NOMOD) + } + field(SHFT, DBF_USHORT) { + prompt("Shift") + promptgroup("50 - Output") + interest(1) + } + field(SIOL, DBF_OUTLINK) { + prompt("Simulation Output Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SIML, DBF_INLINK) { + prompt("Simulation Mode Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SIMM, DBF_MENU) { + prompt("Simulation Mode") + menu(menuSimm) + interest(1) + special(SPC_MOD) + } + field(SIMS, DBF_MENU) { + prompt("Simulation Mode Severity") + menu(menuAlarmSevr) + promptgroup("90 - Simulate") + interest(2) + } + field(OLDSIMM, DBF_MENU) { + prompt("Prev. Simulation Mode") + menu(menuSimm) + interest(4) + special(SPC_NOMOD) + } + field(SSCN, DBF_MENU) { + initial("65535") + prompt("Sim. Mode Scan") + menu(menuScan) + promptgroup("90 - Simulate") + interest(1) + } + field(SDLY, DBF_DOUBLE) { + initial("-1.0") + prompt("Sim. Mode Async Delay") + promptgroup("90 - Simulate") + interest(2) + } + field(SIMPVT, DBF_NOACCESS) { + prompt("Sim. Mode Private") + extra("epicsCallback *simpvt") + interest(4) + special(SPC_NOMOD) + } + field(IVOA, DBF_MENU) { + prompt("INVALID outpt action") + menu(menuIvoa) + promptgroup("50 - Output") + interest(2) + } + field(IVOV, DBF_USHORT) { + prompt("INVALID output value") + promptgroup("50 - Output") + interest(2) + } +} +device(mbbo, CONSTANT, devMbboSoft, "Soft Channel") +device(mbbo, CONSTANT, devMbboSoftRaw, "Raw Soft Channel") +device(mbbo, CONSTANT, devMbboSoftCallback, "Async Soft Channel") +device(mbbo, INST_IO, devMbboOpcua, "OPCUA") +recordtype(mbboDirect) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %/* Declare Device Support Entry Table */ + %struct mbboDirectRecord; + %typedef struct mbbodirectdset { + % dset common; /*init_record returns: (0, 2)=>(success, success no convert)*/ + % long (*write_mbbo)(struct mbboDirectRecord *prec); /*returns: (0, 2)=>(success, success no convert)*/ + %} mbbodirectdset; + %#define HAS_mbbodirectdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_LONG) { + pp(TRUE) + prompt("Word") + asl(ASL0) + promptgroup("50 - Output") + } + field(OMSL, DBF_MENU) { + pp(TRUE) + prompt("Output Mode Select") + menu(menuOmsl) + promptgroup("50 - Output") + interest(1) + } + field(NOBT, DBF_SHORT) { + prompt("Number of Bits") + promptgroup("50 - Output") + interest(1) + special(SPC_NOMOD) + } + field(DOL, DBF_INLINK) { + prompt("Desired Output Link") + promptgroup("40 - Input") + interest(1) + } + field(OUT, DBF_OUTLINK) { + prompt("Output Specification") + promptgroup("50 - Output") + interest(1) + } + field(RVAL, DBF_ULONG) { + pp(TRUE) + prompt("Raw Value") + special(SPC_NOMOD) + } + field(ORAW, DBF_ULONG) { + prompt("Prev Raw Value") + interest(3) + special(SPC_NOMOD) + } + field(RBV, DBF_ULONG) { + prompt("Readback Value") + special(SPC_NOMOD) + } + field(ORBV, DBF_ULONG) { + prompt("Prev Readback Value") + interest(3) + special(SPC_NOMOD) + } + field(MASK, DBF_ULONG) { + prompt("Hardware Mask") + interest(1) + special(SPC_NOMOD) + } + field(MLST, DBF_LONG) { + prompt("Last Value Monitored") + interest(3) + special(SPC_NOMOD) + } + field(OBIT, DBF_LONG) { + prompt("Last Bit mask Monitored") + interest(3) + special(SPC_NOMOD) + } + field(SHFT, DBF_USHORT) { + prompt("Shift") + promptgroup("50 - Output") + interest(1) + } + field(SIOL, DBF_OUTLINK) { + prompt("Simulation Output Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SIML, DBF_INLINK) { + prompt("Simulation Mode Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SIMM, DBF_MENU) { + prompt("Simulation Mode") + menu(menuSimm) + interest(1) + special(SPC_MOD) + } + field(SIMS, DBF_MENU) { + prompt("Simulation Mode Severity") + menu(menuAlarmSevr) + promptgroup("90 - Simulate") + interest(2) + } + field(OLDSIMM, DBF_MENU) { + prompt("Prev. Simulation Mode") + menu(menuSimm) + interest(4) + special(SPC_NOMOD) + } + field(SSCN, DBF_MENU) { + initial("65535") + prompt("Sim. Mode Scan") + menu(menuScan) + promptgroup("90 - Simulate") + interest(1) + } + field(SDLY, DBF_DOUBLE) { + initial("-1.0") + prompt("Sim. Mode Async Delay") + promptgroup("90 - Simulate") + interest(2) + } + field(SIMPVT, DBF_NOACCESS) { + prompt("Sim. Mode Private") + extra("epicsCallback *simpvt") + interest(4) + special(SPC_NOMOD) + } + field(IVOA, DBF_MENU) { + prompt("INVALID outpt action") + menu(menuIvoa) + promptgroup("50 - Output") + interest(2) + } + field(IVOV, DBF_LONG) { + prompt("INVALID output value") + promptgroup("50 - Output") + interest(2) + } + field(B0, DBF_UCHAR) { + prompt("Bit 0") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("51 - Output 0-7") + interest(1) + } + field(B1, DBF_UCHAR) { + prompt("Bit 1") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("51 - Output 0-7") + interest(1) + } + field(B2, DBF_UCHAR) { + prompt("Bit 2") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("51 - Output 0-7") + interest(1) + } + field(B3, DBF_UCHAR) { + prompt("Bit 3") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("51 - Output 0-7") + interest(1) + } + field(B4, DBF_UCHAR) { + prompt("Bit 4") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("51 - Output 0-7") + interest(1) + } + field(B5, DBF_UCHAR) { + prompt("Bit 5") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("51 - Output 0-7") + interest(1) + } + field(B6, DBF_UCHAR) { + prompt("Bit 6") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("51 - Output 0-7") + interest(1) + } + field(B7, DBF_UCHAR) { + prompt("Bit 7") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("51 - Output 0-7") + interest(1) + } + field(B8, DBF_UCHAR) { + prompt("Bit 8") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("52 - Output 8-15") + interest(1) + } + field(B9, DBF_UCHAR) { + prompt("Bit 9") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("52 - Output 8-15") + interest(1) + } + field(BA, DBF_UCHAR) { + prompt("Bit 10") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("52 - Output 8-15") + interest(1) + } + field(BB, DBF_UCHAR) { + prompt("Bit 11") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("52 - Output 8-15") + interest(1) + } + field(BC, DBF_UCHAR) { + prompt("Bit 12") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("52 - Output 8-15") + interest(1) + } + field(BD, DBF_UCHAR) { + prompt("Bit 13") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("52 - Output 8-15") + interest(1) + } + field(BE, DBF_UCHAR) { + prompt("Bit 14") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("52 - Output 8-15") + interest(1) + } + field(BF, DBF_UCHAR) { + prompt("Bit 15") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("52 - Output 8-15") + interest(1) + } + field(B10, DBF_UCHAR) { + prompt("Bit 16") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("53 - Output 16-23") + interest(1) + } + field(B11, DBF_UCHAR) { + prompt("Bit 17") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("53 - Output 16-23") + interest(1) + } + field(B12, DBF_UCHAR) { + prompt("Bit 18") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("53 - Output 16-23") + interest(1) + } + field(B13, DBF_UCHAR) { + prompt("Bit 19") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("53 - Output 16-23") + interest(1) + } + field(B14, DBF_UCHAR) { + prompt("Bit 20") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("53 - Output 16-23") + interest(1) + } + field(B15, DBF_UCHAR) { + prompt("Bit 21") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("53 - Output 16-23") + interest(1) + } + field(B16, DBF_UCHAR) { + prompt("Bit 22") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("53 - Output 16-23") + interest(1) + } + field(B17, DBF_UCHAR) { + prompt("Bit 23") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("53 - Output 16-23") + interest(1) + } + field(B18, DBF_UCHAR) { + prompt("Bit 24") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("54 - Output 24-31") + interest(1) + } + field(B19, DBF_UCHAR) { + prompt("Bit 25") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("54 - Output 24-31") + interest(1) + } + field(B1A, DBF_UCHAR) { + prompt("Bit 26") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("54 - Output 24-31") + interest(1) + } + field(B1B, DBF_UCHAR) { + prompt("Bit 27") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("54 - Output 24-31") + interest(1) + } + field(B1C, DBF_UCHAR) { + prompt("Bit 28") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("54 - Output 24-31") + interest(1) + } + field(B1D, DBF_UCHAR) { + prompt("Bit 29") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("54 - Output 24-31") + interest(1) + } + field(B1E, DBF_UCHAR) { + prompt("Bit 30") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("54 - Output 24-31") + interest(1) + } + field(B1F, DBF_UCHAR) { + prompt("Bit 31") + special(SPC_MOD) + pp(TRUE) + asl(ASL0) + promptgroup("54 - Output 24-31") + interest(1) + } +} +device(mbboDirect, CONSTANT, devMbboDirectSoft, "Soft Channel") +device(mbboDirect, CONSTANT, devMbboDirectSoftRaw, "Raw Soft Channel") +device(mbboDirect, CONSTANT, devMbboDirectSoftCallback, "Async Soft Channel") +device(mbboDirect, INST_IO, devMbboDirectOpcua, "OPCUA") +recordtype(opcuaItem) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_ULONG) { + pp(TRUE) + prompt("Dummy Value") + asl(ASL0) + } + field(INP, DBF_INLINK) { + prompt("NodeId Specification") + promptgroup("40 - I/O Address") + interest(1) + } + field(SESS, DBF_STRING) { + size(41) + prompt("Session Specification") + promptgroup("40 - I/O Address") + interest(1) + } + field(SUBS, DBF_STRING) { + size(41) + prompt("Subscription Specification") + promptgroup("40 - I/O Address") + interest(1) + } + field(DEFACTN, DBF_MENU) { + prompt("Default Action") + menu(menuDefAction) + promptgroup("30 - Action") + interest(1) + } + field(BINI, DBF_MENU) { + prompt("Behavior at Initialization") + menu(menuBini) + promptgroup("20 - Scan") + interest(1) + } + field(READ, DBF_UCHAR) { + pp(TRUE) + prompt("Force Read Processing") + interest(3) + special(SPC_MOD) + } + field(WRITE, DBF_UCHAR) { + pp(TRUE) + prompt("Force Write Processing") + interest(3) + special(SPC_MOD) + } + field(STATCODE, DBF_ULONG) { + prompt("OPC UA status code") + base(HEX) + } + field(OSTATCODE, DBF_ULONG) { + prompt("Old status code") + base(HEX) + } + field(STATTEXT, DBF_STRING) { + size(41) + prompt("OPC UA status string") + } + field(WOC, DBF_MENU) { + prompt("Write-on-change mode") + menu(menuWoc) + promptgroup("30 - Action") + special(SPC_MOD) + interest(1) + } +} +device(opcuaItem, INST_IO, devItemOpcua, "OPCUA") +recordtype(permissive) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_USHORT) { + pp(TRUE) + prompt("Status") + asl(ASL0) + promptgroup("40 - Input") + } + field(WFLG, DBF_USHORT) { + pp(TRUE) + prompt("Wait Flag") + } + field(LABL, DBF_STRING) { + size(20) + pp(TRUE) + prompt("Button Label") + promptgroup("80 - Display") + interest(1) + } + field(OVAL, DBF_USHORT) { + prompt("Old Status") + interest(3) + special(SPC_NOMOD) + } + field(OFLG, DBF_USHORT) { + prompt("Old Flag") + interest(3) + special(SPC_NOMOD) + } +} +recordtype(printf) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct printfRecord; + %typedef struct printfdset { + % dset common; + % long (*write_string)(struct printfRecord *prec); + %} printfdset; + %#define HAS_printfdset + % + %/* Number of INPx fields defined */ + %#define PRINTF_NLINKS 10 + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_NOACCESS) { + pp(TRUE) + prompt("Result") + extra("char *val") + asl(ASL0) + special(SPC_DBADDR) + } + field(SIZV, DBF_USHORT) { + initial("41") + prompt("Size of VAL buffer") + promptgroup("30 - Action") + interest(1) + special(SPC_NOMOD) + } + field(LEN, DBF_ULONG) { + prompt("Length of VAL") + special(SPC_NOMOD) + } + field(OUT, DBF_OUTLINK) { + prompt("Output Specification") + promptgroup("50 - Output") + interest(1) + } + field(FMT, DBF_STRING) { + size(81) + pp(TRUE) + prompt("Format String") + promptgroup("30 - Action") + } + field(IVLS, DBF_STRING) { + initial("LNK") + size(16) + prompt("Invalid Link String") + promptgroup("30 - Action") + } + field(INP0, DBF_INLINK) { + prompt("Input 0") + promptgroup("40 - Input") + interest(1) + } + field(INP1, DBF_INLINK) { + prompt("Input 1") + promptgroup("40 - Input") + interest(1) + } + field(INP2, DBF_INLINK) { + prompt("Input 2") + promptgroup("40 - Input") + interest(1) + } + field(INP3, DBF_INLINK) { + prompt("Input 3") + promptgroup("40 - Input") + interest(1) + } + field(INP4, DBF_INLINK) { + prompt("Input 4") + promptgroup("40 - Input") + interest(1) + } + field(INP5, DBF_INLINK) { + prompt("Input 5") + promptgroup("40 - Input") + interest(1) + } + field(INP6, DBF_INLINK) { + prompt("Input 6") + promptgroup("40 - Input") + interest(1) + } + field(INP7, DBF_INLINK) { + prompt("Input 7") + promptgroup("40 - Input") + interest(1) + } + field(INP8, DBF_INLINK) { + prompt("Input 8") + promptgroup("40 - Input") + interest(1) + } + field(INP9, DBF_INLINK) { + prompt("Input 9") + promptgroup("40 - Input") + interest(1) + } +} +device(printf, CONSTANT, devPrintfSoft, "Soft Channel") +device(printf, CONSTANT, devPrintfSoftCallback, "Async Soft Channel") +device(printf, INST_IO, devPrintfStdio, "stdio") +recordtype(sel) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_DOUBLE) { + prompt("Result") + asl(ASL0) + promptgroup("40 - Input") + special(SPC_NOMOD) + } + field(SELM, DBF_MENU) { + prompt("Select Mechanism") + menu(selSELM) + promptgroup("30 - Action") + } + field(SELN, DBF_USHORT) { + prompt("Index value") + } + field(PREC, DBF_SHORT) { + prompt("Display Precision") + promptgroup("80 - Display") + interest(1) + } + field(NVL, DBF_INLINK) { + prompt("Index Value Location") + promptgroup("30 - Action") + interest(1) + } + field(INPA, DBF_INLINK) { + prompt("Input A") + promptgroup("41 - Input A-F") + interest(1) + } + field(INPB, DBF_INLINK) { + prompt("Input B") + promptgroup("41 - Input A-F") + interest(1) + } + field(INPC, DBF_INLINK) { + prompt("Input C") + promptgroup("41 - Input A-F") + interest(1) + } + field(INPD, DBF_INLINK) { + prompt("Input D") + promptgroup("41 - Input A-F") + interest(1) + } + field(INPE, DBF_INLINK) { + prompt("Input E") + promptgroup("41 - Input A-F") + interest(1) + } + field(INPF, DBF_INLINK) { + prompt("Input F") + promptgroup("41 - Input A-F") + interest(1) + } + field(INPG, DBF_INLINK) { + prompt("Input G") + promptgroup("42 - Input G-L") + interest(1) + } + field(INPH, DBF_INLINK) { + prompt("Input H") + promptgroup("42 - Input G-L") + interest(1) + } + field(INPI, DBF_INLINK) { + prompt("Input I") + promptgroup("42 - Input G-L") + interest(1) + } + field(INPJ, DBF_INLINK) { + prompt("Input J") + promptgroup("42 - Input G-L") + interest(1) + } + field(INPK, DBF_INLINK) { + prompt("Input K") + promptgroup("42 - Input G-L") + interest(1) + } + field(INPL, DBF_INLINK) { + prompt("Input L") + promptgroup("42 - Input G-L") + interest(1) + } + field(EGU, DBF_STRING) { + size(16) + prompt("Engineering Units") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(HOPR, DBF_DOUBLE) { + prompt("High Operating Rng") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(LOPR, DBF_DOUBLE) { + prompt("Low Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(HIHI, DBF_DOUBLE) { + pp(TRUE) + prompt("Hihi Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LOLO, DBF_DOUBLE) { + pp(TRUE) + prompt("Lolo Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HIGH, DBF_DOUBLE) { + pp(TRUE) + prompt("High Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LOW, DBF_DOUBLE) { + pp(TRUE) + prompt("Low Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HHSV, DBF_MENU) { + prompt("Hihi Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LLSV, DBF_MENU) { + prompt("Lolo Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HSV, DBF_MENU) { + prompt("High Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LSV, DBF_MENU) { + prompt("Low Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HYST, DBF_DOUBLE) { + prompt("Alarm Deadband") + promptgroup("70 - Alarm") + interest(1) + } + field(ADEL, DBF_DOUBLE) { + prompt("Archive Deadband") + promptgroup("80 - Display") + interest(1) + } + field(MDEL, DBF_DOUBLE) { + prompt("Monitor Deadband") + promptgroup("80 - Display") + interest(1) + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + prompt("Prev Value of A") + interest(3) + special(SPC_NOMOD) + } + field(LB, DBF_DOUBLE) { + prompt("Prev Value of B") + interest(3) + special(SPC_NOMOD) + } + field(LC, DBF_DOUBLE) { + prompt("Prev Value of C") + interest(3) + special(SPC_NOMOD) + } + field(LD, DBF_DOUBLE) { + prompt("Prev Value of D") + interest(3) + special(SPC_NOMOD) + } + field(LE, DBF_DOUBLE) { + prompt("Prev Value of E") + interest(3) + special(SPC_NOMOD) + } + field(LF, DBF_DOUBLE) { + prompt("Prev Value of F") + interest(3) + special(SPC_NOMOD) + } + field(LG, DBF_DOUBLE) { + prompt("Prev Value of G") + interest(3) + special(SPC_NOMOD) + } + field(LH, DBF_DOUBLE) { + prompt("Prev Value of H") + interest(3) + special(SPC_NOMOD) + } + field(LI, DBF_DOUBLE) { + prompt("Prev Value of I") + interest(3) + special(SPC_NOMOD) + } + field(LJ, DBF_DOUBLE) { + prompt("Prev Value of J") + interest(3) + special(SPC_NOMOD) + } + field(LK, DBF_DOUBLE) { + prompt("Prev Value of K") + interest(3) + special(SPC_NOMOD) + } + field(LL, DBF_DOUBLE) { + prompt("Prev Value of L") + interest(3) + special(SPC_NOMOD) + } + field(LALM, DBF_DOUBLE) { + prompt("Last Value Alarmed") + interest(3) + special(SPC_NOMOD) + } + field(ALST, DBF_DOUBLE) { + prompt("Last Value Archived") + interest(3) + special(SPC_NOMOD) + } + field(MLST, DBF_DOUBLE) { + prompt("Last Val Monitored") + interest(3) + special(SPC_NOMOD) + } + field(NLST, DBF_USHORT) { + prompt("Last Index Monitored") + interest(3) + special(SPC_NOMOD) + } +} +recordtype(seq) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_LONG) { + pp(TRUE) + prompt("Used to trigger") + asl(ASL0) + } + field(SELM, DBF_MENU) { + prompt("Select Mechanism") + menu(seqSELM) + promptgroup("30 - Action") + interest(1) + } + field(SELN, DBF_USHORT) { + initial("1") + prompt("Link Selection") + interest(1) + } + field(SELL, DBF_INLINK) { + prompt("Link Selection Loc") + promptgroup("30 - Action") + interest(1) + } + field(OFFS, DBF_SHORT) { + initial("0") + prompt("Offset for Specified") + promptgroup("30 - Action") + interest(1) + } + field(SHFT, DBF_SHORT) { + initial("-1") + prompt("Shift for Mask mode") + promptgroup("30 - Action") + interest(1) + } + field(OLDN, DBF_USHORT) { + prompt("Old Selection") + interest(4) + } + field(PREC, DBF_SHORT) { + prompt("Display Precision") + promptgroup("80 - Display") + interest(1) + } + field(DLY0, DBF_DOUBLE) { + prompt("Delay 0") + promptgroup("41 - Link 0-7") + interest(1) + } + field(DOL0, DBF_INLINK) { + prompt("Input link 0") + promptgroup("41 - Link 0-7") + interest(1) + } + field(DO0, DBF_DOUBLE) { + prompt("Value 0") + interest(1) + } + field(LNK0, DBF_OUTLINK) { + prompt("Output Link 0") + promptgroup("41 - Link 0-7") + interest(1) + } + field(DLY1, DBF_DOUBLE) { + prompt("Delay 1") + promptgroup("41 - Link 0-7") + interest(1) + } + field(DOL1, DBF_INLINK) { + prompt("Input link1") + promptgroup("41 - Link 0-7") + interest(1) + } + field(DO1, DBF_DOUBLE) { + prompt("Value 1") + interest(1) + } + field(LNK1, DBF_OUTLINK) { + prompt("Output Link 1") + promptgroup("41 - Link 0-7") + interest(1) + } + field(DLY2, DBF_DOUBLE) { + prompt("Delay 2") + promptgroup("41 - Link 0-7") + interest(1) + } + field(DOL2, DBF_INLINK) { + prompt("Input link 2") + promptgroup("41 - Link 0-7") + interest(1) + } + field(DO2, DBF_DOUBLE) { + prompt("Value 2") + interest(1) + } + field(LNK2, DBF_OUTLINK) { + prompt("Output Link 2") + promptgroup("41 - Link 0-7") + interest(1) + } + field(DLY3, DBF_DOUBLE) { + prompt("Delay 3") + promptgroup("41 - Link 0-7") + interest(1) + } + field(DOL3, DBF_INLINK) { + prompt("Input link 3") + promptgroup("41 - Link 0-7") + interest(1) + } + field(DO3, DBF_DOUBLE) { + prompt("Value 3") + interest(1) + } + field(LNK3, DBF_OUTLINK) { + prompt("Output Link 3") + promptgroup("41 - Link 0-7") + interest(1) + } + field(DLY4, DBF_DOUBLE) { + prompt("Delay 4") + promptgroup("41 - Link 0-7") + interest(1) + } + field(DOL4, DBF_INLINK) { + prompt("Input link 4") + promptgroup("41 - Link 0-7") + interest(1) + } + field(DO4, DBF_DOUBLE) { + prompt("Value 4") + interest(1) + } + field(LNK4, DBF_OUTLINK) { + prompt("Output Link 4") + promptgroup("41 - Link 0-7") + interest(1) + } + field(DLY5, DBF_DOUBLE) { + prompt("Delay 5") + promptgroup("41 - Link 0-7") + interest(1) + } + field(DOL5, DBF_INLINK) { + prompt("Input link 5") + promptgroup("41 - Link 0-7") + interest(1) + } + field(DO5, DBF_DOUBLE) { + prompt("Value 5") + interest(1) + } + field(LNK5, DBF_OUTLINK) { + prompt("Output Link 5") + promptgroup("41 - Link 0-7") + interest(1) + } + field(DLY6, DBF_DOUBLE) { + prompt("Delay 6") + promptgroup("41 - Link 0-7") + interest(1) + } + field(DOL6, DBF_INLINK) { + prompt("Input link 6") + promptgroup("41 - Link 0-7") + interest(1) + } + field(DO6, DBF_DOUBLE) { + prompt("Value 6") + interest(1) + } + field(LNK6, DBF_OUTLINK) { + prompt("Output Link 6") + promptgroup("41 - Link 0-7") + interest(1) + } + field(DLY7, DBF_DOUBLE) { + prompt("Delay 7") + promptgroup("41 - Link 0-7") + interest(1) + } + field(DOL7, DBF_INLINK) { + prompt("Input link 7") + promptgroup("41 - Link 0-7") + interest(1) + } + field(DO7, DBF_DOUBLE) { + prompt("Value 7") + interest(1) + } + field(LNK7, DBF_OUTLINK) { + prompt("Output Link 7") + promptgroup("41 - Link 0-7") + interest(1) + } + field(DLY8, DBF_DOUBLE) { + prompt("Delay 8") + promptgroup("42 - Link 8-F") + interest(1) + } + field(DOL8, DBF_INLINK) { + prompt("Input link 8") + promptgroup("42 - Link 8-F") + interest(1) + } + field(DO8, DBF_DOUBLE) { + prompt("Value 8") + interest(1) + } + field(LNK8, DBF_OUTLINK) { + prompt("Output Link 8") + promptgroup("42 - Link 8-F") + interest(1) + } + field(DLY9, DBF_DOUBLE) { + prompt("Delay 9") + promptgroup("42 - Link 8-F") + interest(1) + } + field(DOL9, DBF_INLINK) { + prompt("Input link 9") + promptgroup("42 - Link 8-F") + interest(1) + } + field(DO9, DBF_DOUBLE) { + prompt("Value 9") + interest(1) + } + field(LNK9, DBF_OUTLINK) { + prompt("Output Link 9") + promptgroup("42 - Link 8-F") + interest(1) + } + field(DLYA, DBF_DOUBLE) { + prompt("Delay 10") + promptgroup("42 - Link 8-F") + interest(1) + } + field(DOLA, DBF_INLINK) { + prompt("Input link 10") + promptgroup("42 - Link 8-F") + interest(1) + } + field(DOA, DBF_DOUBLE) { + prompt("Value 10") + interest(1) + } + field(LNKA, DBF_OUTLINK) { + prompt("Output Link 10") + promptgroup("42 - Link 8-F") + interest(1) + } + field(DLYB, DBF_DOUBLE) { + prompt("Delay 11") + promptgroup("42 - Link 8-F") + interest(1) + } + field(DOLB, DBF_INLINK) { + prompt("Input link 11") + promptgroup("42 - Link 8-F") + interest(1) + } + field(DOB, DBF_DOUBLE) { + prompt("Value 11") + interest(1) + } + field(LNKB, DBF_OUTLINK) { + prompt("Output Link 11") + promptgroup("42 - Link 8-F") + interest(1) + } + field(DLYC, DBF_DOUBLE) { + prompt("Delay 12") + promptgroup("42 - Link 8-F") + interest(1) + } + field(DOLC, DBF_INLINK) { + prompt("Input link 12") + promptgroup("42 - Link 8-F") + interest(1) + } + field(DOC, DBF_DOUBLE) { + prompt("Value 12") + interest(1) + } + field(LNKC, DBF_OUTLINK) { + prompt("Output Link 12") + promptgroup("42 - Link 8-F") + interest(1) + } + field(DLYD, DBF_DOUBLE) { + prompt("Delay 13") + promptgroup("42 - Link 8-F") + interest(1) + } + field(DOLD, DBF_INLINK) { + prompt("Input link 13") + promptgroup("42 - Link 8-F") + interest(1) + } + field(DOD, DBF_DOUBLE) { + prompt("Value 13") + interest(1) + } + field(LNKD, DBF_OUTLINK) { + prompt("Output Link 13") + promptgroup("42 - Link 8-F") + interest(1) + } + field(DLYE, DBF_DOUBLE) { + prompt("Delay 14") + promptgroup("42 - Link 8-F") + interest(1) + } + field(DOLE, DBF_INLINK) { + prompt("Input link 14") + promptgroup("42 - Link 8-F") + interest(1) + } + field(DOE, DBF_DOUBLE) { + prompt("Value 14") + interest(1) + } + field(LNKE, DBF_OUTLINK) { + prompt("Output Link 14") + promptgroup("42 - Link 8-F") + interest(1) + } + field(DLYF, DBF_DOUBLE) { + prompt("Delay 15") + promptgroup("42 - Link 8-F") + interest(1) + } + field(DOLF, DBF_INLINK) { + prompt("Input link 15") + promptgroup("42 - Link 8-F") + interest(1) + } + field(DOF, DBF_DOUBLE) { + prompt("Value 15") + interest(1) + } + field(LNKF, DBF_OUTLINK) { + prompt("Output Link 15") + promptgroup("42 - Link 8-F") + interest(1) + } +} +recordtype(state) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_STRING) { + size(20) + pp(TRUE) + prompt("Value") + asl(ASL0) + promptgroup("40 - Input") + } + field(OVAL, DBF_STRING) { + size(20) + prompt("Prev Value") + interest(3) + special(SPC_NOMOD) + } +} +recordtype(stringin) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct stringinRecord; + %typedef struct stringindset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_stringin)(struct stringinRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} stringindset; + %#define HAS_stringindset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_STRING) { + size(40) + pp(TRUE) + prompt("Current Value") + asl(ASL0) + promptgroup("40 - Input") + } + field(OVAL, DBF_STRING) { + size(40) + prompt("Previous Value") + interest(3) + special(SPC_NOMOD) + } + field(INP, DBF_INLINK) { + prompt("Input Specification") + promptgroup("40 - Input") + interest(1) + } + field(MPST, DBF_MENU) { + prompt("Post Value Monitors") + menu(stringinPOST) + promptgroup("80 - Display") + interest(1) + } + field(APST, DBF_MENU) { + prompt("Post Archive Monitors") + menu(stringinPOST) + promptgroup("80 - Display") + interest(1) + } + field(SIOL, DBF_INLINK) { + prompt("Simulation Input Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SVAL, DBF_STRING) { + size(40) + pp(TRUE) + prompt("Simulation Value") + } + field(SIML, DBF_INLINK) { + prompt("Simulation Mode Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SIMM, DBF_MENU) { + prompt("Simulation Mode") + menu(menuYesNo) + interest(1) + special(SPC_MOD) + } + field(SIMS, DBF_MENU) { + prompt("Simulation Mode Severity") + menu(menuAlarmSevr) + promptgroup("90 - Simulate") + interest(2) + } + field(OLDSIMM, DBF_MENU) { + prompt("Prev. Simulation Mode") + menu(menuSimm) + interest(4) + special(SPC_NOMOD) + } + field(SSCN, DBF_MENU) { + initial("65535") + prompt("Sim. Mode Scan") + menu(menuScan) + promptgroup("90 - Simulate") + interest(1) + } + field(SDLY, DBF_DOUBLE) { + initial("-1.0") + prompt("Sim. Mode Async Delay") + promptgroup("90 - Simulate") + interest(2) + } + field(SIMPVT, DBF_NOACCESS) { + prompt("Sim. Mode Private") + extra("epicsCallback *simpvt") + interest(4) + special(SPC_NOMOD) + } +} +device(stringin, CONSTANT, devSiSoft, "Soft Channel") +device(stringin, CONSTANT, devSiSoftCallback, "Async Soft Channel") +device(stringin, INST_IO, devTimestampSI, "Soft Timestamp") +device(stringin, INST_IO, devSiGeneralTime, "General Time") +device(stringin, INST_IO, devSiEnviron, "getenv") +device(stringin, INST_IO, devSiOpcua, "OPCUA") +recordtype(stringout) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct stringoutRecord; + %typedef struct stringoutdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*write_stringout)(struct stringoutRecord *prec); /*(-1,0)=>(failure,success)*/ + %} stringoutdset; + %#define HAS_stringoutdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_STRING) { + size(40) + pp(TRUE) + prompt("Current Value") + asl(ASL0) + promptgroup("50 - Output") + } + field(OVAL, DBF_STRING) { + size(40) + prompt("Previous Value") + interest(3) + special(SPC_NOMOD) + } + field(DOL, DBF_INLINK) { + prompt("Desired Output Link") + promptgroup("40 - Input") + interest(1) + } + field(OMSL, DBF_MENU) { + prompt("Output Mode Select") + menu(menuOmsl) + promptgroup("50 - Output") + interest(1) + } + field(OUT, DBF_OUTLINK) { + prompt("Output Specification") + promptgroup("50 - Output") + interest(1) + } + field(MPST, DBF_MENU) { + prompt("Post Value Monitors") + menu(stringoutPOST) + promptgroup("80 - Display") + interest(1) + } + field(APST, DBF_MENU) { + prompt("Post Archive Monitors") + menu(stringoutPOST) + promptgroup("80 - Display") + interest(1) + } + field(SIOL, DBF_OUTLINK) { + prompt("Simulation Output Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SIML, DBF_INLINK) { + prompt("Simulation Mode Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SIMM, DBF_MENU) { + prompt("Simulation Mode") + menu(menuYesNo) + interest(1) + special(SPC_MOD) + } + field(SIMS, DBF_MENU) { + prompt("Simulation Mode Severity") + menu(menuAlarmSevr) + promptgroup("90 - Simulate") + interest(2) + } + field(OLDSIMM, DBF_MENU) { + prompt("Prev. Simulation Mode") + menu(menuSimm) + interest(4) + special(SPC_NOMOD) + } + field(SSCN, DBF_MENU) { + initial("65535") + prompt("Sim. Mode Scan") + menu(menuScan) + promptgroup("90 - Simulate") + interest(1) + } + field(SDLY, DBF_DOUBLE) { + initial("-1.0") + prompt("Sim. Mode Async Delay") + promptgroup("90 - Simulate") + interest(2) + } + field(SIMPVT, DBF_NOACCESS) { + prompt("Sim. Mode Private") + extra("epicsCallback *simpvt") + interest(4) + special(SPC_NOMOD) + } + field(IVOA, DBF_MENU) { + prompt("INVALID output action") + menu(menuIvoa) + promptgroup("50 - Output") + interest(2) + } + field(IVOV, DBF_STRING) { + size(40) + prompt("INVALID output value") + promptgroup("50 - Output") + interest(2) + } +} +device(stringout, CONSTANT, devSoSoft, "Soft Channel") +device(stringout, CONSTANT, devSoSoftCallback, "Async Soft Channel") +device(stringout, INST_IO, devSoStdio, "stdio") +device(stringout, INST_IO, devSoOpcua, "OPCUA") +recordtype(sub) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + %struct subRecord; + %typedef long (*SUBFUNCPTR)(struct subRecord *); + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_DOUBLE) { + pp(TRUE) + prompt("Result") + asl(ASL0) + } + field(INAM, DBF_STRING) { + size(40) + prompt("Init Routine Name") + promptgroup("30 - Action") + interest(1) + special(SPC_NOMOD) + } + field(SNAM, DBF_STRING) { + size(40) + prompt("Subroutine Name") + promptgroup("30 - Action") + interest(1) + special(SPC_MOD) + } + field(SADR, DBF_NOACCESS) { + prompt("Subroutine Address") + extra("SUBFUNCPTR sadr") + interest(4) + special(SPC_NOMOD) + } + field(INPA, DBF_INLINK) { + prompt("Input A") + promptgroup("41 - Input A-F") + interest(1) + } + field(INPB, DBF_INLINK) { + prompt("Input B") + promptgroup("41 - Input A-F") + interest(1) + } + field(INPC, DBF_INLINK) { + prompt("Input C") + promptgroup("41 - Input A-F") + interest(1) + } + field(INPD, DBF_INLINK) { + prompt("Input D") + promptgroup("41 - Input A-F") + interest(1) + } + field(INPE, DBF_INLINK) { + prompt("Input E") + promptgroup("41 - Input A-F") + interest(1) + } + field(INPF, DBF_INLINK) { + prompt("Input F") + promptgroup("41 - Input A-F") + interest(1) + } + field(INPG, DBF_INLINK) { + prompt("Input G") + promptgroup("42 - Input G-L") + interest(1) + } + field(INPH, DBF_INLINK) { + prompt("Input H") + promptgroup("42 - Input G-L") + interest(1) + } + field(INPI, DBF_INLINK) { + prompt("Input I") + promptgroup("42 - Input G-L") + interest(1) + } + field(INPJ, DBF_INLINK) { + prompt("Input J") + promptgroup("42 - Input G-L") + interest(1) + } + field(INPK, DBF_INLINK) { + prompt("Input K") + promptgroup("42 - Input G-L") + interest(1) + } + field(INPL, DBF_INLINK) { + prompt("Input L") + promptgroup("42 - Input G-L") + interest(1) + } + field(EGU, DBF_STRING) { + size(16) + prompt("Engineering Units") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(HOPR, DBF_DOUBLE) { + prompt("High Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(LOPR, DBF_DOUBLE) { + prompt("Low Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(HIHI, DBF_DOUBLE) { + pp(TRUE) + prompt("Hihi Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LOLO, DBF_DOUBLE) { + pp(TRUE) + prompt("Lolo Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HIGH, DBF_DOUBLE) { + pp(TRUE) + prompt("High Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LOW, DBF_DOUBLE) { + pp(TRUE) + prompt("Low Alarm Limit") + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(PREC, DBF_SHORT) { + prompt("Display Precision") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(BRSV, DBF_MENU) { + pp(TRUE) + prompt("Bad Return Severity") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(HHSV, DBF_MENU) { + prompt("Hihi Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LLSV, DBF_MENU) { + prompt("Lolo Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HSV, DBF_MENU) { + prompt("High Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(LSV, DBF_MENU) { + prompt("Low Severity") + menu(menuAlarmSevr) + pp(TRUE) + prop(YES) + promptgroup("70 - Alarm") + interest(1) + } + field(HYST, DBF_DOUBLE) { + prompt("Alarm Deadband") + promptgroup("70 - Alarm") + interest(1) + } + field(ADEL, DBF_DOUBLE) { + prompt("Archive Deadband") + promptgroup("80 - Display") + interest(1) + } + field(MDEL, DBF_DOUBLE) { + prompt("Monitor Deadband") + promptgroup("80 - Display") + interest(1) + } + field(A, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input A") + } + field(B, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input B") + } + field(C, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input C") + } + field(D, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input D") + } + field(E, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input E") + } + field(F, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input F") + } + field(G, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input G") + } + field(H, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input H") + } + field(I, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input I") + } + field(J, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input J") + } + field(K, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input K") + } + field(L, DBF_DOUBLE) { + pp(TRUE) + prompt("Value of Input L") + } + field(LA, DBF_DOUBLE) { + prompt("Prev Value of A") + interest(3) + special(SPC_NOMOD) + } + field(LB, DBF_DOUBLE) { + prompt("Prev Value of B") + interest(3) + special(SPC_NOMOD) + } + field(LC, DBF_DOUBLE) { + prompt("Prev Value of C") + interest(3) + special(SPC_NOMOD) + } + field(LD, DBF_DOUBLE) { + prompt("Prev Value of D") + interest(3) + special(SPC_NOMOD) + } + field(LE, DBF_DOUBLE) { + prompt("Prev Value of E") + interest(3) + special(SPC_NOMOD) + } + field(LF, DBF_DOUBLE) { + prompt("Prev Value of F") + interest(3) + special(SPC_NOMOD) + } + field(LG, DBF_DOUBLE) { + prompt("Prev Value of G") + interest(3) + special(SPC_NOMOD) + } + field(LH, DBF_DOUBLE) { + prompt("Prev Value of H") + interest(3) + special(SPC_NOMOD) + } + field(LI, DBF_DOUBLE) { + prompt("Prev Value of I") + interest(3) + special(SPC_NOMOD) + } + field(LJ, DBF_DOUBLE) { + prompt("Prev Value of J") + interest(3) + special(SPC_NOMOD) + } + field(LK, DBF_DOUBLE) { + prompt("Prev Value of K") + interest(3) + special(SPC_NOMOD) + } + field(LL, DBF_DOUBLE) { + prompt("Prev Value of L") + interest(3) + special(SPC_NOMOD) + } + field(LALM, DBF_DOUBLE) { + prompt("Last Value Alarmed") + interest(3) + special(SPC_NOMOD) + } + field(ALST, DBF_DOUBLE) { + prompt("Last Value Archived") + interest(3) + special(SPC_NOMOD) + } + field(MLST, DBF_DOUBLE) { + prompt("Last Value Monitored") + interest(3) + special(SPC_NOMOD) + } +} +recordtype(subArray) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct subArrayRecord; + %typedef struct sadset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_sa)(struct subArrayRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} sadset; + %#define HAS_sadset + % + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_NOACCESS) { + pp(TRUE) + prompt("Value") + extra("void * val") + asl(ASL0) + special(SPC_DBADDR) + } + field(PREC, DBF_SHORT) { + prompt("Display Precision") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(FTVL, DBF_MENU) { + prompt("Field Type of Value") + menu(menuFtype) + promptgroup("30 - Action") + interest(1) + special(SPC_NOMOD) + } + field(INP, DBF_INLINK) { + prompt("Input Specification") + promptgroup("40 - Input") + interest(1) + } + field(EGU, DBF_STRING) { + size(16) + prompt("Engineering Units") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(HOPR, DBF_DOUBLE) { + prompt("High Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(LOPR, DBF_DOUBLE) { + prompt("Low Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(MALM, DBF_ULONG) { + initial("1") + prompt("Maximum Elements") + promptgroup("30 - Action") + interest(1) + special(SPC_NOMOD) + } + field(NELM, DBF_ULONG) { + initial("1") + pp(TRUE) + prompt("Number of Elements") + promptgroup("30 - Action") + } + field(INDX, DBF_ULONG) { + pp(TRUE) + prompt("Substring Index") + promptgroup("30 - Action") + } + field(BUSY, DBF_SHORT) { + prompt("Busy Indicator") + special(SPC_NOMOD) + } + field(NORD, DBF_LONG) { + prompt("Number elements read") + special(SPC_NOMOD) + } + field(BPTR, DBF_NOACCESS) { + prompt("Buffer Pointer") + extra("void * bptr") + interest(4) + special(SPC_NOMOD) + } +} +device(subArray, CONSTANT, devSASoft, "Soft Channel") +recordtype(waveform) { + %#include "epicsTypes.h" + %#include "link.h" + %#include "epicsMutex.h" + %#include "ellLib.h" + %#include "devSup.h" + %#include "epicsTime.h" + % + %/* Declare Device Support Entry Table */ + %struct waveformRecord; + %typedef struct wfdset { + % dset common; /*init_record returns: (-1,0)=>(failure,success)*/ + % long (*read_wf)(struct waveformRecord *prec); /*returns: (-1,0)=>(failure,success)*/ + %} wfdset; + %#define HAS_wfdset + % + %#include "callback.h" + field(NAME, DBF_STRING) { + size(61) + prompt("Record Name") + special(SPC_NOMOD) + } + field(DESC, DBF_STRING) { + size(41) + prompt("Descriptor") + promptgroup("10 - Common") + } + field(ASG, DBF_STRING) { + size(29) + prompt("Access Security Group") + promptgroup("10 - Common") + special(SPC_AS) + } + field(SCAN, DBF_MENU) { + prompt("Scan Mechanism") + menu(menuScan) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(PINI, DBF_MENU) { + prompt("Process at iocInit") + menu(menuPini) + promptgroup("20 - Scan") + interest(1) + } + field(PHAS, DBF_SHORT) { + prompt("Scan Phase") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(EVNT, DBF_STRING) { + size(40) + prompt("Event Name") + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TSE, DBF_SHORT) { + prompt("Time Stamp Event") + promptgroup("20 - Scan") + interest(1) + } + field(TSEL, DBF_INLINK) { + prompt("Time Stamp Link") + promptgroup("20 - Scan") + interest(1) + } + field(DTYP, DBF_DEVICE) { + prompt("Device Type") + promptgroup("10 - Common") + interest(1) + } + field(DISV, DBF_SHORT) { + initial("1") + prompt("Disable Value") + promptgroup("20 - Scan") + } + field(DISA, DBF_SHORT) { + prompt("Disable") + } + field(SDIS, DBF_INLINK) { + prompt("Scanning Disable") + promptgroup("20 - Scan") + interest(1) + } + field(MLOK, DBF_NOACCESS) { + prompt("Monitor lock") + extra("epicsMutexId mlok") + interest(4) + special(SPC_NOMOD) + } + field(MLIS, DBF_NOACCESS) { + prompt("Monitor List") + extra("ELLLIST mlis") + interest(4) + special(SPC_NOMOD) + } + field(BKLNK, DBF_NOACCESS) { + prompt("Backwards link tracking") + extra("ELLLIST bklnk") + interest(4) + special(SPC_NOMOD) + } + field(DISP, DBF_UCHAR) { + prompt("Disable putField") + promptgroup("10 - Common") + interest(1) + } + field(PROC, DBF_UCHAR) { + pp(TRUE) + prompt("Force Processing") + interest(3) + } + field(STAT, DBF_MENU) { + initial("UDF") + prompt("Alarm Status") + menu(menuAlarmStat) + special(SPC_NOMOD) + } + field(SEVR, DBF_MENU) { + prompt("Alarm Severity") + menu(menuAlarmSevr) + special(SPC_NOMOD) + } + field(AMSG, DBF_STRING) { + size(40) + prompt("Alarm Message") + special(SPC_NOMOD) + } + field(NSTA, DBF_MENU) { + prompt("New Alarm Status") + menu(menuAlarmStat) + interest(2) + special(SPC_NOMOD) + } + field(NSEV, DBF_MENU) { + prompt("New Alarm Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(NAMSG, DBF_STRING) { + size(40) + prompt("New Alarm Message") + special(SPC_NOMOD) + } + field(ACKS, DBF_MENU) { + prompt("Alarm Ack Severity") + menu(menuAlarmSevr) + interest(2) + special(SPC_NOMOD) + } + field(ACKT, DBF_MENU) { + initial("YES") + prompt("Alarm Ack Transient") + menu(menuYesNo) + promptgroup("70 - Alarm") + interest(2) + special(SPC_NOMOD) + } + field(DISS, DBF_MENU) { + prompt("Disable Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(LCNT, DBF_UCHAR) { + prompt("Lock Count") + interest(2) + special(SPC_NOMOD) + } + field(PACT, DBF_UCHAR) { + prompt("Record active") + interest(1) + special(SPC_NOMOD) + } + field(PUTF, DBF_UCHAR) { + prompt("dbPutField process") + interest(1) + special(SPC_NOMOD) + } + field(RPRO, DBF_UCHAR) { + prompt("Reprocess ") + interest(1) + special(SPC_NOMOD) + } + field(ASP, DBF_NOACCESS) { + prompt("Access Security Pvt") + extra("struct asgMember *asp") + interest(4) + special(SPC_NOMOD) + } + field(PPN, DBF_NOACCESS) { + prompt("pprocessNotify") + extra("struct processNotify *ppn") + interest(4) + special(SPC_NOMOD) + } + field(PPNR, DBF_NOACCESS) { + prompt("pprocessNotifyRecord") + extra("struct processNotifyRecord *ppnr") + interest(4) + special(SPC_NOMOD) + } + field(SPVT, DBF_NOACCESS) { + prompt("Scan Private") + extra("struct scan_element *spvt") + interest(4) + special(SPC_NOMOD) + } + field(RSET, DBF_NOACCESS) { + prompt("Address of RSET") + extra("struct typed_rset *rset") + interest(4) + special(SPC_NOMOD) + } + field(DSET, DBF_NOACCESS) { + prompt("DSET address") + extra("unambiguous_dset *dset") + interest(4) + special(SPC_NOMOD) + } + field(DPVT, DBF_NOACCESS) { + prompt("Device Private") + extra("void *dpvt") + interest(4) + special(SPC_NOMOD) + } + field(RDES, DBF_NOACCESS) { + prompt("Address of dbRecordType") + extra("struct dbRecordType *rdes") + interest(4) + special(SPC_NOMOD) + } + field(LSET, DBF_NOACCESS) { + prompt("Lock Set") + extra("struct lockRecord *lset") + interest(4) + special(SPC_NOMOD) + } + field(PRIO, DBF_MENU) { + prompt("Scheduling Priority") + menu(menuPriority) + promptgroup("20 - Scan") + interest(1) + special(SPC_SCAN) + } + field(TPRO, DBF_UCHAR) { + prompt("Trace Processing") + } + field(BKPT, DBF_NOACCESS) { + prompt("Break Point") + extra("epicsUInt8 bkpt") + interest(1) + special(SPC_NOMOD) + } + field(UDF, DBF_UCHAR) { + initial("1") + pp(TRUE) + prompt("Undefined") + promptgroup("10 - Common") + interest(1) + } + field(UDFS, DBF_MENU) { + initial("INVALID") + prompt("Undefined Alarm Sevrty") + menu(menuAlarmSevr) + promptgroup("70 - Alarm") + interest(1) + } + field(TIME, DBF_NOACCESS) { + prompt("Time") + extra("epicsTimeStamp time") + interest(2) + special(SPC_NOMOD) + } + field(UTAG, DBF_UINT64) { + prompt("Time Tag") + interest(3) + special(SPC_NOMOD) + } + field(FLNK, DBF_FWDLINK) { + prompt("Forward Process Link") + promptgroup("20 - Scan") + interest(1) + } + field(VAL, DBF_NOACCESS) { + pp(TRUE) + prompt("Value") + extra("void * val") + asl(ASL0) + special(SPC_DBADDR) + } + field(RARM, DBF_SHORT) { + pp(TRUE) + prompt("Rearm the waveform") + promptgroup("30 - Action") + interest(1) + } + field(PREC, DBF_SHORT) { + prompt("Display Precision") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(INP, DBF_INLINK) { + prompt("Input Specification") + promptgroup("40 - Input") + interest(1) + } + field(EGU, DBF_STRING) { + size(16) + prompt("Engineering Units") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(HOPR, DBF_DOUBLE) { + prompt("High Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(LOPR, DBF_DOUBLE) { + prompt("Low Operating Range") + prop(YES) + promptgroup("80 - Display") + interest(1) + } + field(NELM, DBF_ULONG) { + initial("1") + prompt("Number of Elements") + promptgroup("30 - Action") + interest(1) + special(SPC_NOMOD) + } + field(FTVL, DBF_MENU) { + prompt("Field Type of Value") + menu(menuFtype) + promptgroup("30 - Action") + interest(1) + special(SPC_NOMOD) + } + field(BUSY, DBF_SHORT) { + prompt("Busy Indicator") + special(SPC_NOMOD) + } + field(NORD, DBF_ULONG) { + prompt("Number elements read") + special(SPC_NOMOD) + } + field(BPTR, DBF_NOACCESS) { + prompt("Buffer Pointer") + extra("void * bptr") + interest(4) + special(SPC_NOMOD) + } + field(SIOL, DBF_INLINK) { + prompt("Simulation Input Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SIML, DBF_INLINK) { + prompt("Simulation Mode Link") + promptgroup("90 - Simulate") + interest(1) + } + field(SIMM, DBF_MENU) { + prompt("Simulation Mode") + menu(menuYesNo) + interest(1) + special(SPC_MOD) + } + field(SIMS, DBF_MENU) { + prompt("Simulation Mode Severity") + menu(menuAlarmSevr) + promptgroup("90 - Simulate") + interest(2) + } + field(OLDSIMM, DBF_MENU) { + prompt("Prev. Simulation Mode") + menu(menuSimm) + interest(4) + special(SPC_NOMOD) + } + field(SSCN, DBF_MENU) { + initial("65535") + prompt("Sim. Mode Scan") + menu(menuScan) + promptgroup("90 - Simulate") + interest(1) + } + field(SDLY, DBF_DOUBLE) { + initial("-1.0") + prompt("Sim. Mode Async Delay") + promptgroup("90 - Simulate") + interest(2) + } + field(SIMPVT, DBF_NOACCESS) { + prompt("Sim. Mode Private") + extra("epicsCallback *simpvt") + interest(4) + special(SPC_NOMOD) + } + field(MPST, DBF_MENU) { + prompt("Post Value Monitors") + menu(waveformPOST) + promptgroup("80 - Display") + interest(1) + } + field(APST, DBF_MENU) { + prompt("Post Archive Monitors") + menu(waveformPOST) + promptgroup("80 - Display") + interest(1) + } + field(HASH, DBF_ULONG) { + prompt("Hash of OnChange data.") + interest(3) + } +} +device(waveform, CONSTANT, devWfSoft, "Soft Channel") +device(waveform, INST_IO, devWfOpcua, "OPCUA") +link(calc, lnkCalcIf) +link(const, lnkConstIf) +link(debug, lnkDebugIf) +link(state, lnkStateIf) +link(trace, lnkTraceIf) +registrar(arrInitialize) +registrar(asSub) +registrar(dbndInitialize) +registrar(decInitialize) +registrar(opcuaIocshRegister) +registrar(rsrvRegistrar) +registrar(syncInitialize) +registrar(tsInitialize) +registrar(utagInitialize) +variable(CASDEBUG, int) +variable(asCaDebug, int) +variable(atExitDebug, int) +variable(boHIGHlimit, double) +variable(boHIGHprecision, int) +variable(calcoutODLYlimit, double) +variable(calcoutODLYprecision, int) +variable(callbackParallelThreadsDefault, int) +variable(dbAccessDebugPUTF, int) +variable(dbBptNotMonotonic, int) +variable(dbConvertStrict, int) +variable(dbJLinkDebug, int) +variable(dbQuietMacroWarnings, int) +variable(dbRecordsAbcSorted, int) +variable(dbRecordsOnceOnly, int) +variable(dbTemplateMaxVars, int) +variable(dbThreadRealtimeLock, int) +variable(histogramSDELprecision, int) +variable(lnkDebug_debug, int) +variable(logClientDebug, int) +variable(opcua_ClientQueueSizeFactor, double) +variable(opcua_ConnectTimeout, double) +variable(opcua_DefaultDiscardOldest, int) +variable(opcua_DefaultPublishInterval, double) +variable(opcua_DefaultSamplingInterval, double) +variable(opcua_DefaultServerQueueSize, int) +variable(opcua_DefaultUseServerTime, int) +variable(opcua_MaxOperationsPerServiceCall, int) +variable(opcua_MinimumClientQueueSize, int) +variable(seqDLYlimit, double) +variable(seqDLYprecision, int) diff --git a/OPCUA/exampleTop/iocBoot/Makefile b/OPCUA/exampleTop/iocBoot/Makefile new file mode 100644 index 000000000..91e47d0b5 --- /dev/null +++ b/OPCUA/exampleTop/iocBoot/Makefile @@ -0,0 +1,6 @@ +TOP = .. +include $(TOP)/configure/CONFIG +DIRS += $(wildcard *ioc*) +DIRS += $(wildcard as*) +include $(CONFIG)/RULES_DIRS + diff --git a/OPCUA/exampleTop/iocBoot/iocS7-1500/Makefile b/OPCUA/exampleTop/iocBoot/iocS7-1500/Makefile new file mode 100644 index 000000000..25b7be60d --- /dev/null +++ b/OPCUA/exampleTop/iocBoot/iocS7-1500/Makefile @@ -0,0 +1,5 @@ +TOP = ../.. +include $(TOP)/configure/CONFIG +ARCH = $(EPICS_HOST_ARCH) +TARGETS = envPaths dllPath.bat +include $(TOP)/configure/RULES.ioc diff --git a/OPCUA/exampleTop/iocBoot/iocS7-1500/README b/OPCUA/exampleTop/iocBoot/iocS7-1500/README new file mode 100644 index 000000000..9d7c74712 --- /dev/null +++ b/OPCUA/exampleTop/iocBoot/iocS7-1500/README @@ -0,0 +1,9 @@ +To start the ioc from this directory execute the command + ../../bin/linux-x86_64/ st.cmd + +Alternatively make the st.cmd file directly executable with + chmod +x st.cmd +and check the executable name on the first line of the st.cmd file + +You may need to change the name of the .dbd file given in the +st.cmd's dbLoadDatabase() command before starting the ioc. diff --git a/OPCUA/exampleTop/iocBoot/iocS7-1500/st.cmd b/OPCUA/exampleTop/iocBoot/iocS7-1500/st.cmd new file mode 100644 index 000000000..ae30f6bd7 --- /dev/null +++ b/OPCUA/exampleTop/iocBoot/iocS7-1500/st.cmd @@ -0,0 +1,30 @@ +#!../../bin/linux-x86_64/opcuaIoc + +## You may have to change opcuaIoc to something else +## everywhere it appears in this file + +< envPaths + +cd "${TOP}" + +## Register all support components +dbLoadDatabase "dbd/opcuaIoc.dbd" +opcuaIoc_registerRecordDeviceDriver pdbbase + +## Pretty minimal setup: one session with a 200ms subscription on top +opcuaSession OPC1 opc.tcp://localhost:4840 +opcuaSubscription SUB1 OPC1 200 + +# Switch off security +opcuaOptions OPC1 sec-mode=None + +## Load the databases for one of the examples + +## Siemens S7-1500 PLC +dbLoadRecords "db/S7-1500-server.db", "P=OPC:,R=,SESS=OPC1,SUBS=SUB1" +dbLoadRecords "db/S7-1500-DB1.db", "P=OPC:,R=DB1:,SESS=OPC1,SUBS=SUB1" + +iocInit + +## Start any sequence programs +#seq sncopcuaIoc,"user=ralph" diff --git a/OPCUA/exampleTop/iocBoot/iocUaDemoServer/Makefile b/OPCUA/exampleTop/iocBoot/iocUaDemoServer/Makefile new file mode 100644 index 000000000..25b7be60d --- /dev/null +++ b/OPCUA/exampleTop/iocBoot/iocUaDemoServer/Makefile @@ -0,0 +1,5 @@ +TOP = ../.. +include $(TOP)/configure/CONFIG +ARCH = $(EPICS_HOST_ARCH) +TARGETS = envPaths dllPath.bat +include $(TOP)/configure/RULES.ioc diff --git a/OPCUA/exampleTop/iocBoot/iocUaDemoServer/README b/OPCUA/exampleTop/iocBoot/iocUaDemoServer/README new file mode 100644 index 000000000..9d7c74712 --- /dev/null +++ b/OPCUA/exampleTop/iocBoot/iocUaDemoServer/README @@ -0,0 +1,9 @@ +To start the ioc from this directory execute the command + ../../bin/linux-x86_64/ st.cmd + +Alternatively make the st.cmd file directly executable with + chmod +x st.cmd +and check the executable name on the first line of the st.cmd file + +You may need to change the name of the .dbd file given in the +st.cmd's dbLoadDatabase() command before starting the ioc. diff --git a/OPCUA/exampleTop/iocBoot/iocUaDemoServer/st.cmd b/OPCUA/exampleTop/iocBoot/iocUaDemoServer/st.cmd new file mode 100644 index 000000000..7b34f19b7 --- /dev/null +++ b/OPCUA/exampleTop/iocBoot/iocUaDemoServer/st.cmd @@ -0,0 +1,44 @@ +#!../../bin/linux-x86_64/opcuaIoc + +## You may have to change opcuaIoc to something else +## everywhere it appears in this file + +< envPaths + +cd "${TOP}" + +## Register all support components +dbLoadDatabase "dbd/opcuaIoc.dbd" +opcuaIoc_registerRecordDeviceDriver pdbbase + +# Pretty minimal setup: one session with a 200ms subscription on top +opcuaSession OPC1 opc.tcp://localhost:48010 +opcuaSubscription SUB1 OPC1 200 + +# Switch off security +opcuaOptions OPC1 sec-mode=None + +# Set up a namespace mapping +# (the databases use ns=2, but the demo server >=v1.8 uses ns=3) + +opcuaMapNamespace OPC1 2 "http://www.unifiedautomation.com/DemoServer/" + +# Load the databases for the UaServerCpp demo server +# (you can set DEBUG=) to set default values in all TPRO fields) + +dbLoadRecords "db/UaDemoServer-server.db", "P=OPC:,R=,SESS=OPC1,SUBS=SUB1" +dbLoadRecords "db/Demo.Dynamic.Arrays.db", "P=OPC:,R=DDA:,SESS=OPC1,SUBS=SUB1" +dbLoadRecords "db/Demo.Dynamic.Scalar.db", "P=OPC:,R=DDS:,SESS=OPC1,SUBS=SUB1" +dbLoadRecords "db/Demo.Static.Arrays.db", "P=OPC:,R=DSA:,SESS=OPC1,SUBS=SUB1" +dbLoadRecords "db/Demo.Static.Scalar.db", "P=OPC:,R=DSS:,SESS=OPC1,SUBS=SUB1" + +dbLoadRecords "db/Demo.WorkOrder.db", "P=OPC:,SESS=OPC1,SUBS=SUB1" + +# DO NOT LOAD THESE DBs ON EPICS BASE < 7.0 \/ \/ \/ EPICS 7 ONLY +# int64 and long string records need EPICS 7 +dbLoadRecords "db/Demo.Dynamic.ScalarE7.db", "P=OPC:,R=DDS:,SESS=OPC1,SUBS=SUB1" +dbLoadRecords "db/Demo.Dynamic.ArraysE7.db", "P=OPC:,R=DDA:,SESS=OPC1,SUBS=SUB1" +dbLoadRecords "db/Demo.Static.ScalarE7.db", "P=OPC:,R=DSS:,SESS=OPC1,SUBS=SUB1" +dbLoadRecords "db/Demo.Static.ArraysE7.db", "P=OPC:,R=DSA:,SESS=OPC1,SUBS=SUB1" + +iocInit diff --git a/OPCUA/exampleTop/opcuaIocApp/Makefile b/OPCUA/exampleTop/opcuaIocApp/Makefile new file mode 100644 index 000000000..3fd4c4d69 --- /dev/null +++ b/OPCUA/exampleTop/opcuaIocApp/Makefile @@ -0,0 +1,46 @@ +TOP=.. +include $(TOP)/configure/CONFIG +#---------------------------------------- +# ADD MACRO DEFINITIONS AFTER THIS LINE +#============================= + +#============================= +# Build the IOC application + +PROD_IOC = opcuaIoc + +# opcuaIoc.dbd will be created and installed +DBD += opcuaIoc.dbd + +# opcuaIoc.dbd will be made up from these files: +opcuaIoc_DBD += base.dbd + +# Include dbd files from all support applications: +opcuaIoc_DBD += opcua.dbd + +# Add all the support libraries needed by this IOC +opcuaIoc_LIBS += opcua + +opcuaIoc_LIBS_WIN32 += xml2 iconv libcrypto zlib +opcuaIoc_SYS_LIBS_WIN32 += crypt32 + +# opcuaIoc_registerRecordDeviceDriver.cpp derives from opcuaIoc.dbd +opcuaIoc_SRCS += opcuaIoc_registerRecordDeviceDriver.cpp +opcuaIoc_SRCS += opcuaIocMain.cpp + +# Use RPATH when UASDK libs are PROVIDED to find indirect dependencies +ifdef UASDK + ifeq ($(UASDK_DEPLOY_MODE),PROVIDED) + USR_LDFLAGS_Linux += -Wl,--disable-new-dtags + USR_LDFLAGS_Linux += -Wl,-rpath,$(UASDK_LIB_DIR) + endif +endif + +# Finally link to the EPICS Base libraries +opcuaIoc_LIBS += $(EPICS_BASE_IOC_LIBS) + +#=========================== + +include $(TOP)/configure/RULES +#---------------------------------------- +# ADD RULES AFTER THIS LINE diff --git a/OPCUA/exampleTop/opcuaIocApp/opcuaIocMain.cpp b/OPCUA/exampleTop/opcuaIocApp/opcuaIocMain.cpp new file mode 100644 index 000000000..52196d0c7 --- /dev/null +++ b/OPCUA/exampleTop/opcuaIocApp/opcuaIocMain.cpp @@ -0,0 +1,23 @@ +/* opcuaIocMain.cpp */ +/* Author: Marty Kraimer Date: 17MAR2000 */ + +#include +#include +#include +#include +#include + +#include "epicsExit.h" +#include "epicsThread.h" +#include "iocsh.h" + +int main(int argc,char *argv[]) +{ + if(argc>=2) { + iocsh(argv[1]); + epicsThreadSleep(.2); + } + iocsh(NULL); + epicsExit(0); + return(0); +} diff --git a/OPCUA/iocBoot/Makefile b/OPCUA/iocBoot/Makefile new file mode 100644 index 000000000..91e47d0b5 --- /dev/null +++ b/OPCUA/iocBoot/Makefile @@ -0,0 +1,6 @@ +TOP = .. +include $(TOP)/configure/CONFIG +DIRS += $(wildcard *ioc*) +DIRS += $(wildcard as*) +include $(CONFIG)/RULES_DIRS + diff --git a/OPCUA/iocBoot/iocOPCUA-IOC-01/Makefile b/OPCUA/iocBoot/iocOPCUA-IOC-01/Makefile new file mode 100644 index 000000000..5a5c03796 --- /dev/null +++ b/OPCUA/iocBoot/iocOPCUA-IOC-01/Makefile @@ -0,0 +1,5 @@ +TOP = ../.. +include $(TOP)/configure/CONFIG +ARCH = $(EPICS_HOST_ARCH) +TARGETS = envPaths dllPath.bat runIOC.bat relPaths.sh runIOC.sh +include $(TOP)/configure/RULES.ioc diff --git a/OPCUA/iocBoot/iocOPCUA-IOC-01/config.xml b/OPCUA/iocBoot/iocOPCUA-IOC-01/config.xml new file mode 100644 index 000000000..decf1b6fc --- /dev/null +++ b/OPCUA/iocBoot/iocOPCUA-IOC-01/config.xml @@ -0,0 +1,9 @@ + + + + Omron OPCUA PLC + Driver to talk to opcua activated from settings. + + + + diff --git a/OPCUA/iocBoot/iocOPCUA-IOC-01/st-common.cmd b/OPCUA/iocBoot/iocOPCUA-IOC-01/st-common.cmd new file mode 100644 index 000000000..12b136978 --- /dev/null +++ b/OPCUA/iocBoot/iocOPCUA-IOC-01/st-common.cmd @@ -0,0 +1,24 @@ +##ISIS## Run IOC initialisation +< $(IOCSTARTUP)/init.cmd + +##ISIS## Load common DB records +< $(IOCSTARTUP)/dbload.cmd + +epicsEnvSet("OPCUA_IGNORE_NONFATAL_CPU", "$(IGNORE_NONFATAL_CPU_ERROR=0)") + +epicsEnvSet("OPCUACONFIG","$(OPCUACONFIGDIR=$(ICPCONFIGROOT)/opcua)") + +## configure PLCs - will look for OPCUA_01.cmd etc based on IOC name +# dbLoadRecords is done here, in Instrument/Settings/config +< $(OPCUACONFIG)/$(IOCNAME).cmd + +##ISIS## Stuff that needs to be done after all records are loaded but before iocInit is called +< $(IOCSTARTUP)/preiocinit.cmd + +#! $(SUPPORT)/OPCUA/bin/windows-x64/opcua + +cd ${TOP}/iocBoot/${IOC} +iocInit + +##ISIS## Stuff that needs to be done after iocInit is called e.g. sequence programs +< $(IOCSTARTUP)/postiocinit.cmd diff --git a/OPCUA/iocBoot/iocOPCUA-IOC-01/st.cmd b/OPCUA/iocBoot/iocOPCUA-IOC-01/st.cmd new file mode 100644 index 000000000..d64f43f19 --- /dev/null +++ b/OPCUA/iocBoot/iocOPCUA-IOC-01/st.cmd @@ -0,0 +1,16 @@ +#!../../bin/windows-x64/OPCUA-IOC-01 + +## You may have to change OPCUA-IOC-01 to something else +## everywhere it appears in this file + +< envPaths + +cd ${TOP} + +## Register all support components +dbLoadDatabase "dbd/OPCUA-IOC-01.dbd" +OPCUA_IOC_01_registerRecordDeviceDriver pdbbase + +cd ${TOP}/iocBoot/${IOC} + +< st-common.cmd diff --git a/OPCUA/opcua/OPCUA_01.cmd b/OPCUA/opcua/OPCUA_01.cmd new file mode 100644 index 000000000..69fbff689 --- /dev/null +++ b/OPCUA/opcua/OPCUA_01.cmd @@ -0,0 +1,9 @@ +opcuaSession OPC1 opc.tcp://130.246.88.203:4840 +opcuaSubscription SUB1 OPC1 200 + +opcuaOptions OPC1 sec-mode=None, sec-id="\Instrument\Settings\config\NDW2548\configurations\opcua\cert.txt", debug=10 +opcuaClientCertificate "C:\Instrument\Settings\config\NDW2548\configurations\opcua\client_cert.der", "C:\Instrument\Settings\config\NDW2548\configurations\opcua\client_private_key.pem" +dbLoadRecords "$(TOP)/db/OMRON-Sysmac-server-1.db", "P=$(MYPVPREFIX)$(IOCNAME):,R=1,SESS=OPC1,SUBS=SUB1,NS=2" +dbLoadRecords "$(TOP)/db/OMRON-Sysmac-server-2.db", "P=$(MYPVPREFIX)$(IOCNAME):,R=2,SESS=OPC1,SUBS=SUB1,NS=2" +opcuaMapNamespace OPC1 2 "http://isiscomputing-namespace.epics" +