diff --git a/.gitignore b/.gitignore index 96f9e65..ce0d537 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,8 @@ ibek # dont save workspaces as other users will have differing folders *workspace + +# ignore output folders of epics builds +**/O.* +ioc/bin +ioc/lib diff --git a/ibek-support b/ibek-support index ba5c9b8..a6c781e 160000 --- a/ibek-support +++ b/ibek-support @@ -1 +1 @@ -Subproject commit ba5c9b83dc17e51a2335f4259b4c128f5b37e516 +Subproject commit a6c781e258b6926d6b1d2d2f359da980e780c554 diff --git a/ioc/DeviceDbApp/Makefile b/ioc/DeviceDbApp/Makefile deleted file mode 100644 index ab15bfb..0000000 --- a/ioc/DeviceDbApp/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -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/ioc/DeviceDbApp/S7-1500Db/Makefile b/ioc/DeviceDbApp/S7-1500Db/Makefile deleted file mode 100644 index f7872d1..0000000 --- a/ioc/DeviceDbApp/S7-1500Db/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -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/ioc/DeviceDbApp/S7-1500Db/README.md b/ioc/DeviceDbApp/S7-1500Db/README.md deleted file mode 100644 index b48ecec..0000000 --- a/ioc/DeviceDbApp/S7-1500Db/README.md +++ /dev/null @@ -1,94 +0,0 @@ -# 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/ioc/DeviceDbApp/S7-1500Db/S7-1500-DB1.db b/ioc/DeviceDbApp/S7-1500Db/S7-1500-DB1.db deleted file mode 100644 index a9bb8d0..0000000 --- a/ioc/DeviceDbApp/S7-1500Db/S7-1500-DB1.db +++ /dev/null @@ -1,110 +0,0 @@ -# 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/ioc/DeviceDbApp/S7-1500Db/S7-1500-server.substitutions b/ioc/DeviceDbApp/S7-1500Db/S7-1500-server.substitutions deleted file mode 100644 index 125a6f4..0000000 --- a/ioc/DeviceDbApp/S7-1500Db/S7-1500-server.substitutions +++ /dev/null @@ -1,7 +0,0 @@ -file opcuaServerInfo.template { -{ P=$(P=), R=$(R=), SESS=$(SESS) } -} - -file opcuaServerStats.template { -{ P=$(P=), R=$(R=), SESS=$(SESS), SUBS=$(SUBS) } -} diff --git a/ioc/DeviceDbApp/UaDemoServerDb/Demo.Dynamic.Arrays.db b/ioc/DeviceDbApp/UaDemoServerDb/Demo.Dynamic.Arrays.db deleted file mode 100644 index e569db2..0000000 --- a/ioc/DeviceDbApp/UaDemoServerDb/Demo.Dynamic.Arrays.db +++ /dev/null @@ -1,87 +0,0 @@ -# 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") -} - -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") -} - -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") -} - -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") -} - -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") -} - -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") -} - -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") -} - -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") -} - -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") -} diff --git a/ioc/DeviceDbApp/UaDemoServerDb/Demo.Dynamic.ArraysE7.db b/ioc/DeviceDbApp/UaDemoServerDb/Demo.Dynamic.ArraysE7.db deleted file mode 100644 index e25431f..0000000 --- a/ioc/DeviceDbApp/UaDemoServerDb/Demo.Dynamic.ArraysE7.db +++ /dev/null @@ -1,26 +0,0 @@ -# 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") -} - -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") -} diff --git a/ioc/DeviceDbApp/UaDemoServerDb/Demo.Dynamic.Scalar.db b/ioc/DeviceDbApp/UaDemoServerDb/Demo.Dynamic.Scalar.db deleted file mode 100644 index c85d699..0000000 --- a/ioc/DeviceDbApp/UaDemoServerDb/Demo.Dynamic.Scalar.db +++ /dev/null @@ -1,79 +0,0 @@ -# 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") -} - -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") -} - -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") -} - -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") -} - -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") -} - -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") -} - -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") -} - -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") -} - -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") -} - -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") -} diff --git a/ioc/DeviceDbApp/UaDemoServerDb/Demo.Dynamic.ScalarE7.db b/ioc/DeviceDbApp/UaDemoServerDb/Demo.Dynamic.ScalarE7.db deleted file mode 100644 index f05892f..0000000 --- a/ioc/DeviceDbApp/UaDemoServerDb/Demo.Dynamic.ScalarE7.db +++ /dev/null @@ -1,22 +0,0 @@ -# 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") -} - -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") -} diff --git a/ioc/DeviceDbApp/UaDemoServerDb/Demo.Static.Arrays.db b/ioc/DeviceDbApp/UaDemoServerDb/Demo.Static.Arrays.db deleted file mode 100644 index a2abb51..0000000 --- a/ioc/DeviceDbApp/UaDemoServerDb/Demo.Static.Arrays.db +++ /dev/null @@ -1,142 +0,0 @@ -# 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") -} - -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") -} - -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") -} - -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") -} - -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") -} - -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") -} - -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") -} - -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") -} - -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") -} - -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") -} - -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") -} - -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") -} - -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") -} - -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") -} - -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") -} - -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") -} diff --git a/ioc/DeviceDbApp/UaDemoServerDb/Demo.Static.ArraysE7.db b/ioc/DeviceDbApp/UaDemoServerDb/Demo.Static.ArraysE7.db deleted file mode 100644 index 9ce8f78..0000000 --- a/ioc/DeviceDbApp/UaDemoServerDb/Demo.Static.ArraysE7.db +++ /dev/null @@ -1,42 +0,0 @@ -# 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") -} - -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") -} - -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") -} - -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") -} diff --git a/ioc/DeviceDbApp/UaDemoServerDb/Demo.Static.Scalar.db b/ioc/DeviceDbApp/UaDemoServerDb/Demo.Static.Scalar.db deleted file mode 100644 index 436156d..0000000 --- a/ioc/DeviceDbApp/UaDemoServerDb/Demo.Static.Scalar.db +++ /dev/null @@ -1,151 +0,0 @@ -# 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") -} - -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") -} - -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") -} - -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") -} - -# 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") -} - -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") -} - -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") -} - -# 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") -} - -record(mbboDirect, "$(P)$(R)mbboduint32") { - field(DTYP, "OPCUA") - field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Scalar.UInt32") - field(TSE, "-2") -} - -# 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") -} - -record(ao, "$(P)$(R)aodouble") { - field(DTYP, "OPCUA") - field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Double") - field(TSE, "-2") -} - -# 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") -} - -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") -} - -# si/so - String - -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") -} - -record(stringout, "$(P)$(R)sostring") { - field(DTYP, "OPCUA") - field(OUT, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.String") - field(TSE, "-2") -} diff --git a/ioc/DeviceDbApp/UaDemoServerDb/Demo.Static.ScalarE7.db b/ioc/DeviceDbApp/UaDemoServerDb/Demo.Static.ScalarE7.db deleted file mode 100644 index b0067cb..0000000 --- a/ioc/DeviceDbApp/UaDemoServerDb/Demo.Static.ScalarE7.db +++ /dev/null @@ -1,38 +0,0 @@ -# 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") -} - -record(int64out, "$(P)$(R)int64out") { - field(DTYP, "OPCUA") - field(OUT, "@$(SUBS) ns=2;s=Demo.Static.Scalar.Int64") - field(TSE, "-2") -} - -# lsi/lso - String - -record(lsi, "$(P)$(R)lsistring") { - field(DTYP, "OPCUA") - field(INP, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.String") - field(SCAN, "I/O Intr") - field(TSE, "-2") -} - -record(lso, "$(P)$(R)lsostring") { - field(DTYP, "OPCUA") - field(OUT, "@$(SUBS) ns=2;s=Demo.Dynamic.Scalar.String") - field(TSE, "-2") -} diff --git a/ioc/DeviceDbApp/UaDemoServerDb/Demo.WorkOrder.substitutions b/ioc/DeviceDbApp/UaDemoServerDb/Demo.WorkOrder.substitutions deleted file mode 100644 index 4bea715..0000000 --- a/ioc/DeviceDbApp/UaDemoServerDb/Demo.WorkOrder.substitutions +++ /dev/null @@ -1,4 +0,0 @@ -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/ioc/DeviceDbApp/UaDemoServerDb/Demo.WorkOrderVariable.template b/ioc/DeviceDbApp/UaDemoServerDb/Demo.WorkOrderVariable.template deleted file mode 100644 index 83e0169..0000000 --- a/ioc/DeviceDbApp/UaDemoServerDb/Demo.WorkOrderVariable.template +++ /dev/null @@ -1,55 +0,0 @@ -# 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/ioc/DeviceDbApp/UaDemoServerDb/Makefile b/ioc/DeviceDbApp/UaDemoServerDb/Makefile deleted file mode 100644 index 89e89b6..0000000 --- a/ioc/DeviceDbApp/UaDemoServerDb/Makefile +++ /dev/null @@ -1,40 +0,0 @@ -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 - -#Demo UA server -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 - -#Omron PLC example -DB += Omron_DS.db - -#---------------------------------------------------- -# If .db template is not named *.template add -# _template = - -include $(TOP)/configure/RULES -#---------------------------------------- -# ADD RULES AFTER THIS LINE - diff --git a/ioc/DeviceDbApp/UaDemoServerDb/Omron_DS.db b/ioc/DeviceDbApp/UaDemoServerDb/Omron_DS.db deleted file mode 100644 index fab0528..0000000 --- a/ioc/DeviceDbApp/UaDemoServerDb/Omron_DS.db +++ /dev/null @@ -1,16 +0,0 @@ -# Database connecting to an Omron PLC example server -# Dynamic Scalars - -#record(longin, "$(P)$(R)liint32") { -# field(DTYP, "OPCUA") -# field(INP, "@$(SUBS) ns=4;s=keithcounter") -# field(SCAN, "I/O Intr") -# field(TSE, "-2") -#} - -record(longin, "$(P)$(R)PLC:TIME") { - field(DTYP, "OPCUA") - field(INP, "@$(SUBS) ns=4;s=PLC_TIME") - field(SCAN, "I/O Intr") -# field(TSE, "-2") -} diff --git a/ioc/DeviceDbApp/UaDemoServerDb/README.md b/ioc/DeviceDbApp/UaDemoServerDb/README.md deleted file mode 100644 index fae935a..0000000 --- a/ioc/DeviceDbApp/UaDemoServerDb/README.md +++ /dev/null @@ -1,57 +0,0 @@ -# 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/ioc/DeviceDbApp/UaDemoServerDb/UaDemoServer-server.substitutions b/ioc/DeviceDbApp/UaDemoServerDb/UaDemoServer-server.substitutions deleted file mode 100644 index 125a6f4..0000000 --- a/ioc/DeviceDbApp/UaDemoServerDb/UaDemoServer-server.substitutions +++ /dev/null @@ -1,7 +0,0 @@ -file opcuaServerInfo.template { -{ P=$(P=), R=$(R=), SESS=$(SESS) } -} - -file opcuaServerStats.template { -{ P=$(P=), R=$(R=), SESS=$(SESS), SUBS=$(SUBS) } -} diff --git a/ioc/Makefile b/ioc/Makefile index 19c9068..2c82d61 100644 --- a/ioc/Makefile +++ b/ioc/Makefile @@ -1,31 +1,7 @@ -# 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: +DIRS += iocApp/src include $(TOP)/configure/RULES_TOP diff --git a/ioc/Omron-Anon-Works.log b/ioc/Omron-Anon-Works.log deleted file mode 100644 index 7584d5c..0000000 --- a/ioc/Omron-Anon-Works.log +++ /dev/null @@ -1,57 +0,0 @@ -[karb45@pc0069 TS99I-PS-IOC-01] (master)$ bin/linux-x86_64/opcuaIoc iocBoot/iocUaDemoServer/st-omron.cmd -#!../../bin/linux-x86_64/opcuaIoc -## You may have to change opcuaIoc to something else -## everywhere it appears in this file -< iocBoot/iocUaDemoServer/envPaths -epicsEnvSet("IOC","iocUaDemoServer") -epicsEnvSet("TOP","/dls_sw/work/R7.0.7-5.3/ioc/TS/TS99I-PS-IOC-01") -epicsEnvSet("EPICS_BASE","/dls_sw/work/epics/R7.0.7") -cd "/dls_sw/work/R7.0.7-5.3/ioc/TS/TS99I-PS-IOC-01" -## 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 -#opcuaSession OPC1 opc.tcp://DIAMRD2882:48010 -#opcuaSubscription SUB1 OPC1 200 -# Alternative session for Omron PLC in G.13 -opcuaSession OPC2 opc.tcp://172.23.243.75:4840 -opcuaSubscription SUB2 OPC2 200 -# Switch off security -#opcuaOptions OPC1 sec-mode=None -opcuaOptions OPC2 sec-mode=None -#opcuaOptions OPC2 sec-mode=SignAndEncrypt -#opcuaOptions OPC2 sec-mode=Sign -#opcuaOptions OPC2 sec-policy=Basic256Sha256 -#opcuaOptions OPC2 sec-id=iocBoot/iocUaDemoServer/auth.txt -#opcuaSetupPKI /home/karb45/.config/unifiedautomation/uaexpert/PKI -# Load the databases for the UaServerCpp demo server -#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" -# Extra records for Omron PLC. -#dbLoadRecords "db/OmronServer.db", "P=OPC2:,R=,SESS=OPC2,SUBS=SUB2" -dbLoadRecords "db/Omron_DS.db", "P=OPC2:,R=DS:,SESS=OPC2,SUBS=SUB2" -iocInit -Starting iocInit -############################################################################ -## EPICS R7.0.7 -## Rev. R7.0.7-1-ge1a1b778e96b88c6b7dc-dirty -## Rev. Date Git: 2023-06-28 10:47:02 +0100 -############################################################################ -OPC UA Client Device Support 0.9.4 (-); using Unified Automation C++ Client SDK v1.7.4-520 -iocRun: All initialization complete -OPC UA: Autoconnecting sessions -OPC UA session OPC2: connection status changed from Disconnected to Connected -OPC UA session OPC2: connected as 'Anonymous' (sec-mode: None; sec-policy: None) -OPC UA session OPC2: WARNING - this session uses *** NO SECURITY *** - diff --git a/ioc/README.md b/ioc/README.md deleted file mode 100644 index 73f8d54..0000000 --- a/ioc/README.md +++ /dev/null @@ -1,112 +0,0 @@ -# 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/ioc/TemplateDbSup/AnyServerDb/Makefile b/ioc/TemplateDbSup/AnyServerDb/Makefile deleted file mode 100644 index 9e980f1..0000000 --- a/ioc/TemplateDbSup/AnyServerDb/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -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/ioc/TemplateDbSup/AnyServerDb/opcuaServerInfo.template b/ioc/TemplateDbSup/AnyServerDb/opcuaServerInfo.template deleted file mode 100644 index 8aad2af..0000000 --- a/ioc/TemplateDbSup/AnyServerDb/opcuaServerInfo.template +++ /dev/null @@ -1,21 +0,0 @@ -# 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/ioc/TemplateDbSup/AnyServerDb/opcuaServerStats.template b/ioc/TemplateDbSup/AnyServerDb/opcuaServerStats.template deleted file mode 100644 index fa7a18e..0000000 --- a/ioc/TemplateDbSup/AnyServerDb/opcuaServerStats.template +++ /dev/null @@ -1,54 +0,0 @@ -# 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/ioc/TemplateDbSup/Makefile b/ioc/TemplateDbSup/Makefile deleted file mode 100644 index ab15bfb..0000000 --- a/ioc/TemplateDbSup/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -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/ioc/configure/CONFIG b/ioc/configure/CONFIG index c1a4703..722d9ca 100644 --- a/ioc/configure/CONFIG +++ b/ioc/configure/CONFIG @@ -15,6 +15,7 @@ endif CONFIG = $(RULES)/configure include $(CONFIG)/CONFIG +-include $(CONFIG)/CONFIG.Dls # Override the Base definition: INSTALL_LOCATION = $(TOP) diff --git a/ioc/configure/CONFIG_SITE b/ioc/configure/CONFIG_SITE index a0431ef..81c8e60 100644 --- a/ioc/configure/CONFIG_SITE +++ b/ioc/configure/CONFIG_SITE @@ -1,70 +1,7 @@ # 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 +CROSS_COMPILER_TARGET_ARCHS = +CHECK_RELEASE = NO +# needs to match what the opcua sdk is built with? USR_CXXFLAGS_Linux += -std=c++11 - -# 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/ioc/configure/CONFIG_SITE.local b/ioc/configure/CONFIG_SITE.local deleted file mode 100644 index 4a12395..0000000 --- a/ioc/configure/CONFIG_SITE.local +++ /dev/null @@ -1 +0,0 @@ -CROSS_COMPILER_TARGET_ARCHS = diff --git a/ioc/configure/RELEASE b/ioc/configure/RELEASE index eee13ed..57c536e 100644 --- a/ioc/configure/RELEASE +++ b/ioc/configure/RELEASE @@ -1,52 +1,5 @@ -# RELEASE - Location of external support modules +# The following definitions must be changed for each site # -# 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 +# Common prefixes +SUPPORT=/epics/support +include $(SUPPORT)/configure/RELEASE diff --git a/ioc/configure/RELEASE.local b/ioc/configure/RELEASE.local deleted file mode 100644 index 5179fc1..0000000 --- a/ioc/configure/RELEASE.local +++ /dev/null @@ -1,2 +0,0 @@ -EPICS_BASE = /epics/epics-base - diff --git a/ioc/configure/RULES b/ioc/configure/RULES index 6d56e14..3425740 100644 --- a/ioc/configure/RULES +++ b/ioc/configure/RULES @@ -1,5 +1,6 @@ # RULES +-include $(CONFIG)/RULES.Dls include $(CONFIG)/RULES # Library should be rebuilt because LIBOBJS may have changed. diff --git a/ioc/dbd/ioc.dbd b/ioc/dbd/ioc.dbd new file mode 100644 index 0000000..dcf8483 --- /dev/null +++ b/ioc/dbd/ioc.dbd @@ -0,0 +1,18793 @@ +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(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, devAiStats, "IOC stats") +device(ai, INST_IO, devAiClusts, "IOC stats clusts") +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, devAoStats, "IOC stats") +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(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) + } + 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) + } +} +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) { + pp(TRUE) + prompt("Bit 0") + promptgroup("51 - Output 0-7") + interest(1) + special(SPC_MOD) + } + field(B1, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 1") + promptgroup("51 - Output 0-7") + interest(1) + special(SPC_MOD) + } + field(B2, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 2") + promptgroup("51 - Output 0-7") + interest(1) + special(SPC_MOD) + } + field(B3, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 3") + promptgroup("51 - Output 0-7") + interest(1) + special(SPC_MOD) + } + field(B4, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 4") + promptgroup("51 - Output 0-7") + interest(1) + special(SPC_MOD) + } + field(B5, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 5") + promptgroup("51 - Output 0-7") + interest(1) + special(SPC_MOD) + } + field(B6, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 6") + promptgroup("51 - Output 0-7") + interest(1) + special(SPC_MOD) + } + field(B7, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 7") + promptgroup("51 - Output 0-7") + interest(1) + special(SPC_MOD) + } + field(B8, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 8") + promptgroup("52 - Output 8-15") + interest(1) + special(SPC_MOD) + } + field(B9, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 9") + promptgroup("52 - Output 8-15") + interest(1) + special(SPC_MOD) + } + field(BA, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 10") + promptgroup("52 - Output 8-15") + interest(1) + special(SPC_MOD) + } + field(BB, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 11") + promptgroup("52 - Output 8-15") + interest(1) + special(SPC_MOD) + } + field(BC, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 12") + promptgroup("52 - Output 8-15") + interest(1) + special(SPC_MOD) + } + field(BD, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 13") + promptgroup("52 - Output 8-15") + interest(1) + special(SPC_MOD) + } + field(BE, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 14") + promptgroup("52 - Output 8-15") + interest(1) + special(SPC_MOD) + } + field(BF, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 15") + promptgroup("52 - Output 8-15") + interest(1) + special(SPC_MOD) + } + field(B10, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 16") + promptgroup("53 - Output 16-23") + interest(1) + special(SPC_MOD) + } + field(B11, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 17") + promptgroup("53 - Output 16-23") + interest(1) + special(SPC_MOD) + } + field(B12, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 18") + promptgroup("53 - Output 16-23") + interest(1) + special(SPC_MOD) + } + field(B13, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 19") + promptgroup("53 - Output 16-23") + interest(1) + special(SPC_MOD) + } + field(B14, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 20") + promptgroup("53 - Output 16-23") + interest(1) + special(SPC_MOD) + } + field(B15, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 21") + promptgroup("53 - Output 16-23") + interest(1) + special(SPC_MOD) + } + field(B16, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 22") + promptgroup("53 - Output 16-23") + interest(1) + special(SPC_MOD) + } + field(B17, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 23") + promptgroup("53 - Output 16-23") + interest(1) + special(SPC_MOD) + } + field(B18, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 24") + promptgroup("54 - Output 24-31") + interest(1) + special(SPC_MOD) + } + field(B19, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 25") + promptgroup("54 - Output 24-31") + interest(1) + special(SPC_MOD) + } + field(B1A, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 26") + promptgroup("54 - Output 24-31") + interest(1) + special(SPC_MOD) + } + field(B1B, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 27") + promptgroup("54 - Output 24-31") + interest(1) + special(SPC_MOD) + } + field(B1C, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 28") + promptgroup("54 - Output 24-31") + interest(1) + special(SPC_MOD) + } + field(B1D, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 29") + promptgroup("54 - Output 24-31") + interest(1) + special(SPC_MOD) + } + field(B1E, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 30") + promptgroup("54 - Output 24-31") + interest(1) + special(SPC_MOD) + } + field(B1F, DBF_UCHAR) { + pp(TRUE) + prompt("Bit 31") + promptgroup("54 - Output 24-31") + interest(1) + special(SPC_MOD) + } +} +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, devStringinStats, "IOC stats") +device(stringin, INST_IO, devStringinEnvVar, "IOC env var") +device(stringin, INST_IO, devStringinEpics, "IOC epics var") +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, devWaveformStats, "IOC stats") +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) +function(rebootProc) +function(scanMon) +function(scanMonInit) +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/ioc/iocApp/src/Makefile b/ioc/iocApp/src/Makefile new file mode 100644 index 0000000..7cb64c2 --- /dev/null +++ b/ioc/iocApp/src/Makefile @@ -0,0 +1,26 @@ + + +# Makefile automatically generated using +# git@github.com:epics-containers/ibek-support.git + +TOP = ../.. +include $(TOP)/configure/CONFIG + +PROD_IOC = ioc +DBD += ioc.dbd +ioc_DBD += base.dbd + +ioc_DBD += devIocStats.dbd +ioc_DBD += opcua.dbd + +ioc_SRCS += ioc_registerRecordDeviceDriver.cpp +ioc_SYS_LIBS_Linux += xml2 crypto + +ioc_LIBS += opcua +ioc_LIBS += devIocStats + + +ioc_LIBS += $(EPICS_BASE_IOC_LIBS) +ioc_SRCS += iocMain.cpp + +include $(TOP)/configure/RULES \ No newline at end of file diff --git a/ioc/iocApp/src/Makefile.jinja b/ioc/iocApp/src/Makefile.jinja new file mode 100644 index 0000000..ab981af --- /dev/null +++ b/ioc/iocApp/src/Makefile.jinja @@ -0,0 +1,24 @@ +{# Jinja template for building the IOC Makefile #} + +# Makefile automatically generated using +# git@github.com:epics-containers/ibek-support.git + +TOP = ../.. +include $(TOP)/configure/CONFIG + +PROD_IOC = ioc +DBD += ioc.dbd +ioc_DBD += base.dbd + +{% for dbd in dbds %}ioc_DBD += {{dbd}} +{% endfor %} + +ioc_SRCS += ioc_registerRecordDeviceDriver.cpp + +{% for lib in libs %}ioc_LIBS += {{lib}} +{% endfor %} + +ioc_LIBS += $(EPICS_BASE_IOC_LIBS) +ioc_SRCS += iocMain.cpp + +include $(TOP)/configure/RULES \ No newline at end of file diff --git a/ioc/iocApp/src/iocMain.cpp b/ioc/iocApp/src/iocMain.cpp new file mode 100644 index 0000000..e45dda1 --- /dev/null +++ b/ioc/iocApp/src/iocMain.cpp @@ -0,0 +1,20 @@ +/* This file was automatically generated on Fri 25 May 2018 08:06:10 BST from + * source: /home/hgv27681/R3.14.12.3/support/pmac/etc/makeIocs/lab.xml + * + * *** Please do not edit this file: edit the source file instead. *** + * */ +#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/ioc/opcuaIocApp/opcua.dbd b/ioc/iocApp/src/opcua.dbd similarity index 100% rename from ioc/opcuaIocApp/opcua.dbd rename to ioc/iocApp/src/opcua.dbd diff --git a/ioc/iocBoot/Makefile b/ioc/iocBoot/Makefile deleted file mode 100644 index 91e47d0..0000000 --- a/ioc/iocBoot/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -TOP = .. -include $(TOP)/configure/CONFIG -DIRS += $(wildcard *ioc*) -DIRS += $(wildcard as*) -include $(CONFIG)/RULES_DIRS - diff --git a/ioc/iocBoot/iocS7-1500/Makefile b/ioc/iocBoot/iocS7-1500/Makefile deleted file mode 100644 index e1b9aa4..0000000 --- a/ioc/iocBoot/iocS7-1500/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -TOP = ../.. -include $(TOP)/configure/CONFIG -ARCH = $(EPICS_HOST_ARCH) -TARGETS = envPaths -include $(TOP)/configure/RULES.ioc diff --git a/ioc/iocBoot/iocS7-1500/README b/ioc/iocBoot/iocS7-1500/README deleted file mode 100644 index 9d7c747..0000000 --- a/ioc/iocBoot/iocS7-1500/README +++ /dev/null @@ -1,9 +0,0 @@ -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/ioc/iocBoot/iocS7-1500/auth.txt b/ioc/iocBoot/iocS7-1500/auth.txt deleted file mode 100644 index 6ce016a..0000000 --- a/ioc/iocBoot/iocS7-1500/auth.txt +++ /dev/null @@ -1,2 +0,0 @@ -user=dls -pass=Diamond01 diff --git a/ioc/iocBoot/iocS7-1500/cert.pem b/ioc/iocBoot/iocS7-1500/cert.pem deleted file mode 100644 index 2dfbd83..0000000 --- a/ioc/iocBoot/iocS7-1500/cert.pem +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDKzCCAhOgAwIBAgIJAI0iMyXyABiLMA0GCSqGSIb3DQEBCwUAMCwxCzAJBgNV -BAYTAlVLMQwwCgYDVQQKDANETFMxDzANBgNVBAMMBnBjMDA2OTAeFw0yMzEyMTMx -MTUxMTNaFw0yNDEyMTIxMTUxMTNaMCwxCzAJBgNVBAYTAlVLMQwwCgYDVQQKDANE -TFMxDzANBgNVBAMMBnBjMDA2OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBALrrLNVyHUF4Ck2r7yTkOZN8kRJ6Yh1o90BUm+tzQAM3+Mqb0TVnxLq5NoML -cZaxQ3IJh0ExAeWDG3a+vJ+TlITzLNDliohvB3FIlKhi3SYqbLEAybGpzJjgGOVL -T4EyRw8wY1gfn4v/nEg2rs8MIiWCdKwS8MyjWxIAHkc8q3s4q0pp1yudPmeUQBIa -EZ69f1Pf1RSuF2KvBukg3/pa+nYFLrQVuGxrJarcguGEDAtRolQnjLiEsTZzQpGn -X6WasD4IP1wh9taRaxM1wyygIZp52s6g1KvGoaeNpCOeg0xHX/7lx5bN5K5aqxtS -5A89RtA/fHl1VWlrASiwNm/ejiUCAwEAAaNQME4wHQYDVR0OBBYEFPDiLItSuGwz -SDchKN/WQeTvJ1abMB8GA1UdIwQYMBaAFPDiLItSuGwzSDchKN/WQeTvJ1abMAwG -A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAInuenCqPkgyNmv8SyB8ZX/J -J0izyJH1aK2zLZgLVHqaRj837o5GM+hO8PGR1EdxUMtkxVRkNK7MotmMn5/4CsuE -qyLt6MSTVmOlnfDA5j7E1k4Xj3RJe5nUdMBnI+66JsTV3tgdDXn7N64XpjDxxqzw -8MC45b6yXtAHo1OvQXQPmvsr1Z4HA8YiWOQiDgNwx0I6Rit7mMHGpvHB5aSF/UDN -NKlX5uOaEbGIZIndiYDeGZWPXa93ARt7ZNYq+bG8eMiZ0VfccqEpx+3cx37YbAHu -xtdCSD3GAjgP6eZsixX/r8yS08CUgjVVY1LxgKLhb5ccdm9v4XAZTHllvW+2ljM= ------END CERTIFICATE----- diff --git a/ioc/iocBoot/iocS7-1500/private_key.pem b/ioc/iocBoot/iocS7-1500/private_key.pem deleted file mode 100644 index 7eec0ad..0000000 --- a/ioc/iocBoot/iocS7-1500/private_key.pem +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC66yzVch1BeApN -q+8k5DmTfJESemIdaPdAVJvrc0ADN/jKm9E1Z8S6uTaDC3GWsUNyCYdBMQHlgxt2 -vryfk5SE8yzQ5YqIbwdxSJSoYt0mKmyxAMmxqcyY4BjlS0+BMkcPMGNYH5+L/5xI -Nq7PDCIlgnSsEvDMo1sSAB5HPKt7OKtKadcrnT5nlEASGhGevX9T39UUrhdirwbp -IN/6Wvp2BS60FbhsayWq3ILhhAwLUaJUJ4y4hLE2c0KRp1+lmrA+CD9cIfbWkWsT -NcMsoCGaedrOoNSrxqGnjaQjnoNMR1/+5ceWzeSuWqsbUuQPPUbQP3x5dVVpawEo -sDZv3o4lAgMBAAECggEBAJNLV50ru5onuhbS8jSkFCsA8mEZR8/dM1niUqwLudnP -daJTf10SVJi/8xD5J52UOo3WrFrW/6OY2T+Ntp4ZceQCrMJA4BX7SGYgx+SZY6P7 -soMZF9eE8tFVZsjpu9EXiZ+ShfaflN6BounVDZPi/9WHI+GlW1QnNlDM/w8r5AXI -nV2Q7VyJ3cqGhWMDj+6O7Z+vV2+RWKxfCRT767/idiYZugUCj6AfBC/ok5mmQorL -kC93u/iNrC0yZAWCQi3qWb/qKdRRl900BP+A2XYviqMkoGUFbKgV9mgxLeso4wzv -8b6WHHMD6fNDH73Z4Hlzz+kRFmTOg0Ija6P8Axitn4ECgYEA4kiDGa/3WSW6hWgi -oeEVxJnlQRE6NQjQybcCzGxLxYXyu71UujSXdAoxutAotfh7YdqgeaXDk4SDXbmx -cPQKWK0nhvWQeraomPSZU7phzSvymj7yFMOH4/t8hk5xndryS+lamcZiE5HiunM6 -pcHFsbKakCoSajaKdi54iV6Ube0CgYEA03dAkQqDUt1hVWoOV9ZoAEpIWSErycaM -EHvA//c8e+ZMJesXlDlNCj6YAbyQE/EZVdCDghvjDtl2JMUNoOMw2hAdZ8R6ESiD -8c6iqBR4vTrCzFIv0mtLqAyDN23WZTSkxiCl6XYVLuv7zTMAhHo3taY3BNP427Ci -GHQaLSxU2hkCgYEArIYapogaLzbryfEGjqOdRCMNvplS5sKM5W6KTK+46aVh1y/Y -HIwieQ+YsNUqZOtJrubQeU8gGSXsPpZoqjT2enuyalxpxpXjX5MGH+c30AVU17Ns -QNZ/khvY6lF+oJshJy2IrTuq5T7SPdPDAEQH5Z7F52qcVay1zrtJnXql8lUCgYEA -x8ToohykYyvwP5ipZCGQrnV+U3UawMtolknS0fzmjsXJOikVZVmchgkL4NgZ5Dzo -CkGpesiNgAG/sozViyAVjmua2+SozHzR6SWkU9TDG0DftdYOh2IFXwQzEbIZ0BIj -d2hwVFTRPjqA7iE4Y+5xopEbeNwnRKNg/mjwMaynnEECgYBFfB+WYj7HyG+6MUy2 -j8H3inlQI6d1R2/rXI12dJDhTfYcuJ7f1wjd2rihsSN0FdyZP59jAmxbxoL6d26v -40n0xiiRIoPR6l53ZQVnifBzyABu8GIFqEoP7pkKiHj8WkXHbW8VbkZLzRKSkHCk -a9WYVXwj3ndKaexoG/XJ1ML+aQ== ------END PRIVATE KEY----- diff --git a/ioc/iocBoot/iocS7-1500/st.cmd b/ioc/iocBoot/iocS7-1500/st.cmd deleted file mode 100755 index 2641df0..0000000 --- a/ioc/iocBoot/iocS7-1500/st.cmd +++ /dev/null @@ -1,38 +0,0 @@ -#!../../bin/linux-x86_64/opcuaIoc - -## You may have to change opcuaIoc to something else -## everywhere it appears in this file - -cd /epics/ioc-ts99i-ps-01/ioc - -< iocBoot/iocS7-1500/envPaths - -## 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 -opcuaSession OPC1 opc.tcp://172.23.241.219:4840 -opcuaSubscription SUB1 OPC1 200 - -# Switch off security -opcuaOptions OPC1 debug=1 -opcuaOptions OPC1 sec-mode=None -# Use authenticaton -opcuaOptions OPC1 sec-mode=SignAndEncrypt -#opcuaOptions OPC1 sec-mode=best -opcuaOptions OPC1 sec-policy=Basic256Sha256 -opcuaOptions OPC1 sec-id=iocBoot/iocS7-1500/auth.txt -opcuaSetupPKI /home/karb45/.config/unifiedautomation/uaexpert/PKI -#opcuaClientCertificate iocBoot/iocS7-1500/cert.pem iocBoot/iocS7-1500/private_key.pem -opcuaClientCertificate /home/karb45/.config/unifiedautomation/uaexpert/PKI/own/certs/cert.pem /home/karb45/.config/unifiedautomation/uaexpert/PKI/own/private/private_key.pem - -## 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 -####### diff --git a/ioc/iocBoot/iocUaDemoServer/Makefile b/ioc/iocBoot/iocUaDemoServer/Makefile deleted file mode 100644 index e1b9aa4..0000000 --- a/ioc/iocBoot/iocUaDemoServer/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -TOP = ../.. -include $(TOP)/configure/CONFIG -ARCH = $(EPICS_HOST_ARCH) -TARGETS = envPaths -include $(TOP)/configure/RULES.ioc diff --git a/ioc/iocBoot/iocUaDemoServer/README b/ioc/iocBoot/iocUaDemoServer/README deleted file mode 100644 index 9d7c747..0000000 --- a/ioc/iocBoot/iocUaDemoServer/README +++ /dev/null @@ -1,9 +0,0 @@ -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/ioc/iocBoot/iocUaDemoServer/auth-cert.txt b/ioc/iocBoot/iocUaDemoServer/auth-cert.txt deleted file mode 100644 index 6a133cb..0000000 --- a/ioc/iocBoot/iocUaDemoServer/auth-cert.txt +++ /dev/null @@ -1,4 +0,0 @@ -user=keith -pass=baker2023 -cert=iocBoot/iocUaDemoServer/cert.pem -key=iocBoot/iocUaDemoServer/private_key.pem diff --git a/ioc/iocBoot/iocUaDemoServer/auth.txt b/ioc/iocBoot/iocUaDemoServer/auth.txt deleted file mode 100644 index 58782f9..0000000 --- a/ioc/iocBoot/iocUaDemoServer/auth.txt +++ /dev/null @@ -1,2 +0,0 @@ -user=keith -pass=baker2023 diff --git a/ioc/iocBoot/iocUaDemoServer/cert.pem b/ioc/iocBoot/iocUaDemoServer/cert.pem deleted file mode 100644 index 2dfbd83..0000000 --- a/ioc/iocBoot/iocUaDemoServer/cert.pem +++ /dev/null @@ -1,19 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIDKzCCAhOgAwIBAgIJAI0iMyXyABiLMA0GCSqGSIb3DQEBCwUAMCwxCzAJBgNV -BAYTAlVLMQwwCgYDVQQKDANETFMxDzANBgNVBAMMBnBjMDA2OTAeFw0yMzEyMTMx -MTUxMTNaFw0yNDEyMTIxMTUxMTNaMCwxCzAJBgNVBAYTAlVLMQwwCgYDVQQKDANE -TFMxDzANBgNVBAMMBnBjMDA2OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBALrrLNVyHUF4Ck2r7yTkOZN8kRJ6Yh1o90BUm+tzQAM3+Mqb0TVnxLq5NoML -cZaxQ3IJh0ExAeWDG3a+vJ+TlITzLNDliohvB3FIlKhi3SYqbLEAybGpzJjgGOVL -T4EyRw8wY1gfn4v/nEg2rs8MIiWCdKwS8MyjWxIAHkc8q3s4q0pp1yudPmeUQBIa -EZ69f1Pf1RSuF2KvBukg3/pa+nYFLrQVuGxrJarcguGEDAtRolQnjLiEsTZzQpGn -X6WasD4IP1wh9taRaxM1wyygIZp52s6g1KvGoaeNpCOeg0xHX/7lx5bN5K5aqxtS -5A89RtA/fHl1VWlrASiwNm/ejiUCAwEAAaNQME4wHQYDVR0OBBYEFPDiLItSuGwz -SDchKN/WQeTvJ1abMB8GA1UdIwQYMBaAFPDiLItSuGwzSDchKN/WQeTvJ1abMAwG -A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAInuenCqPkgyNmv8SyB8ZX/J -J0izyJH1aK2zLZgLVHqaRj837o5GM+hO8PGR1EdxUMtkxVRkNK7MotmMn5/4CsuE -qyLt6MSTVmOlnfDA5j7E1k4Xj3RJe5nUdMBnI+66JsTV3tgdDXn7N64XpjDxxqzw -8MC45b6yXtAHo1OvQXQPmvsr1Z4HA8YiWOQiDgNwx0I6Rit7mMHGpvHB5aSF/UDN -NKlX5uOaEbGIZIndiYDeGZWPXa93ARt7ZNYq+bG8eMiZ0VfccqEpx+3cx37YbAHu -xtdCSD3GAjgP6eZsixX/r8yS08CUgjVVY1LxgKLhb5ccdm9v4XAZTHllvW+2ljM= ------END CERTIFICATE----- diff --git a/ioc/iocBoot/iocUaDemoServer/private_key.pem b/ioc/iocBoot/iocUaDemoServer/private_key.pem deleted file mode 100644 index 7eec0ad..0000000 --- a/ioc/iocBoot/iocUaDemoServer/private_key.pem +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC66yzVch1BeApN -q+8k5DmTfJESemIdaPdAVJvrc0ADN/jKm9E1Z8S6uTaDC3GWsUNyCYdBMQHlgxt2 -vryfk5SE8yzQ5YqIbwdxSJSoYt0mKmyxAMmxqcyY4BjlS0+BMkcPMGNYH5+L/5xI -Nq7PDCIlgnSsEvDMo1sSAB5HPKt7OKtKadcrnT5nlEASGhGevX9T39UUrhdirwbp -IN/6Wvp2BS60FbhsayWq3ILhhAwLUaJUJ4y4hLE2c0KRp1+lmrA+CD9cIfbWkWsT -NcMsoCGaedrOoNSrxqGnjaQjnoNMR1/+5ceWzeSuWqsbUuQPPUbQP3x5dVVpawEo -sDZv3o4lAgMBAAECggEBAJNLV50ru5onuhbS8jSkFCsA8mEZR8/dM1niUqwLudnP -daJTf10SVJi/8xD5J52UOo3WrFrW/6OY2T+Ntp4ZceQCrMJA4BX7SGYgx+SZY6P7 -soMZF9eE8tFVZsjpu9EXiZ+ShfaflN6BounVDZPi/9WHI+GlW1QnNlDM/w8r5AXI -nV2Q7VyJ3cqGhWMDj+6O7Z+vV2+RWKxfCRT767/idiYZugUCj6AfBC/ok5mmQorL -kC93u/iNrC0yZAWCQi3qWb/qKdRRl900BP+A2XYviqMkoGUFbKgV9mgxLeso4wzv -8b6WHHMD6fNDH73Z4Hlzz+kRFmTOg0Ija6P8Axitn4ECgYEA4kiDGa/3WSW6hWgi -oeEVxJnlQRE6NQjQybcCzGxLxYXyu71UujSXdAoxutAotfh7YdqgeaXDk4SDXbmx -cPQKWK0nhvWQeraomPSZU7phzSvymj7yFMOH4/t8hk5xndryS+lamcZiE5HiunM6 -pcHFsbKakCoSajaKdi54iV6Ube0CgYEA03dAkQqDUt1hVWoOV9ZoAEpIWSErycaM -EHvA//c8e+ZMJesXlDlNCj6YAbyQE/EZVdCDghvjDtl2JMUNoOMw2hAdZ8R6ESiD -8c6iqBR4vTrCzFIv0mtLqAyDN23WZTSkxiCl6XYVLuv7zTMAhHo3taY3BNP427Ci -GHQaLSxU2hkCgYEArIYapogaLzbryfEGjqOdRCMNvplS5sKM5W6KTK+46aVh1y/Y -HIwieQ+YsNUqZOtJrubQeU8gGSXsPpZoqjT2enuyalxpxpXjX5MGH+c30AVU17Ns -QNZ/khvY6lF+oJshJy2IrTuq5T7SPdPDAEQH5Z7F52qcVay1zrtJnXql8lUCgYEA -x8ToohykYyvwP5ipZCGQrnV+U3UawMtolknS0fzmjsXJOikVZVmchgkL4NgZ5Dzo -CkGpesiNgAG/sozViyAVjmua2+SozHzR6SWkU9TDG0DftdYOh2IFXwQzEbIZ0BIj -d2hwVFTRPjqA7iE4Y+5xopEbeNwnRKNg/mjwMaynnEECgYBFfB+WYj7HyG+6MUy2 -j8H3inlQI6d1R2/rXI12dJDhTfYcuJ7f1wjd2rihsSN0FdyZP59jAmxbxoL6d26v -40n0xiiRIoPR6l53ZQVnifBzyABu8GIFqEoP7pkKiHj8WkXHbW8VbkZLzRKSkHCk -a9WYVXwj3ndKaexoG/XJ1ML+aQ== ------END PRIVATE KEY----- diff --git a/ioc/iocBoot/iocUaDemoServer/st-omron.cmd b/ioc/iocBoot/iocUaDemoServer/st-omron.cmd deleted file mode 100644 index 351bbf4..0000000 --- a/ioc/iocBoot/iocUaDemoServer/st-omron.cmd +++ /dev/null @@ -1,47 +0,0 @@ -#!/epics/ioc-ts99i-ps-01/ioc/bin/linux-x86_64/opcuaIoc - -cd /epics/ioc-ts99i-ps-01/ioc - -< iocBoot/iocUaDemoServer/envPaths - - -## Register all support components -dbLoadDatabase "dbd/opcuaIoc.dbd" -opcuaIoc_registerRecordDeviceDriver pdbbase - -# Alternative session for Omron PLC in G.13 -opcuaSession OPC2 opc.tcp://172.23.243.75:4840 -opcuaSubscription SUB2 OPC2 200 - -# Switch off security -opcuaOptions OPC2 debug=1 -#opcuaOptions OPC2 sec-mode=SignAndEncrypt -opcuaOptions OPC2 sec-mode=None -#opcuaOptions OPC2 sec-policy=Basic256Sha256 -#opcuaOptions OPC2 sec-id=iocBoot/iocUaDemoServer/auth.txt -opcuaSetupPKI /home/karb45/.config/unifiedautomation/uaexpert/PKI -#opcuaClientCertificate iocBoot/iocUaDemoServer/cert.pem iocBoot/iocUaDemoServer/private_key.pem -opcuaClientCertificate /home/karb45/.config/unifiedautomation/uaexpert/PKI/own/certs/cert.der /home/karb45/.config/unifiedautomation/uaexpert/PKI/own/private/private_key.pem - -# Load the databases for the UaServerCpp demo server - -#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" - -# Extra records for Omron PLC. -#dbLoadRecords "db/OmronServer.db", "P=OPC2:,R=,SESS=OPC2,SUBS=SUB2" -dbLoadRecords "db/Omron_DS.db", "P=OPC2:,R=DS:,SESS=OPC2,SUBS=SUB2" - -iocInit diff --git a/ioc/iocBoot/iocUaDemoServer/st-omron.cmd.old b/ioc/iocBoot/iocUaDemoServer/st-omron.cmd.old deleted file mode 100644 index ddb25ab..0000000 --- a/ioc/iocBoot/iocUaDemoServer/st-omron.cmd.old +++ /dev/null @@ -1,56 +0,0 @@ -#!../../bin/linux-x86_64/opcuaIoc - -## You may have to change opcuaIoc to something else -## everywhere it appears in this file - -< iocBoot/iocUaDemoServer/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 -#opcuaSession OPC1 opc.tcp://DIAMRD2882:48010 -#opcuaSubscription SUB1 OPC1 200 - -# Alternative session for Omron PLC in G.13 -opcuaSession OPC2 opc.tcp://172.23.243.75:4840 -opcuaSubscription SUB2 OPC2 200 - -# Switch off security -opcuaOptions OPC2 debug=1 -#opcuaOptions OPC1 sec-mode=None -#opcuaOptions OPC2 sec-mode=None -opcuaOptions OPC2 sec-mode=SignAndEncrypt -#opcuaOptions OPC2 sec-mode=Sign -opcuaOptions OPC2 sec-policy=Basic256Sha256 -opcuaOptions OPC2 sec-id=iocBoot/iocUaDemoServer/auth.txt -opcuaSetupPKI /home/karb45/.config/unifiedautomation/uaexpert/PKI -opcuaClientCertificate iocBoot/iocUaDemoServer/cert.pem iocBoot/iocUaDemoServer/private_key.pem -opcuaClientCertificate /home/karb45/.config/unifiedautomation/uaexpert/PKI/own/certs/cert.der /home/karb45/.config/unifiedautomation/uaexpert/PKI/own/private/private_key.pem - -# Load the databases for the UaServerCpp demo server - -#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" - -# Extra records for Omron PLC. -#dbLoadRecords "db/OmronServer.db", "P=OPC2:,R=,SESS=OPC2,SUBS=SUB2" -dbLoadRecords "db/Omron_DS.db", "P=OPC2:,R=DS:,SESS=OPC2,SUBS=SUB2" - -iocInit diff --git a/ioc/iocBoot/iocUaDemoServer/st.cmd b/ioc/iocBoot/iocUaDemoServer/st.cmd deleted file mode 100755 index b33574b..0000000 --- a/ioc/iocBoot/iocUaDemoServer/st.cmd +++ /dev/null @@ -1,49 +0,0 @@ -#!/epics/ioc-ts99i-ps-01/ioc/bin/linux-x86_64/opcuaIoc - -## You may have to change opcuaIoc to something else -## everywhere it appears in this file - -cd /epics/ioc-ts99i-ps-01/ioc - -< iocBoot/iocUaDemoServer/envPaths - - -## 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 -opcuaSession OPC1 opc.tcp://DIAMRD2882:48010 -opcuaSubscription SUB1 OPC1 200 - -# Alternative session for Omron PLC in G.13 -opcuaSession OPC2 opc.tcp://172.23.243.75:4840 -opcuaSubscription SUB2 OPC2 200 - -# Switch off security -opcuaOptions OPC1 sec-mode=None -opcuaOptions OPC2 sec-mode=None - -# Load the databases for the UaServerCpp demo server - -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" - -# Extra records for Omron PLC. -#dbLoadRecords "db/OmronServer.db", "P=OPC2:,R=,SESS=OPC2,SUBS=SUB2" -dbLoadRecords "db/Omron_DS.db", "P=OPC2:,R=DS:,SESS=OPC2,SUBS=SUB2" - -iocInit diff --git a/ioc/liveness.sh b/ioc/liveness.sh new file mode 100755 index 0000000..b0f5c0c --- /dev/null +++ b/ioc/liveness.sh @@ -0,0 +1,40 @@ +#!/bin/bash +TOP=/epics/ioc +cd ${TOP} +CONFIG_DIR=${TOP}/config + +set -ex + +CONFIG_DIR=/epics/ioc/config +THIS_SCRIPT=$(realpath ${0}) +override=${CONFIG_DIR}/liveness.sh + +if [[ -f ${override} && ${override} != ${THIS_SCRIPT} ]]; then + exec bash ${override} +fi + +if [[ ${K8S_IOC_LIVENESS_ENABLED} != 'true' ]]; then + exit 0 +fi + +# use devIOCStats UPTIME as the default liveness PV +# but allow override from the environment +K8S_IOC_PV=${K8S_IOC_PV:-"${IOC_PREFIX}:UPTIME"} + +# use default CA PORT or override from the environment +K8S_IOC_PORT=${K8S_IOC_PORT:-5064} + +export EPICS_CA_ADDR_LIST=${K8S_IOC_ADDRESS} +export EPICS_CA_SERVER_PORT=${K8S_IOC_PORT} + +# verify that the IOC is running +if caget ${K8S_IOC_PV} ; then + exit 0 +else + # send the error message to the container's main process stdout + echo "Liveness check failed for ${IOC_NAME}" > /proc/1/fd/1 + echo "Failing PV: ${K8S_IOC_PV}" > /proc/1/fd/2 + echo "Address list: ${EPICS_CA_ADDR_LIST}" > /proc/1/fd/2 + echo "CA Port: ${EPICS_CA_SERVER_PORT}" > /proc/1/fd/2 + exit 1 +fi diff --git a/ioc/opcuaIocApp/Makefile b/ioc/opcuaIocApp/Makefile deleted file mode 100644 index 9c95a44..0000000 --- a/ioc/opcuaIocApp/Makefile +++ /dev/null @@ -1,37 +0,0 @@ -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 -opcua_DIR = .. -opcuaIoc_SYS_LIBS_Linux += xml2 crypto - -# opcuaIoc_registerRecordDeviceDriver.cpp derives from opcuaIoc.dbd -opcuaIoc_SRCS += opcuaIoc_registerRecordDeviceDriver.cpp -opcuaIoc_SRCS += opcuaIocMain.cpp - -# 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/ioc/opcuaIocApp/devOpcua.dbd b/ioc/opcuaIocApp/devOpcua.dbd deleted file mode 100644 index 7d09744..0000000 --- a/ioc/opcuaIocApp/devOpcua.dbd +++ /dev/null @@ -1,32 +0,0 @@ -device(int64in, INST_IO, devInt64inOpcua, "OPCUA") -device(int64out, INST_IO, devInt64outOpcua, "OPCUA") -device(longin, INST_IO, devLiOpcua, "OPCUA") -device(longout, INST_IO, devLoOpcua, "OPCUA") -device(bi, INST_IO, devBiOpcua, "OPCUA") -device(bo, INST_IO, devBoOpcua, "OPCUA") -device(mbbi, INST_IO, devMbbiOpcua, "OPCUA") -device(mbbo, INST_IO, devMbboOpcua, "OPCUA") -device(mbbiDirect, INST_IO, devMbbiDirectOpcua, "OPCUA") -device(mbboDirect, INST_IO, devMbboDirectOpcua, "OPCUA") -device(ai, INST_IO, devAiOpcua, "OPCUA") -device(ao, INST_IO, devAoOpcua, "OPCUA") -device(stringin, INST_IO, devSiOpcua, "OPCUA") -device(stringout, INST_IO, devSoOpcua, "OPCUA") -device(lsi, INST_IO, devLsiOpcua, "OPCUA") -device(lso, INST_IO, devLsoOpcua, "OPCUA") -device(waveform, INST_IO, devWfOpcua, "OPCUA") -device(aai, INST_IO, devAaiOpcua, "OPCUA") -device(aao, INST_IO, devAaoOpcua, "OPCUA") -device(opcuaItem, INST_IO, devItemOpcua, "OPCUA") - -variable(opcua_ConnectTimeout, double) -variable(opcua_MaxOperationsPerServiceCall) -variable(opcua_DefaultPublishInterval, double) -variable(opcua_DefaultSamplingInterval, double) -variable(opcua_DefaultServerQueueSize) -variable(opcua_DefaultDiscardOldest) -variable(opcua_DefaultUseServerTime) -variable(opcua_ClientQueueSizeFactor, double) -variable(opcua_MinimumClientQueueSize) - -registrar(opcuaIocshRegister) diff --git a/ioc/opcuaIocApp/libopcua.so b/ioc/opcuaIocApp/libopcua.so deleted file mode 120000 index 09f9e4f..0000000 --- a/ioc/opcuaIocApp/libopcua.so +++ /dev/null @@ -1 +0,0 @@ -libopcua.so.0.9 \ No newline at end of file diff --git a/ioc/opcuaIocApp/libopcua.so.0.9 b/ioc/opcuaIocApp/libopcua.so.0.9 deleted file mode 100755 index a9ddff3..0000000 Binary files a/ioc/opcuaIocApp/libopcua.so.0.9 and /dev/null differ diff --git a/ioc/opcuaIocApp/menuDefAction.dbd b/ioc/opcuaIocApp/menuDefAction.dbd deleted file mode 100644 index 5ecb3be..0000000 --- a/ioc/opcuaIocApp/menuDefAction.dbd +++ /dev/null @@ -1,11 +0,0 @@ -#************************************************************************* -# Copyright (c) 2019 ITER Organization. -# This module is distributed subject to a Software License Agreement found -# in file LICENSE that is included with this distribution. -#************************************************************************* - - -menu(menuDefAction) { - choice(menuDefActionREAD, "read") - choice(menuDefActionWRITE, "write") -} diff --git a/ioc/opcuaIocApp/opcuaIocMain.cpp b/ioc/opcuaIocApp/opcuaIocMain.cpp deleted file mode 100644 index 52196d0..0000000 --- a/ioc/opcuaIocApp/opcuaIocMain.cpp +++ /dev/null @@ -1,23 +0,0 @@ -/* 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/ioc/opcuaIocApp/opcuaItemRecord.dbd b/ioc/opcuaIocApp/opcuaItemRecord.dbd deleted file mode 100644 index 03ec52d..0000000 --- a/ioc/opcuaIocApp/opcuaItemRecord.dbd +++ /dev/null @@ -1,87 +0,0 @@ -#************************************************************************* -# Copyright (c) 2018-2021 ITER Organization. -# This module is distributed subject to a Software License Agreement found -# in file LICENSE that is included with this distribution. -#************************************************************************* - -# Menu for 'bini' parameter/field -menu(menuBini) { - choice(menuBiniREAD, "read") - choice(menuBiniIGNORE, "ignore") - choice(menuBiniWRITE, "write") -} - -# Menu for 'woc' parameter/field -menu(menuWoc) { - choice(menuWocMANUAL, "manual") - choice(menuWocIMMEDIATE, "immediate") -} - -recordtype(opcuaItem) { - include "dbCommon.dbd" - field(VAL,DBF_ULONG) { - prompt("Dummy Value") - asl(ASL0) - pp(TRUE) - } - field(INP,DBF_INLINK) { - prompt("NodeId Specification") - promptgroup("40 - I/O Address") - interest(1) - } - field(SESS,DBF_STRING) { - prompt("Session Specification") - promptgroup("40 - I/O Address") - interest(1) - size(41) - } - field(SUBS,DBF_STRING) { - prompt("Subscription Specification") - promptgroup("40 - I/O Address") - interest(1) - size(41) - } - field(DEFACTN,DBF_MENU) { - prompt("Default Action") - promptgroup("30 - Action") - interest(1) - menu(menuDefAction) - } - field(BINI,DBF_MENU) { - prompt("Behavior at Initialization") - promptgroup("20 - Scan") - interest(1) - menu(menuBini) - } - field(READ,DBF_UCHAR) { - prompt("Force Read Processing") - pp(TRUE) - special(SPC_MOD) - interest(3) - } - field(WRITE,DBF_UCHAR) { - prompt("Force Write Processing") - pp(TRUE) - special(SPC_MOD) - interest(3) - } - 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) { - prompt("OPC UA status string") - size(41) - } - field(WOC,DBF_MENU) { - prompt("Write-on-change mode") - promptgroup("30 - Action") - interest(1) - menu(menuWoc) - special(SPC_MOD) - } -} diff --git a/ioc/start.sh b/ioc/start.sh index 88ea587..f958b6c 100755 --- a/ioc/start.sh +++ b/ioc/start.sh @@ -1,6 +1,153 @@ #!/bin/bash -echo 'starting the non-generic IOC...' +description=' + + The epics-containers IOC Startup Script + ======================================= + + This script is used to start an EPICS IOC in a Kubernetes pod. Implementers + of generic IOCs are free to replace this script with their own. But + this script as is should work for most IOCs. + + When a generic IOC runs in a kubernetes pod it is expected to have + a config folder that defines the IOC instance. + The helm chart for the generic IOC will mount the config folder + as a configMap and this turns a generic IOC into a specific IOC instance. + + Here we support the following set of options for the contents of + the config folder: + + 1. start.sh ****************************************************************** + If the config folder contains a start.sh script it will be executed. + This allows the instance implementer to provide a completely custom + startup script. Any other files that the script needs can also be placed + in the config folder. + + The presence of this file overrides all other options. + + WARNING: config maps are restricted to 1MB total. + + 2. ioc.yaml ************************************************************* + If the config folder contains a yaml file we invoke the ibek tool to + generate the startup script and database. Then launch with the generated + startup script. The file name should be the name of the ioc with a 'yaml' + extension e.g. bl38p-ea-panda-02.yaml. Using a unique name allows for: + + ioc_name: "{{ ioc_yaml_file_name }}" + + at the top of the file and in turn "{{ ioc_name }}"" can be used in any + of the fields within the file. + + 3. st.cmd + ioc.subst ********************************************************* + If the config folder contains a st.cmd script and a ioc.subst file then + optionally generate ioc.db from the ioc.subst file and use the st.cmd script + as the IOC startup script. Note that the expanded database file will + be generated in ${RUNTIME_DIR}/ioc.db + + 4. empty config folder ******************************************************* + If the config folder is empty this message will be displayed. + + + RTEMS IOCS - RTEMS IOC startup files can be generated using any of the above. + + For RTEMS we do not execute the ioc inside of the pod. Instead we: + - copy the IOC directory to the RTEMS mount point + - send a reboot command to the RTEMS crate + - start a telnet session to the RTEMS IOC console and connect that to + stdio of the pod. + +' + +# error reporting ************************************************************* + +function ibek_error { + echo "${1}" + + # Wait indefinitely so the container does not exit and restart continually. + while true; do + sleep 1 + done +} + +# environment setup ************************************************************ + +set -x -e + +export TOP=$(realpath $(dirname $0)) +cd ${TOP} +CONFIG_DIR=${TOP}/config + +# add module paths to environment for use in ioc startup script +if [[ -f ${SUPPORT}/configure/RELEASE.shell ]]; then + source ${SUPPORT}/configure/RELEASE.shell +fi + +# override startup script +override=${CONFIG_DIR}/start.sh +# source YAML for IOC Builder for EPICS on Kubernetes (ibek) +ibek_yamls=(${CONFIG_DIR}/*.yaml) +# Startup script for EPICS IOC generated by ibek +ioc_startup=${CONFIG_DIR}/st.cmd + +# folder for runtime assets +export RUNTIME_DIR=${EPICS_ROOT}/runtime +mkdir -p ${RUNTIME_DIR} + +# expanded database file +epics_db=${RUNTIME_DIR}/ioc.db + +# in case there are multiple YAML, pick the first one in the glob +ibek_src=${ibek_yamls[0]} + +# 1. start.sh override script ************************************************** +if [ -f ${override} ]; then + exec bash ${override} +# 2. ioc.yaml ****************************************************************** +elif [ -f ${ibek_src} ]; then + + if [[ ${#ibek_yams[@]} > 1 ]]; then + ibek_error "ERROR: Multiple YAML files found in ${CONFIG_DIR}." + fi + + # Database generation script generated by ibek + db_src=${RUNTIME_DIR}/ioc.subst + final_ioc_startup=${RUNTIME_DIR}/st.cmd + + # get the ibek support yaml files this ioc's support modules + defs=/epics/ibek-defs/*.ibek.support.yaml + ibek runtime generate ${ibek_src} ${defs} --out ${final_ioc_startup} --db-out ${db_src} + + # build expanded database using msi + if [ -f ${db_src} ]; then + includes=$(for i in ${SUPPORT}/*/db; do echo -n "-I $i "; done) + bash -c "msi -o${epics_db} ${includes} -I${RUNTIME_DIR} -S${db_src}" + fi + +# 2. st.cmd + ioc.subst ************************************************ +elif [ -f ${ioc_startup} ] ; then + + if [ -f ${CONFIG_DIR}/ioc.subst ]; then + # generate ioc.db from ioc.subst, including all templates from SUPPORT + includes=$(for i in ${SUPPORT}/*/db; do echo -n "-I $i "; done) + msi ${includes} -I${RUNTIME_DIR} -S ${CONFIG_DIR}/ioc.subst -o ${epics_db} + fi + final_ioc_startup=${ioc_startup} +# 4. empty config folder *************************************************** +else + echo "No startup assets found in ${CONFIG_DIR}" + echo + + ibek_error "${description}" +fi + +# Launch the IOC *************************************************************** + +if [[ ${TARGET_ARCHITECTURE} == "rtems" ]] ; then + echo "RTEMS IOC startup - copying IOC to RTEMS mount point ..." + cp -r ${IOC} ${K8S_IOC_ROOT} + sleep 100 +else + # Execute the IOC binary and pass the startup script as an argument + exec ${IOC}/bin/linux-x86_64/ioc ${final_ioc_startup} +fi -cd /epics/ioc/iocBoot/iocS7-1500 -/epics/ioc/iocBoot/iocS7-1500/st.cmd diff --git a/ioc/stop.sh b/ioc/stop.sh new file mode 100644 index 0000000..f734409 --- /dev/null +++ b/ioc/stop.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +TOP=/epics/ioc +cd ${TOP} +CONFIG_DIR=${TOP}/config + +override=${CONFIG_DIR}/stop.sh + +if [[ -f ${override} ]]; then + exec bash ${override} +elif [[ ${RTEMS_VME_AUTO_REBOOT} == 'true' ]] ; then + # This is a placeholder for a script that is called when the pod is stopped. + # Placing your own stop.sh in the config directory will override this script. + + # No action is required here for RTEMS because the start.sh script will + # monitor for SIG_TERM and reboot the IOC when it is received. +fi + +