<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki-ext.aps.anl.gov/epics/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=KazimierzGofron</id>
	<title>EPICSWIKI - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-ext.aps.anl.gov/epics/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=KazimierzGofron"/>
	<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=Special:Contributions/KazimierzGofron"/>
	<updated>2026-06-06T23:20:12Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Waveform&amp;diff=1934</id>
		<title>RRM 3-14 Waveform</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Waveform&amp;diff=1934"/>
		<updated>2008-04-18T20:08:33Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Waveform =&lt;br /&gt;
&lt;br /&gt;
The waveform record type is used to interface waveform digitizers. The record stores its data in arrays. The array can contain any of the supported data types.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The waveform's fields fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* run-time parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The waveform record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Note that I/O event scanning is only supported for those card types that interrupt.&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields are configurable by the user to specify how and from where the record reads its data. How the INP field is configured determines where the waveform gets its input. It can be a hardware address, a channel access or database link, or a constant. Only in records that use soft device support can the INP field be a channel access link, a database link, or a constant. Otherwise, the INP field must be a hardware address. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on the format of hardware addresses and database links.&lt;br /&gt;
&lt;br /&gt;
The DTYP field must contain the name of the appropriate device support module. The user can see a list of the device support modules currently supported at the user's local site by using the &amp;lt;CODE&amp;gt;dbst&amp;lt;/CODE&amp;gt; utility (R3.13).&lt;br /&gt;
&lt;br /&gt;
The values retrieved from the input link are placed in an array referenced by VAL. (If the INP link is a constant, elements can be placed in the array via dbPuts.) NELM specifies the number of elements that the array will hold, while FTVL specifies the data type of the elements.&lt;br /&gt;
&lt;br /&gt;
The RARM field causes the device to re-arm when this field is set to 1. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INP&amp;lt;TD&amp;gt;Input Link &amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NELM&amp;lt;TD&amp;gt;Number of Elements in array &amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FTVL&amp;lt;TD&amp;gt; Field Type of Value&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RARM&amp;lt;TD&amp;gt; Rearm&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. They display the value and other parameters of the waveform either textually or graphically.&lt;br /&gt;
&lt;br /&gt;
EGU is a string of up to 16 characters describing the units that the waveform measures. It is retrieved by the &amp;lt;CODE&amp;gt;get_units&amp;lt;/CODE&amp;gt; record support routine.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields set the upper and lower display limits for array elements referenced by the VAL field. Both the &amp;lt;CODE&amp;gt;get_graphic_double&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;get_control_double&amp;lt;/CODE&amp;gt; record support routines retrieve these fields.&lt;br /&gt;
&lt;br /&gt;
The PREC field determines the floating point precision with which to display the array values. It is used whenever the &amp;lt;CODE&amp;gt;get_precision&amp;lt;/CODE&amp;gt; record support routine is called.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The waveform record has the alarm parameters common to all record types. [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the waveform. They are not configured using a configuration tool. Only the VAL field is modifiable at run-time.&lt;br /&gt;
&lt;br /&gt;
VAL references the array where the waveform stores its data. The BPTR field holds the address of the array.&lt;br /&gt;
&lt;br /&gt;
The NORD field holds a counter of the number of elements that have been read into the array. It is reset to 0 when the device is rearmed. The BUSY field indicates if the device is armed but has not yet been digitized.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt; Value Field&amp;lt;TD&amp;gt;See FTVL&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BPTR&amp;lt;TD&amp;gt;Buffer Pointer &amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NORD &amp;lt;TD&amp;gt;Number of Elements Read &amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BUSY&amp;lt;TD&amp;gt;Busy&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following fields are used to operate the waveform in the simulation mode. See [[RRM 3-14 Common#Simulation Mode|Simulation Mode]] for more information on the simulation mode fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIOL&amp;lt;TD&amp;gt;Simulation Value Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIML&amp;lt;TD&amp;gt;Simulation Mode Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMM&amp;lt;TD&amp;gt;Simulation Mode&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMS&amp;lt;TD&amp;gt;Simulation Mode Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
Using NELM and FTVL space for the array is allocated. The array address is stored in the record.&lt;br /&gt;
&lt;br /&gt;
This routine initializes SIMM with the value of SIML if SIML type is CONSTANT link or creates a channel access link if SIML type is PV_LINK. VAL is likewise initialized if SIOL is CONSTANT or PV_LINK.&lt;br /&gt;
&lt;br /&gt;
This routine next checks to see that device support is available and a device support read routine is defined. If either does not exist, an error message is issued and processing is terminated&lt;br /&gt;
&lt;br /&gt;
If device support includes init_record, it is called.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to the array.&lt;br /&gt;
&lt;br /&gt;
==== cvt_dbaddr ====&lt;br /&gt;
&lt;br /&gt;
This is called by dbNameToAddr. It makes the dbAddr structure refer to the actual buffer holding the result.&lt;br /&gt;
&lt;br /&gt;
==== get_array_info ====&lt;br /&gt;
&lt;br /&gt;
Obtains values from the array referenced by VAL.&lt;br /&gt;
&lt;br /&gt;
==== put_array_info ====&lt;br /&gt;
&lt;br /&gt;
Writes values into the array referenced by VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_prec ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC if field is VAL field. Otherwise, calls &amp;lt;CODE&amp;gt;recGblGetPrec()&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field is VAL the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the field is VAL the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
 upper_disp_limit = HOPR&lt;br /&gt;
 lower_disp_limit = LOPR&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values&lt;br /&gt;
&lt;br /&gt;
 upper_ctrl_limit = HOPR&lt;br /&gt;
 lower_ctrl_limit = LOPR&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# Check to see that the appropriate device support module exists. If it doesn't, an error message is issued and processing is terminated with the PACT field still set to TRUE. This ensures that processes will no longer be called for this record. Thus error storms will not occur.&lt;br /&gt;
# Call device support read routine.&lt;br /&gt;
# If PACT has been changed to TRUE, the device support read routine has started but has not completed writing the new value. In this case, the processing routine merely returns, leaving PACT TRUE.&lt;br /&gt;
# Check to see if monitors should be invoked.&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* Archive and value change monitors are always invoked.&lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
Each waveform record must have an associated set of device support routines. The primary responsibility of the device support routines is to obtain a new array value whenever read_wf is called. The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PACT&amp;lt;TD&amp;gt;Processing Active&amp;lt;TD rowspan=4&amp;gt;See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for an explanation of these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DPVT&amp;lt;TD&amp;gt;Device Private&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSEV&amp;lt;TD&amp;gt;New Alarm Severity&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSTA&amp;lt;TD&amp;gt;New Alarm Status&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INP&amp;lt;TD&amp;gt;Input Link&amp;lt;TD&amp;gt;This field is used by the device support routines to locate its input.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RATE&amp;lt;TD&amp;gt;Sampling Rate&amp;lt;TD&amp;gt;Some device support modules may find this useful.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PTSS&amp;lt;TD&amp;gt;Pre-trigger Samples&amp;lt;TD&amp;gt;Some device support modules may find this useful.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NELM&amp;lt;TD&amp;gt;Number Of Elements In Array&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FTVL&amp;lt;TD&amp;gt;Field Type Of Value&amp;lt;TD&amp;gt;This is DBF_STRING, ... , DBF_ENUM. The device support routine should check that this is correctly defined.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RARM&amp;lt;TD&amp;gt;Rearm&amp;lt;TD&amp;gt;When set to 1, the device will be rearmed. The device   support routine should reset it to 0 when done.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BPTR&amp;lt;TD&amp;gt;Holds Address of Array&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NORD&amp;lt;TD&amp;gt;Number of  Elements Read&amp;lt;TD&amp;gt;Device support must set this value when it completes.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BUSY&amp;lt;TD&amp;gt;Is device busy?&amp;lt;TD&amp;gt;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== report ====&lt;br /&gt;
&lt;br /&gt;
 report(FILE fp, paddr)&lt;br /&gt;
&lt;br /&gt;
Not currently used.&lt;br /&gt;
&lt;br /&gt;
==== init ====&lt;br /&gt;
&lt;br /&gt;
 init()&lt;br /&gt;
&lt;br /&gt;
This routine is called once during IOC initialization.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is optional. If provided, it is called by the record support init_record routine.&lt;br /&gt;
&lt;br /&gt;
==== get_ioint_info ====&lt;br /&gt;
&lt;br /&gt;
 get_ioint_info(int cmd,struct dbCommon *precord,IOSCANPVT *ppvt)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the ioEventScan system each time the record is added or deleted from an I/O event scan list.  cmd has the value (0,1) if the record is being (added to, deleted from) an I/O event list. It must be provided for any device type that can use the ioEvent scanner.&lt;br /&gt;
&lt;br /&gt;
==== read_wf ====&lt;br /&gt;
&lt;br /&gt;
 read_wf(precord)&lt;br /&gt;
&lt;br /&gt;
This routine must provide a new input value. It returns the following values:&lt;br /&gt;
&lt;br /&gt;
* 0: Success.&lt;br /&gt;
* Other: Error.&lt;br /&gt;
&lt;br /&gt;
=== Device Support For Soft Records ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support module is provided to read values from other records and store them in arrays. If INP is a constant link, then read_wf does nothing. In this case, the record can be used to hold arrays written via dbPuts. If INP is a database or channel access link, the new array value is read from the link. NORD is set.&lt;br /&gt;
&lt;br /&gt;
This module places a value directly in VAL.&lt;br /&gt;
&lt;br /&gt;
If the INP link type is constant, then NORD is set to zero. If the INP link type is PV_LINK, then dbCaAddInlink is called by init_record.&lt;br /&gt;
&lt;br /&gt;
read_wf calls recGblGetLinkValue which performs the following steps:&lt;br /&gt;
&lt;br /&gt;
If the INP link type is CONSTANT recGblGetLinkValue does nothing.&lt;br /&gt;
&lt;br /&gt;
If the INP link type is DB_LINK, then dbGetLink is called to obtain a new input value. If dbGetLink returns an error, a LINK_ALARM with a severity of INVALID_ALARM is raised.&lt;br /&gt;
&lt;br /&gt;
If the INP link type is CA_LINK, then dbCaGetLink is called to obtain a new input value. If dbCaGetLink returns an error, a LINK_ALARM with a severity of INVALID_ALARM is raised.&lt;br /&gt;
&lt;br /&gt;
NORD is set to the number of values returned and read_wf returns.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Wait&amp;diff=2907</id>
		<title>RRM 3-14 Wait</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Wait&amp;diff=2907"/>
		<updated>2008-04-18T20:07:52Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Wait =&lt;br /&gt;
&lt;br /&gt;
: Ned D. Arnold&lt;br /&gt;
: Advanced Photon Source&lt;br /&gt;
: Argonne National Laboratory&lt;br /&gt;
&lt;br /&gt;
This chapter describes the capabilities and use of the Wait record. The Wait record was developed primarily to provide &amp;amp;quot;reassignable&amp;amp;quot; link fields that could be changed during run time. A unique library was developed to provide this feature. Since all EPICS standard link fields are &amp;amp;quot;reassignable&amp;amp;quot; in R3.13 and above, the Wait record and its associated library are somewhat obsolete. For new designs, it is recommended that the ''Calcout'' record be used, which provides the same function as the Wait record (plus more) while using the standard EPICS links.&lt;br /&gt;
&lt;br /&gt;
The Wait record is derived from the Calc record with the following additional features:&lt;br /&gt;
&lt;br /&gt;
* reassignable PV links&lt;br /&gt;
* an output link&lt;br /&gt;
* a desired output link&lt;br /&gt;
* an output event number to post&lt;br /&gt;
* and several options as to when it will execute the output link and event posting.&lt;br /&gt;
&lt;br /&gt;
The Wait record also has the capability to process as a result of an input changing (via CA monitors), and it can be used to do ''conditional'' processing within the database. Its name is derived from the original requirement that initiated its development -- &amp;quot;I want to wait until all the motors have stopped and then trigger the detector.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* expression-related parameters&lt;br /&gt;
* desired output parameters&lt;br /&gt;
* write parameters&lt;br /&gt;
* operator parameters&lt;br /&gt;
* monitor parameters&lt;br /&gt;
* run-time and simulation mode parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The wait record has the standard fields for specifying under what circumstances the record will be processed. In addition to the standard scan mechanisms available to all records (periodic, passive, event, etc.), the wait record can be specified to process as a result of one of its input values changing (using Channel Access monitors). This offers immediate response to an input change (rather than waiting for the next periodic scan) while minimizing record processing that is not required. The scan mechanism choice &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt; will enable this feature.  For the current EPICS release, an additional module, &amp;lt;CODE&amp;gt;caMonitor.o&amp;lt;/CODE&amp;gt;, must be compiled and loaded with the wait record support to provide this feature.&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;B&amp;gt;Note: Because of the event driven nature of this feature, it is quite easy to configure a database that results in an infinite loop which uses all available CPU time. If the wait record is set to process as a result of a channel changing and the processing of the wait record causes the channel to change again, an infinite loop will result. The symptom will be a loss of all channel access connections (lower priority tasks) even though the shell responds normally. Using the &amp;lt;CODE&amp;gt;spy&amp;lt;/CODE&amp;gt; vxWorks utility will confirm the predicament by showing 0% free CPU time.&amp;lt;/B&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how the rest of these fields are used. They are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]].&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
Like the Calc record, the read parameters for the Wait record consist of 12 input links--INAN, INBN, ... INLN. The fields can be database links or constants. If they are links, they must specify another record's field in the same IOC. If they are constants, the corresponding value field for the link (A-L) will be initialized with the constant's value and can be changed via dbPuts. The Wait record does not support direct links to hardware.&lt;br /&gt;
&lt;br /&gt;
Unlike the Calc record, these input links can be modified during run time. These are ASCII fields which have a special processing routine attached to them. When changed, the routine is called. The record will use the new link the next time the record is processed.&lt;br /&gt;
&lt;br /&gt;
A consequence of reassignable links is that one cannot force the processing of any specified records prior to retrieving the data from them (i.e. there is no .PP flag). This should be considered when designing a database using the Wait record.&lt;br /&gt;
&lt;br /&gt;
In this initial version, the ''reassignable'' links do not support channel access connections external to the IOC. Until this feature is added, the specified Process Variables must reside on the same IOC.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on specifying links and constants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INAN&amp;lt;TD&amp;gt;Input Link A Name&amp;lt;TD&amp;gt;STRING[40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INBN&amp;lt;TD&amp;gt;Input Link B Name&amp;lt;TD&amp;gt;STRING[40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INCN&amp;lt;TD&amp;gt;Input Link C Name&amp;lt;TD&amp;gt;STRING[40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INDN&amp;lt;TD&amp;gt;Input Link D Name&amp;lt;TD&amp;gt;STRING[40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INEN&amp;lt;TD&amp;gt;Input Link E Name&amp;lt;TD&amp;gt;STRING[40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INFN&amp;lt;TD&amp;gt;Input Link F Name&amp;lt;TD&amp;gt;STRING[40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INGN&amp;lt;TD&amp;gt;Input Link G Name&amp;lt;TD&amp;gt;STRING[40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INHN&amp;lt;TD&amp;gt;Input Link H Name&amp;lt;TD&amp;gt;STRING[40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ININ&amp;lt;TD&amp;gt;Input Link I Name&amp;lt;TD&amp;gt;STRING[40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INJN&amp;lt;TD&amp;gt;Input Link J Name&amp;lt;TD&amp;gt;STRING[40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INKN&amp;lt;TD&amp;gt;Input Link K Name&amp;lt;TD&amp;gt;STRING[40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INLN&amp;lt;TD&amp;gt;Input Link L Name&amp;lt;TD&amp;gt;STRING[40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression-related Parameters ===&lt;br /&gt;
&lt;br /&gt;
The expression related fields of the Wait record are identical to that of the Calc record. The two main fields are the CALC and RPCL fields. The CALC field contains the infix expression which the record routine will use when it processes the record. The user enters an expression in this field. The resulting value of the expression is placed in the VAL field The write parameters of the record can write this value if configured to.&lt;br /&gt;
&lt;br /&gt;
The CALC field is actually converted to opcode and stored as a reverse polish expression, or postfix expression, in the RPCL field. It is this expression which is actually used to calculate VAL. CALC can be changed at run-time, and the special record routine calls a function to convert it to the postfix expression. One difference between the Calc record and the Wait record is that the Wait record contains a flag field (CLCV) that indicates if the expression is a valid one. It will be true (non-zero) if the expression is invalid, in which case an error message is generated.&lt;br /&gt;
&lt;br /&gt;
The reverse polish calculation is evaluated most efficiently during run-time. The range of expressions supported by the calculation record are separated into operands, algebraic operations, trigonometric operations, relational operations, logical operations, parentheses and commas, and the question mark operator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC&amp;lt;TD&amp;gt;Calculation&amp;lt;TD&amp;gt;DBF_STRING&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RPCL&amp;lt;TD&amp;gt;Reverse Polish&amp;lt;TD&amp;gt;DBF_NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Operands ====&lt;br /&gt;
&lt;br /&gt;
The expression can use the values retrieved from the INP''x'' links as operands, these values being stored in the A-L fields. The values to be used in the expression are simply referenced by the field letter. For instance, the value obtained from the INPA link is stored in field A and the value obtained from INPB is stored in field B. The field names can be included in the expression which will operate on their respective values, as in A+B. In addition, the RNDM unary function can be included as an operand to generate a random number between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;A&amp;lt;TD&amp;gt;Input Values A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B&amp;lt;TD&amp;gt;Input Values B&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;C&amp;lt;TD&amp;gt;Input Values C&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D&amp;lt;TD&amp;gt;Input Values D&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;E&amp;lt;TD&amp;gt;Input Values E&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;F&amp;lt;TD&amp;gt;Input Values E&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;G&amp;lt;TD&amp;gt;Input Values G&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;H&amp;lt;TD&amp;gt;Input Values H&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;I&amp;lt;TD&amp;gt;Input Values I&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;J&amp;lt;TD&amp;gt;Input Values J&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;K&amp;lt;TD&amp;gt;Input Values K&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;L&amp;lt;TD&amp;gt;Input Values L&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Algebraic Operators ====&lt;br /&gt;
&lt;br /&gt;
* ABS: Absolute value (unary)&lt;br /&gt;
* SQR: Square root (unary)&lt;br /&gt;
* MIN: Minimum (binary function)&lt;br /&gt;
* MAX: Maximum (binary function)&lt;br /&gt;
* CEIL: Ceiling (unary)&lt;br /&gt;
* FLOOR: Floor (unary)&lt;br /&gt;
* LOG: Log base 10 (unary)&lt;br /&gt;
* LOGE: Natural log (unary)&lt;br /&gt;
* EXP: Exponential function (unary)&lt;br /&gt;
* ^: Exponential (binary)&lt;br /&gt;
* ** : Exponential (binary)&lt;br /&gt;
* + : Addition (binary)&lt;br /&gt;
* - : Subtraction (binary)&lt;br /&gt;
* * : Multiplication (binary)&lt;br /&gt;
* / : Division (binary)&lt;br /&gt;
* % : Modulo (binary)&lt;br /&gt;
* NOT: Negate (unary)&lt;br /&gt;
&lt;br /&gt;
==== Trigonometric Operators ====&lt;br /&gt;
&lt;br /&gt;
* SIN: Sine&lt;br /&gt;
* SINH: Hyperbolic sine&lt;br /&gt;
* ASIN: Arc sine&lt;br /&gt;
* COS: Cosine&lt;br /&gt;
* COSH: Hyperbolic cosine&lt;br /&gt;
* ACOS: Arc cosine&lt;br /&gt;
* TAN: Tangent&lt;br /&gt;
* TANH: Hyperbolic tangent&lt;br /&gt;
* ATAN: Arc tangent&lt;br /&gt;
&lt;br /&gt;
==== Relational Operators ====&lt;br /&gt;
&lt;br /&gt;
* &amp;amp;gt;= : Greater than or equal to&lt;br /&gt;
* &amp;amp;gt; : Greater than&lt;br /&gt;
* &amp;amp;lt;= : Less than or equal to&lt;br /&gt;
* &amp;amp;lt;: Less than&lt;br /&gt;
* # : Not equal to&lt;br /&gt;
* = : Equal to&lt;br /&gt;
&lt;br /&gt;
==== Logical Operators ====&lt;br /&gt;
&lt;br /&gt;
* &amp;amp;amp;&amp;amp;amp; : And&lt;br /&gt;
* || : Or&lt;br /&gt;
* ! : Not&lt;br /&gt;
&lt;br /&gt;
==== Bitwise Operators ====&lt;br /&gt;
&lt;br /&gt;
* | : Bitwise Or&lt;br /&gt;
* &amp;amp;amp; : Bitwise And&lt;br /&gt;
* OR : Bitwise Or&lt;br /&gt;
* AND: Bitwise And&lt;br /&gt;
* XOR: Bitwise Exclusive Or&lt;br /&gt;
* ~ : One's Complement&lt;br /&gt;
* &amp;amp;lt;&amp;amp;lt; : Left shift&lt;br /&gt;
* &amp;amp;gt;&amp;amp;gt; : Right shift&lt;br /&gt;
&lt;br /&gt;
==== parentheses and Comma ====&lt;br /&gt;
&lt;br /&gt;
The open and close parentheses are supported. Nested parentheses are supported.&lt;br /&gt;
&lt;br /&gt;
The comma is supported when used to separate the arguments of a binary function.&lt;br /&gt;
&lt;br /&gt;
==== Conditional Expression ====&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;C&amp;quot; question mark operator is supported. The format is:&lt;br /&gt;
&lt;br /&gt;
 (condition)? True result : False result&lt;br /&gt;
&lt;br /&gt;
=== Expression Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Algebraic ====&lt;br /&gt;
&lt;br /&gt;
 A + B + 10&lt;br /&gt;
&lt;br /&gt;
* Result is A + B&lt;br /&gt;
&lt;br /&gt;
==== Relational ====&lt;br /&gt;
&lt;br /&gt;
 (A + B) &amp;amp;lt; (C + D)&lt;br /&gt;
&lt;br /&gt;
* Result is 1 if (A+B) &amp;amp;lt; (C+D)&lt;br /&gt;
* Result is 0 if (A+B) &amp;amp;gt;= (C+D)&lt;br /&gt;
&lt;br /&gt;
==== Question Mark ====&lt;br /&gt;
&lt;br /&gt;
 (A+B)&amp;amp;lt;(C+D)?E:F+L+10&lt;br /&gt;
&lt;br /&gt;
* Result is E if (A+B) &amp;amp;lt; (C+D)&lt;br /&gt;
* Result is F+L+10 if (A+B) &amp;amp;gt;= (C+D)&lt;br /&gt;
&lt;br /&gt;
 (A+B)&amp;amp;lt;(C+D)?E&lt;br /&gt;
&lt;br /&gt;
* Result is E if (A+B) &amp;amp;lt; (C+D)&lt;br /&gt;
* Result is unchanged if (A+B) &amp;amp;gt;= (C+D)&lt;br /&gt;
&lt;br /&gt;
==== Logical ====&lt;br /&gt;
&lt;br /&gt;
 A&amp;amp;amp;B&lt;br /&gt;
&lt;br /&gt;
* Causes the following to occur:&lt;br /&gt;
** Convert A to integer&lt;br /&gt;
** Convert B to integer&lt;br /&gt;
** Bit-wise And A and B&lt;br /&gt;
** Convert result to floating point&lt;br /&gt;
&lt;br /&gt;
=== Desired Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
Using the choices in the Data Output field (DOPT) explained in the next section, the Wait record can be configured to write as its output the result of its calculation (the value in VAL) or it can be configured to write a desired output value, fetched from an input link. The desired output fields for the Wait record are similar to the desired output parameters of other output records.&lt;br /&gt;
&lt;br /&gt;
In the desired output location (DOLN) field, the user specifies a link from which the record will retrieve the value that it writes (if the DOPT field specifies DOLD). The value is retrieved and placed in the desired output location data field (DOLD). If DOLN specifies no link, a flag field indicates that the DOLN field is invalid. When the DOLN field is invalid, the value of DOLD can be set via dbPuts at run-time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOLN &amp;lt;TD&amp;gt;Desired Output Location&amp;lt;TD&amp;gt;STRING [40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOLD&amp;lt;TD&amp;gt;Desired Output Location Data &amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Write Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Wait record can write either the result of its calculation (VAL) or the value retrieved by the DOLN field. If the user specifies &amp;lt;CODE&amp;gt;Use VAL&amp;lt;/CODE&amp;gt; in the Data Option (DOPT) field, then the value in VAL will be written. If the user specifies &amp;lt;CODE&amp;gt;Use DOL&amp;lt;/CODE&amp;gt;, the value retrieved from the DOLN link and contained in the DOLD field will be written. The DOPT field can be changed during run-time.&lt;br /&gt;
&lt;br /&gt;
The Output Link Name (OUTN) specifies where the record is to write the output value.&lt;br /&gt;
&lt;br /&gt;
The Wait record does not have to write its output every time the record processes. This allows &amp;quot;downstream&amp;quot; processing of records to be done conditionally. The record has ''output execution'' options which can be specified in the OOPT field. These options are as follows.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Every Time&amp;lt;/CODE&amp;gt;: Outputs are executed every time the record processes.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;On Change&amp;lt;/CODE&amp;gt;: Outputs are executed if the result of the calculation (VAL) is different than the previous time the record was processed.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;When Zero&amp;lt;/CODE&amp;gt;: Outputs are executed if the result of the calculation is zero.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;When Non-zero&amp;lt;/CODE&amp;gt;: Outputs are executed if the result of the calculation is not zero.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Transition To Zero&amp;lt;/CODE&amp;gt;: Outputs are executed if the result of the calculation is zero and the previous value was not zero.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Transition To Non-zero&amp;lt;/CODE&amp;gt;: Outputs are executed if the result of the calculation is not zero and the previous value was zero.&lt;br /&gt;
The Wait record can also post an event. If a non-zero value is entered into the OEVT (Output Event) field, the record will &amp;quot;post an event&amp;quot; (using the entered number as the event number) whenever the output link is executed. This is a way of initiating several other records to process as a result of a calculation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OOPT&amp;lt;TD&amp;gt;Output Option&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTN &amp;lt;TD&amp;gt;Output Link Name &amp;lt;TD&amp;gt;STRING [40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOPT&amp;lt;TD&amp;gt;Data Option&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OEVT&amp;lt;TD&amp;gt; Output Event &amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. They display the value and other parameters of the Wait record either textually or graphically.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields set the upper and lower display limits for the VAL field. The &amp;lt;CODE&amp;gt;get_graphic_double&amp;lt;/CODE&amp;gt; retrieves these fields.&lt;br /&gt;
&lt;br /&gt;
The PREC field determines the floating point precision with which to display VAL. It is used whenever the &amp;lt;CODE&amp;gt;get_precision&amp;lt;/CODE&amp;gt; record support routine is called.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;TD&amp;gt;Low Operating Range &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The wait record has the alarm parameters common to all record types. [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are delta values that implement a deadband on the value-change monitors for the VAL field. Monitors are sent when the value field exceeds the last monitored field (MLST, for instance) by the appropriate delta. If these fields have a value of zero, everytime the value changes, a monitor will be triggered; if they have a value of -1, everytime the record is processed, monitors are triggered. The ADEL field is used for archive monitors and the MDEL field for all other types of monitors. See [[RRM 3-14 Concepts#Monitor Specification|Monitor Specification]] for a complete explanation of monitors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the Wait record. They are not configurable. They represent the current state of the record. The record support routines use some of them to process the record or to implement monitors.&lt;br /&gt;
&lt;br /&gt;
The OVAL field is used to implement monitors on the VAL field. If VAL differs from OVAL (taking into account the deadband) then monitors for VAL are triggered.&lt;br /&gt;
&lt;br /&gt;
The LA-LL fields are used to implement monitors for the A-L field, the fields which hold the values retrieved from the input links. They hold the values retrieved from INPA-INPL the last time the record was processed. For instance, when A, the current value retrieved from INPA, does not equal LA, the last value retrieved, then monitors for A are triggered.&lt;br /&gt;
&lt;br /&gt;
The DOLV and CLCV are flag fields. The DOLV flag is used to indicate if the process variable specified in the Desired Output Location (DOLN) field is a valid name. If it is not, the desired output value is not retrieved from DOLN. The CLCV flag is used to indicate if the Wait record's CALC expression is a mathematically valid one.&lt;br /&gt;
&lt;br /&gt;
The CBST field contains a pointer to a record private structure. It is not of concern to the user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CBST&amp;lt;TD&amp;gt;Callback Structure&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OVAL&amp;lt;TD&amp;gt;Old Value &amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOLA &amp;lt;TD&amp;gt;Desired Output Location Address&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOLV&amp;lt;TD&amp;gt;Desired Output Location Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;TD&amp;gt;Archive Last Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;TD&amp;gt;Monitor Last Value &amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CLCV &amp;lt;TD&amp;gt;Calculation String Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LA&amp;lt;TD&amp;gt;Previous Input&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LB&amp;lt;TD&amp;gt;Previous Input&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LC&amp;lt;TD&amp;gt;Previous Input&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LD&amp;lt;TD&amp;gt;Previous Input&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LE&amp;lt;TD&amp;gt;Previous Input&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LF&amp;lt;TD&amp;gt;Previous Input&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LG&amp;lt;TD&amp;gt;Previous Input&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LH&amp;lt;TD&amp;gt;Previous Input&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LI&amp;lt;TD&amp;gt;Previous Input&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LJ&amp;lt;TD&amp;gt;Previous Input&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LK&amp;lt;TD&amp;gt;Previous Input&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;TD&amp;gt;Previous Input&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Transform&amp;diff=2906</id>
		<title>RRM 3-14 Transform</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Transform&amp;diff=2906"/>
		<updated>2008-04-18T20:07:03Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Transform Record =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Transform record combines features of the Calcout and Seq records, with&lt;br /&gt;
16 sets of the following fields:&lt;br /&gt;
&lt;br /&gt;
* input link&lt;br /&gt;
* input-link status&lt;br /&gt;
* value (from input link or from calc expression)&lt;br /&gt;
* calc expression&lt;br /&gt;
* calc-expression status&lt;br /&gt;
* output link&lt;br /&gt;
* output-link status&lt;br /&gt;
* comment&lt;br /&gt;
&lt;br /&gt;
For concreteness, here is the first set of fields:&lt;br /&gt;
&lt;br /&gt;
     INPA - link from which value for A will be read&lt;br /&gt;
     IAV  - status of INPA&lt;br /&gt;
     A    - value&lt;br /&gt;
     CLCA - expression whose value might be written to A&lt;br /&gt;
     CAV  - validity of expression CLCA&lt;br /&gt;
     OUTA - link to which A will be written&lt;br /&gt;
     OAV  - status of OUTA&lt;br /&gt;
     CMTA - comment (description)&lt;br /&gt;
&lt;br /&gt;
The value fields A-P are &amp;quot;process-passive&amp;quot;, which means that writing to one of them from&lt;br /&gt;
a CA client, or via a &amp;quot;CA&amp;quot; link, will cause the record to process, if its scan state is &amp;quot;Passive&amp;quot;.&lt;br /&gt;
If the input link associated with a value field is not blank and is not an initialization constant, then&lt;br /&gt;
writes to that value field are not permitted.&lt;br /&gt;
&lt;br /&gt;
An expression is evaluated only if the associated value field has not been modified (either by a &amp;lt;i&amp;gt;put&amp;lt;/i&amp;gt; from&lt;br /&gt;
some external agent, or as the result of input-link execution) since the last time the record processed.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
The Transform record was originally intended to perform the sequences of conditional calculations required to implement bidirectional coordinate transformations. &lt;br /&gt;
&lt;br /&gt;
Example: You have defined two records containing values we'll call &amp;quot;L&amp;quot; and &amp;quot;R&amp;quot; (the left and right edges of a slit, say). Sometimes the user wants to control L and R individually, and sometimes he wants to control a combination of L and R--say (L-R) and (L+R)/2, the width and center of the slit system. You can implement a bidirectional coordinate transformation with the following expressions (where position values are assumed to increase as we go from left to right): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border = &amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;field&amp;lt;th&amp;gt;expression&amp;lt;th&amp;gt;comment  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;A  &amp;lt;td&amp;gt;C-D/2  &amp;lt;td&amp;gt;position of left edge of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;B  &amp;lt;td&amp;gt;C+D/2  &amp;lt;td&amp;gt;position of right edge of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;C  &amp;lt;td&amp;gt;(A+B)/2  &amp;lt;td&amp;gt;position of center of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;D  &amp;lt;td&amp;gt;B-A  &amp;lt;td&amp;gt;width of slit  &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, if a user command moves the left side of the slit (A changes) and causes the record to process, A will not be recalculated because it's value is new, the right side of the slit will remain still (B is unnecessarily recalculated from old values of C and D), the position of the slit center (C) will change as expected, and the slit width (D) will change as expected. Thus, all four fields will contain consistent information about the two degrees of freedom controlled by the record, and effectively we have two actual devices and two virtual devices. &lt;br /&gt;
&lt;br /&gt;
We don't care which two fields (out of A..D) correspond to actual motion-control devices, and two channel-access clients that make different assumptions about how a slit should be implemented can control this slit without modification. With an additional, similar transform record driven from the readback fields of the actual motion-control devices, we can calculate readback values for the virtual devices as well. &lt;br /&gt;
&lt;br /&gt;
We could have accomplished nearly the same effect with six CALC records and some FANOUTs, but two of the drive fields (A,B,C,D) would always be inconsistent with their readbacks. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into these categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* expression parameters&lt;br /&gt;
* output parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Transform record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the Transform record supports no direct interfaces to hardware, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the Transform record consist of 16 input links INPA, INPB, ... INPP. The fields can be database links, channel access links, or constants. If they are links, they must specify another record's field. If they are constants, associated value fields will be initialized with the constants. These fields cannot be hardware addresses. In addition, the Transform record contains the IAV, IBV, . . . IPV fields which indicate the states of the link fields, for example, whether or not the specified PV was found and a link to it established. See [[#Operator Display Parameters|Operator Display Parameters]] for an explanation of these fields.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPP&amp;lt;TD&amp;gt;Input Link P&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
Like the Calcout record, the Transform record has fields in which the developer or user can enter an infix&lt;br /&gt;
expression to be evaluated when the record is processed.  There are, in fact, 16 such fields, each of which&lt;br /&gt;
is a member of its own (&amp;lt;i&amp;gt;inputlink&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;outputlink&amp;lt;/i&amp;gt;) group.  For&lt;br /&gt;
each group, if &amp;lt;i&amp;gt;inputlink&amp;lt;/i&amp;gt; is not blank and is not simply a constant initializer, then &amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt; may be evaluated when&lt;br /&gt;
the record processes, and the result will be placed in &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Transform-record expressions are very similar to Calcout-record expression described elsewhere in this&lt;br /&gt;
manual.  Instead of the standard EPICS calc engine (which does not permit an expression&lt;br /&gt;
to reference more than 12 input fields), Transform-record expressions are handled by the sCalcout (string calculation and output) record's engine.  The differences, between these engines, that matter for&lt;br /&gt;
transform-record expressions are the following:&lt;br /&gt;
&lt;br /&gt;
* The constants S2R (arc-seconds-to-radians) and R2S are supported.&lt;br /&gt;
* &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;The functions MIN() and MAX() may have more than two arguments.  (EPICS 3.14-compatible version only.)&amp;lt;/font&amp;gt;&lt;br /&gt;
* &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;The binary operators '&amp;gt;&amp;amp;' (larger of the operands) and '&amp;lt;&amp;amp;' (smaller) are supported.  (EPICS 3.14-compatible version only.)&amp;lt;/font&amp;gt;&lt;br /&gt;
* The binary operator '!=' (not equal) is a permitted alternatives '#'.&lt;br /&gt;
* The unary operator '@' selects an input field by number.  (E.g., '@0' means 'A'.  If 'B' has the value 3, '@b' means 'D'.)&lt;br /&gt;
* The values of the variables A...P used in expressions may be the results of previously evaluated expressions.&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Transform record has 16 output links, executed in order from OUTA to OUTP.  Unlike the Calcout record,&lt;br /&gt;
these links are not conditional; they execute every time the record processes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTA&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTB&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTP&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. Some are also meant to represent the status of the record at run-time.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is supplied by the user and which describes the values being operated upon.  This field is not very useful, because it's unlikely to pertain to all 16 value fields.&lt;br /&gt;
&lt;br /&gt;
The IAV-IPV fields indicate the states of the links INPA-INPP. These fields can have three possible values:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV NC&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link hasn't been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV OK&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link has been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Local PV&amp;lt;/CODE&amp;gt; -- the PV was found on this IOC.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Constant&amp;lt;/CODE&amp;gt; -- the corresponding link field is a constant.&lt;br /&gt;
&lt;br /&gt;
The OAV-OPV fields indicate the states of the OUTA-OUTP links. They have the same possible values as the IAV-ILV fields.&lt;br /&gt;
&lt;br /&gt;
The CAV-CPV fields indicate the validity of the expressions in the CLCA-CLCP fields, respectively. If an expression is invalid, its status field is set to one.&lt;br /&gt;
&lt;br /&gt;
The IVLA field specifies how the record should behave if any of its input links references a record that is in alarm.  There are two possibilities:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Ignore Error&amp;quot; - Use whatever value was gotten from the link, and proceed as if there had not been any error indication.&lt;br /&gt;
* &amp;quot;Do Nothing&amp;quot; - Stop after all input values have been retrieved: do not evaluate expressions, and do not execute output or forward links.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IAV&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IBV&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IPV&amp;lt;TD&amp;gt;Link Status of INPP&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OAV&amp;lt;TD&amp;gt;Link Status of OUTA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OBV&amp;lt;TD&amp;gt;Link Status of OUTB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OPV&amp;lt;TD&amp;gt;Link Status of OUTP&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CAV&amp;lt;TD&amp;gt;CLCA Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CBV&amp;lt;TD&amp;gt;CLCB Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CPV&amp;lt;TD&amp;gt;CLCP Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
The Transform record has no record-type-specific alarm fields.&lt;br /&gt;
See [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] for the list of alarm fields common to all record types.&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant.&lt;br /&gt;
&lt;br /&gt;
A routine sCalcPostfix is called to convert the infix expression in CLCA-CLCV to postfix notation. The results are stored in RPCA-RPCP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if any of the fields A-P, CLCA-CLCP, INPA-INPP, OUTA-OUTP are changed.  For expressions fields, special() calls sCalcPostfix.  For value fields, special() keeps track of which fields have changed, because expressions will not be evaluated for fields that have been written to.  For link fields, special() starts the process of checking link status.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
==== process() ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch values from all valid input links.&lt;br /&gt;
# For each value field &amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt;, in order from A to P: if the value has not been written to since the last time the record processed, call sCalcPerform(), which evaluates the expression specified in CLC&amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt; and stores the result in &amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt;.&lt;br /&gt;
# Post all fields the record has changed.&lt;br /&gt;
# Execute all valid output links, in order from OUTA to OUTP.&lt;br /&gt;
# Execute the forward link, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
The Transform record is not included with EPICS base.  An EPICS 3.13-compatible version of this record is available as part of the [http://www.aps.anl.gov/aod/bcda/synApps/std/std.html std] module, which is part of the [http://www.aps.anl.gov/aod/bcda/synApps synApps] package of EPICS-based synchrotron-beamline software.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 7 JUNE 2006&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Timer&amp;diff=2905</id>
		<title>RRM 3-14 Timer</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Timer&amp;diff=2905"/>
		<updated>2008-04-18T20:06:24Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Timer =&lt;br /&gt;
&lt;br /&gt;
The timer record is provided as a means for configuring timing outputs. These records will drive an output that may be used to latch data into analog inputs or waveform digitizers.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields for the timer record fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* setup parameters&lt;br /&gt;
* write and convert parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* event generation parameters&lt;br /&gt;
* run-time parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The timer record has the standard fields for specifying under what circumstances it will be processed. In addition, the VAL field is provided in the timer record to force record processing when written to. The other fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Note that I/O event scanning is only supported for those card types that interrupt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field &amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Setup Parameters ===&lt;br /&gt;
&lt;br /&gt;
The timer record has fields needed to initialize a motor. The trigger source (TRSC) field is usually configured to come in from an external signal. This is configured in the record by setting TSRC to &amp;lt;CODE&amp;gt;external&amp;lt;/CODE&amp;gt;, the only other choice being &amp;lt;CODE&amp;gt;internal&amp;lt;/CODE&amp;gt;. The pre-trigger state field (PSRC) is the state of the timing channel when it is not fired. The timing channel usually goes high when the timing pulse is present. In such a case the pre-trigger state is low.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TSRC&amp;lt;TD&amp;gt;Clock Source &amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PTST &amp;lt;TD&amp;gt;Pre-Trigger State &amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Write and Convert Parameters ===&lt;br /&gt;
&lt;br /&gt;
The delays and outputs are specified in the time units (TIMU), which has four choices based on seconds: &amp;lt;CODE&amp;gt;Milliseconds&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Microseconds&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Nanoseconds&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;and Picoseconds&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
There are delays and pulse widths for five timing pulses per channel. The pulse width for each should be specified in the OPW1-OPW5 fields, in the units chosen in the TIMU field. The delay width for each trigger is specified in the DUT1-DUT5 fields. The delay width is the time in between pulses. These fields are converted to seconds by the run-time code before being used.&lt;br /&gt;
&lt;br /&gt;
The value of the trigger delay field (TRDL) fetched from the trigger origin (TORG) field is added to the delay for each of these five signals. The TORG and TRDL work like the desired output parameters of other output records. TORG can be a channel access or database link, or a constant. If TORG is a constant, TRDL is initialized to the constant value and can be changed at run-time via dbPuts. Using the TORG field one can set up timing chains which are relative to other timing signals. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
The desired output is sent to the address contained in the output link (OUT). The DTYP field must contain the name of a valid device support module. The user can see a list of the device support modules currently supported at the user's local site by using the &amp;lt;CODE&amp;gt;dbst&amp;lt;/CODE&amp;gt; utility (R3.13).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TORG&amp;lt;TD&amp;gt;Trigger Delay Origin (input link)&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TRDL&amp;lt;TD&amp;gt;Trigger Delay &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TIMU &amp;lt;TD&amp;gt;Timer Units&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT &amp;lt;TD&amp;gt;Output Link&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DUT1&amp;lt;TD&amp;gt;Delay Width for trigger 1&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OPW1&amp;lt;TD&amp;gt;Pulse width for Trigger 1&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DUT2&amp;lt;TD&amp;gt;Delay Width for Trigger 2&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OPW2&amp;lt;TD&amp;gt;Pulse Width for Trigger 2&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DUT3&amp;lt;TD&amp;gt;Delay Width for Trigger 3&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OPW3&amp;lt;TD&amp;gt;Pulse Width for Trigger 3&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DUT4&amp;lt;TD&amp;gt;Delay Width for Trigger 4&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OPW4&amp;lt;TD&amp;gt;Pulse Width for Trigger 4&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DUT5&amp;lt;TD&amp;gt;Delay Width for Trigger 5&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OPW5&amp;lt;TD&amp;gt;Pulse Width for Trigger 5&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
The PDLY field displays the delay from source to input, which is the time is takes for the timing signal to get from its output to the trigger. It is not used by the run-time code, but characterizes the timing signals for the operator's knowledge.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PDLY&amp;lt;TD&amp;gt;Delay Source to Input&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The timer record has the alarm parameters common to all record types. [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
=== Event Generation Parameters ===&lt;br /&gt;
&lt;br /&gt;
The timing event (TEVT) field is used to generate internal events for processing records on an event. It should be an integer representing an event number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TEVT&amp;lt;TD&amp;gt;Event Number To Be Posted On Trigger. &amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the timing channel. They are not configured using a configuration tool. They represent the current state of the timing channel.&lt;br /&gt;
&lt;br /&gt;
The T1DL-T5DL and T1WD-T5WD fields are where the record stores the user-configured delay widths and pulse widths for the five triggers (DUT1-DUT5 and OPW1-OPW5) after it has converted them to seconds.&lt;br /&gt;
&lt;br /&gt;
The T1TD-T5TD and T1LD-T5LD fields hold the trailing and leading trigger delays for each trigger. These fields are calculated by the record as follows:&lt;br /&gt;
&lt;br /&gt;
 T''n''LD = DUT''n'' + TRDL&lt;br /&gt;
 T''n''TD = T''n''LD + OPW''n''&lt;br /&gt;
&lt;br /&gt;
where ''n'' represents the trigger number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T1DL&amp;lt;TD&amp;gt;Delay Width for Trigger 1&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T1WD&amp;lt;TD&amp;gt;Pulse Width for Trigger 1&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T2DL&amp;lt;TD&amp;gt;Delay Width for Trigger 2&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T2WD&amp;lt;TD&amp;gt;Pulse Width for Trigger 2&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T3DL&amp;lt;TD&amp;gt;Delay Width for Trigger 3&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T3WD&amp;lt;TD&amp;gt;Pulse Width for Trigger 3&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T4DL&amp;lt;TD&amp;gt;Delay Width or Trigger 4&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T4WD&amp;lt;TD&amp;gt;Pulse Width for Trigger 4&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T5DL&amp;lt;TD&amp;gt;Delay width for Trigger 5&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T5WD&amp;lt;TD&amp;gt;Pulse Width for Trigger 5&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T1TD&amp;lt;TD&amp;gt;Trigger 1 Trailing Delay&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T1LD&amp;lt;TD&amp;gt;Trigger 1 Leading Delay&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T2TD&amp;lt;TD&amp;gt;Trigger 2 Trailing Delay &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T2LD&amp;lt;TD&amp;gt;Trigger 2 Leading Delay&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T3TD&amp;lt;TD&amp;gt;Trigger 3 Trailing Delay&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T3LD&amp;lt;TD&amp;gt;Trigger 3 Leading Delay&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T4TD&amp;lt;TD&amp;gt;Trigger 4 Trailing Delay&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T4LD&amp;lt;TD&amp;gt;Trigger 4 Leading Delay&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T5TD&amp;lt;TD&amp;gt;Trigger 5 Trailing Delay&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T5LD&amp;lt;TD&amp;gt;Trigger 5 Leading Delay&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TDIS&amp;lt;TD&amp;gt;Timing Pulse Disable&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MAIN&amp;lt;TD&amp;gt;Maintain on Reboot &amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RDT1&amp;lt;TD&amp;gt;Reboot Delay of 1 &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RDW1&amp;lt;TD&amp;gt;Reboot Width of 1 &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Subroutine&amp;diff=1593</id>
		<title>RRM 3-14 Subroutine</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Subroutine&amp;diff=1593"/>
		<updated>2008-04-18T20:05:45Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= sub - Subroutine =&lt;br /&gt;
&lt;br /&gt;
The subroutine record is used to call a C initialization routine and a recurring scan routine. There is no device support for this record. &lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields fall into several categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* subroutine connection parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
* monitor parameters&lt;br /&gt;
* run-time parameters.&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The subroutine record has the standard fields for specifying under what circumstances it will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used.&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The subroutine record has twelve input links (INPA-INPL), each of which has a corresponding value field (A-L). These fields are used to retrieve and store values that can be passed to the subroutine that the record calls.&lt;br /&gt;
&lt;br /&gt;
The input links can be either channel access or database links, or constants. When constants, the corresponding value field for the link is initialized with the constant value and the field's value can be changed at run-time via dbPuts. Otherwise, the values for (A-F) are fetched from the input links when the record is processed. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on specifying links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPC&amp;lt;TD&amp;gt;Input C&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPD&amp;lt;TD&amp;gt;Input D&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPE&amp;lt;TD&amp;gt;Input E&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPF&amp;lt;TD&amp;gt;Input F&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPG&amp;lt;TD&amp;gt;Input G&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPH&amp;lt;TD&amp;gt;Input H&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPI&amp;lt;TD&amp;gt;Input F&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPJ&amp;lt;TD&amp;gt;Input H&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPK&amp;lt;TD&amp;gt;Input K&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPL&amp;lt;TD&amp;gt;Input L&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;A&amp;lt;TD&amp;gt;Value for A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B&amp;lt;TD&amp;gt;B Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;C&amp;lt;TD&amp;gt;C Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D&amp;lt;TD&amp;gt;D Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;E&amp;lt;TD&amp;gt;E Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;F&amp;lt;TD&amp;gt;F Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;G&amp;lt;TD&amp;gt;G Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;H&amp;lt;TD&amp;gt;H Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;I&amp;lt;TD&amp;gt;I Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;J&amp;lt;TD&amp;gt;J Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;K&amp;lt;TD&amp;gt;K Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;L&amp;lt;TD&amp;gt;L Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Subroutine Connection ===&lt;br /&gt;
&lt;br /&gt;
These fields are used to connect to the C subroutine. The name of the subroutine should be entered in the SNAM field. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INAM&amp;lt;TD&amp;gt;Initialization Name &amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SNAM&amp;lt;TD&amp;gt;Subroutine Name&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. They display the value and other parameters of the subroutine either textually or graphically.&lt;br /&gt;
&lt;br /&gt;
EGU is a string of up to 16 characters that could describe any units used by the subroutine record. It is retrieved by the &amp;lt;CODE&amp;gt;get_units&amp;lt;/CODE&amp;gt; record support routine.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields set the upper and lower display limits for the VAL, A-L, LA-LL, HIHI, LOLO, LOW, and HIGH fields. Both the &amp;lt;CODE&amp;gt;get_graphic_double&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;get_control_double&amp;lt;/CODE&amp;gt; record support routines retrieve these fields.&lt;br /&gt;
&lt;br /&gt;
The PREC field determines the floating point precision with which to display VAL. It is used whenever the &amp;lt;CODE&amp;gt;get_precision&amp;lt;/CODE&amp;gt; record support routine is called.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for subroutine records are the SCAN, READ, limit alarms, and an alarm that can be triggered if the subroutine returns a negative value. The SCAN and READ alarms are called by the record or device support routines. The limit alarms are configured by the user in the HIHI, LOLO, HIGH, and LOW fields using numerical values. They apply to the VAL field. For each of these fields, there is a corresponding severity field which can be either NO_ALARM, MINOR, or MAJOR.&lt;br /&gt;
&lt;br /&gt;
The BRSV field is where the user can set the alarm severity in case the subroutine returns a negative value. See [[RRM 3-14 Concepts#Alarm Specification|Alarm Specification]] for a complete explanation of alarms and these fields. [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;TD&amp;gt;Hihi Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;TD&amp;gt;High Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;TD&amp;gt;Low Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;TD&amp;gt;Lolo Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BRSV&amp;lt;TD&amp;gt;Severity for a subroutine return value less than 0.&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine when to send monitors placed on the VAL field. The appropriate monitors are invoked when VAL differs from the values in the ALST and MLST run-time fields, i.e., when the value of VAL changes by more than the deadband specified in these fields. The ADEL and MDEL fields specify a minimum delta which the change must surpass before the value-change monitors are invoked. If these fields have a value of zero, everytime the value changes, a monitor will be triggered; if they have a value of -1, everytime the record is processed, monitors are triggered. The ADEL field is used by archive monitors and the MDEL field for all other types of monitors. See [[RRM 3-14 Concepts#Monitor Specification|Monitor Specification]] for a complete explanation of monitors and deadbands.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the subroutine record. They are not configured using a database configuration tool. They represent the current state of the record. Many of them are used by the record processing routines or the monitors.&lt;br /&gt;
&lt;br /&gt;
VAL should be set by the subroutine. SADR holds the subroutine address and is set by the record processing routine. STYP, the subroutine symbol type, is also set by the record processing routine.&lt;br /&gt;
&lt;br /&gt;
The rest of these fields--LALM, ALST, MLST, and the LA-LL fields--are used to implement the monitors. For example, when LA is not equal to A, the value-change monitors are called for that field.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SADR&amp;lt;TD&amp;gt;Subroutine Address &amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STYP&amp;lt;TD&amp;gt;Subroutine Symbol Type&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;TD&amp;gt;Last Alarm Monitor Trigger Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;TD&amp;gt;Last Archiver Monitor Trigger Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;TD&amp;gt;Last Value Change Monitor Trigger Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LA&amp;lt;TD&amp;gt;Last A Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LB&amp;lt;TD&amp;gt;Last B Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LC&amp;lt;TD&amp;gt;Last C Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LD&amp;lt;TD&amp;gt;Last D Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LE&amp;lt;TD&amp;gt;Last E Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LF&amp;lt;TD&amp;gt;Last F Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LG&amp;lt;TD&amp;gt;Last G Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LH&amp;lt;TD&amp;gt;Last H Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LI&amp;lt;TD&amp;gt;Last I Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LJ&amp;lt;TD&amp;gt;Last J Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LK&amp;lt;TD&amp;gt;Last K Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;TD&amp;gt;Last L Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant value. For each input link that is of type PV_LINK, a channel access link is created.&lt;br /&gt;
&lt;br /&gt;
If an initialization subroutine is defined, it is located and called.&lt;br /&gt;
&lt;br /&gt;
The processing subroutine is located and its address and type stored in SADR and STYP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC when VAL is the field being referenced. Otherwise, calls &amp;lt;CODE&amp;gt;recGblGetPrec()&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field is VAL, A-L, LA-LL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the field is VAL, A-L, LA-LL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
 upper_alarm_limit = HIHI&lt;br /&gt;
 upper_warning_limit = HIGH&lt;br /&gt;
 lower_warning_limit = LOW&lt;br /&gt;
 lower_alarm_limit = LOLO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# If PACT is FALSE then fetch all arguments.&lt;br /&gt;
# Call the subroutine and check return value.&lt;br /&gt;
#* Call subroutine&lt;br /&gt;
#* Set PACT TRUE&lt;br /&gt;
#* If return value is 1, return&lt;br /&gt;
# Check alarms. This routine checks to see if the new VAL causes the alarm status and severity to change. If so, NSEV, NSTA and LALM are set. It also honors the alarm hysteresis factor (HYST). Thus the value must change by more than HYST before the alarm status and severity is lowered.&lt;br /&gt;
# Check to see if monitors should be invoked.&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* Archive and value change monitors are invoked if ADEL and MDEL conditions are met.&lt;br /&gt;
#* Monitors for A-L are invoked if value has changed.&lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
=== Example Synchronous Subroutine ===&lt;br /&gt;
&lt;br /&gt;
This is an example subroutine that merely increments VAL each time process is called.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;amp;lt;vxWorks.h&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;types.h&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;stdioLib.h&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;dbDefs.h&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;subRecord.h&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;dbCommon.h&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;recSup.h&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 long subInit(struct subRecord *psub)&lt;br /&gt;
 {&lt;br /&gt;
     printf(&amp;amp;quot;subInit was called\n&amp;amp;quot;);&lt;br /&gt;
     return(0);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 long subProcess(struct subRecord *psub)&lt;br /&gt;
 {&lt;br /&gt;
     psub-&amp;amp;gt;val++;&lt;br /&gt;
     return(0);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Example Asynchronous Subroutine ===&lt;br /&gt;
&lt;br /&gt;
This example shows an asynchronous subroutine. It uses (actually misuses) fields A and B. Field A is taken as the number of seconds until asynchronous completion. Field B is a flag to decide if messages should be printed. Lets assume A &amp;amp;gt; 0 and B = 1. The following sequence of actions will occcur:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# subProcess is called with pact FALSE. It performs the following steps.&lt;br /&gt;
#* Computes, from A, the number of ticks until asynchronous completion should occur.&lt;br /&gt;
#* Prints a message stating that it is requesting an asynchronous callback.&lt;br /&gt;
#* Calls the vxWorks watchdog start routine.&lt;br /&gt;
#* Sets pact TRUE and returns a value of 0. This tells record support to complete without checking alarms, monitors, or the forward link.&lt;br /&gt;
# When the time expires, the system wide callback task calls myCallback. myCallback locks the record, calls process, and unlocks the record.&lt;br /&gt;
# Process again calls subProcess, but now pact is TRUE. Thus the following is done:&lt;br /&gt;
#* VAL is incremented.&lt;br /&gt;
#* A completion message is printed.&lt;br /&gt;
#* subProcess returns 0. The record processing routine will complete record processing.&lt;br /&gt;
&lt;br /&gt;
 #include   &amp;amp;lt;vxWorks.h&amp;amp;gt;&lt;br /&gt;
 #include   &amp;amp;lt;types.h&amp;amp;gt;&lt;br /&gt;
 #include   &amp;amp;lt;stdioLib.h&amp;amp;gt;&lt;br /&gt;
 #include   &amp;amp;lt;wdLib.h&amp;amp;gt;&lt;br /&gt;
 #include   &amp;amp;lt;callback.h&amp;amp;gt;&lt;br /&gt;
 #include   &amp;amp;lt;dbDefs.h&amp;amp;gt;&lt;br /&gt;
 #include   &amp;amp;lt;dbAccess.h&amp;amp;gt;&lt;br /&gt;
 #include   &amp;amp;lt;subRecord.h&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 /* control block for callback*/&lt;br /&gt;
 struct callback {&lt;br /&gt;
     CALLBACK   callback;&lt;br /&gt;
     struct dbCommon *precord;&lt;br /&gt;
     WDOG_ID wd_id;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 void myCallback(struct callback *pcallback)&lt;br /&gt;
 {&lt;br /&gt;
     struct dbCommon *precord=pcallback-&amp;amp;gt;precord;&lt;br /&gt;
     struct rset  *prset=(struct rset *)(precord-&amp;amp;gt;rset);&lt;br /&gt;
     dbScanLock(precord);&lt;br /&gt;
     (*prset-&amp;amp;gt;process)(precord);&lt;br /&gt;
     dbScanUnlock(precord);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 long subInit(struct subRecord *psub)&lt;br /&gt;
 {&lt;br /&gt;
     struct callback *pcallback;&lt;br /&gt;
     pcallback = (struct callback *)(calloc(1,sizeof(struct callback)));&lt;br /&gt;
     psub-&amp;amp;gt;dpvt = (void *)pcallback;&lt;br /&gt;
     callbackSetCallback(myCallback,pcallback);&lt;br /&gt;
     pcallback-&amp;amp;gt;precord = (struct dbCommon *)psub;&lt;br /&gt;
     pcallback-&amp;amp;gt;wd_id = wdCreate();&lt;br /&gt;
     printf(&amp;amp;quot;subInit was called\n&amp;amp;quot;);&lt;br /&gt;
     return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 long subProcess(struct subRecord *psub)&lt;br /&gt;
 {&lt;br /&gt;
     struct callback *pcallback=(struct callback *)(psub-&amp;amp;gt;dpvt);&lt;br /&gt;
     /* sub.inp must be a CONSTANT*/&lt;br /&gt;
     if (psub-&amp;amp;gt;pact) {&lt;br /&gt;
         psub-&amp;amp;gt;val++;&lt;br /&gt;
         if (psub-&amp;amp;gt;b)&lt;br /&gt;
         printf(&amp;amp;quot;%s subProcess Completed\n&amp;amp;quot;, psub-&amp;amp;gt;name);&lt;br /&gt;
         return 0;&lt;br /&gt;
     } else {&lt;br /&gt;
         int wait_time = (long)(psub-&amp;amp;gt;a * vxTicksPerSecond);&lt;br /&gt;
         if (wait_time &amp;amp;lt;= 0){&lt;br /&gt;
             if (psub-&amp;amp;gt;b)&lt;br /&gt;
                 printf(&amp;amp;quot;%s subProcess sync processing\n&amp;amp;quot;, psub-&amp;amp;gt;name);&lt;br /&gt;
             psub-&amp;amp;gt;pact = TRUE;&lt;br /&gt;
             return 0;&lt;br /&gt;
         }&lt;br /&gt;
         if (psub-&amp;amp;gt;b){&lt;br /&gt;
             callbackSetPriority(psub-&amp;amp;gt;prio, pcallback);&lt;br /&gt;
             printf(&amp;amp;quot;%s Starting async processing\n&amp;amp;quot;, psub-&amp;amp;gt;name);&lt;br /&gt;
             wdStart(pcallback-&amp;amp;gt;wd_id, wait_time, callbackRequest, (int)pcallback);&lt;br /&gt;
             return 1;&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
     return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_SubArray&amp;diff=2903</id>
		<title>RRM 3-14 SubArray</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_SubArray&amp;diff=2903"/>
		<updated>2008-04-18T20:04:58Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= subArray =&lt;br /&gt;
&lt;br /&gt;
The normal use for the subArray record type is to obtain sub-arrays from waveform records. Setting either the number of elements (NELM) or index (INDX) fields causes the record to be processed anew so that applications in which the length and position of a sub-array in a waveform record vary dynamically can be implemented using standard EPICS operator interface tools.&lt;br /&gt;
&lt;br /&gt;
The first element of the sub-array, that at location INDX in the referenced waveform record, can be displayed as a scalar, or the entire subarray (of length NELM) can be displayed in the same way as a waveform record. If there are fewer than NELM elements in the referenced waveform after the INDX, only the number of elements actually available are returned, and the number of elements read field (NORD) is set to reflect this. This record type does not support writing new values into waveform records.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The subArray's fields fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* array parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* run-time parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The subArray record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used.&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The subArray's input link (INP) should be configured to reference the Waveform record. It should specify the VAL field of a Waveform record. The INP field can be a channel access link, in addition to a database link. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on specifying links.&lt;br /&gt;
&lt;br /&gt;
In addition, the DTYP field must specify a device support module. Currently, the only device support module is &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INP&amp;lt;TD&amp;gt;Input Link&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Array Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters determine the number of array elements (the array length) and the data type of those elements. The Field Type of Value (FTVL) field determines the data type of the array.&lt;br /&gt;
&lt;br /&gt;
The user specifies the maximum number of elements allowed in the subarray in the MALM field. Generally, the number should be equal to the number of elements of the Waveform array (found in the Waveform's NELM field). The MALM field is used to allocate memory. The subArray's Number of Elements (NELM) field is where the user specifies the actual number of elements that the subArray will contain. It should of course be no greater than MALM; if it is, the record processing routine sets it equal to MALM.&lt;br /&gt;
&lt;br /&gt;
The INDX field determines the offset of the subArray record's array in relation to the Waveform's. For instance, if INDX is 2, then the subArray will read NELM elements starting with the third element of the Waveform's array. Thus, it equals the index number of the Waveform's array.&lt;br /&gt;
&lt;br /&gt;
The actual sub-array is referenced by the VAL field.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FTVL&amp;lt;TD&amp;gt;Field Type of Value&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;(See FTVL)&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MALM&amp;lt;TD&amp;gt;Maximum Number of Elements In Sub-array&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NELM&amp;lt;TD&amp;gt;Number of Elements In Sub-array&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INDX&amp;lt;TD&amp;gt;Index Into Referenced Array &amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. They display the value and other parameters of the subarray record either textually or graphically.&lt;br /&gt;
&lt;br /&gt;
EGU is a string of up to 16 characters describing the engineering units (if any) of the values which the subArray holds. It is retrieved by the &amp;lt;CODE&amp;gt;get_units&amp;lt;/CODE&amp;gt; record support routine.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields set the upper and lower display limits for the sub-array elements. Both the &amp;lt;CODE&amp;gt;get_graphic_double&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;get_control_double&amp;lt;/CODE&amp;gt; record support routines retrieve these fields.&lt;br /&gt;
&lt;br /&gt;
The PREC field determines the floating point precision with which to display VAL. It is used whenever the &amp;lt;CODE&amp;gt;get_precision&amp;lt;/CODE&amp;gt; record support routine is called.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The subarray record has the alarm parameters common to all record types. [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields are not configurable by the user. They are used for the record's internal processing or to represent the current state of the record.&lt;br /&gt;
&lt;br /&gt;
The NORD field holds a counter of the number of elements read into the array. It can be less than NELM even after the array is full if NELM exceeds the number of existing elements in the referenced array, i.e., the Waveform's array.&lt;br /&gt;
&lt;br /&gt;
BPTR contains a pointer to the record's array.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NORD   &amp;lt;TD&amp;gt;Number of Elements Read&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BPTR&amp;lt;TD&amp;gt;Buffer Pointer&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
Using MALM and FTVL, space for the array is allocated. The array address is stored in BPTR. This routine checks to see that device support is available and a device support read routine is defined. If either does not exist, an error message is issued and processing is terminated. If device support includes init_record, it is called.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to the sub-array.&lt;br /&gt;
&lt;br /&gt;
==== cvt_dbaddr ====&lt;br /&gt;
&lt;br /&gt;
This is called by dbNameToAddr. It makes the dbAddr structure refer to the actual buffer holding the result.&lt;br /&gt;
&lt;br /&gt;
==== get_array_info ====&lt;br /&gt;
&lt;br /&gt;
Retrieves NELM.&lt;br /&gt;
&lt;br /&gt;
==== put_array_info ====&lt;br /&gt;
&lt;br /&gt;
Sets NORD.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
For the elements in the array, this routine routines HOPR and LOPR. For the INDX field, this routine returns MALM - 1 and 0. For NELM, it returns MALM and 1. For other fields, it calls &amp;lt;CODE&amp;gt;recGblGetGraphicDouble()&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
For array elements, this routine retrieves HOPR and LOPR. Otherwise, &amp;lt;CODE&amp;gt;recGblGetControlDouble()&amp;lt;/CODE&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_prec ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# Check to see that the appropriate device support module exists. If it doesn't, an error message is issued and processing is terminated with the PACT field still set to TRUE. This ensures that processes will no longer be called for this record. Thus error storms will not occur.&lt;br /&gt;
# Sanity check NELM and INDX. If NELM is greater than MALM it is set to MALM. If INDX is greater than or equal to MALM it is set to MALM-1.&lt;br /&gt;
# Call device support read routine. This routine is expected to place the desired sub-array at the beginning of the buffer and set NORD to the number of elements of the sub-array that were read.&lt;br /&gt;
# If PACT has been changed to TRUE, the device support read routine has started but has not completed writing the new value. In this case, the processing routine merely returns, leaving PACT TRUE. Otherwise, process sets PACT TRUE at this time. This asynchronous processing logic is not currently used but has been left in place.&lt;br /&gt;
# Check to see if monitors should be invoked. &lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* Archive and value change monitors are always invoked.&lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PACT&amp;lt;TD&amp;gt;Processing Active&amp;lt;TD rowspan=5&amp;gt;See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for an explanation of these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DPVT&amp;lt;TD&amp;gt;Device Private&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;UDF&amp;lt;TD&amp;gt;VAL Undefined&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSEV&amp;lt;TD&amp;gt;New Alarm Severity&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSTA&amp;lt;TD&amp;gt;New Alarm Status&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INP&amp;lt;TD&amp;gt;Input Link&amp;lt;TD&amp;gt;This field is used by the device support routines to locate its input.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FTVL&amp;lt;TD&amp;gt;Field Type of Value&amp;lt;TD&amp;gt;This is DBF_STRING, ... ,DBF_ENUM. The device support routine should check that this is correctly defined.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MALM&amp;lt;TD&amp;gt;Maximum Number Of Elements in Sub-array&amp;lt;TD&amp;gt;Number of elements that will fit in the array the record allocates. Device support must never return more elements than this.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NELM&amp;lt;TD&amp;gt;Number Sub-array Elements&amp;lt;TD&amp;gt;Number of elements in desired sub-array.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INDX&amp;lt;TD&amp;gt;Index Into Referenced Array&amp;lt;TD&amp;gt;Index of beginning of desired sub-array in source array.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BPTR&amp;lt;TD&amp;gt;Buffer Pointer&amp;lt;TD&amp;gt;Address of array device support must copy the source array into.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NORD&amp;lt;TD&amp;gt;Number Of Elements Read&amp;lt;TD&amp;gt;Device support must set this value when it completes. &lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== report ====&lt;br /&gt;
&lt;br /&gt;
 report(FILE fp, paddr)&lt;br /&gt;
&lt;br /&gt;
not currently used.&lt;br /&gt;
&lt;br /&gt;
==== init ====&lt;br /&gt;
&lt;br /&gt;
 init()&lt;br /&gt;
&lt;br /&gt;
Not currently used.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the record support init_record routine.&lt;br /&gt;
&lt;br /&gt;
==== read_sa ====&lt;br /&gt;
&lt;br /&gt;
 read_sa(precord)&lt;br /&gt;
&lt;br /&gt;
Enough of the source waveform is read into BPTR, from the beginning of the source, to include the requested sub-array. The sub-array is then copied to the beginning of the buffer. NORD is set to indicate how many elements of the sub-array were acquired.&lt;br /&gt;
&lt;br /&gt;
=== Device Support For Soft Records ===&lt;br /&gt;
&lt;br /&gt;
Only the device support module &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; is currently provided. The INP link type must be either DB_LINK or CA_LINK.&lt;br /&gt;
&lt;br /&gt;
==== Soft Channel ====&lt;br /&gt;
&lt;br /&gt;
INP is expected to point to a waveform record.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_String_Output&amp;diff=1745</id>
		<title>RRM 3-14 String Output</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_String_Output&amp;diff=1745"/>
		<updated>2008-04-18T20:02:48Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= stringout -- String Output =&lt;br /&gt;
&lt;br /&gt;
The stringout record is used to write an arbitrary ASCII string of up to 40 characters to other records or software variables.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* desired output parameters&lt;br /&gt;
* write parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* run-time parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The string output record has the standard fields for specifying under what circumstances it will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used.&lt;br /&gt;
&lt;br /&gt;
=== Desired Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The string output record must specify from where it gets its desired output string. The first field that determines where the desired output originates is the output mode select (OSML) field, which can have two possible value: &amp;lt;CODE&amp;gt;closed_loop&amp;lt;/CODE&amp;gt; or &amp;lt;CODE&amp;gt;supervisory&amp;lt;/CODE&amp;gt;. If &amp;lt;CODE&amp;gt;supervisory&amp;lt;/CODE&amp;gt; is specified, DOL is ignored, the current value of VAL is written, and the VAL can be changed externally via dbPuts at run-time. If &amp;lt;CODE&amp;gt;closed_loop&amp;lt;/CODE&amp;gt; is specified, the VAL field's value is obtained from the address specified in the desired output location field (DOL) which can be either a database link or a channel access link.&lt;br /&gt;
&lt;br /&gt;
DOL can also be a constant in addition to a link, in which case VAL is initialized to the constant value. Note that if DOL is a constant, OMSL cannot be &amp;lt;CODE&amp;gt;closed_loop.&amp;lt;/CODE&amp;gt; See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on specifying links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt; Value Field &amp;lt;TD&amp;gt;STRING [40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL &amp;lt;TD&amp;gt;Desired Output Location (Input Link) &amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OMSL&amp;lt;TD&amp;gt;Output Mode Select &amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Write Parameters ===&lt;br /&gt;
&lt;br /&gt;
The output link specified in the OUT field specifies where the string output record is to write its string. The link can be a database or channel access link. If the OUT field is a constant, no output will be written. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on specifying links.&lt;br /&gt;
&lt;br /&gt;
In addition, the appropriate device support module must be entered into the DTYP field. All string output records must specify a device support module. The user can see a list of the device support modules currently supported at the user's local site by using the &amp;lt;CODE&amp;gt;dbst&amp;lt;/CODE&amp;gt; utility (R3.13).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;TD&amp;gt;Output Link &amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. These fields are used to display the value and other parameters of the string output either textually or graphically.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for the string output record are the SCAN, READ, and INVALID alarms. The severity of the first two is always MAJOR and not configurable.&lt;br /&gt;
&lt;br /&gt;
The IVOA field specifies an action to take when the INVALID alarm is triggered. There are three possible actions: &amp;lt;CODE&amp;gt;Continue normally&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Don't drive outputs&amp;lt;/CODE&amp;gt;, and &amp;lt;CODE&amp;gt;Set output to IVOV&amp;lt;/CODE&amp;gt;. When &amp;lt;CODE&amp;gt;Set output to IVOV&amp;lt;/CODE&amp;gt;, the value contained in the IVOV field is written to the output link during an alarm condition. See [[RRM 3-14 Common#Invalid Alarm Output Action|Invalid Alarm Output Action]] for more information on the IVOA and IVOV fields. [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOA&amp;lt;TD&amp;gt;Invalid Alarm Output Action&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOV&amp;lt;TD&amp;gt;Invalid Alarm Output Value, in eng. units&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time and Simulation Mode Parameters ===&lt;br /&gt;
&lt;br /&gt;
The old value field (OVAL) of the string input is used to implement value change monitors for VAL. If VAL is not equal to OVAL, then monitors are triggered.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OVAL&amp;lt;TD&amp;gt;Output Value&amp;lt;TD&amp;gt;STRING [40]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following fields are used to operate the string output in the simulation mode. See [[RRM 3-14 Common#Simulation Mode|Simulation Mode]] for more information on these fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIOL&amp;lt;TD&amp;gt;Simulation Value Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVAL&amp;lt;TD&amp;gt;Simulation Value&amp;lt;TD&amp;gt;STRING [40]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIML&amp;lt;TD&amp;gt;Simulation Mode Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMM&amp;lt;TD&amp;gt;Simulation Mode&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMS&amp;lt;TD&amp;gt;Simulation Mode Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Three record support routines are provided: init_record, process, and get_value.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
This routine initializes SIMM if SIML is a constant or creates a channel access link if SIML is PV_LINK. If SIOL is PV_LINK a channel access link is created.&lt;br /&gt;
&lt;br /&gt;
This routine next checks to see that device support is available. The routine next checks to see if the device support write routine is defined. If either device support or the device support write routine does not exist, an error message is issued and processing is terminated.&lt;br /&gt;
&lt;br /&gt;
If DOL is a constant, then the type double constant, if non-zero, is converted to a string and stored into VAL and UDF is set to FALSE. If DOL type is a PV_LINK then dbCaAddInlink is called to create a channel access link.&lt;br /&gt;
&lt;br /&gt;
If device support includes init_record, it is called.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# Check to see that the appropriate device support module exists. If it doesn't, an error message is issued and processing is terminated with the PACT field still set to TRUE. This ensures that processes will no longer be called for this record. Thus error storms will not occur.&lt;br /&gt;
# If PACT is FALSE and OMSL is CLOSED_LOOP, recGblGetLinkValue is called to read the current value of VAL. See [[RRM 3-14 Common#Soft Output|Soft Output]]. If the return status of recGblGetLinkValue is zero then UDF is set to FALSE.&lt;br /&gt;
# Check severity and write the new value. See [[RRM 3-14 Common#Simulation Mode|Simulation Mode]] and [[RRM 3-14 Common#Invalid Alarm Output Action|Invalid Alarm Output Action]] for details on how the simulation mode and the INVALID alarm conditions affect output.&lt;br /&gt;
# If PACT has been changed to TRUE, the device support write output routine has started but has not completed writing the new value. In this case, the processing routine merely returns, leaving PACT TRUE.&lt;br /&gt;
# Check to see if monitors should be invoked.&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* Archive and value change monitors are invoked if OVAL is not equal to VAL. &lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
Each stringout output record must have an associated set of device support routines. The primary responsibility of the device support routines is to write a new value whenever write_stringout is called. The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PACT&amp;lt;TD&amp;gt;Processing Active Field&amp;lt;TD rowspan=4&amp;gt;See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for an explanation of these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DPVT&amp;lt;TD&amp;gt;Device Private&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSEV&amp;lt;TD&amp;gt;New Alarm Severity&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSTA&amp;lt;TD&amp;gt;New Alarm Status&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value&amp;lt;TD&amp;gt;This is the field written by the device support routines.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;TD&amp;gt;Output Link&amp;lt;TD&amp;gt;This field is used by the device support routines to locate its output.&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== report ====&lt;br /&gt;
&lt;br /&gt;
 report(FILE fp, paddr)&lt;br /&gt;
&lt;br /&gt;
Not currently used.&lt;br /&gt;
&lt;br /&gt;
==== init ====&lt;br /&gt;
&lt;br /&gt;
 init()&lt;br /&gt;
&lt;br /&gt;
This routine is called once during IOC initialization.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is optional. If provided, it is called by the record support init_record routine.&lt;br /&gt;
&lt;br /&gt;
==== get_ioint_info ====&lt;br /&gt;
&lt;br /&gt;
 get_ioint_info(int cmd,struct dbCommon *precord,IOSCANPVT *ppvt)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the ioEventScan system each time the record is added or deleted from an I/O event scan list. cmd has the value (0,1) if the record is being (added to, deleted from) an I/O event list. It must be provided for any device type that can use the ioEvent scanner.&lt;br /&gt;
&lt;br /&gt;
==== write_stringout ====&lt;br /&gt;
&lt;br /&gt;
 write_stringout(precord)&lt;br /&gt;
&lt;br /&gt;
This routine must output a new value. It returns the following values:&lt;br /&gt;
&lt;br /&gt;
* 0:   Success.&lt;br /&gt;
* Other:   Error. &lt;br /&gt;
&lt;br /&gt;
=== Device Support for Soft Records ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support module writes the current value of VAL.&lt;br /&gt;
&lt;br /&gt;
If the OUT link type is PV_LINK, then dbCaAddInlink is called by init_record.&lt;br /&gt;
&lt;br /&gt;
write_so calls recGblPutLinkValue to write the current value of VAL. See [[RRM 3-14 Common#Soft Output|Soft Output]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_String_Input&amp;diff=2901</id>
		<title>RRM 3-14 String Input</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_String_Input&amp;diff=2901"/>
		<updated>2008-04-18T20:01:34Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= stringin - String Input =&lt;br /&gt;
&lt;br /&gt;
The string input record retrieves an arbitrary ASCII string of up to 40 characters. Several device support routines are available, all of which are soft device support for retrieving values from other records or other software components.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields fall into the following categories.&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* run-time and simulation mode parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The string input record has the standard fields for specifying under what circumstances it will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used.&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The INP field determines where the string input record gets its string. It can be a database or channel access link, or a constant. If constant, the VAL field is initialized with the constant and can be changed via dbPuts. Otherwise, the string is read from the specified location each time the record is processed and placed in the VAL field. The maximum number of characters that the string in VAL can be is 40. In addition, the appropriate device support module must be entered into the DTYP field.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on specifying links. The user can see a list of the device support modules currently supported at the user's local site by using the &amp;lt;CODE&amp;gt;dbst&amp;lt;/CODE&amp;gt; utility (R3.13).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value&amp;lt;TD&amp;gt;STRING [40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INP&amp;lt;TD&amp;gt;Input Link&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The string input record has the alarm parameters common to all record types. [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
=== Run-time and Simulation Mode Parameters ===&lt;br /&gt;
&lt;br /&gt;
The old value field (OVAL) of the string input is used to implement value change monitors for VAL. If VAL is not equal to OVAL, then monitors are triggered.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OVAL&amp;lt;TD&amp;gt;Output Value&amp;lt;TD&amp;gt;STRING&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following fields are used to operate the string input in the simulation mode. See [[RRM 3-14 Common#Simulation Mode|Simulation Mode]] for more information on simulation mode fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIOL&amp;lt;TD&amp;gt;Simulation Value Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVAL&amp;lt;TD&amp;gt;Simulation Value&amp;lt;TD&amp;gt;STRING [40]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIML&amp;lt;TD&amp;gt;Simulation Mode Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMM&amp;lt;TD&amp;gt;Simulation Mode&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMS&amp;lt;TD&amp;gt;Simulation Mode Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Three record support routines are provided: init_record, process, and get_value.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
This routine initializes SIMM with the value of SIML if SIML type is CONSTANT link or creates a channel access link if SIML type is PV_LINK. SVAL is likewise initialized if SIOL is CONSTANT or PV_LINK.&lt;br /&gt;
&lt;br /&gt;
This routine next checks to see that device support is available and a record support read routine is defined. If either does not exist, an error message is issued and processing is terminated.&lt;br /&gt;
&lt;br /&gt;
If device support includes init_record, it is called.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# Check to see that the appropriate device support module exists. If it doesn't, an error message is issued and processing is terminated with the PACT field still set to TRUE. This ensures that processes will no longer be called for this record. Thus error storms will not occur.&lt;br /&gt;
# readValue is called. See [[RRM 3-14 Common#Simulation Mode|Simulation Mode]] for more information on simulation mode fields and how they affect input.&lt;br /&gt;
# If PACT has been changed to TRUE, the device support read routine has started but has not completed reading a new input value. In this case, the processing routine merely returns, leaving PACT TRUE.&lt;br /&gt;
# TIME is set to tslocaltime&lt;br /&gt;
# Check to see if monitors should be invoked.&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* Archive and value change monitors are invoked if OVAL is not equal to VAL. &lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
Each stringin input record must have an associated set of device support routines. The primary responsibility of the device support routines is to obtain a new ASCII string value whenever read_stringin is called. The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PACT&amp;lt;TD&amp;gt;Processing Active&amp;lt;TD rowspan=3&amp;gt;See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for an explanation of these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DPVT&amp;lt;TD&amp;gt;Device Private&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;UDF&amp;lt;TD&amp;gt;VAL Undefined&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value&amp;lt;TD&amp;gt;This field is set by the device support routines.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INP&amp;lt;TD&amp;gt;Input Link.&amp;lt;TD&amp;gt;This field is used by the device support routines to locate its input.&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== report ====&lt;br /&gt;
&lt;br /&gt;
 report(FILE fp, paddr)&lt;br /&gt;
&lt;br /&gt;
Not currently used.&lt;br /&gt;
&lt;br /&gt;
==== init ====&lt;br /&gt;
&lt;br /&gt;
 init()&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is optional. If provided, it is called by the record support init_record routine.&lt;br /&gt;
&lt;br /&gt;
==== get_ioint_info ====&lt;br /&gt;
&lt;br /&gt;
 get_ioint_info(int cmd,struct dbCommon *precord,IOSCANPVT *ppvt)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the ioEventScan system each time the record is added or deleted from an I/O event scan list. cmd has the value (0,1) if the record is being (added to, deleted from) an I/O event list. It must be provided for any device type that can use the ioEvent scanner.&lt;br /&gt;
&lt;br /&gt;
==== read_stringin ====&lt;br /&gt;
&lt;br /&gt;
 read_stringin(precord)&lt;br /&gt;
&lt;br /&gt;
This routine must provide a new input value. It returns the following values:&lt;br /&gt;
&lt;br /&gt;
* 0: Success. A new ASCII string is stored into VAL.&lt;br /&gt;
* Other: Error.&lt;br /&gt;
&lt;br /&gt;
=== Device Support For Soft Records ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; module places a value directly in VAL.&lt;br /&gt;
&lt;br /&gt;
If the INP link type is constant, the double constant, if non-zero, is converted to a string and stored into VAL by init_record, and UDF is set to FALSE. If the INP link type is PV_LINK, then dbCaAddInlink is called by init_record.&lt;br /&gt;
&lt;br /&gt;
read_stringin calls recGblGetLinkValue to read the current value of VAL. See [[RRM 3-14 Common#Soft Input|Soft Input]].&lt;br /&gt;
&lt;br /&gt;
If the return status of recGblGetLinkValue is zero, then read_stringin sets UDF to FALSE. The status of recGblGetLinkValue is returned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Stepper_Motor&amp;diff=2900</id>
		<title>RRM 3-14 Stepper Motor</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Stepper_Motor&amp;diff=2900"/>
		<updated>2008-04-18T20:00:24Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= steppermotor - Stepper Motor =&lt;br /&gt;
&lt;br /&gt;
The stepper motor record controls and monitors stepper motors. The stepper motor can be controlled in either ''position'' mode or ''velocity'' mode. Position mode moves a device to a position. Velocity mode causes the motor to revolve continuously.&lt;br /&gt;
&lt;br /&gt;
The record is set up assuming that the same stepper motor will not be used in both velocity and position mode. The fields for the stepper motor record fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* setup parameters&lt;br /&gt;
* desired output parameters&lt;br /&gt;
* output and readback parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
* monitor parameters&lt;br /&gt;
run-time parameters.&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The stepper motor record has the standard fields for specifying under what circumstances the record will be processed. A motor record that is scanned periodically or on event will compare its actual position to the desired position and will attempt to achieve its position. It will only make a certain number of attempts; the number of attempts is specified in the retry (RTRY) field. A passive motor will not go through the retry logic.&lt;br /&gt;
&lt;br /&gt;
These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Note that I/O event scanning is only supported for those card types that interrupt.&lt;br /&gt;
&lt;br /&gt;
=== Setup Parameters ===&lt;br /&gt;
&lt;br /&gt;
The set-up parameters determine how the stepper motor is initialized and how it operates at run-time.&lt;br /&gt;
&lt;br /&gt;
The MODE field has two choices: &amp;lt;CODE&amp;gt;Velocity&amp;lt;/CODE&amp;gt; or &amp;lt;CODE&amp;gt;Position&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The VELO field determines the velocity that the stepper motor will run at when in the velocity mode. In position mode, it determines the pulses per second to move when it moves to a new position.&lt;br /&gt;
&lt;br /&gt;
The ACCL field determines the acceleration of the motor by specifying a number of seconds. In velocity mode, the stepper motor will accelerate at the rate needed to reach the operating velocity in the number of seconds specified in ACCL. In positional mode, ACCL determines the seconds the stepper motor will take to reach the specified velocity, and the number of seconds it will take to come to a stop at the new position.&lt;br /&gt;
&lt;br /&gt;
The MRES field specifies the number of pulses per revolution for the stepper motor, while ERES specifies the encoder pulses per revolution.&lt;br /&gt;
&lt;br /&gt;
The DIST field's value determines the distance which the stepper motor moves for each pulse in engineering units.&lt;br /&gt;
&lt;br /&gt;
The RTRY field specifies the number of attempts the record will make to reach the desired position each time it's processed, and the RDBD field specifies a deadband for this processing. Thus, when the motor is moving in a positive direction, no retries will be attempted unless the readback value is greater than VAL added to the value in the RDBD field. If the motor is moving in the negative direction, no retries will be attempted unless the readback value is less than VAL added to the value in the RDBD field:&lt;br /&gt;
&lt;br /&gt;
; if direction positive and RBV &amp;amp;gt; (VAL + RDBD)&lt;br /&gt;
: attempt to correct position &amp;lt;EM&amp;gt;RTRY&amp;lt;/EM&amp;gt; times&lt;br /&gt;
; if direction negative and RBV &amp;amp;lt; (VAL + RDBD)&lt;br /&gt;
: attempt to correct position &amp;lt;EM&amp;gt;RTRY&amp;lt;/EM&amp;gt; times&lt;br /&gt;
&lt;br /&gt;
The initialization algorithm (IALG) field has three algorithms to choose from: &amp;lt;CODE&amp;gt;No Initialization&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Move to the Positive Limit&amp;lt;/CODE&amp;gt;,&amp;lt;CODE&amp;gt; &amp;lt;/CODE&amp;gt;and&amp;lt;CODE&amp;gt; Move to the Negative Limit&amp;lt;/CODE&amp;gt;. The IVAL field determines the value of VAL at initialization; i.e., VAL is initialized to the value in IVAL when IALG is either Move to Positive or Move to Negative.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ACCL&amp;lt;TD&amp;gt; Seconds to Reach Velocity&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VELO&amp;lt;TD&amp;gt; Velocity in Pulses per Second&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DIST&amp;lt;TD&amp;gt; Distance in Engineering Units of 1 Pulse&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVAL&amp;lt;TD&amp;gt; Initial Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MODE&amp;lt;TD&amp;gt; Mode--Position/Velocity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IALG&amp;lt;TD&amp;gt;Initialization Algorithm&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RTRY&amp;lt;TD&amp;gt;Number Of Retries Before Failure&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RDBD&amp;lt;TD&amp;gt;Retry Deadband&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MRES&amp;lt;TD&amp;gt;Motor Pulses per Revolution&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ERES&amp;lt;TD&amp;gt;Encoder Pulses per Revolution&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Desired Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The stepper motor record specifies where the desired output originates in the DOL field. The desired output needs to be in engineering units. If the output is controlled by the operator or a sequence program, nothing should be entered in the DOL field.&lt;br /&gt;
&lt;br /&gt;
The desired output link (DOL) and operation mode select (OMSL) fields work as they do for output records. If OMSL is &amp;lt;CODE&amp;gt;closed_loop&amp;lt;/CODE&amp;gt;, the desired output (VAL) is fetched from the DOL link, which can be a database or channel access link. If &amp;lt;CODE&amp;gt;supervisory&amp;lt;/CODE&amp;gt;, VAL can be changed via dbPuts. DOL can be a constant, in which case VAL is initialized to the constant. If DOL is a constant, OMSL cannot specify &amp;lt;CODE&amp;gt;closed_loop&amp;lt;/CODE&amp;gt;. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on specifying links.&lt;br /&gt;
&lt;br /&gt;
VAL indicates the position of the stepper motor in position mode; in velocity mode, it indicates the current velocity. When the desired output is retrieved and placed in VAL, it is forced to be within the drive limits configured in the DRVH and DRVL fields. The DRVH and DRVL fields must be given values by the user. Note: If nothing is entered in the DRVH and DRVL fields, the motor will not move. The &amp;lt;CODE&amp;gt;get_control_double()&amp;lt;/CODE&amp;gt; record support routine returns the values in these fields when it is called.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL&amp;lt;TD&amp;gt;Desired Output Location (Input Link)&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OMSL&amp;lt;TD&amp;gt;Output Mode Select &amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Output and Readback Parameters ===&lt;br /&gt;
&lt;br /&gt;
In the OUT output link field, the user must enter the address of the I/O card of the device, and in the DTYP field, the user must enter the name of the appropriate stepper motor device support module. Be aware that the address format differs according to the I/O bus used. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on hardware addresses. The user can see a list of the device support modules currently supported at the user's local site by using the &amp;lt;CODE&amp;gt;dbst&amp;lt;/CODE&amp;gt; utility in R3.13.&lt;br /&gt;
&lt;br /&gt;
The RDBL field can contain the address of an encoder or an external device, such as an LDVT, or it can specify the motor position field (MPOS) or the encoder position field (EPOS) in the same record. In the case of an external readback, the value would be read through an analog input record and linked to this record through this field. The value retrieved from this field is placed into the RBV field. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;TD&amp;gt;Output Link&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RDBL&amp;lt;TD&amp;gt;Read Back Location (an input link)&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RBV&amp;lt;TD&amp;gt;Read Back Value &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. These fields are used to display the value and other parameters of the stepper motor either textually or graphically.&lt;br /&gt;
&lt;br /&gt;
EGU is a string of up to 16 characters describing the engineering units of VAL. It is retrieved by the &amp;lt;CODE&amp;gt;get_units&amp;lt;/CODE&amp;gt; record support routine.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields set the upper and lower display limits for the VAL, HIHI, HIGH, LOW, LOLO, MPOS, EPOS, RBV, and LVAL fields. Only the &amp;lt;CODE&amp;gt;get_graphic_double&amp;lt;/CODE&amp;gt; record support routine retrieves these fields. If these values are defined, they must be in the range: DRVL&amp;amp;lt;=LOPR&amp;amp;lt;=HOPR&amp;amp;lt;=DRVH.&lt;br /&gt;
&lt;br /&gt;
The PREC field determines the floating point precision with which to display the VAL and LVAL fields. It is used whenever the &amp;lt;CODE&amp;gt;get_precision&amp;lt;/CODE&amp;gt; record support routine is called.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for stepper motor records are the SCAN, READ, and limit alarms. The SCAN and READ alarms are called by the record or device support routines and are always of MAJOR severity.&lt;br /&gt;
&lt;br /&gt;
The limit alarms are configured by the user in the HIHI, LOLO, HIGH, and LOW fields using numerical values. The conditions apply to the VAL and RBV fields of the stepper motor record. For each of these fields, there is a corresponding severity field which can specify either NO ALARM, MINOR, or MAJOR. The user can specify a deadband around these limits in the HYST or hysteresis field. See [[RRM 3-14 Concepts#Alarm Specification|Alarm Specification]] for a complete explanation of analog alarms and these fields. [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;TD&amp;gt;Hihi Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;TD&amp;gt;High Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;TD&amp;gt;Low Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;TD&amp;gt;Lolo Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine when to send monitors placed on the VAL field. The monitors are sent when the value field exceeds the last monitored field by the appropriate delta. If these fields have a value of zero, everytime the value changes, a monitor will be triggered; if they have a value of -1, everytime the record is processed, monitors are triggered.  The ADEL field is used by archive monitors and the MDEL field for all other types of monitors. See [[RRM 3-14 Concepts#Monitor Specification|Monitor Specification]] for a complete explanation of monitors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields are not configurable by the user before run-time, but most of them can be modified after initialization.&lt;br /&gt;
&lt;br /&gt;
The STHM field will set the current position of the motor to its home or zero position when this field is set to 1 via a dbPut. Its value is automatically reset to 0 after the command is accepted.&lt;br /&gt;
&lt;br /&gt;
Setting the STOP field to 1 will cause the motor to stop moving. Its value is also reset to 0 after the command is accepted.&lt;br /&gt;
&lt;br /&gt;
The DMOV field is a flag which indicates if the motor is done moving and all retries are complete. It is significant only while the record is in POSITION mode. It will be 1 if TRUE and 0 if FALSE.&lt;br /&gt;
&lt;br /&gt;
The RVAL field contains the value which is actually written to output after it is forced in the drive limits.&lt;br /&gt;
&lt;br /&gt;
The RBV and RRBV fields contain the value retrieved from the readback location link (RDBL).&lt;br /&gt;
&lt;br /&gt;
The MOVN field indicates whether the motor is currently moving. It will contain a 1 if moving or a 0 if not moving. The DIR field indicates which direction the record is moving--a 0 means clockwise and a 1 means counter clockwise.&lt;br /&gt;
&lt;br /&gt;
The CW and CCW fields contain the values for the clockwise and counterclockwise limit switches, respectively. The MCW and MCCW fields will be 1 if the limit has been reached or 0 if not.&lt;br /&gt;
&lt;br /&gt;
The CVEL field indicates whether the motor is at constant velocity. If so, the value of this field is 1.&lt;br /&gt;
&lt;br /&gt;
The RCNT field will indicate the current number of retries that have been attempted.&lt;br /&gt;
&lt;br /&gt;
The POSM field will contain a 1 if the motor is moving in a positive direction and a 0 if otherwise.&lt;br /&gt;
&lt;br /&gt;
The MISS field holds the error after the first attempt has been made to change the stepper motor's position, the error being the difference between VAL and RBV, the readback value. If monitors are present, the value is posted.&lt;br /&gt;
&lt;br /&gt;
The EPOS field holds the value obtained from encoder readback. The MPOS holds the readback value of the motor positions.&lt;br /&gt;
&lt;br /&gt;
The MLST and ALST fields are used to implement monitors on the VAL field. If the difference between one of these fields and the VAL field exceeds the appropriate deadband (MDEL, for instance) monitors are triggered.&lt;br /&gt;
&lt;br /&gt;
The LVEL, LACC, and LVAL fields contain the last values set for the VELO, ACCL, and VAL fields respectively. They are used to determine when the velocity and acceleration should be recalculated.&lt;br /&gt;
&lt;br /&gt;
The CMOD or current mode fields indicates which mode, position or velocity, the record is using. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STHM&amp;lt;TD&amp;gt;Set Home&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STOP&amp;lt;TD&amp;gt;Stop&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DMOV&amp;lt;TD&amp;gt;Done Moving to Value&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RVAL&amp;lt;TD&amp;gt; Raw Data Value &amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RRBV&amp;lt;TD&amp;gt;Raw Read Back Value&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INIT&amp;lt;TD&amp;gt;Initialize&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MOVN &amp;lt;TD&amp;gt;Moving Status&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DIR&amp;lt;TD&amp;gt;Current Direction&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MCW&amp;lt;TD&amp;gt;Motor Clockwise Limit Switch Value&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MCCW&amp;lt;TD&amp;gt;Motor Counter Clockwise Limit Switch Value&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CW &amp;lt;TD&amp;gt;Clockwise Limit&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CCW&amp;lt;TD&amp;gt;Counter Clockwise Limit&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CVEL&amp;lt;TD&amp;gt;Constant Velocity&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RCNT&amp;lt;TD&amp;gt;Current Retry Count&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;POSM&amp;lt;TD&amp;gt; Positive Motion&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MISS&amp;lt;TD&amp;gt;First Attempt Error &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EPOS &amp;lt;TD&amp;gt;Encoder Read Back Position &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MPOS&amp;lt;TD&amp;gt; Motor Position &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;TD&amp;gt;Archive Last Value &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;TD&amp;gt;Monitor Last Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LVEL&amp;lt;TD&amp;gt;Last Velocity Set&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LACC&amp;lt;TD&amp;gt;Last Acceleration Set&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LVAL&amp;lt;TD&amp;gt; Last Value &amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CMOD&amp;lt;TD&amp;gt;Current Mode &amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
This routine checks to see that device support is available.   The routine next checks to see if the device support &amp;lt;CODE&amp;gt;sm_command&amp;lt;/CODE&amp;gt; routine is defined. If either device support or the device support write routine does not exist, an error message is issued and processing is terminated.&lt;br /&gt;
&lt;br /&gt;
If device support includes &amp;lt;CODE&amp;gt;init_record&amp;lt;/CODE&amp;gt;, it is called.&lt;br /&gt;
&lt;br /&gt;
If DOL is a constant, then VAL is initialized with its value and UDF is set to FALSE. If DOL is a PV_LINK then a channel access link is created.&lt;br /&gt;
&lt;br /&gt;
init_sm is then called.&lt;br /&gt;
&lt;br /&gt;
==== init_sm ====&lt;br /&gt;
&lt;br /&gt;
The init_sm routine initializes the stepper motor according to its configuration.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field is VAL, LVAL, MPOS, RBV, EPOS, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the field is VAL, LVAL, MPOS, RBV, EPOS, HIHI, HIGH, LOW, or LOLO, the limits are set to DRVH and DRVL. Else if the field has upper and lower limits defined they will be used; else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
 upper_alarm_limit = HIHI&lt;br /&gt;
 upper_warning_limit = HIGH&lt;br /&gt;
 lower_warning_limit = LOW&lt;br /&gt;
 lower_alarm_limit = LOLO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Description not available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
At the present time, device support is intimately connected to record support. The compumotor 1830 and the OMS 6 axis controllers are supported.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_State&amp;diff=2899</id>
		<title>RRM 3-14 State</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_State&amp;diff=2899"/>
		<updated>2008-04-18T19:59:42Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= State =&lt;br /&gt;
&lt;br /&gt;
The state record is a means for a state program to communicate with the operator interface. Its only function is to provide a place in the database through which the state program can inform the operator interface of its state by storing an arbitrary ASCII string in its VAL field.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The state record fields fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* other parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The state record has the standard fields for specifying under what circumstances it will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The state record has the alarm parameters common to all record types.  [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the application code to convey the state of the program to the operator interface. The VAL field holds the string retrieved from the state program. The OVAL is used to implement monitors for the VAL field. When the string in OVAL differs from the one in VAL, monitors are triggered. They represent the current state of the sequence program. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;STRING [20]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OVAL&amp;lt;TD&amp;gt;Old Value&amp;lt;TD&amp;gt;STRING [20]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TD&amp;gt;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Two record support routines are provided:&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
process triggers monitors on VAL when it changes and scans the forward link if necessary.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
get_value fills in struct valueDes so that it refers to VAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Sequence&amp;diff=1617</id>
		<title>RRM 3-14 Sequence</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Sequence&amp;diff=1617"/>
		<updated>2008-04-18T19:58:40Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= seq - Sequence =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Sequence record is used to trigger the processing of up to ten other records and send values to those records. It is similar to the fanout record, except that it will fetch an input value and write an output value instead of simply processing a collection of forward links. It can also specify one of several selection algorithms that determine which values to write. It has no associated device support.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* desired output parameters&lt;br /&gt;
* output parameters&lt;br /&gt;
* selection algorithm parameters&lt;br /&gt;
* delay parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* run-time parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The sequence record has the standard fields for specifying under what circumstances it will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used.&lt;br /&gt;
&lt;br /&gt;
=== Desired Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields determine where the record retrieves the values it is to write to other records. All of these values are not necessarily used, depending on the selection algorithm.&lt;br /&gt;
&lt;br /&gt;
The sequence record can retrieve up to 10 values from 10 locations. The user specifies the locations in the Desired Output Link fields (DOL1-DOLA), which can be either constants, database links, or channel access links. If a Desired Output Link is a constant, the corresponding value field for that link is initialized to the constant value and ''cannot'' be changed via dbputs. Otherwise, if the Desired Output Link is a database or channel access link, a value is fetched from the link each time the record is processed (provided that the output link is part of the record's selection algorithm). See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
The value fetched from the Desired Output Links are stored in the corresponding Desired Output Value fields (DO1-DOA). These fields can be initialized to a constant value, but they cannot be changed via dbPuts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL1&amp;lt;TD&amp;gt;Desired Output Link 1&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL2&amp;lt;TD&amp;gt;Desired Output Link 2&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL3&amp;lt;TD&amp;gt;Desired Output Link 3&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL4&amp;lt;TD&amp;gt;Desired Output Link 4&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL5&amp;lt;TD&amp;gt;Desired Output Link 5&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL6&amp;lt;TD&amp;gt;Desired Output Link 6&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL7&amp;lt;TD&amp;gt;Desired Output Link 71&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL8&amp;lt;TD&amp;gt;Desired Output Link 8&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL9&amp;lt;TD&amp;gt;Desired Output Link 9&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOLA&amp;lt;TD&amp;gt;Desired Output Link 10&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DO1&amp;lt;TD&amp;gt;Desired Output Value, Link 1&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DO2&amp;lt;TD&amp;gt;Desired Output Value, Link 2&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DO3&amp;lt;TD&amp;gt;Desired Output Value, Link 3&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DO4&amp;lt;TD&amp;gt;Desired Output Value, Link 4&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DO5&amp;lt;TD&amp;gt;Desired Output Value, Link 5&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DO6&amp;lt;TD&amp;gt;Desired Output Value, Link 6&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DO7&amp;lt;TD&amp;gt;Desired Output Value, Link 7&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DO8&amp;lt;TD&amp;gt;Desired Output Value, Link 8&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DO9&amp;lt;TD&amp;gt;Desired Output Value, Link 9&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOA&amp;lt;TD&amp;gt;Desired Output Value, Link 10 &amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
When the record is processed, the desired output values are retrieved for the links in the record's selection algorithm and are written to the corresponding output link (LNK1-LNKA). These output links can be database links or channel access links; they cannot be device addresses. There are ten output links, one for each desired output link. Only those that are defined are used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LNK1&amp;lt;TD&amp;gt;Output link 1&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LNK2&amp;lt;TD&amp;gt;Output link 2&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LNK3&amp;lt;TD&amp;gt;Output link 3&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LNK4&amp;lt;TD&amp;gt;Output link 4&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LNK5&amp;lt;TD&amp;gt;Output link 5&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LNK6&amp;lt;TD&amp;gt;Output link 6&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LNK7&amp;lt;TD&amp;gt;Output link 7&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LNK8&amp;lt;TD&amp;gt;Output link 8&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LNK9&amp;lt;TD&amp;gt;Output link 9&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LNKA&amp;lt;TD&amp;gt;Output link 1&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Selection Algorithm Parameters ===&lt;br /&gt;
&lt;br /&gt;
When the sequence record is processed, it uses a selection algorithm similar to that of the selection record to decide which links to process.The select mechanism field (SELM) has four algorithms to choose from: &amp;lt;CODE&amp;gt;All&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Specified&amp;lt;/CODE&amp;gt; or &amp;lt;CODE&amp;gt;Mask&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;All&amp;lt;/CODE&amp;gt; algorithm causes the record to process each input and output link each time the record is processed, in order from 1 to 10. So when SELM is &amp;lt;CODE&amp;gt;All&amp;lt;/CODE&amp;gt;, the desired output value from DOL1 will fetched and sent to LNK1, then the desired output value from DOL2 will be fetched and sent to the location in LNK2, and so on until the last input and output link DOA and LNKA. (Note that undefined links are not used.) If DOL''x'' is a constant, the current value field is simply used and the desired output link is ignored. The SELN field is not used when &amp;lt;CODE&amp;gt;All&amp;lt;/CODE&amp;gt; is the algorithm.&lt;br /&gt;
&lt;br /&gt;
When the &amp;lt;CODE&amp;gt;Specified&amp;lt;/CODE&amp;gt; algorithm is chosen, each time the record is processed it gets the integer value in the Link Selection (SELN) field and uses that as the index of the link to process. For instance, if SELN is 4, the desired output value from DO4 will be retrieved and sent to LNK4. If DOL''x'' is a constant, DO''x'' is simply used without the value being fetched from the input link.&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;CODE&amp;gt;Mask&amp;lt;/CODE&amp;gt; is chosen, the record uses the individual bits of the SELN field to determine the links to process. When bit 0 of SELN is set, the value from DO1 will be written to the location in LNK1; when bit 1 is set, the valud from DO2 will be written to the location in LNK2 etc. Thus for example if SELN is 3, the record will retrieve the values from DO1 and DO2 and write them to the locations in LNK1 and LNK2, respectively. If SELN is 63, DO1...DO6 will be written to LNK1...LNK6.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SELM&amp;lt;TD&amp;gt;Select Mechanism&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SELN &amp;lt;TD&amp;gt;Link Selection &amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SELL&amp;lt;TD&amp;gt;Link Selection Location &amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Delay Parameters ===&lt;br /&gt;
&lt;br /&gt;
The delay parameters consist of 10 fields, one for each I/O link discussed above. These fields can be configured to cause the record to delay processing the link. For instance, if the user gives the DLY1 field a value of 3.0, each time the record is processed at run-time, the record will delay processing the DOL1, DOV1, and LNK1 fields for three seconds. That is, the desired output value will not be fetched and written to the output link until three seconds have lapsed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLY1&amp;lt;TD&amp;gt;Delay time&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLY2&amp;lt;TD&amp;gt;Delay time&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLY3&amp;lt;TD&amp;gt;Delay time&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLY4&amp;lt;TD&amp;gt;Delay time&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLY5&amp;lt;TD&amp;gt;Delay time&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLY6&amp;lt;TD&amp;gt;Delay time&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLY7&amp;lt;TD&amp;gt;Delay time&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLY8&amp;lt;TD&amp;gt;Delay time&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLY9&amp;lt;TD&amp;gt;Delay time&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLYA&amp;lt;TD&amp;gt;Delay time&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. The Precision field (PREC) determines the decimal precision for the VAL field when it is displayed. It is used when the &amp;lt;CODE&amp;gt;get_precision&amp;lt;/CODE&amp;gt; record routine is called.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC &amp;lt;TD&amp;gt;Display Precision &amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The sequence record has the alarm parameters common to all record types.  [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# First, PACT is set to TRUE, and the link selection is fetched. Depending on the selection mechanism, the link selection output links are processed in order from LNK1 to LNKA. When LNK''n'' is processed, the corresponding DLY''n'' value is used to generate a delay via watchdog timer. &lt;br /&gt;
# After DLY''n'' seconds have expired, the input value is fetched from DO''n'' (if DOL''n'' is constant) or DOL''n'' (if DOL''n'' is a database link or channel access link) and written to LNK''n''. &lt;br /&gt;
# When all links are completed, an asynchronous completion call back to dbProcess is made (see the Application Developer's Guide for more information on asynchronous processing.) &lt;br /&gt;
# Then UDF is set to FALSE. &lt;br /&gt;
# Monitors are checked.&lt;br /&gt;
# The forward link is scanned, PACT is set FALSE, and the process routine returns.&lt;br /&gt;
&lt;br /&gt;
For the delay mechanism to operate properly, the record is processed asynchronously. The only time the record will not be processed asynchronously is when there are no non-NULL output links selected (i.e. when it has nothing to do.) The processing of the links is done via callback tasks at the priority set in the PRIO field in dbCommon (see the Application Developer's Guide for more information on call&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Select&amp;diff=2897</id>
		<title>RRM 3-14 Select</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Select&amp;diff=2897"/>
		<updated>2008-04-18T19:51:45Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= sel - Select =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The select record computes a value based on input obtained from up to 12 locations. The selection algorithm can be one of the following: &amp;lt;CODE&amp;gt;Specified&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;High Signal&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Low Signal&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Median Signal&amp;lt;/CODE&amp;gt;. Each input can be a constant, a database link, or a channel access link.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into several categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* select parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
* monitor parameters&lt;br /&gt;
* run-time parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The select record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields work.&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The INPA-L links determine where the selection record retrieves the values from which it is to select or compute its final value. The INPA-L links are input links configured by the user to be either constants, channel access links, or database links. If channel access or database links, a value is retrieved for each link and placed in the corresponding value field, A-L. If any input link is a constant, the value field for that link will be initialized with the constant value given to it and can be modified via dbPuts. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
Any links not defined are ignored by the selection record and its algorithm. An undefined link is any constant link whose value is 0. At initialization time, the corresponding value links for such fields are set equal to le30, which means MISSING. The value field of an undefined link can be changed at run-time from the MISSING value to another value in order to define the link and its field. Note that all undefined links must be recognized as such if the selection algorithm is to work as expected.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPC&amp;lt;TD&amp;gt;Input C&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPD&amp;lt;TD&amp;gt;Input D&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPE&amp;lt;TD&amp;gt;Input E&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPF&amp;lt;TD&amp;gt;Input F&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPG&amp;lt;TD&amp;gt;Input G&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPH&amp;lt;TD&amp;gt;Input H&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPI&amp;lt;TD&amp;gt;Input I &amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPJ&amp;lt;TD&amp;gt;Input J&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPK&amp;lt;TD&amp;gt;Input K&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPL&amp;lt;TD&amp;gt;Input L&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;A&amp;lt;TD&amp;gt;Input A Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B&amp;lt;TD&amp;gt;Input B Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;C&amp;lt;TD&amp;gt;Input C Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D&amp;lt;TD&amp;gt;Input D Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;E&amp;lt;TD&amp;gt;Input E Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;F&amp;lt;TD&amp;gt;Input F Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;G&amp;lt;TD&amp;gt;Input G Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;H&amp;lt;TD&amp;gt;Input H Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;I&amp;lt;TD&amp;gt;Input I Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;J&amp;lt;TD&amp;gt;Input J Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;K&amp;lt;TD&amp;gt;Input K Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;L&amp;lt;TD&amp;gt;Input L Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Select Parameters ===&lt;br /&gt;
&lt;br /&gt;
The selection algorithm is determined by three fields configurable by the user: the select mechanism (SELM) field, the select number (SELN) field, and the index value location (NVL) field.&lt;br /&gt;
&lt;br /&gt;
The SELM field has four choices, i.e., four algorithms: &amp;lt;CODE&amp;gt;Specified&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;High Signal&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Low Signal&amp;lt;/CODE&amp;gt;, and &amp;lt;CODE&amp;gt;Median Signal&amp;lt;/CODE&amp;gt;. The selection record's VAL field is determined differently for each algorithm. For &amp;lt;CODE&amp;gt;Specified&amp;lt;/CODE&amp;gt;, the VAL field is set equal to the value field (A, B, C, D, E, F, G, H, I, J, K, or L) specified by the SELN field. The SELN field contains a number from 0-11 which corresponds to the value field to be used (0 means use A; 1 means use B, etc.). How the NVL field is configured determines, in turn, SELN's value. NVL is an input link from which a value for SELN can be retrieved, Like most other input links NVL can be a constant, or a channel access or database link. If NVL is a link, SELN is retrieved from the location in NVL. If a constant, SELN is initialized to the value given to the constant and can be changed via dbPuts. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;High Signal&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Low Signal&amp;lt;/CODE&amp;gt;, and &amp;lt;CODE&amp;gt;Median Signal&amp;lt;/CODE&amp;gt; algorithms do not use SELN or NVL. If &amp;lt;CODE&amp;gt;High Signal&amp;lt;/CODE&amp;gt; is chosen, VAL is set equal to the highest value out of all the defined value fields (A-F). If &amp;lt;CODE&amp;gt;Low Signal&amp;lt;/CODE&amp;gt; is chosen, VAL is set equal to lowest value of all the defined fields (A-F). And if &amp;lt;CODE&amp;gt;Median Signal&amp;lt;/CODE&amp;gt; is chosen, VAL is set equal to the median value of the defined value fields (A-F). (Note that these algorithms select from the value fields; they do not select from the value field index. For instance, &amp;lt;CODE&amp;gt;Low Signal&amp;lt;/CODE&amp;gt; will not select the A field's value unless the value itself is the lowest of all the defined values.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SELM&amp;lt;TD&amp;gt;Select Mechanism&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SELN&amp;lt;TD&amp;gt;Select Number&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NVL&amp;lt;TD&amp;gt;Index Value Location, an input link&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. They display the value and other parameters of the select record either textually or graphically.&lt;br /&gt;
&lt;br /&gt;
EGU is a string of up to 16 characters describing the units that the selection record manipulates. It is retrieved by the &amp;lt;CODE&amp;gt;get_units&amp;lt;/CODE&amp;gt; record support routine.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields set the upper and lower display limits for the VAL, HIHI, HIGH, LOW, and LOLO fields. Both the &amp;lt;CODE&amp;gt;get_graphic_double&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;get_control_double&amp;lt;/CODE&amp;gt; record support routines retrieve these fields.&lt;br /&gt;
&lt;br /&gt;
The PREC field determines the floating point precision with which to display VAL. It is used whenever the &amp;lt;CODE&amp;gt;get_precision&amp;lt;/CODE&amp;gt; record support routine is called.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for select records are the SCAN, READ, and limit alarms. The SCAN and READ alarms are called by the record or device support routines. The limit alarms are configured by the user in the HIHI, LOLO, HIGH, and LOW fields using numerical values. They specify conditions for the VAL field. For each of these fields, there is a corresponding severity field which can be either NO_ALARM, MINOR, or MAJOR. See [[RRM 3-14 Concepts#Alarm Specification|Alarm Specification]] for a complete explanation of alarms and these fields. [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;TD&amp;gt;Hihi Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;TD&amp;gt;High Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;TD&amp;gt;Low Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;TD&amp;gt;Lolo Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields are configurable by the user. They are used as deadbands for the archiver and monitor calls for the VAL field. Unless, VAL changes by more than the value specified by each, then the respective monitors will not be called. If these fields have a value of zero, everytime the VAL changes, monitors are triggered; if they have a value of -1, everytime the record is processed, monitors are triggered.  [[RRM 3-14 Concepts#Monitor Specification|Monitor Specification]] gives a complete explanation of alarms and deadbands.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the selection record. They are not configurable prior to run-time, nor are they modifiable at run-time. They represent the current state of the record. The record support routines use some of them for more efficient processing.&lt;br /&gt;
&lt;br /&gt;
The VAL field is the result of the selection record's processing. It can be accessed in the normal way by another record or through database access, but is not modifiable except by the record itself. The LALM, ALST, and the MLST are used to implement the HYST, ADEL, and MDEL hysteresis factors for the alarms, archiver, and monitors, respectively.&lt;br /&gt;
&lt;br /&gt;
The LA-LL fields are used to implement the monitors for each of the value fields, A-F. They represent previous input values. For example, unless LA is not equal to A, no monitor is invoked for A.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;TD&amp;gt;Last Alarmed Value &amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST &amp;lt;TD&amp;gt;Archive Last Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;TD&amp;gt;Monitor Last Value &amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LA&amp;lt;TD&amp;gt;Last A Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LB&amp;lt;TD&amp;gt;Last B Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LC&amp;lt;TD&amp;gt;Last C Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LD&amp;lt;TD&amp;gt;Last D Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LE&amp;lt;TD&amp;gt;Last E Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LF&amp;lt;TD&amp;gt;Last F Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LG&amp;lt;TD&amp;gt;Last G Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LH&amp;lt;TD&amp;gt;Last H Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LI&amp;lt;TD&amp;gt;Last I Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LJ&amp;lt;TD&amp;gt;Last J Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LK&amp;lt;TD&amp;gt;Last K Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;TD&amp;gt;Last L Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
IF NVL is a constant, SELN is set to its value. If NVL is a PV_LINK a channel access link is created.&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant value (or 1e30 if the constant has the value 0).&lt;br /&gt;
&lt;br /&gt;
For each input link that is of type PV_LINK, a channel access link is created.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the field is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
 upper_alarm_limit = HIHI&lt;br /&gt;
 upper_warning_limit = HIGH&lt;br /&gt;
 lower_warning_limit = LOW&lt;br /&gt;
 lower_alarm_limit = LOLO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# If NVL is a database or channel access link, SELN is obtained from NVL. Fetch all values if database or channel access links. If SELM is SELECTED, then only the selected link is fetched.&lt;br /&gt;
# Implement the appropriate selection algorithm. For SELECT_HIGH, SELECT_LOW, and SELECT_MEDIAN, input fields are ignored if they are undefined. If success, UDF is set to FALSE.&lt;br /&gt;
# Check alarms. This routine checks to see if the new VAL causes the alarm status and severity to change. If so, NSEV, NSTA, and LALM are set. It also honors the alarm hysteresis factor (HYST). Thus the value must change by more than HYST before the alarm status and severity is lowered.&lt;br /&gt;
# Check to see if monitors should be invoked.&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* Archive and value change monitors are invoked if ADEL and MDEL conditions are met&lt;br /&gt;
#* Monitors for A-L are checked whenever other monitors are invoked&lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Scan&amp;diff=2896</id>
		<title>RRM 3-14 Scan</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Scan&amp;diff=2896"/>
		<updated>2008-04-18T19:50:57Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= scan =&lt;br /&gt;
&lt;br /&gt;
: Ned D. Arnold&lt;br /&gt;
: Advanced Photon Source&lt;br /&gt;
: Argonne National Laboratory&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
&lt;br /&gt;
The basic function of a scan record is to move ''positioners'' through a series of steps and record ''detector'' data at each of the positions, the whole sequence being referred to as a ''scan''. Once the scan parameters are properly initialized, the scan record coordinates the entire scan and notifies any interested clients when the scan is complete. The data is stored in arrays within the record rather than collected point to point by an external application program. This allows for much faster scans than those coordinated from an external application program on a point to point basis.&lt;br /&gt;
&lt;br /&gt;
A single scan record supports a one dimensional scan. It is also possible to link scan records together to define multi-dimensional scans in a complex configuration.&lt;br /&gt;
&lt;br /&gt;
Each scan record can control up to four positioners and acquire data from up to four process variables (typically detector data or measured positions of devices) during a scan. Two additional output variables can be defined to trigger other process variables (usually ''detectors'') between the positioning phase and the data acquisition phase. These outputs will be referred to as ''detector triggers''.&lt;br /&gt;
&lt;br /&gt;
Although the typical use of a scan record is to move positioners and record detector data at each position, it can also be used for other applications. Any controllable device can be scanned through incremental values while recording data from any other process variables. For example, one of the positioner process variables could be used to vary the gain of a detector or the speed of a motor during a scan. Another example would be to use the scan record to vary several power supplies and record the beam position at each value of the supplies. In this context, the scan record becomes a general purpose &amp;quot;Vary w, x, y, z and record a, b, c, d&amp;quot; record. Therefore, throughout this document the word ''positioner'' and ''controller'' will be used synonymously. When referring to the data being recorded at each point, the word ''detector'' will be used.&lt;br /&gt;
&lt;br /&gt;
All of the process variable names used to identify positioners, detectors, and detector triggers are specified using ''reassignable links''. This allows a scan to be configured on the fly.&lt;br /&gt;
&lt;br /&gt;
Scan parameters, including the names of controllers and detectors, can be saved and restored using the BURT.&lt;br /&gt;
&lt;br /&gt;
NOTE: In this version, the PVs used in the reassignable fields must reside in the same IOC.&lt;br /&gt;
&lt;br /&gt;
=== A Simple Single Dimensional Scan ===&lt;br /&gt;
&lt;br /&gt;
The simplest database configuration for using a scan record is shown in [[#Figure 1|Figure 1]]. A thorough understanding of the operation of this configuration will allow more complex scans to be developed easily.&lt;br /&gt;
&lt;br /&gt;
When the scan is initiated, the scan record commands several positioners (TRANSFORM record and MOTOR record) to move to their starting positions. The WAIT_1 record detects when all movement is complete and forces the SCAN record to process again. The SCAN record realizes that the positioning is complete and thus triggers the Detectors. The WAIT_2 record detects when data is valid and forces the SCAN record to process yet again. The SCAN record will then read the Detector Data and command the positioners to their next step. This will continue until the SCAN record has completed the appropriate number of steps. At the end of the scan, the SCAN record contains data arrays for each of the ''detectors'', as well as arrays that contain the positions to which each controller was commanded at each point. A simple x-y plot using this data will provide the detector data vs. position results.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H5 ID=&amp;quot;Figure_1&amp;quot;&amp;gt;Figure 1: Typical Database Support for a SCAN&amp;lt;/H5&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:RRM 3-14 Scan-1.gif|Figure 1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Two Dimensional Scanning ===&lt;br /&gt;
&lt;br /&gt;
[[#Figure 2|Figure 2]] illustrates using two scan records to accomplish a two dimensional scan. The SCAN_X record controls the positioners for the X axis, while the SCAN_Y record controls the Y positioner.&lt;br /&gt;
&lt;br /&gt;
To initiate a scan, the SCAN_Y record is commanded to begin. It commands its ''positioners'' to the specified starting point. The WAIT_1 record detects when all motors are stopped and forces the SCAN_Y record to process again. The SCAN_Y record will now write to its ''Detector Trigger'', which in this case begins a scan of the SCAN_X record. The SCAN_X record will now go through its entire programmed scan, acquiring data from the detectors at each point.&lt;br /&gt;
&lt;br /&gt;
When the SCAN_X record is complete, the WAIT_4 record will force the processing of SCAN_Y, which will increment the position of the y-controller and initiate the x scan once again.&lt;br /&gt;
&lt;br /&gt;
This approach to configuring a two dimensional scan is very flexible. Note that to test the x scan, one could write to the &amp;lt;CODE&amp;gt;begin scan&amp;lt;/CODE&amp;gt; field of SCAN_X which would perform an entire x scan. Although the SCAN_Y record would get processed after the x scan was complete (via the WAIT_4 record), nothing would happen because it was not in the middle of a scan. In addition, any of the motors can be moved individually when a scan is not in process without any unexpected behavior (detectors would not be triggered unless the operator did it deliberately). One could even build a three dimensional scan by adding an additional scan record that initiates the y-scan after positioning a z-controller.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;H5 ID=&amp;quot;Figure_2&amp;quot;&amp;gt;Figure 2: A Two Dimensional Scan&amp;lt;/H5&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Image:RRM 3-14 Scan-2.gif|Figure 2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
Several options are available to control the execution of a scan. All parameters must be properly configured prior to initiating the scan.&lt;br /&gt;
&lt;br /&gt;
==== Positioner Parameters ====&lt;br /&gt;
&lt;br /&gt;
Each scan record may control up to four ''positioners'' that are commanded to a new ''desired position'' after collecting data at each point. The positioners are defined by typing in an ASCII string that represents the process variable name of the controller.&lt;br /&gt;
&lt;br /&gt;
There are three modes for determining the desired value for the positioner. The desired mode is specified in the P1SM-P4SM fields: &amp;lt;CODE&amp;gt;Linear&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Table&amp;lt;/CODE&amp;gt;, and &amp;lt;CODE&amp;gt;On-The-Fly&amp;lt;/CODE&amp;gt;. If a positioner is specified as &amp;lt;CODE&amp;gt;Linear&amp;lt;/CODE&amp;gt;, its desired value is determined by using parameters such as start position, step increment, number of points, and end position (which are explained below). If a positioner is specified as &amp;lt;CODE&amp;gt;Table&amp;lt;/CODE&amp;gt;, its next position is found in an array that has been loaded into the record prior to initiating a scan. If the positioner is specified as &amp;lt;CODE&amp;gt;On-The-Fly&amp;lt;/CODE&amp;gt;, it is commanded to the end position after the first data point is collected and not changed again for the duration of the scan.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P1SM&amp;lt;TD&amp;gt;Positioner 1 Step Mode&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P2SM&amp;lt;TD&amp;gt;Positioner 2 Step Mod&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P3SM&amp;lt;TD&amp;gt;Positioner 3 Step Mode&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P4SM&amp;lt;TD&amp;gt;Positioner 4 Step Mode&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Linear Mode Parameters ====&lt;br /&gt;
&lt;br /&gt;
If a positioner's step mode field (P1SM) specifies &amp;lt;CODE&amp;gt;Linear&amp;lt;/CODE&amp;gt;, a scan can be fully defined by three parameters, e.g., the start position (P1SP), the step increment (P1SI), and the number of data points (NPTS). A scan involving ''N'' controllers is defined by merely 2''N''+1 parameters, since NPTS applies to all positioners. For the convenience of interactive users, and to support channel access clients that define scans differently, the first positioner can be specified by as many as six parameters: starting position (P1SP), ending position (P1EP), center position (P1CP), position width (P1WD), step increments (P1SP), and NPTS. For the other three positioners, the same parameters are available minus the NPTS field, since that applies to all. The parameters that pertain to the same positioner are a set. The record imposes an upper limit (MPTS) on NPTS. Both MPTS and NPTS are configured by the user. The positioner width, configurable in the P1WD-P4WD fields, may be negative.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NPTS&amp;lt;TD&amp;gt;Number of Points &amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;100&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MPTS&amp;lt;TD&amp;gt;Maximum Number of Points&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;100&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P1SP&amp;lt;TD&amp;gt;Positioner 1 Starting Point&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P2SP&amp;lt;TD&amp;gt;Positioner 2 Starting Point&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P3SP&amp;lt;TD&amp;gt;Positioner 3 Starting Point&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P4SP&amp;lt;TD&amp;gt;Positioner 4 Starting Point&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P1EP&amp;lt;TD&amp;gt;Positioner 1 Ending Point&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P2EP&amp;lt;TD&amp;gt;Positioner 2 Ending Point&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P3EP&amp;lt;TD&amp;gt;Positioner 3 Ending Point&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P4EP&amp;lt;TD&amp;gt;Positioner 4 Ending Point&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P1CP&amp;lt;TD&amp;gt;Positioner 1 Center Point&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P2CP&amp;lt;TD&amp;gt;Positioner 2 Center Point&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P3CP&amp;lt;TD&amp;gt;Positioner 3 Center Point&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P4CP&amp;lt;TD&amp;gt;Positioner 4 Center Point&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P1WD&amp;lt;TD&amp;gt;Positioner 1 Width&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P2WD&amp;lt;TD&amp;gt;Positioner 2 Width&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P3WD&amp;lt;TD&amp;gt;Positioner 3 Width&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P4WD&amp;lt;TD&amp;gt;Positioner 4 Width&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P1SI&amp;lt;TD&amp;gt;Positioner 1 Step Increment&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P2SI&amp;lt;TD&amp;gt;Positioner 2 Step Increment&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P3SI&amp;lt;TD&amp;gt;Positioner 3 Step Increment&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P4SI&amp;lt;TD&amp;gt;Positioner 4 Step Increment&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Some of these fields can be redundant. For instance, the positioner width (P1WD-P4WD) is simply the distance from the starting position to the ending position (P''n''EP - P''n''SP). The record calculates redundant parameters for the same set, if the parameters are left undefined. However, the user can still configure the redundant parameters anyway.&lt;br /&gt;
&lt;br /&gt;
There is no unique prescription for removing inconsistencies among redundant parameters, and no hard-coded set of preferences among parameters is likely to please everyone. Therefore, the scan record allows the user to &amp;quot;freeze&amp;quot; parameters with flags so that they will not be changed by the record's internal attempts to ensure consistency among the parameter set. Frozen parameters can be changed by the user and by any other client, but not by the record. It is the user's responsibility to ensure that frozen parameters do not prevent freely specifying unfrozen parameters. For example, if both P''n''SI and NPTS are frozen, changes to P''n''WD will be rejected. Similarly, if both P''n''SP and P''n''CP are frozen, changes to P''n''EP and PnWD will have no effect. By default, P''n''SP, P''n''SI, and NPTS are frozen. When the record cannot adjust the parameters to be consistent, a flag is raised in the alert field (ALRT) and a message reported in the state message field (SMSG).&lt;br /&gt;
&lt;br /&gt;
The freeze flag override field (FFO) has two choices: &amp;lt;CODE&amp;gt;Use F-Flags&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;Override&amp;lt;/CODE&amp;gt;. &amp;lt;CODE&amp;gt;Override&amp;lt;/CODE&amp;gt; causes the current settings of all the freeze flags to be saved and monitors to be called for those that have changed. Use F-Flags causes the flags saved with the &amp;lt;CODE&amp;gt;Override&amp;lt;/CODE&amp;gt; command to be restored if any have changed. Changing the choice of this field at run-time causes the special record support routines to perform these actions. So if &amp;lt;CODE&amp;gt;Override&amp;lt;/CODE&amp;gt; is chosen at run-time, then all current settings are saved, and can be restored at a later time by changing the FFO field to &amp;lt;CODE&amp;gt;Use F-Flags&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FPTS&amp;lt;TD&amp;gt;Freeze Flag for NPTS&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FFO&amp;lt;TD&amp;gt;Freeze Flag Override&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P''n''FS&amp;lt;TD&amp;gt;Positioner ''n'' Freeze Flag for P''n''SP&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P''n''FE&amp;lt;TD&amp;gt;Positioner ''n'' Freeze Flag for P''n''EP&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P''n''FI&amp;lt;TD&amp;gt;Positioner ''n'' Freeze Flag for P''n''SI&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P''n''FC&amp;lt;TD&amp;gt;Positioner ''n'' Freeze Flag for P''n''CP&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P''n''FW&amp;lt;TD&amp;gt;Positioner ''n'' Freeze Flag for P''n''WD&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Although this approach may seem to present the user with an overwhelming number of choices when it comes to linear scans, it should be noted that by default the user only has to configure NPTS, and the starting position (P''n''SP) and the step increment (P''n''SI) fields for each positioner in order to fully define the scan of a positioner. The operator interface (usually DM, medm or another CA client) need only present the user with these fields. However, by changing the freeze flags from the defaults and presenting the user with different fields to fill in, the scan can be defined in a completely flexible way. The result is that a simple scan can be defined easily, but advanced users are not limited in flexibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Lookup Mode Parameters ====&lt;br /&gt;
&lt;br /&gt;
For those positioners using the linear mode, each desired position value (contained in the P''n''DV fields) is placed in the arrays referenced by the P''n''PA fields that are used for the lookup mode. Therefore, after the scan is complete, these arrays will always contain the sequence of positions to which the controller was commanded by the linear algorithm. For look-up mode, the user provides the values for the P''n''PA arrays prior to run-time. These arrays will contain no useful data if on-the-fly mode is used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P1PA&amp;lt;TD&amp;gt;Positioner 1 Position Array&amp;lt;TD&amp;gt;FLOAT[ ]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P2PA&amp;lt;TD&amp;gt;Positioner 2 Position Array&amp;lt;TD&amp;gt;FLOAT[ ]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P3PA&amp;lt;TD&amp;gt;Positioner 3 Position Array&amp;lt;TD&amp;gt;FLOAT[ ]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P4PA&amp;lt;TD&amp;gt;Positioner 4 Position Array&amp;lt;TD&amp;gt;FLOAT[ ]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Position Verification, Readback Process Variable, and Delta Parameters ====&lt;br /&gt;
&lt;br /&gt;
For each positioner, the user may specify a process variable in the R1PV-R4PV fields that corresponds to the actual (or measured) position of the motor. If this readback field is configured, the scan record will confirm after each movement that the actual position is within a specified delta to the desired position. The delta is specified in the R1DL-R4DL fields. If the delta is exceeded, the scan will abort and the record will go into an alarm state. A text field within the record (SMSG) will inform the operator of the error condition&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;R1PV&amp;lt;TD&amp;gt;Readback 1 Process Variable &amp;lt;TD&amp;gt;STRING [40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;R2PV&amp;lt;TD&amp;gt;Readback 2 Process Variable &amp;lt;TD&amp;gt;STRING [40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;R3PV&amp;lt;TD&amp;gt;Readback 3 Process Variable &amp;lt;TD&amp;gt;STRING [40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;R4PV&amp;lt;TD&amp;gt;Readback 4 Process Variable &amp;lt;TD&amp;gt;STRING [40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;R1DL&amp;lt;TD&amp;gt;Readback 1 Delta &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;R2DL&amp;lt;TD&amp;gt;Readback 2 Delta &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;R3DL&amp;lt;TD&amp;gt;Readback 3 Delta &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;R4DL&amp;lt;TD&amp;gt;Readback 4 Delta &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Detector Trigger Process Variables and Desired Command ====&lt;br /&gt;
&lt;br /&gt;
If valid process variable names are entered into the detector trigger fields (TIPV-T2PV) fields, the scan record will write the specified desired command (a floating point number) to that process variable between the positioning phase and the data acquisition phase.&lt;br /&gt;
&lt;br /&gt;
If neither detector trigger field contains a valid PV, the scan record will skip this step and acquire the data immediately. Note that specifying a ''Detector Trigger'' requires the scan record to be processed an additional time each point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T1PV&amp;lt;TD&amp;gt;Detector Trigger 1 Process Variable &amp;lt;TD&amp;gt;STRING [40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T2PV&amp;lt;TD&amp;gt;Detector Trigger 2 Process Variable &amp;lt;TD&amp;gt;STRING [40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T1CD&amp;lt;TD&amp;gt;Trigger 1 Command&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T2CD&amp;lt;TD&amp;gt; Trigger 2 Command&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Data Acquisition Parameters ===&lt;br /&gt;
&lt;br /&gt;
Each scan record can acquire data from up to four process variables at each point in the scan. This data will most commonly be from a detector or from a position readback (which would record the actual motor positions at each point and could then be compared to the desired position array).&lt;br /&gt;
&lt;br /&gt;
The scan results will most frequently be read as position arrays (P1PA-P4PA), which are mentioned above, and arrays of detector data (D1PV-D4PV) where each detector data element corresponds to the position element.&lt;br /&gt;
&lt;br /&gt;
For single dimension scans, the scan is complete when the Execute Scan flag (the EXCS) field is set back to zero by the record processing routine (during the scan it is set to 1). The application program can then read the position arrays and the data arrays (or have a monitor set on them so the record will post its monitors when complete).&lt;br /&gt;
&lt;br /&gt;
For two dimension scans similar to Figure 2, the application program should read the arrays from the SCAN_X record after the completion of each x scan and correlate it to the current y controller information. This will allow the application program to display data after each x scan. The scan record will buffer the data for only one x scan, so the application must read the arrays before the next x scan is completed. If the scan is too fast, the application program can contribute to the wait record algorithm such that the y -controllers are not moved until the application program has completely read the previous SCAN_X data.&lt;br /&gt;
&lt;br /&gt;
On slow scans, the application program may want to see that the scan is processed on a point by point basis. Therefore, the scan record will post monitors on fields that it updates each point, but it will not post monitors faster than 20 times per second. If a scan is proceeding at a rate less than 20 points per second, every point will be posted. If a scan is proceeding at 100 steps per second, scalar values will be posted every 5th point (approx.). In either case, the array data will contain every point at the completion of the scan. It is not recommended that the application program use the point to point data except for keeping the operator aware of the progress of the scan.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D1PV&amp;lt;TD&amp;gt;Data 1 Process Variable &amp;lt;TD&amp;gt;STRING [40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D2PV&amp;lt;TD&amp;gt;Data 2 Process Variable &amp;lt;TD&amp;gt;STRING [40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D3PV&amp;lt;TD&amp;gt;Data 3 Process Variable &amp;lt;TD&amp;gt;STRING [40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D4PV&amp;lt;TD&amp;gt;Data 4 Process Variable &amp;lt;TD&amp;gt;STRING [40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EXSC&amp;lt;TD&amp;gt;Execute Scan Flag&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D1DA&amp;lt;TD&amp;gt;Detector 1 Data Array&amp;lt;TD&amp;gt;FLOAT[ ]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D2DA&amp;lt;TD&amp;gt;Detector 2 Data Array&amp;lt;TD&amp;gt;FLOAT[ ]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D3DA&amp;lt;TD&amp;gt;Detector 3 Data Array&amp;lt;TD&amp;gt;FLOAT[ ]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D4DA&amp;lt;TD&amp;gt;Detector 4 Data Array&amp;lt;TD&amp;gt;FLOAT[ ]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
Prior to beginning an actual scan, the record can be commanded to check the scan parameters to ensure that all positioner requests are within reasonable limits. The record will do a &amp;quot;dry run&amp;quot; by calculating every positioner value (or looking it up in the table) and comparing it with the high range and low range values (P1HR-P4HR and P1LR-P4LR) associated with that positioner's Process Variable. (Drive limits are an attribute of most process variables). If any step would exceed the drive limits, the operator is notified via the SMSG field.&lt;br /&gt;
&lt;br /&gt;
Other than that, the High Range and Low Range value fields are only used as the display limits for an operator interface. The same is true for the rest of these fields, which are configured to affect the information displayed to the operator. Each positioner and the detector for each positioner have the following fields:&lt;br /&gt;
&lt;br /&gt;
* An Engineering Units Field (P1EU-P4EU, D1EU-D4EU), which has a string that is given to it by the user.&lt;br /&gt;
* A Precision Field (P1PR-P4PR, D1PR-D4PR), which holds an integer that controls the decimal precision that the corresponding field is displayed with. For instance, P1PR controls the decimal precision for positioner 1 array elements.&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P1EU&amp;lt;TD&amp;gt;Positioner 1 Eng. Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;16&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P1HR&amp;lt;TD&amp;gt;Pos. 1 High Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P1LR&amp;lt;TD&amp;gt;Pos. 1 Low Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P1PR&amp;lt;TD&amp;gt;Pos. 1 Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P2EU&amp;lt;TD&amp;gt;Pos. 2 Eng Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;16&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P2HR&amp;lt;TD&amp;gt;Pos. 2 High Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P2LR&amp;lt;TD&amp;gt;Pos. 2 Low Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P2PR&amp;lt;TD&amp;gt;Pos. 2 Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P3EU&amp;lt;TD&amp;gt;Pos. 3 Eng Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;16&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P3HR&amp;lt;TD&amp;gt;Pos. 3 High Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P3LR&amp;lt;TD&amp;gt;Pos. 3 Low Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P3PR&amp;lt;TD&amp;gt;Pos. 3 Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P4EU&amp;lt;TD&amp;gt;Pos. 4 Eng Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;16&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P4HR&amp;lt;TD&amp;gt;Pos. 4 High Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P4LR&amp;lt;TD&amp;gt;Pos. 4 Low Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P4PR&amp;lt;TD&amp;gt;Pos. 4 Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D1EU&amp;lt;TD&amp;gt;Detector 1 Eng. Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;16&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D1HR&amp;lt;TD&amp;gt;Det. 1 High Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D1LR&amp;lt;TD&amp;gt;Det. 1 Low Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D1PR&amp;lt;TD&amp;gt;Det. 1 Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D2EU&amp;lt;TD&amp;gt;Det. 2 Eng. Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;16&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D2HR&amp;lt;TD&amp;gt;Det. 2 High Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D2LR&amp;lt;TD&amp;gt;Det. 2 Low Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D2PR&amp;lt;TD&amp;gt;Det. 2 Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D3EU&amp;lt;TD&amp;gt;Det. 3 Eng. Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;16&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D3HR&amp;lt;TD&amp;gt;Det. 3 High Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D3LR&amp;lt;TD&amp;gt;Det. 3 Low Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D3PR&amp;lt;TD&amp;gt;Det. 3 Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D4EU&amp;lt;TD&amp;gt;Det. 4 Eng. Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;16&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D4HR&amp;lt;TD&amp;gt;Det. 4 High Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D4LR&amp;lt;TD&amp;gt;Det. 4 Low Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D4PR&amp;lt;TD&amp;gt;Det. 4 Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields are used to process the record, to implement monitors for certain fields, and/or to keep track of data for processing and/or for the operator. None of these fields are configurable by a database configuration tool. Most of them can be accessed at run-time, and many can be modified at run-time.&lt;br /&gt;
&lt;br /&gt;
The Code Version (VERS) field reflects the version of scan record processing routines.&lt;br /&gt;
&lt;br /&gt;
The VAL field is not used.&lt;br /&gt;
&lt;br /&gt;
The State Message (SMSG) field holds a message sent by the record that alerts the operator to an error condition. It can be cleared by writing a 0 to the Command (CMND) field. The CMND field sends two commands: Clear the State Message field (SMSG), which corresponds to 0; and Execute a &amp;quot;dry run&amp;quot;, checking the desired position against the range limits for each positioner, this command corresponding to 1.&lt;br /&gt;
&lt;br /&gt;
The Alert (ALRT) field is a flag which indicates if an error condition currently exists. 1 means YES; 0, NO. The cause of the condition will be displayed in the SMSG field.&lt;br /&gt;
&lt;br /&gt;
The Current Point (CPT) field contains the current point of an active scan. The Desired Value fields for each positioner (P1DV-P4DV) contain the desired value of each positioner for the current point (CPT) in the scan. The Readback Current Value (R1CV-R4CV) fields contain the current readback value for each positioner. The Detector Current Value (D1CV-D4CV) contain each detector's current value for the current point in the scan. The event posting for these fields is throttled to 20 Hz, so for fast scans not every value will be posted.&lt;br /&gt;
&lt;br /&gt;
The PCPT, PXSC, P1LV-P4LV, R1LV-R4LV, and D1LV-D4LV fields all contain the previous or &amp;quot;last&amp;quot; value for their corresponding fields. For instance, the R1LV field contains the last value for the R1CV field. These fields are used to implement monitors for the corresponding field. For instance, if CPT does not equal PCPT when the record is processed, then monitors are triggered for CPT.&lt;br /&gt;
&lt;br /&gt;
The Name Valid fields (''xx''NV) are flag fields which indicate if the corresponding process variable field contains an existing process variable. For instance, the P1NV field indicates if the P1PV field contains valid process variable; the R4NV field indicates whether R4PV contains a valid, existing process variable, and so on. These fields are used to decide if a process variable has been configured by the user. If not, the fields associated with that variable are ignored.&lt;br /&gt;
&lt;br /&gt;
The Database Address fields (''xx''DB) are of normally of interest only to the record itself, and are not even accessible at run-time. They contain pointers to the dbAddr structures of the corresponding process variables. For instance, P1DB points to the dbAddr structure of P1PV. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VERS&amp;lt;TD&amp;gt;Code Version&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1.0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field &amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SMSG&amp;lt;TD&amp;gt;State Message &amp;lt;TD&amp;gt;STRING [40]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CMND&amp;lt;TD&amp;gt;Command Field&amp;lt;TD&amp;gt;ENUM&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALRT&amp;lt;TD&amp;gt;Alert Field &amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RPVT&amp;lt;TD&amp;gt;Record Private &amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PXSC&amp;lt;TD&amp;gt;Previous Execute Scan&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CPT&amp;lt;TD&amp;gt;Current Point&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes*&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PCPT&amp;lt;TD&amp;gt;Previous Current Point &amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TOLP&amp;lt;TD&amp;gt;Time of Last Posting &amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P1NV&amp;lt;TD&amp;gt;Pos. 1 Name Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P2NV&amp;lt;TD&amp;gt;Pos. 2 Name Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P3NV&amp;lt;TD&amp;gt;Pos. 3 Name Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P4NV&amp;lt;TD&amp;gt;Pos. 4 Name Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;R1NV&amp;lt;TD&amp;gt;Readback 1 Name Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;R2NV&amp;lt;TD&amp;gt;Rbk. 2 Name Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;R3NV&amp;lt;TD&amp;gt;Rbk. 3 Name Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;R4NV&amp;lt;TD&amp;gt;Rbk. 4 Name Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T1NV&amp;lt;TD&amp;gt;Trigger 1 Name Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T2NV&amp;lt;TD&amp;gt;Trigger 2 Name Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D1NV&amp;lt;TD&amp;gt;Data 1 Name Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D2NV&amp;lt;TD&amp;gt;Data 2 Name Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D3NV&amp;lt;TD&amp;gt;Data 3 Name Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D4NV&amp;lt;TD&amp;gt;Data 4 Name Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P1DV&amp;lt;TD&amp;gt;Pos. 1 Desired Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes*&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P1LV&amp;lt;TD&amp;gt;Pos. 1 Last Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;R1CV&amp;lt;TD&amp;gt;Readback 1 Current Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes*&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;R1LV&amp;lt;TD&amp;gt;Readback 1 Last Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P2DV&amp;lt;TD&amp;gt;Pos. 2 Desired Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes*&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P2LV&amp;lt;TD&amp;gt;Pos. 2 Last Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;R2CV&amp;lt;TD&amp;gt;Readback 4 Current Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes*&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;R2LV&amp;lt;TD&amp;gt;Readback 2 Last Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P3DV&amp;lt;TD&amp;gt;Pos. 3 Desired Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes*&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P3LV&amp;lt;TD&amp;gt;Pos. 3 Last Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;R3CV&amp;lt;TD&amp;gt;Readback 4 Current Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes*&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;R3LV&amp;lt;TD&amp;gt;Readback 3 Last Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P4DV&amp;lt;TD&amp;gt;Pos. 4 Desired Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes*&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P4LV&amp;lt;TD&amp;gt;Pos. 4 Last Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;R4CV&amp;lt;TD&amp;gt;Readback 4 Current Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes*&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;R4LV&amp;lt;TD&amp;gt;Readback 4 Last Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D1CV&amp;lt;TD&amp;gt;Detector 1 Current Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes*&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D1LV&amp;lt;TD&amp;gt;Detector 1 Last Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D2CV&amp;lt;TD&amp;gt;Detector 2 Current Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes*&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D2LV&amp;lt;TD&amp;gt;Detector 2 Last Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D3CV&amp;lt;TD&amp;gt;Detector 3 Current Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes*&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D3LV&amp;lt;TD&amp;gt;Detector 3 Last Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D4CV&amp;lt;TD&amp;gt;Detector 4 Current Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes*&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D4LV&amp;lt;TD&amp;gt;Detector 4 Last Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P1DB&amp;lt;TD&amp;gt;Pos. 1 dbAddr&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P2DB&amp;lt;TD&amp;gt;Pos. 2 dbAddr&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P3DB&amp;lt;TD&amp;gt;Pos. 3 dbAddr&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P4DB&amp;lt;TD&amp;gt;Pos. 4 dbAddr&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;R1DB&amp;lt;TD&amp;gt;Readback 1 dbAddr&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;R2DB&amp;lt;TD&amp;gt;Readback 2 dbAddr&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;R3DB&amp;lt;TD&amp;gt;Readback 3 dbAddr&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;R4DB&amp;lt;TD&amp;gt;Readback 4 dbAddr&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T1DB&amp;lt;TD&amp;gt;Trigger 1 dbAddr&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T2DB&amp;lt;TD&amp;gt;Trigger 2 dbAddr&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D1DB&amp;lt;TD&amp;gt;Detector 1 dbAddr&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D2DB&amp;lt;TD&amp;gt;Detector 2 dbAddr&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D3DB&amp;lt;TD&amp;gt;Detector 3 dbAddr&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D4DB&amp;lt;TD&amp;gt;Detector 4 dbAddr&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_String_Calcout&amp;diff=1731</id>
		<title>RRM 3-14 String Calcout</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_String_Calcout&amp;diff=1731"/>
		<updated>2008-04-18T19:50:14Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= sCalcout Record =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;This page actually describes the EPICS-3.14-compatible version of the sCalcout record.  Text that does not apply to the 3.13-compatible version is rendered in &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;blue&amp;lt;/font&amp;gt;.  Documentation specific to the 3.13-compatible version is currently not available in this format, but may be found in the 'std' module of a 3.13-compatible synApps package.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The String Calculation Output or &amp;quot;sCalcout&amp;quot; record is derived from the Calcout record and extends it by supporting string expressions and operands.  The record has 12 numeric fields (A...L) and 12 string fields (AA...LL), which are used as input variables for the expression.  It calls an extended version of the EPICS calculation engine that accepts string arguments, supports a variety of string functions, and produces both numeric and string results, in the VAL and SVAL fields, respectively.  The record's output link writes string or numeric data, depending on the data type of the field to which it is linked. &lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* Scan Parameters&lt;br /&gt;
* Read Parameters&lt;br /&gt;
* Expression Parameters&lt;br /&gt;
* Output Parameters&lt;br /&gt;
* Operator Display Parameters&lt;br /&gt;
* Alarm Parameters&lt;br /&gt;
* Monitor Parameters&lt;br /&gt;
* Run-Time Parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The sCalcout record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the sCalcout record supports no direct interfaces to input hardware that might generate an interrupt, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the sCalcout record consist of 24 input links: 12 for numeric values (INPA&amp;amp;rarr;A, INPB&amp;amp;rarr;B, ... INPL&amp;amp;rarr;L); and 12  for string values (INAA&amp;amp;rarr;AA, INBB&amp;amp;rarr;BB, ... INLL&amp;amp;rarr;LL). The fields can be database links, channel access links, or constants. If they are links, they must contain a PV name. If they are constants, associated value fields will be initialized with the constants. These fields cannot be hardware addresses. In addition, the sCalcout record contains the fields INAV, INBV, ... INLV, which indicate the status of the links to numeric fields, and the fields IAAV, IBBV, ... ILLV, which indicate the status of the links to string fields.  These fields indicate whether or not the specified PV was found and a link to it established. See [[#Operator Display Parameters|Operator Display Parameters]] for an explanation of these fields. &lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPL&amp;lt;TD&amp;gt;Input Link L&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INAA&amp;lt;TD&amp;gt;Input Link AA&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INBB&amp;lt;TD&amp;gt;Input Link BB&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INLL&amp;lt;TD&amp;gt;Input Link LL&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Infix expression&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;String[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;quot;&amp;quot;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CLCV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Long&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Infix expression&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;String[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;quot;&amp;quot;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Long&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Like the Calcout record, the sCalcout record has the fields CALC and OCAL, in which the developer or user can enter an infix expression to be evaluated when the record is processed.  The numeric value resulting from evaluation of CALC will be placed in the VAL field, and the resulting string value will be placed in the SVAL field. VAL can then be used by the OOPT field (see [[#Output Parameters|Output Parameters]]) to determine whether or not to write to the output link or post an output event. Either VAL and SVAL can also be written to the output link. (If you elect to write an output value, the record will choose between VAL and SVAL, depending on the data type of the field at the other end of the output link.) &lt;br /&gt;
&lt;br /&gt;
The CALC and OCAL expressions are actually converted to opcodes and stored in postfix notation in the RPCL and ORPC fields. It is these expressions which are actually used to calculate VAL. A postfix expression can be evaluated more efficiently at run-time than an infix expression would be. When CALC or OCAL is changed at run-time, the record-support routine special() will call a function to check it, and convert it to postfix. &lt;br /&gt;
&lt;br /&gt;
In simple cases, OCAL is ignorable.  It's use will be described later, in [[#Output Parameters|Output Parameters]]. &lt;br /&gt;
&lt;br /&gt;
sCalcout-record expressions are very similar to standard EPICS Calc expressions, such as those used with the Calcout record.  But in place of the standard EPICS calc engine (which does not support string fields or operations), sCalcout-record uses the &amp;lt;i&amp;gt;sCalc&amp;lt;/i&amp;gt; engine, a separate piece of software, which normally is [[#Availability|distributed]] with the sCalcout record.  The differences between these engines that matter for numeric expressions are the following:&lt;br /&gt;
&lt;br /&gt;
* The constants S2R (arc-seconds-to-radians) and R2S are supported.&lt;br /&gt;
* &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;The functions MIN() and MAX() may have more than two arguments.&amp;lt;/font&amp;gt;&lt;br /&gt;
* &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;The binary operators '&amp;gt;&amp;amp;' (larger of the operands) and '&amp;lt;&amp;amp;' (smaller) are supported.&amp;lt;/font&amp;gt;&lt;br /&gt;
* The binary operator '!=' (not equal) is a permitted alternatives '#'.&lt;br /&gt;
* The unary operator '@' selects an input field by number.  (E.g., '@0' means 'A'.  If 'B' has the value 3, '@b' means 'D'.)&lt;br /&gt;
&lt;br /&gt;
Expressions supported by the sCalcout record can involve operands, algebraic operators and functions, trigonometric functions, relational operators, logical operators, string operators and functions, parentheses and commas, and the conditional '?:' operator.  Numeric and string operands are supported, and&lt;br /&gt;
any operand can be used with any operator or function.  If an operand has the &amp;quot;wrong&amp;quot; type for the function or operator with which it is used, the operand will be converted implicitly to the correct type.&lt;br /&gt;
&lt;br /&gt;
Grouping of operands with parentheses is important not only to specify the order in which operations are to be performed, but also to distinguish operands from operators whose names are spelled out, such as the logical operator 'AND'. For example, the expression 'AANDB', which could have meant 'A AND B', will be (mis)interpreted by the parser as 'AA NDB'. &lt;br /&gt;
&lt;br /&gt;
==== Operands ====&lt;br /&gt;
&lt;br /&gt;
The expression can use the values retrieved from the input links as operands, though constants can be used as operands too. These values retrieved from the input links are stored in the A-L, and AA-LL fields. The values to be used in the expression are simply referenced by the field name. For example, the value obtained from the INPA link is stored in the field A, and the value obtained from INPB is stored in field B. The field names can be included in the expression which will operate on their respective values, as in A+B. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;L&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value L&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legend: * If a non-blank input link is associated with this field, then it may&lt;br /&gt;
not be modified.  This is true even if the input link is invalid (in which case, the value will be 0, for a numeric field, or &amp;quot;Huh?&amp;quot;, for a string field).&lt;br /&gt;
&lt;br /&gt;
There are a few special operands not associated with input fields, but&lt;br /&gt;
defined by the record (more exactly, defined by the calc engine the record uses&lt;br /&gt;
to evaluate expressions).  All but &amp;lt;code&amp;gt;RNDM&amp;lt;/code&amp;gt; are constants.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;PI&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;3.141592654&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;D2R&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Degrees to radians (PI/180)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;R2D&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Radians to degrees (1/D2R)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;S2R&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc seconds to radians (D2R/3600)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;R2S&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Radians to arc seconds (1/S2R)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;RNDM&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Random number between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Algebraic Functions/Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ABS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Absolute value (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ABS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SQRT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Square root (one-argument function) (SQR is deprecated)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SQRT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Minimum (two&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-or-more&amp;lt;/font&amp;gt;-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MIN(A,B)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MAX&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Maximum (two&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-or-more&amp;lt;/font&amp;gt;-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX(A,B)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;CEIL&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ceiling (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;CEIL(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;FLOOR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Floor (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;FLOOR(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;INT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Nearest integer (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NINT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Nearest integer (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LOG&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Log base 10 (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LOG(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Natural logarithm (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LOGE&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Deprecated synonym for 'LN'&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LOGE(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;EXP&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential function (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;EXP(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;^&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential (binary) (Same as '**'.)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A^B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;**&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential (binary) (Same as '^'.)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A**B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;+&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Addition (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A+B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Subtraction (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A-B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;*&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Multiplication (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A*B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;/&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Division (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A/B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;%&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Modulo (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A%B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Negate (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;-A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NOT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Negate (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NOT A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;amp;gt;&amp;amp;amp;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Max (binary)&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;A&amp;gt;?B&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;amp;lt;&amp;amp;amp;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Min (binary)&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;?B&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Trigonometric Functions ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SIN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SINH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SINH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ASIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ASIN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;COS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;COSH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COSH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ACOS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ACOS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TAN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TAN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TANH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TANH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ATAN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ATAN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ATAN2&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Alternate form of arctangent (two-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ATAN2(A,B)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relational Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;gt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Greater than or equal to&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Greater than&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Less than or equal to&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Less than&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Not equal to (same as '#')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A!=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;#&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Not equal to (same as '!=')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A#B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;==&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Equal to (same as '=')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A==B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Equal to (same as '==')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Logical Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;amp;&amp;amp;amp;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;||&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A||B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical NOT&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;!A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Bitwise Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;|&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A|B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;OR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A OR B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;amp;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;AND&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A AND B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;XOR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise Exclusive OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A XOR B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;~&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;One's Complement&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;~A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Left shift&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;&amp;amp;lt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Right shift&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;&amp;amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Parentheses and Comma ====&lt;br /&gt;
&lt;br /&gt;
The open and close parentheses are supported. Nested parenthesis are supported.&lt;br /&gt;
&lt;br /&gt;
The comma is supported when used to separate the arguments of a binary function.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conditional Expression ====&lt;br /&gt;
&lt;br /&gt;
The C language's question mark operator is supported. The format is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;nbsp;&amp;amp;lt;expression&amp;amp;gt; ? &amp;amp;lt;expression-true result&amp;amp;gt; : &amp;amp;lt;expression-false  result&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== String Functions/Operators ====&lt;br /&gt;
&lt;br /&gt;
Most two-argument string functions and binary string operators are &amp;quot;overloaded&amp;quot;&lt;br /&gt;
numeric functions and operators that perform string operations only if&lt;br /&gt;
both of their arguments/operands are strings.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Minimum lexically (two&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-or-more&amp;lt;/font&amp;gt;-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MIN('a','b') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'a'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MAX&lt;br /&gt;
&amp;lt;td&amp;gt;Maximum lexically (two&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-or-more&amp;lt;/font&amp;gt;-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX('a','b') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'b'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;INT&lt;br /&gt;
&amp;lt;td&amp;gt;Find first number in string; return nearest integer (one-argument&lt;br /&gt;
function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT('1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;INT('abc1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NINT&lt;br /&gt;
&amp;lt;td&amp;gt;Find first number in string; return nearest integer (one-argument&lt;br /&gt;
function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT('1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 2&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;NINT('abc1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;+&lt;br /&gt;
&amp;lt;td&amp;gt;Concatenate (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'+'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'ab'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td&amp;gt;Delete first occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bca'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-|&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Delete first occurrence of substring (binary)&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bca'&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;|-&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Delete last occurrence of substring (binary)&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abc'&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically greater than or equal (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;gt;='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically greater than (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;gt;'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically less than or equal (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;lt;='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically less than (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;lt;'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically not equal to (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'!='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;==&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically equal to (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'=='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;DBL&lt;br /&gt;
&amp;lt;td&amp;gt;Convert argument to double (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;DBL('1') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.0&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;DBL('abc1.23') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.23&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;STR&lt;br /&gt;
&amp;lt;td&amp;gt;Convert argument to string (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;STR(1) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; '1.00000000'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;BYTE&lt;br /&gt;
&amp;lt;td&amp;gt;Convert first character of string argument to double (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;BYTE('abc') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 97.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;PRINTF&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Return string constructed from format string and string or&lt;br /&gt;
double argument (two-argument function)&amp;amp;nbsp; (NOTE: '$P' is a synonym for PRINTF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;Allowed format indicators: &amp;lt;B&amp;gt;%cdeEfgGiosuxX&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Disallowed indicators:&amp;lt;B&amp;gt; *&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;PRINTF(&amp;quot;%.2f&amp;quot;,1.23) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; '1.23'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SSCANF&lt;br /&gt;
&amp;lt;td&amp;gt;Return string or double parsed from string argument according&lt;br /&gt;
to format string (two-argument function) (NOTE: '$S' is a synonym for SSCANF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;Allowed format indicators: &amp;lt;B&amp;gt;%*[cdeEfgGhilosuxX&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Disallowed indicators: &amp;lt;B&amp;gt;$npw&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SSCANF('V=1.25', &amp;quot;%*2c%lf&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.25&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;TR_ESC&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Translate escape sequences into the characters they represent&lt;br /&gt;
(one-argument function).   (NOTE: '$T' is a synonym for TR_ESC.)&lt;br /&gt;
&amp;lt;BR&amp;gt;TR_ESC() applies dbTranslateEscape() to its argument. &lt;br /&gt;
&amp;lt;BR&amp;gt;This function is approximately the opposite of ESC().&lt;br /&gt;
&amp;lt;BR&amp;gt;An escaped null character will terminate the result string&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;TR_ESC(&amp;quot;a\x62c&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abc'&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;ESC&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Translate escape characters into equivalent escape sequences.&lt;br /&gt;
(one-argument function) (NOTE: '$E' is a synonym for ESC)&lt;br /&gt;
&amp;lt;BR&amp;gt;ESC() applies epicsStrSnEscaped() to its argument. &lt;br /&gt;
&amp;lt;BR&amp;gt;This function is approximately the opposite of TR_ESC().&lt;br /&gt;
&amp;lt;BR&amp;gt;The first null character found in the input string terminates it.&lt;br /&gt;
If there is no null chaacter, the string is assumed to be 40&lt;br /&gt;
characters long.&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;ESC(&amp;quot;a&amp;amp;lt;return&amp;amp;gt;c&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'a\rc'&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;[&lt;br /&gt;
&amp;lt;td&amp;gt;Substring&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abcdef'[1,3] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bcd'&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;BR&amp;gt;'abcdef'['ab','ef'] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'cd'&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;BR&amp;gt;'abcdef'[0,-1] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abcdef'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;{&lt;br /&gt;
&amp;lt;td&amp;gt;Substring substitution&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abcdef'{'cd','XX'} &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abXXef'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;td&amp;gt;String indicator&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;quot;abc&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;'&lt;br /&gt;
&amp;lt;td&amp;gt;String indicator&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Operand-Array Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;@&lt;br /&gt;
&amp;lt;td&amp;gt;Numeric array element.  Regard the numeric fields A-L as an array whose elements&lt;br /&gt;
are numbered 0-11, and return the element whose number follows.  (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;@A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;@@&lt;br /&gt;
&amp;lt;td&amp;gt;String array element.  Regard the string fields AA-LL as an array of strings whose&lt;br /&gt;
elements are numbered 0-11, and return the element whose number follows.  (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;@@A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Examples ====&lt;br /&gt;
&lt;br /&gt;
===== Algebraic Examples =====&lt;br /&gt;
A + B + 10 &lt;br /&gt;
Result is A + B + 10 &lt;br /&gt;
&lt;br /&gt;
===== Relational Examples =====&lt;br /&gt;
(A + B) &amp;lt; (C + D) &lt;br /&gt;
Result is 1 if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is 0 if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
===== Question Mark Examples =====&lt;br /&gt;
(A+B)&amp;lt;(C+D)?E:F+L+10 &lt;br /&gt;
Result is E if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is F+L+10 if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
(A+B)&amp;lt;(C+D)?E &lt;br /&gt;
Result is E if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is unchanged if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
===== Logical Examples =====&lt;br /&gt;
A&amp;amp;B &lt;br /&gt;
Causes the following to occur: &lt;br /&gt;
* Convert A to integer &lt;br /&gt;
* Convert B to integer &lt;br /&gt;
* Perform bit-wise AND of A and B &lt;br /&gt;
* Convert result to floating point &lt;br /&gt;
&lt;br /&gt;
===== String Examples =====&lt;br /&gt;
A + &amp;quot;abc&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
A + &amp;quot;abc1.2&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
A + AA  (where AA = &amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is A.  The strings &amp;quot;abc&amp;quot; and &amp;quot;abc1.2&amp;quot; will be converted implicitly to the number 0. &lt;br /&gt;
&lt;br /&gt;
A + DBL(&amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is A + 1.2.  Explicit conversion to a number (by DBL, INT, or NINT) is more aggressive than implicit conversion, and skips leading non-numeric characters. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abc&amp;quot; + &amp;quot;def&amp;quot; &lt;br /&gt;
:Result is &amp;quot;abcdef&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
PRINTF(&amp;quot;abc%1.2f&amp;quot;, A) (where A = 1.2345) &lt;br /&gt;
:Result is  &amp;quot;abc1.23&amp;quot;.&lt;br /&gt;
:NOTE: unlike the c-language function printf(&amp;lt;format&amp;gt;,&amp;lt;arg1&amp;gt;,&amp;lt;arg2&amp;gt;,...), this function accepts only one argument after the format string. &lt;br /&gt;
&lt;br /&gt;
SSCANF(AA, &amp;quot;%*3c%lf&amp;quot;) (where AA = &amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is &amp;quot;1.20000000&amp;quot;.  (The format fragment &amp;quot;%*3c&amp;quot; directs sscanf to ignore three characters.)&amp;lt;br&amp;gt;&lt;br /&gt;
:NOTE: unlike the c-language function  sscanf(&amp;lt;source&amp;gt;,&amp;lt;format&amp;gt;,&amp;lt;dest1&amp;gt;,&amp;lt;dest2&amp;gt;,...), this function cannot store to a variable, but only to the value stack. &lt;br /&gt;
&lt;br /&gt;
BYTE(&amp;quot;ABC&amp;quot;) &lt;br /&gt;
:Result is 65, the ASCII code for &amp;quot;A&amp;quot; in decimal. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[2,4] &lt;br /&gt;
:Result is &amp;quot;cde&amp;quot;.  (The first character of the string is numbered &amp;quot;0&amp;quot;.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[-2,-1] &lt;br /&gt;
:Result is &amp;quot;ef&amp;quot;.  (The last character of the string is numbered &amp;quot;-1&amp;quot;.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[&amp;quot;ab&amp;quot;,&amp;quot;ef&amp;quot;] &lt;br /&gt;
:Result is &amp;quot;cd&amp;quot;.  (If the first argument is a string, it returns the index of the first character after a successful match, or the first character in the string if no match was found.  If the second argument is a string, it returns the index of the last character before a successful match, or the last character in the string if no match was found.)  In other words, string arguments &amp;lt;i&amp;gt;delimit&amp;lt;/i&amp;gt; the substring they are specifying without participating in it.)&lt;br /&gt;
&lt;br /&gt;
A==2 ? &amp;quot;yes&amp;quot; : &amp;quot;no&amp;quot; &lt;br /&gt;
:Result is &amp;quot;yes&amp;quot; if A == 2; otherwise, result is &amp;quot;no&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;{&amp;quot;bcd&amp;quot;,&amp;quot;dcb&amp;quot;} &lt;br /&gt;
:Result is &amp;quot;adcbef&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;{&amp;quot;zzz&amp;quot;,&amp;quot;dcb&amp;quot;} &lt;br /&gt;
:Result is &amp;quot;abcdef&amp;quot;.  (If no match, then no replacement.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[1,-2][1,-2] &lt;br /&gt;
:Result is &amp;quot;cd&amp;quot; &lt;br /&gt;
&lt;br /&gt;
===== Array Examples =====&lt;br /&gt;
@0 &lt;br /&gt;
:Result is the value of the numeric variable A. (&amp;quot;@0&amp;quot; is just another name for A.)&lt;br /&gt;
&lt;br /&gt;
@@0 &lt;br /&gt;
:Result is the value of the string variable AA.&lt;br /&gt;
&lt;br /&gt;
@(A+B) &lt;br /&gt;
:Result is the value of the numeric variable whose number is given by the sum of A and B.&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters specify and control the output capabilities of the&lt;br /&gt;
sCalcout record. They determine when to write the output, where to write&lt;br /&gt;
it, and what the output will be. The OUT link specifies the Process Variable&lt;br /&gt;
to which the result will be written. The OOPT field determines the condition&lt;br /&gt;
that causes the output link to be written to. It's a menu field that has&lt;br /&gt;
six choices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Every Time&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;write output every time record is processed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;On Change&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;write output every time VAL changes, i.e., every time the result of the expression changes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;When Zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output if VAL is zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;When Non-zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output if VAL is non-zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Transition to Zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output only if VAL is zero and last value was non-zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Transition to Non-zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output only if VAL is non-zero and last value was zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Never&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;Don't write output ever.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DOPT field determines what data is written to the output link when&lt;br /&gt;
the output is executed. The field is a menu field with two options: &amp;lt;TT&amp;gt;Use&lt;br /&gt;
CALC&amp;lt;/TT&amp;gt; or &amp;lt;TT&amp;gt;Use OCAL&amp;lt;/TT&amp;gt;. If &amp;lt;TT&amp;gt;Use CALC&amp;lt;/TT&amp;gt; is specified, when&lt;br /&gt;
the record writes its output it will write the result of the expression&lt;br /&gt;
in the CALC record, that is, it will write the value of the VAL [SVAL]&lt;br /&gt;
field to a double [string] destination. If &amp;lt;TT&amp;gt;Use OCAL&amp;lt;/TT&amp;gt; is specified,&lt;br /&gt;
the record will instead write the result of the expression in the OCAL&lt;br /&gt;
field, which is contained in the OVAL field (string result in the OSV)&lt;br /&gt;
field. The OCAL field is exactly like the CALC field and has the same functionality:it can contain the string representation of an expression which is evaluated at run-time. Thus, if necessary, the record can use the result of the CALC expression to determine if data should be written and can use the result of the OCAL expression as the data to write.&lt;br /&gt;
&lt;br /&gt;
If the OEVT field specifies a non-zero integer and the condition&lt;br /&gt;
in the OOPT field is met, the record will post a corresponding event. If&lt;br /&gt;
the ODLY field is non-zero, the record pauses for the specified number&lt;br /&gt;
of seconds before executing the OUT link or posting the output event. During&lt;br /&gt;
this waiting period the record is &amp;quot;active&amp;quot; and will not be processed again&lt;br /&gt;
until the wait is over. The field DLYA is equal to 1 during the delay period.&lt;br /&gt;
The resolution of the delay entry is 1/60 of a second (it uses the VxWorks&lt;br /&gt;
&amp;lt;TT&amp;gt;tickLib&amp;lt;/TT&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The IVOA field specifies what action to take with the OUT link&lt;br /&gt;
if the sCalcout record enters an INVALID alarm status. The options are&lt;br /&gt;
&amp;lt;TT&amp;gt;Continue normally&amp;lt;/TT&amp;gt;, &amp;lt;TT&amp;gt;Don't drive outputs&amp;lt;/TT&amp;gt;, and &amp;lt;TT&amp;gt;Set output&lt;br /&gt;
to IVOV&amp;lt;/TT&amp;gt;. If the IVOA field is &amp;lt;TT&amp;gt;Set output to IVOV&amp;lt;/TT&amp;gt;, the data&lt;br /&gt;
entered into the IVOV field is written to the OUT link if the record alarm&lt;br /&gt;
severity is INVALID.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Specification&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTLINK&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;N/A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OOPT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Execute Option&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOPT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Data Option&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Calculation&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[36]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OVAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OEVT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Event To Issue&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ODLY&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Execution Delay&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Invalid Output Action&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Invalid Output Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output string value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NO&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;WAIT&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Wait for completion?&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Menu&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;quot;NoWait&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;No&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
The sCalcout record now uses device support to write to the&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; link. Soft device supplied with the record is selected with&lt;br /&gt;
the .dbd specification &amp;lt;pre&amp;gt; field(DTYP,&amp;quot;Soft Channel&amp;quot;) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This device support uses the record's &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; field to determine&lt;br /&gt;
whether to wait for completion of processing initiated by the &amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt;&lt;br /&gt;
link before causing the record to execute its forward link.  The mechanism by&lt;br /&gt;
which this waiting for completion is performed requires that the&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; link have the attribute &amp;lt;code&amp;gt;CA&amp;lt;/code&amp;gt; -- i.e., the link text&lt;br /&gt;
looks something like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  xxx:record.field &amp;lt;b&amp;gt;CA&amp;lt;/b&amp;gt; NMS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Currently, the record does not try to ensure that &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; and&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; are compatibly configured.  If &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; == &amp;quot;Wait&amp;quot;,&lt;br /&gt;
but the link looks like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; xxx:record.field &amp;lt;b&amp;gt;PP&amp;lt;/b&amp;gt; NMS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for example, then the record will not wait for completion before executing&lt;br /&gt;
its forward link.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator.&lt;br /&gt;
Some are also meant to represent the status of the record at run-time.&lt;br /&gt;
An example of an interactive MEDM display screen that displays the status&lt;br /&gt;
of the sCalcout record is located here.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is&lt;br /&gt;
supplied by the user and which describes the values being operated upon.&lt;br /&gt;
The string is retrieved whenever the routine &amp;lt;TT&amp;gt;get_units&amp;lt;/TT&amp;gt; is called.&lt;br /&gt;
The EGU string is solely for an operator's sake and does not have to be&lt;br /&gt;
used.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields only refer to the limits of the VAL,&lt;br /&gt;
HIHI, HIGH, LOW, and LOLO fields. PREC controls the precision of the VAL&lt;br /&gt;
field.&lt;br /&gt;
&lt;br /&gt;
The INAV-INLV and IAAV-ILLV fields indicate the status of the&lt;br /&gt;
link to the PVs specified in the INPA-INPL and INAA-INLL fields, respectively.&lt;br /&gt;
The fields can have three possible values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ext PV NC&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV wasn't found on this IOC and a Channel Access link hasn't&lt;br /&gt;
been established.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ext PV OK&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV wasn't found on this IOC and a Channel Access link has&lt;br /&gt;
been established.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Local PV&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV was found on this IOC.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Constant&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the corresponding link field is a constant.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The OUTV field indicates the status of the OUT link. It has the same possible&lt;br /&gt;
values as the INAV-INLV fields.&lt;br /&gt;
&lt;br /&gt;
The CLCV and OLCV fields indicate the validity of the expression&lt;br /&gt;
in the CALC and OCAL fields, respectively. If the expression is invalid,&lt;br /&gt;
the field is set to one.&lt;br /&gt;
&lt;br /&gt;
The DLYA field is set to one during the delay interval specified&lt;br /&gt;
in ODLY.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Engineering Units&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [16]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Display Precision&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;High Operating Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INAV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INBV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT PV Status&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CLCV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LONG&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LONG&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLYA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Delay Active&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;USHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Record Name&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [29]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Description&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [29]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IAAV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INAA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IBBV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INBB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ILLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INLL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for the sCalcout record are the SCAN,&lt;br /&gt;
READ, Calculation, and limit alarms. The SCAN and READ alarms are called&lt;br /&gt;
by the record support routines. The Calculation alarm is called by the&lt;br /&gt;
record processing routine when the CALC expression is an invalid one, upon&lt;br /&gt;
which an error message is generated.&lt;br /&gt;
&lt;br /&gt;
The following alarm parameters which are configured by the user&lt;br /&gt;
define the limit alarms for the VAL field and the severity corresponding&lt;br /&gt;
to those conditions.&lt;br /&gt;
&lt;br /&gt;
The HYST field defines an alarm deadband for each limit. See the&lt;br /&gt;
EPICS Record Reference Manual for a complete explanation of alarms&lt;br /&gt;
and these fields. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Hihi Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a High Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Low Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Lolo Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine when to send monitors for the&lt;br /&gt;
value fields. The monitors are sent when the value field exceeds the last&lt;br /&gt;
monitored field by the appropriate deadband, the ADEL for archiver monitors&lt;br /&gt;
and the MDEL field for all other types of monitors. If these fields have&lt;br /&gt;
a value of zero, every time the value changes, monitors are triggered;&lt;br /&gt;
if they have a value of -1, every time the record is scanned, monitors&lt;br /&gt;
are triggered.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER &amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields are not configurable using a configuration tool and none&lt;br /&gt;
are modifiable at run-time. They are used to process the record.&lt;br /&gt;
&lt;br /&gt;
The LALM field is used to implement the hysteresis factor for&lt;br /&gt;
the alarm limits.&lt;br /&gt;
&lt;br /&gt;
The LA-LL fields are used to decide when to trigger monitors for&lt;br /&gt;
the corresponding fields. For instance, if LA does not equal the value&lt;br /&gt;
for A, monitors for A are triggered. The MLST and MLST fields are used&lt;br /&gt;
in the same manner for the VAL field.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Last Alarmed Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Archive Last Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Monitor Last Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LAA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LBB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant value if the input link is CONSTANT or a channel access link is created if the input link is PV_LINK.&lt;br /&gt;
&lt;br /&gt;
A routine sCalcPostfix is called to convert the infix expression in CLCA-CLCV to postfix notation. The results are stored in RPCA-RPCP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch values from all valid input links.&lt;br /&gt;
# Call sCalcPerform(), which evaluates the expression specified in CALC and stores the result in VAL.  If sCalcPerform() returns success, UDF is set to FALSE.&lt;br /&gt;
#Check alarms. This routine checks to see if the new VAL causes the alarm status and severity to change. If so, NSEV, NSTA and LALM are set. It also honors the alarm hysteresis factor (HYST). Thus the value must change by at least HYST before the alarm status and severity changes.&lt;br /&gt;
# Determine if the Output Execution Option (OOPT) is met. If it is met, either execute the output link (and output event) immediately (if ODLY=0), or schedule a callback to do so after the specified interval. See the explanation for the &amp;lt;TT&amp;gt;execOutput()&amp;lt;/TT&amp;gt; routine below.&lt;br /&gt;
# Determine what fields should be posted, and with what attributes.&lt;br /&gt;
## Post all fields the record has changed.&lt;br /&gt;
## Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
## Archive and value change monitors are invoked if ADEL and MDEL conditions are met.&lt;br /&gt;
## NSEV and NSTA are reset to 0&lt;br /&gt;
# &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Call device support to&amp;lt;/font&amp;gt; execute output link.&lt;br /&gt;
# If we're not waiting for the output delay to expire, or for a completion callback, process the forward link, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if any of the fields A-L, CALC, OCAL, INPA-INPL, INAA-INLL, or OUT are changed.&lt;br /&gt;
For expressions fields, special() calls sCalcPostfix.  For value fields, special() keeps track of which fields have changed, because expressions will not be evaluated for fields that have been written to.  For link fields, special() starts the process of checking link status.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field&lt;br /&gt;
is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR,&lt;br /&gt;
else if the field has upper and lower limits defined they will be used,&lt;br /&gt;
else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the&lt;br /&gt;
field is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and&lt;br /&gt;
LOPR, else if the field has upper and lower limits defined they will be&lt;br /&gt;
used, else the upper and lower maximum values for the field type will be&lt;br /&gt;
used.&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
* upper_alarm_limit = HIHI&lt;br /&gt;
* upper_warning_limit = HIGH&lt;br /&gt;
* lower_warning_limit = LOW&lt;br /&gt;
* lower_alarm_limit = LOLO&lt;br /&gt;
&lt;br /&gt;
==== execOutput() ====&lt;br /&gt;
&lt;br /&gt;
# If DOPT field specifies the use of OCAL, call the routine sCalcPerform for the postfix version of the expression in OCAL. Otherwise, use VAL.&lt;br /&gt;
# If the Alarm Severity is INVALID, follow the option as designated by the field IVOA.&lt;br /&gt;
# If the Alarm Severity is not INVALID or IVOA specifies &amp;quot;Continue Normally&amp;quot;, &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;call device support to&amp;lt;/font&amp;gt; write the value of OVAL to &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;device or&amp;lt;/font&amp;gt; PV specified by the OUT link, and post the event in OEVT (if non-zero).&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
The sCalcout record is not included with EPICS base.  The 3.14-compatible version is available&lt;br /&gt;
as part of the [http://www.aps.anl.gov/aod/bcda/synApps/calc/calc.html calc] module, which is part of the [http://www.aps.anl.gov/aod/bcda/synApps synApps] package of EPICS-based synchrotron-beamline software.  The 3.13-compatible version is available as part of the [http://www.aps.anl.gov/aod/bcda/synApps/std/std.html std] module of a 3.13-compatible synApps distribution.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 7 JUNE 2006&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Pulse_Train&amp;diff=2894</id>
		<title>RRM 3-14 Pulse Train</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Pulse_Train&amp;diff=2894"/>
		<updated>2008-04-18T19:49:21Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= pulseTrain =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The normal use for the pulseTrain record type is to generate a pulse train for output.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* trigger parameters&lt;br /&gt;
* pulse parameters&lt;br /&gt;
* output parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* run-time parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The pulseTrain record has the standard fields for specifying under what circumstances the it will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition,  [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Note that I/O event scanning is only supported for those card types that interrupt.&lt;br /&gt;
&lt;br /&gt;
=== Trigger Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields determine the source of the trigger for each train. At least the gate type (GTYP) field must be configured by the user. It can be either &amp;lt;CODE&amp;gt;Hardware&amp;lt;/CODE&amp;gt; or &amp;lt;CODE&amp;gt;Software&amp;lt;/CODE&amp;gt;. If &amp;lt;CODE&amp;gt;Hardware&amp;lt;/CODE&amp;gt;, then the triggers are device dependent, and the HGV field determines gating control, HGV being device dependent.&lt;br /&gt;
&lt;br /&gt;
If the user configures GTYP to be software, then the soft gate value (SGV) field provides gating control. This field has the same possible values as HGV, &amp;lt;CODE&amp;gt;Active&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;Inactive&amp;lt;/CODE&amp;gt;, triggering a pulse when &amp;lt;CODE&amp;gt;Active&amp;lt;/CODE&amp;gt;, or not triggering a pule when &amp;lt;CODE&amp;gt;Inactive&amp;lt;/CODE&amp;gt;. The SGV value can be retrieved from the location specified in the Soft Gate Location (SGL) field, which must be a database link.&lt;br /&gt;
&lt;br /&gt;
The CEDG, CTYP, ECS, and ECR field may not have significance for all device support modules. For the modules they apply to, they control the timing of pulses. The CEDG field determines whether clock timing occurs on the rising edge or falling edge of a signal. It has two choices: &amp;lt;CODE&amp;gt;Rising Edge&amp;lt;/CODE&amp;gt; or &amp;lt;CODE&amp;gt;Falling Edge&amp;lt;/CODE&amp;gt;. The CTYP field determines whether the timing is controlled externally or internally and has two choices: &amp;lt;CODE&amp;gt;Internal&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;External&amp;lt;/CODE&amp;gt;. The ECS and ECR fields have significance only if CTYP specifies &amp;lt;CODE&amp;gt;External&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;GTYP&amp;lt;TD&amp;gt;Gate Type &amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HGV &amp;lt;TD&amp;gt;Hardware Gate Value&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SGL&amp;lt;TD&amp;gt;Soft Gate Location (Input Link)&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SGV&amp;lt;TD&amp;gt;Soft Gate Value &amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CTYP&amp;lt;TD&amp;gt; Clock Type    &amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CEDG&amp;lt;TD&amp;gt;Clock Signal Edge&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ECS&amp;lt;TD&amp;gt;External Clock Source&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ECR&amp;lt;TD&amp;gt;External Clock Rate, in Hz&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pulse Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters characterize the pulse train. The pulse train is characterized by the time duration of the entire train, which the user specifies in the Period (PER) field, and the percentage of that time when the signal is high, which the user specifies in the Duty Cycle (DCY) field. In the UNIT field, the user must specify the units of time which the time period is in. This field can be either &amp;lt;CODE&amp;gt;Seconds&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Milliseconds&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Microseconds&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Nanoseconds&amp;lt;/CODE&amp;gt;, or &amp;lt;CODE&amp;gt;Picoseconds&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;UNIT&amp;lt;TD&amp;gt;Units of time&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; PER&amp;lt;TD&amp;gt;Period, in UNITs &amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DCY&amp;lt;TD&amp;gt;Duty Cycle, percent &amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The OUT field contains the location where the pulse train record sends the actual pulse. If the pulseTrain uses hardware device support, it must specify the address of the I/O card, and the DTYP field must specify the appropriate device support module. Be aware that the address format differs according to the I/O bus used. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on the format of hardware addresses. You can see a list of the device support modules currently supported at the user's local site by using the dbst utility in R3.13.&lt;br /&gt;
&lt;br /&gt;
For records that use soft device support, OUT can be a constant, a database link or a channel access link, though if it's a constant, no output will be written. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on how to specify database links. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;TD&amp;gt;Output Link &amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. They display the value and other parameters of the pulse train either textually or graphically. The operating range fields (HOPR and LOPR) for the pulse train record apply to the VAL, PER, or OPER fields. They are retrieved when the &amp;lt;CODE&amp;gt;get_graphic_double&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;get_control_double&amp;lt;/CODE&amp;gt; record support routines are called for that field. The PREC field is used when the &amp;lt;CODE&amp;gt;get_precision&amp;lt;/CODE&amp;gt; record routine is called. It is used only for the value in the VAL field.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR &amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;4.3e+9&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR &amp;lt;TD&amp;gt;Low Operating Range &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision &amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The pulse train record has the alarm parameters common to all record types.  [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
The record uses these fields for processing and to implement monitors. The VAL field is not used.&lt;br /&gt;
&lt;br /&gt;
The Old Period (OPER), Old Duty Cycle (ODCY), and Old Soft Gate Value (OSGV) fields are used to implement monitors for the PER, DCY, and SGV fields, respectively. When the current value doesn't equal the old value, monitors are called for that field.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OPER&amp;lt;TD&amp;gt;Old Period, in UNITS&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ODCY&amp;lt;TD&amp;gt;Old Duty Cycle, percent&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OSGV&amp;lt;TD&amp;gt;Old Soft Gate Value&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value &amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLOW&amp;lt;TD&amp;gt;Low Logic Level &amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
This routine first checks that device support is available. If SGL is a constant then HGV is initialized with its value or a channel access link is created if SGL type is PV_LINK.&lt;br /&gt;
&lt;br /&gt;
Device support is then checked to see if write_pt is defined.&lt;br /&gt;
&lt;br /&gt;
If device support includes init_record, it is called.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field is VAL, PER, or OPER the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the field is VAL or PER the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# Check to see that the appropriate device support module exists. If it doesn't, an error message is issued and processing is terminated with the PACT field still set to TRUE. This ensures that processes will no longer be called for this record. Thus error storms will not occur.&lt;br /&gt;
# If SGL is DB_LINK and GTYP is Software, get SGV from SGL. If SGV has changed, save the duty cycle DCY value, call the write_pt routine with duty cycle =0, reset the duty cycle to the saved value, and set alarms if return status not zero. Then set the old soft gate value OSGV to SGV.&lt;br /&gt;
# Call write_pt routine. If device support set PACT to TRUE, then return.&lt;br /&gt;
# Set UDF to FALSE.&lt;br /&gt;
# Check to see if monitors should be invoked.&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* Archive and value change monitors on PER and DCY are invoked if values have changed.&lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
Each record must have an associated set of device support routines. The primary responsibility of the device support routines is to issue commands to the output device. The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;UNIT&amp;lt;TD&amp;gt;Units of time&amp;lt;TD&amp;gt;This field will be used to identify the time units used for time fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;TD&amp;gt;Output Link&amp;lt;TD&amp;gt;This field is used by the device support routines to locate its output.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PER&amp;lt;TD&amp;gt;Period, in UNITs&amp;lt;TD&amp;gt;Device support must use PER for pulse period.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DCY&amp;lt;TD&amp;gt;Duty Cycle, percent&amp;lt;TD&amp;gt;Device support must use DCY for the percent of time the signal is high.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLOW&amp;lt;TD&amp;gt;Low Logic Level&amp;lt;TD&amp;gt;Device support must use to determine logic low level.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CEDG&amp;lt;TD&amp;gt;Clock Signal Edge&amp;lt;TD&amp;gt;This field is used by the device support routines to force counting on leading or falling edge of signal.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;GTYP&amp;lt;TD&amp;gt;Gate Type &amp;lt;TD rowspan=2&amp;gt;Device support is responsible for using IGV to determine gating control if GTYP is internal, or SGV if GTYP is external.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SGV&amp;lt;TD&amp;gt;Soft Gate Value&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CTYP&amp;lt;TD&amp;gt;Clock Type &amp;lt;TD rowspan=3&amp;gt;If CTYP is external, device support is responsible for using ECR for the clock rate and if CTYP is internal, ECS is the clock source.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ECS&amp;lt;TD&amp;gt;External Cocksurely&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ECR&amp;lt;TD&amp;gt;External Clock Rate, in Hz&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== report ====&lt;br /&gt;
&lt;br /&gt;
 report()&lt;br /&gt;
&lt;br /&gt;
This routine is optional. If provided, it prints a report of all device modules.&lt;br /&gt;
&lt;br /&gt;
==== init ====&lt;br /&gt;
&lt;br /&gt;
 init()&lt;br /&gt;
&lt;br /&gt;
This routine is called once during IOC initialization.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is optional. If provided, it is called by the record support init_record routine.&lt;br /&gt;
&lt;br /&gt;
==== get_ioint_info ====&lt;br /&gt;
&lt;br /&gt;
 get_ioint_info(int cmd,struct dbCommon *precord,IOSCANPVT *ppvt)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the ioEventScan system each time the record is added or deleted from an I/O event scan list. cmd has the value (0,1) if the record is being (added to, deleted from) an I/O event list. It must be provided for any device type that can use the ioEvent scanner.&lt;br /&gt;
&lt;br /&gt;
==== write_pt ====&lt;br /&gt;
&lt;br /&gt;
 write_pt(precord)&lt;br /&gt;
&lt;br /&gt;
This routine issues commands to the output device. It returns the following values:&lt;br /&gt;
&lt;br /&gt;
* 0: Success.&lt;br /&gt;
* Other: Error.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Soft Device Support ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support module writes the current value of VAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Pulse_Delay&amp;diff=2893</id>
		<title>RRM 3-14 Pulse Delay</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Pulse_Delay&amp;diff=2893"/>
		<updated>2008-04-18T19:41:23Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= pulseDelay =&lt;br /&gt;
&lt;br /&gt;
The normal use for the pulseDelay record type is to generate pulses to be written to a device.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* trigger parameters&lt;br /&gt;
* pulse parameters&lt;br /&gt;
* output parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* run-time parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The pulse delay record has the standard fields for specifying under what circumstances it will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition,  [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Note that I/O event scanning is only supported for those card types that interrupt.&lt;br /&gt;
&lt;br /&gt;
=== Trigger Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields determine the source for the pulse triggers. Since the pulse delay record is a kind of output record, these fields resemble the desired output parameters of, for example, the analog output record.&lt;br /&gt;
&lt;br /&gt;
The trigger type (TTYP) field determines whether the pulse trigger comes from an external or internal source. Or, differently put, from a hardware source or from a soft trigger source. When TTYP is set to &amp;lt;CODE&amp;gt;Hardware&amp;lt;/CODE&amp;gt;, the HTS field becomes the trigger source for the record. The hard device support sets the HTS. When hardware is chosen, the OUT output link must specify a hardware address, and the DTYP field must specify the appropriate device support module.&lt;br /&gt;
&lt;br /&gt;
When software is specified in the TTYP field, the record uses the SGV field to generate pulses. The SGV field generates a pulse when its value is &amp;lt;CODE&amp;gt;Active&amp;lt;/CODE&amp;gt;, and generates no pulse when &amp;lt;CODE&amp;gt;Inactive&amp;lt;/CODE&amp;gt;. It's value can be manipulated by dbPuts at run-time, or else a value for STV can be retrieved from the soft trigger location (STL) field, an input link which must be a database link if STV is used.&lt;br /&gt;
&lt;br /&gt;
The GATE field can either enable or disable the generation of pulses. When GATE is 0, no pulses are triggered. When GATE is 1, pulses are triggered according to the record's configuration. A value for GATE can be read from the GLNK field, an input link which can be a constant, database link, or a channel access link. When a constant, GATE is initialized to the constant value. Otherwise, a value for GATE is fetched from the location specified in GLNK each time the record is processed.&lt;br /&gt;
&lt;br /&gt;
The CEDG, CTYP, ECS, and ECR field may not have significance for all device support modules. For the modules they apply to, they control the timing of pulses. The CEDG field determines whether clock timing occurs on the rising edge or falling edge of a signal. It has two choices: &amp;lt;CODE&amp;gt;Rising Edge&amp;lt;/CODE&amp;gt; or &amp;lt;CODE&amp;gt;Falling Edge&amp;lt;/CODE&amp;gt;. The CTYP field determines whether the timing is controlled externally or internally and has two choices: &amp;lt;CODE&amp;gt;Internal&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;External&amp;lt;/CODE&amp;gt;. The ECS and ECR fields have significance only if CTYP specifies &amp;lt;CODE&amp;gt;External&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TTYP&amp;lt;TD&amp;gt;Trigger Type (hardware/Software) &amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HTS &amp;lt;TD&amp;gt;Hardware Trigger  &amp;lt;TD&amp;gt;ENUM&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STL&amp;lt;TD&amp;gt;Soft Trigger Location (input link)&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STV&amp;lt;TD&amp;gt; Soft Trigger Value &amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;GATE &amp;lt;TD&amp;gt;Gate for enable/disable of Pulse Generation&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;GLNK&amp;lt;TD&amp;gt;Gate Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CTYP&amp;lt;TD&amp;gt;Clock Type&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CEDG&amp;lt;TD&amp;gt;Clock Signal Edge &amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ECS  &amp;lt;TD&amp;gt;External Clock Source&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ECR&amp;lt;TD&amp;gt;External Clock Rate, in Hz&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Pulse Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields determine the characteristics of the pulse that is generated by the record. The pulse delay (DLY) field is the most important of these fields. In it, the user specifies the time delay, from the trigger edge until the generation of the pulse. In the time units (UNIT) field, the user specifies the units of time that the delay should be in. The UNIT field can specify &amp;lt;CODE&amp;gt;Seconds&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Milliseconds&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Microseconds&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Nanoseconds&amp;lt;/CODE&amp;gt;, or &amp;lt;CODE&amp;gt;Picoseconds&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The user specifies the time duration of the pulse in the pulse width (WIDE) field, which also uses the UNIT field for its time units. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;UNIT&amp;lt;TD&amp;gt;Time units &amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLY&amp;lt;TD&amp;gt;Pulse Delay, in UNITS of time&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;WIDE&amp;lt;TD&amp;gt;Pulse Width, in UNITS of time&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to display the delay value (DLY)and other parameters of the pulse delay either textually or graphically.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields set the upper and lower display limits for the VAL, DLY, ODLY, WIDE, and OWID fields. Both the &amp;lt;CODE&amp;gt;get_graphic_double&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;get_control_double&amp;lt;/CODE&amp;gt; record support routines retrieve these fields.&lt;br /&gt;
&lt;br /&gt;
The PREC field determines the floating point precision with which to display DLY only. It is used whenever the &amp;lt;CODE&amp;gt;get_precision&amp;lt;/CODE&amp;gt; record support routine is called.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The pulse delay record has the alarm parameters common to all record types.  [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields are used by the record for processing and to implement monitors for some of the pulse fields.&lt;br /&gt;
&lt;br /&gt;
The old delay (ODLY) and old width (OWID) fields are used to implement monitors for the DLY and WIDE fields, respectively. If, for instance, the current value of the DLY field differs from the value held in ODLY, monitors are triggered for the DLY field.&lt;br /&gt;
&lt;br /&gt;
The PFLD indicates which of the following fields have changes since the record was last processed: DLY, WIDE, STV, GATE, or HTS. Some devices use PFLD so that adjustments can be made when any of these fields are changed.&lt;br /&gt;
&lt;br /&gt;
The VAl field indicates whether a pulse has been generated since the last time the record was processed. It is &amp;lt;CODE&amp;gt;ACTIVE&amp;lt;/CODE&amp;gt; if YES, &amp;lt;CODE&amp;gt;INACTIVE&amp;lt;/CODE&amp;gt; if NO.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ODLY&amp;lt;TD&amp;gt; Old Delay&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OWID&amp;lt;TD&amp;gt;Old Width&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PFLD &amp;lt;TD&amp;gt;Processing Field&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value &amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLOW&amp;lt;TD&amp;gt;Low Logic Level&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
This routine first checks that device support is available. Device support is then checked to see if write_pd is defined.&lt;br /&gt;
&lt;br /&gt;
Next this routine initializes STV with the value of STL if STL type is CONSTANT link or creates a channel access link if STL type is PV_LINK.&lt;br /&gt;
&lt;br /&gt;
GATE is likewise initialized if GLNK is CONSTANT or PV_LINK.&lt;br /&gt;
&lt;br /&gt;
If device support includes init_record, it is called.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
Sets the PFLD field to indicate if write to DLY, STV, GATE or HTS field caused processing of the record.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field is VAL, DLY, ODLY, WIDE or OWID the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the field is VAL, DLY, ODLY, WIDE or OWID the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# Check to see that the appropriate device support module exists. If it doesn't, an error message is issued and processing is terminated with the PACT field still set to TRUE. This ensures that processes will no longer be called for this record. Thus error storms will not occur.&lt;br /&gt;
# The values for STV and GATE are then fetched.&lt;br /&gt;
# Call write_pd routine.&lt;br /&gt;
# PFLD is reset to zero.&lt;br /&gt;
# If device support set PACT to TRUE, then return. &lt;br /&gt;
# Set UDF to FALSE.&lt;br /&gt;
# Check to see if monitors should be invoked.&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* Archive and value change monitors on DLY and WIDE are invoked if values have changed.&lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
Each record must have an associated set of device support routines. The primary responsibility of the device support routines is to issue commands to the output device. The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;TD&amp;gt;Output Link&amp;lt;TD&amp;gt;This field is used by the device support routines to locate its output.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;WIDE&amp;lt;TD&amp;gt;Pulse Width&amp;lt;TD&amp;gt;Device support must use WIDE for pulse width&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLY&amp;lt;TD&amp;gt;Pulse Delay&amp;lt;TD&amp;gt;Device support must use DLY for the delay after trigger edge until beginning of pulse.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLOW&amp;lt;TD&amp;gt;Low Logic Level&amp;lt;TD&amp;gt;Device support must use to determine logic low level.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;UNIT&amp;lt;TD&amp;gt;Time Units&amp;lt;TD&amp;gt;All values that refer to time measure will be in this time unit.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value&amp;lt;TD&amp;gt;This field will contain a 1 if a trigger occurred since the last time the record was processed if the device supports it.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PFLD&amp;lt;TD&amp;gt;Processing Field&amp;lt;TD&amp;gt;This field is used by some devices to indicate if the record was scanned to adjust certain fields such as delay or trigger source. If the device has a destructive read, then changes to these types of fields could write to the device instead of a read and a write.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TTYP&amp;lt;TD&amp;gt;Trigger Type&amp;lt;TD&amp;gt;This field is used by the device support routines to force triggering on leading or falling edge of signal if the specified device supports it.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HTS&amp;lt;TD&amp;gt;Hardware Trigger Source&amp;lt;TD&amp;gt;This field will be used to set the hardware trigger source if the device supports it.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STV&amp;lt;TD&amp;gt;Soft Trigger Source&amp;lt;TD&amp;gt;This field will be used for software to trigger an output delayed pulse if the device supports it.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CEDG&amp;lt;TD&amp;gt;Clock Signal Edge&amp;lt;TD&amp;gt;This field is used by the device support routines to force clock timing on leading or falling edge of signal.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CTYP&amp;lt;TD&amp;gt;Clock Type&amp;lt;TD rowspan=3&amp;gt;If CTYP is external, device support is responsible for using ECR for the clock rate and if CTYP is internal, ECS is the clock source.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ECS&amp;lt;TD&amp;gt;External Clock Source&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ECR&amp;lt;TD&amp;gt;External Clock Rate&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== report ====&lt;br /&gt;
&lt;br /&gt;
 report()&lt;br /&gt;
&lt;br /&gt;
This routine is optional. If provided, it prints a report of all device modules.&lt;br /&gt;
&lt;br /&gt;
==== init ====&lt;br /&gt;
&lt;br /&gt;
 init()&lt;br /&gt;
&lt;br /&gt;
This routine is called once during IOC initialization.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is optional. If provided, it is called by the record support init_record routine.&lt;br /&gt;
&lt;br /&gt;
==== get_ioint_info ====&lt;br /&gt;
&lt;br /&gt;
 get_ioint_info(int cmd,struct dbCommon *precord,IOSCANPVT *ppvt)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the ioEventScan system each time the record is added or deleted from an I/O event scan list.  cmd has the value (0,1) if the record is being (added to, deleted from) an I/O event list. It must be provided for any device type that can use the ioEvent scanner.&lt;br /&gt;
&lt;br /&gt;
==== write_pd ====&lt;br /&gt;
&lt;br /&gt;
 write_pd(precord)&lt;br /&gt;
&lt;br /&gt;
This routine issues commands to the output device.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Pulse_Counter&amp;diff=2892</id>
		<title>RRM 3-14 Pulse Counter</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Pulse_Counter&amp;diff=2892"/>
		<updated>2008-04-18T19:40:44Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= pulseCounter =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The normal use for the pulseCounter record type is to record counts and write them to a device.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* setup parameters&lt;br /&gt;
* write parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* run-time parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The pulse counter record has the standard fields for specifying under what circumstances it will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Note that I/O event scanning is only supported for those card types that interrupt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Setup Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters control the characteristics of the counter pulse. Normally, the user only needs to configure the gate type (GTYP) field. This field has two choices, &amp;lt;CODE&amp;gt;Hardware&amp;lt;/CODE&amp;gt; or &amp;lt;CODE&amp;gt;Software&amp;lt;/CODE&amp;gt;. If hardware is chosen, then the HGV field controls gating. The device support routine should set the HGV field.&lt;br /&gt;
&lt;br /&gt;
If GTYP is configured as software, then gating control is determined by the soft gate location (SGL) and soft gate value (SGV) fields. SGL must be a database link; SGV is read from that link. SGV can have two possible values, &amp;lt;CODE&amp;gt;Active&amp;lt;/CODE&amp;gt; or &amp;lt;CODE&amp;gt;Inactive&amp;lt;/CODE&amp;gt;. &amp;lt;CODE&amp;gt;Active&amp;lt;/CODE&amp;gt; causes the command routine (see below section on run-time parameters) to start counting, while &amp;lt;CODE&amp;gt;Inactive&amp;lt;/CODE&amp;gt; causes it to stop counting. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
The device support routines should also set the counter size (CSIZ), counter edge (CNTE), and count source (CNTS) fields. Nevertheless, these fields can be configured using a configuration tool. CSIZ can be 16 bit or 32 bit. With 32 bit, two counters are used. The CNTE field determines whether counting occurs on the rising or falling edge of the source signal. It's choices are &amp;lt;CODE&amp;gt;Rising Edge&amp;lt;/CODE&amp;gt; or &amp;lt;CODE&amp;gt;Falling Edge&amp;lt;/CODE&amp;gt;. The CNTS determines the count source during setup.&lt;br /&gt;
&lt;br /&gt;
Once again, most of these fields are set by the device support routines.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;GTYP&amp;lt;TD&amp;gt;Gate Type &amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SGL &amp;lt;TD&amp;gt;Soft Gate Location (Input Link) &amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SGV&amp;lt;TD&amp;gt;Soft Gate Value &amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HGV&amp;lt;TD&amp;gt;Hardware Gate Value&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CSIZ&amp;lt;TD&amp;gt;Counter Size&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]] &amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CNTE &amp;lt;TD&amp;gt; Count Edge&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CNTS &amp;lt;TD&amp;gt; Count Source&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Write Parameters ===&lt;br /&gt;
&lt;br /&gt;
The output link (OUT) specifies where the pulse counter write its output, i.e., the current, recorded value of the counter (VAL). If the record writes its a value to a device, the OUT output link must specify the address of the I/O card, and the DTYP field must contain the name of the appropriate device support module. Be aware that the address format differs according to the I/O bus used. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on the format of hardware addresses. You can see a list of the device support modules currently supported at the user's local site by using the dbst utility in R3.13.&lt;br /&gt;
&lt;br /&gt;
If the record uses soft device support, then it can be a database or channel access link, or a constant. If it's a constant, no output can be written. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;TD&amp;gt;Output Link   &amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. The display the value and other parameters of the pulse counter either textually or graphically. The operating range fields (HOPR and LOPR) for the pulse counter record apply only to the VAL field. They are retrieved when the &amp;lt;CODE&amp;gt;get_graphic_double&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;get_control_double&amp;lt;/CODE&amp;gt; record support routines are called. See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR &amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;4.3e+9&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR &amp;lt;TD&amp;gt;Low Operating Range &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The pulse counter record has the alarm parameters common to all record types.  [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the record itself and the device support routines. They are not configurable prior to run-time, and only the CMD and VAL fields are modifiable by a user at run-time.&lt;br /&gt;
&lt;br /&gt;
The CMD field controls the command routines that control the counter. It has five commands:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;B&amp;gt;&amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt;&amp;lt;/B&amp;gt;&lt;br /&gt;
: Read the current value of the counter&lt;br /&gt;
; &amp;lt;B&amp;gt;&amp;lt;CODE&amp;gt;Clear&amp;lt;/CODE&amp;gt;&amp;lt;/B&amp;gt;&lt;br /&gt;
: Stop and clear the counter, i.e., reset it to zero. Since the Stop command is also invoked, the Start command must be issued to start the counter after this command is invoked.&lt;br /&gt;
; &amp;lt;B&amp;gt;&amp;lt;CODE&amp;gt;Start&amp;lt;/CODE&amp;gt;&amp;lt;/B&amp;gt;&lt;br /&gt;
: Start counting&lt;br /&gt;
; &amp;lt;B&amp;gt;&amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt;&amp;lt;/B&amp;gt;&lt;br /&gt;
: Stop counting. This does not reset the counter.&lt;br /&gt;
; &amp;lt;B&amp;gt;&amp;lt;CODE&amp;gt;Setup&amp;lt;/CODE&amp;gt;&amp;lt;/B&amp;gt;&lt;br /&gt;
: Do not begin counting until Start command is issued.&lt;br /&gt;
&lt;br /&gt;
The VAL field holds the current number of recorded pulses. It is normally set by the read command.&lt;br /&gt;
&lt;br /&gt;
The record support routines and device support routines sometimes use the SCMD field to temporarily store the currently active CMD, after which they change the current, active command in the CMD field. When they are done, they will set the command back to the saved command.&lt;br /&gt;
&lt;br /&gt;
The OSGV field is used to implement monitors for the SGV field.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CMD &amp;lt;TD&amp;gt;Command &amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SCMD&amp;lt;TD&amp;gt;Save Command&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CPTR &amp;lt;TD&amp;gt;Callback   &amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Counter Value &amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OSGV &amp;lt;TD&amp;gt;Old Soft Gate Value &amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
This routine next checks to see that device support is available. If it does not exist, an error message is issued and processing is terminated.&lt;br /&gt;
&lt;br /&gt;
If SGL is a constant and GTYP is software, then SGV is initialized with its value. If SGL type is PV_LINK a channel access link is created.&lt;br /&gt;
&lt;br /&gt;
Device support is then checked to see if cmd_pc is defined.&lt;br /&gt;
&lt;br /&gt;
If device support includes init_record, it is called.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field is VAL the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the field is VAL the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
The routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# Check to see that the appropriate device support module exists. If it doesn't, an error message is issued and processing is terminated with the PACT field still set to TRUE. This ensures that processes will no longer be called for this record. Thus error storms will not occur.&lt;br /&gt;
# If SGL is DB_LINK and GTYP is Software, get SGV from SGL. If SGV has changed, save the CMD value, call the command routine with START if SGV =0 or with STOP if SGV is 1, reset the command to the saved value, and set alarms if return status not zero. If the device is not done (PACT TRUE), then issue a callback request for this record to process and return&lt;br /&gt;
# If CMD is not READ, call command routine and set CMD to READ. If the device is not done (PACT TRUE), then issue a callback request for this record to process again and return.&lt;br /&gt;
# Call command routine. If device support set PACT to TRUE, then return.&lt;br /&gt;
# Check to see if monitors should be invoked.&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* Archive and value change monitors on CMD are invoked if values have changed.&lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
Each record must have an associated set of device support routines. The primary responsibility of the device support routines is to issue commands to the output device. The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CSIZ &amp;lt;TD&amp;gt;Counter size&amp;lt;TD&amp;gt;This will determine to a 16 bit or 32 bit count is to be used. With 32 bit, two counters are used.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CMD &amp;lt;TD&amp;gt;Command &amp;lt;TD&amp;gt;The device support routine is responsible for processing the commands READ, CLEAR, START, STOP, and SETUP.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;GTYP,IGV&amp;lt;TD&amp;gt;Gate Type &amp;lt;TD&amp;gt;If GTYP is internal, device support is responsible for using IGV to determine gating control.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CNTE &amp;lt;TD&amp;gt;Count Edge &amp;lt;TD&amp;gt;This field is used by the device support routines to force counting on leading or falling edge of signal.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CNTS&amp;lt;TD&amp;gt; Count Source &amp;lt;TD&amp;gt; Device support must use CNTS to set count source during setup.&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== report ====&lt;br /&gt;
&lt;br /&gt;
 report()&lt;br /&gt;
&lt;br /&gt;
This routine is optional. If provided, it prints a report of all device modules.&lt;br /&gt;
&lt;br /&gt;
==== init ====&lt;br /&gt;
&lt;br /&gt;
 init()&lt;br /&gt;
&lt;br /&gt;
This routine is called once during IOC initialization.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is optional. If provided, it is called by the record support init_record routine.&lt;br /&gt;
&lt;br /&gt;
==== get_ioint_info ====&lt;br /&gt;
&lt;br /&gt;
 get_ioint_info(int cmd,struct dbCommon *precord,IOSCANPVT *ppvt)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the ioEventScan system each time the record is added or deleted from an I/O event scan list.   cmd has the value (0,1) if the record is being (added to, deleted from) an I/O event list. It must be provided for any device type that can use the ioEvent scanner.&lt;br /&gt;
&lt;br /&gt;
==== cmd_pc ====&lt;br /&gt;
&lt;br /&gt;
 cmd_pc(precord)&lt;br /&gt;
&lt;br /&gt;
This routine issues commands to the output device. It returns the following values:&lt;br /&gt;
&lt;br /&gt;
* 0: Success.&lt;br /&gt;
* Other: Error.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_PID_Control&amp;diff=2891</id>
		<title>RRM 3-14 PID Control</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_PID_Control&amp;diff=2891"/>
		<updated>2008-04-18T19:39:11Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= PID Control =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The PID record is used to maintain a setpoint that affects the output according to the difference between a controlled value and the setpoint. The record reads the controlled value and the setpoint when the record is processed, and then the PID expression computes the result, which is stored in a field (DM) that can be accessed via another record, usually an analog output record.&lt;br /&gt;
&lt;br /&gt;
There are three terms of the PID expression: the proportional, the integral, and the derivative. Using the gain that exists for each of these terms, the user can weight each contribution according to the characteristics of the controlled variable.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into several categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* controlled variable&lt;br /&gt;
* setpoint parameters&lt;br /&gt;
* expression parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
* monitor parameters&lt;br /&gt;
* run-time parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The PID record has the standard fields for specifying under what circumstances it will be processed. Note, however, that the integral and derivative parts of the algorithm are affected by the SCAN field, i.e., the scanning algorithm. For Passive, I/O Interrupt, and Event, or a period of 0.1 seconds, the interval is set to 1. For periods of 0.2, 0.5, 1, and 2 seconds, the interval is set to 2, 3, 4, and 5.&lt;br /&gt;
&lt;br /&gt;
These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used.&lt;br /&gt;
&lt;br /&gt;
The minimum delta time field (MDT) is a processing field particular to the PID record. It can be configured by the user or modified at run-time. It contains a floating point value which represents the minimum amount of time between record processing. If the amount of time between the last time the record was processed an the current time is less than MDT, than the record is not processed. If MDT is left at its default value (0), the minimum delta will be equal to one clock tick.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDT&amp;lt;TD&amp;gt;Minimum Delta Time&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Controlled Variable Parameters ===&lt;br /&gt;
&lt;br /&gt;
The control variable link field (CVL) is used to obtain the value of the controlled process variable, i.e., the value read into the CVAL field. The link must be a database link. If it is not a database link a MAJOR alarm is triggered when the record is processed. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CVL&amp;lt;TD&amp;gt;Controlled Value Location (an input link)&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CVAL&amp;lt;TD&amp;gt;Value of controlled variable&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;YesNo&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Setpoint Parameters ===&lt;br /&gt;
&lt;br /&gt;
The setpoint mode select (SMSL) and the setpoint location (STPL) fields determine where the setpoint value is obtained, which is held in the VAL field. The SMSL and STPL fields work just like the OMSL and DOL fields found in many output records (analog output, binary output, etc.).&lt;br /&gt;
&lt;br /&gt;
The SMSL field has two choices: &amp;lt;CODE&amp;gt;supervisory&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;closed_loop&amp;lt;/CODE&amp;gt;. When &amp;lt;CODE&amp;gt;supervisory&amp;lt;/CODE&amp;gt;, the setpoint, i.e., VAL, can be set via database access. When &amp;lt;CODE&amp;gt;closed_loop&amp;lt;/CODE&amp;gt;, the setpoint value is retrieved from the link specified in STPL, which must be a database link. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on how to specify database links. STML can also be a constant in which case VAL is set equal to the constant value when the record is initialized.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STPL&amp;lt;TD&amp;gt;Setpoint Location (an input link)&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SMSL&amp;lt;TD&amp;gt;Setpoint Mode select.&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Setpoint value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
The discrete form of the PID expression is as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE&amp;gt;&lt;br /&gt;
&amp;lt;TD ROWSPAN=3&amp;gt;M(n) = KP &amp;amp;times; E(n) + KI &amp;amp;times; SUMi ( E(i) &amp;amp;times; dT(n) ) + KD &amp;amp;times; (&lt;br /&gt;
&amp;lt;TD&amp;gt;E(n) - E(n-1)&lt;br /&gt;
&amp;lt;TD ROWSPAN=3&amp;gt;) + Mr&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD ALIGN=CENTER&amp;gt;-----------------&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD ALIGN=CENTER&amp;gt;dT(n)&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where&lt;br /&gt;
&lt;br /&gt;
: M(n) = value of manipulated variable at ''n''th instant.&lt;br /&gt;
: KP, KI, and KD = Proportional, Integral, Derivative gains set by the user&lt;br /&gt;
: E(n) = Error at ''n''th sampling instant&lt;br /&gt;
: SUMi = Sum from i=0 to i=n&lt;br /&gt;
: dT(n) = Time difference between ''n-1''th instance and ''n''th instance&lt;br /&gt;
: Mr = Midrange adjustment&lt;br /&gt;
&lt;br /&gt;
Taking the first difference between instances yields the following equation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE&amp;gt;&lt;br /&gt;
&amp;lt;TD ROWSPAN=3&amp;gt;delM(n) = KP &amp;amp;times; (E(n) - E(n-1)) + KI &amp;amp;times; E(i) &amp;amp;times; dT(n) + KD &amp;amp;times; (&lt;br /&gt;
&amp;lt;TD&amp;gt;E(n) - E(n-1)&lt;br /&gt;
&amp;lt;TD ROWSPAN=3&amp;gt;) - (&lt;br /&gt;
&amp;lt;TD&amp;gt;E(n) - E(n-1)&lt;br /&gt;
&amp;lt;TD ROWSPAN=3&amp;gt;)&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD ALIGN=CENTER&amp;gt;-----------------&lt;br /&gt;
&amp;lt;TD ALIGN=CENTER&amp;gt;-----------------&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD ALIGN=CENTER&amp;gt;dT(n)&lt;br /&gt;
&amp;lt;TD ALIGN=CENTER&amp;gt;dT(n-1)&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The terms KP, KI, and KD are the only terms configured by the user. These terms represent the gain for the proportional (KP), integral (KI) and the derivative (KD). A field exists for each of these terms (the KP, KI, and KD fields). KP should be configured according to the characteristics of the controlled variable; KI should be set equal to the number of times that the integral contribution repeats the proportional contribution; and KD should equal the number of minutes until the derivative contribution repeats the proportional contribution.&lt;br /&gt;
&lt;br /&gt;
The PID record calculates the other terms of the expression:&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;B&amp;gt;E(n)&amp;lt;/B&amp;gt;&lt;br /&gt;
: Error at ''n''th sampling instant, where the Error equals the setpoint minus the value of the controlled variable (VAL - CVAL).&lt;br /&gt;
; &amp;lt;B&amp;gt;delM(n)&amp;lt;/B&amp;gt;&lt;br /&gt;
: This is the end result of the PID expression -- the change in the manipulated value. The DM field holds this value.&lt;br /&gt;
; &amp;lt;B&amp;gt;dT(n)&amp;lt;/B&amp;gt;&lt;br /&gt;
: This is the time difference between n and n-1, between current and last samplings.&lt;br /&gt;
&lt;br /&gt;
The final result of the expression &amp;lt;CODE&amp;gt;delM(n)&amp;lt;/CODE&amp;gt; and the other parts of the expression are held in several different run-time fields, which are not configurable prior to run-time, nor modifiable at run-time, but can be accessed so that their values can be used. See [[#Run-time Parameters|Run-time Parameters]] in this chapter for more information on those fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;KP&amp;lt;TD&amp;gt;Proportional Gain&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;KI&amp;lt;TD&amp;gt;Integral Gain, in repeats per minute.&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;KD&amp;lt;TD&amp;gt;Derivative Gain, in repeats per minute&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. They display the setpoint (VAL), the controlled variable (CVAL), the change in manipulated value (DM), and other fields of the PID, either textually or graphically.&lt;br /&gt;
&lt;br /&gt;
EGU is a string of up to 16 characters describing the units of PID's manipulated values measures. It is retrieved by the &amp;lt;CODE&amp;gt;get_units&amp;lt;/CODE&amp;gt; record support routine. It must be configured by the user if at all.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields set the upper and lower display limits for the VAL, HIHI, HIGH, LOW, LOLO, VAL, and CVAL fields.&lt;br /&gt;
&lt;br /&gt;
The PREC field determines the floating point precision with which to display VAL and CVAL. It is used whenever the &amp;lt;CODE&amp;gt;get_precision&amp;lt;/CODE&amp;gt; record support routine is called.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for PID are the SCAN alarm, limit alarms, and an alarm that is triggered when CVL is not a database link. The SCAN and &amp;quot;CVL&amp;quot; alarms are called by the record routines and are always of MAJOR severity.&lt;br /&gt;
&lt;br /&gt;
The limit alarms trigger alarms on the VAL field. They are configured by the user in the HIHI, LOLO, HIGH, and LOW fields using floating point values. For each of these fields, there is a corresponding severity field which can be either NO ALARM, MINOR, or MAJOR. See [[RRM 3-14 Concepts#Alarm Specification|Alarm Specification]] for a complete explanation of alarms and these fields. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;TD&amp;gt;Hihi Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;TD&amp;gt;High Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;TD&amp;gt;Low Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;TD&amp;gt;Lolo Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;[[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine when to send monitors placed on the VAL field. These fields contain values configured by the user. The monitors are sent when the VAL field exceeds the last monitored field (MLST, ALST, and LALM) by the appropriate delta. Otherwise, value change monitors are not called. If these fields have a value of zero, everytime the value changes, a monitor will be triggered; if they have a value of -1, everytime the record is processed, monitors are triggered. The ADEL field is the delta used for archive monitors, and the MDEL field is the delta for all other types of monitors.&lt;br /&gt;
&lt;br /&gt;
The ODEL field specifies the hysteresis factor for the DM field, the field which holds the manipulated value. Unless the current value of DM is greater than the amount which the user specifies in this field, no monitors will be invoked. If zero, anytime DM is greater than zero, a monitor is triggered. If -1, each time the record is processed, a monitor is triggered. Note that when monitors are called for DM, they are also called for the following fields which comprise the PID expression: P, I, D, CT, DT, ERR, and DERR.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 Concepts#Monitor Specification|Monitor Specification]] for a complete explanation of monitors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ODEL&amp;lt;TD&amp;gt;Output deadband&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the PID. They are not configurable prior to run-time. They represent the current state of the PID and/or the terms of the PID expression. Many of them are used to process the PID record more efficiently.&lt;br /&gt;
&lt;br /&gt;
The DM field contains the change in manipulated value, the result of the PID expression (delM(n)). It is an increment which will usually be accessed by the desired output link (DOL) of an analog output record. Since its value represents an increment, the OIF field of the analog output record should be set to &amp;lt;CODE&amp;gt;Incremental&amp;lt;/CODE&amp;gt;. There is no output field with which the PID record can itself send output.&lt;br /&gt;
&lt;br /&gt;
The P, I, D, CT, DT, ERR, and DERR fields are used to calculate the PID expression. They are not configurable prior to, nor modifiable during, run-time, but may be of interest when fine tuning the gains of each contribution (KP, KI, KD). The following lists the fields as they relate to the expression:&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;B&amp;gt;ERR&amp;lt;/B&amp;gt;&lt;br /&gt;
: E(n). Error at current sampling (VAL-CVAL).&lt;br /&gt;
; &amp;lt;B&amp;gt;DERR&amp;lt;/B&amp;gt;&lt;br /&gt;
: E(n) - E(n-1). Difference between current error and error at last sampling.&lt;br /&gt;
; &amp;lt;B&amp;gt;P&amp;lt;/B&amp;gt;&lt;br /&gt;
: This field corresponds to &amp;lt;CODE&amp;gt;KP * DERR&amp;lt;/CODE&amp;gt;&lt;br /&gt;
; &amp;lt;B&amp;gt;I&amp;lt;/B&amp;gt;&lt;br /&gt;
: This field corresponds to &amp;lt;CODE&amp;gt;E(n) * dTn * KI&amp;lt;/CODE&amp;gt;&lt;br /&gt;
; &amp;lt;B&amp;gt;D&amp;lt;/B&amp;gt;&lt;br /&gt;
: This field corresponds to &amp;lt;CODE&amp;gt;Kp * Kd * (err/dt(n) - derr/dt(n-1))&amp;lt;/CODE&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The LALM, ALST, and MLST fields are used by record processing to implement the monitors for this record. These fields hold the values for the VAL field from the last time the record was processed. When the record is processed again the difference between these fields and current value of VAL exceeds the appropriate delta (MDEL for instance), then the appropriate monitors are triggered.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DM&amp;lt;TD&amp;gt;Change in Manipulated Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ODM&amp;lt;TD&amp;gt;Old DM. &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P&amp;lt;TD&amp;gt;Proportional contribution to DM.&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;I&amp;lt;TD&amp;gt;Integral contribution to DM.&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D&amp;lt;TD&amp;gt;Derivative contribution to DM.&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CT&amp;lt;TD&amp;gt;Clock ticks when previous process occurred.&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DT&amp;lt;TD&amp;gt;Time difference in seconds between processing steps.&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ERR&amp;lt;TD&amp;gt;Current error (VAL - CVAL).&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DERR&amp;lt;TD&amp;gt;Delta Error&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;TD&amp;gt;Value when last monitors for alarm were triggered&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;TD&amp;gt;Value when last monitors for archiver were triggered&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;TD&amp;gt;Value when last monitors for value changes were triggered&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
If STPL is a constant link, initialize VAL with it's value and set UDF to false.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
 upper_disp_limit = hopr&lt;br /&gt;
 lower_disp_limit = lopr&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values&lt;br /&gt;
&lt;br /&gt;
 upper_ctrl_limit = hopr&lt;br /&gt;
 lower_ctrl_limit = lopr&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
 upper_alarm_limit = hihi&lt;br /&gt;
 upper_warning_limit = high&lt;br /&gt;
 lower_warning_limit = low&lt;br /&gt;
 lower_alarm_limit = lolo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# If CVL is not a database link a major alarm is declared and the algorithm completes.&lt;br /&gt;
# The current value of CVAL is obtained from CVL.&lt;br /&gt;
# If STPL is a database link and SMSL is CLOSED_LOOP then VAL is obtained from STPL and UDF is set to false.&lt;br /&gt;
# The time difference since the last time step is calculated. If it is less than MDT or if no ticks have occurred since the last time the algorithm was executed, process just completes without raising any alarms, checking monitors, or scanning the forward link.&lt;br /&gt;
# The new values of P, I, D, OUT, CT, DT, ERR, and DERR are computed.&lt;br /&gt;
# Check alarms. This routine checks to see if the new VAL causes the alarm status and severity to change. If so NSEV and NSTA and LALM are set. It also honors the alarm hysteresis factor (HYST). Thus the value must change by at least HYST before the alarm status and severity changes.&lt;br /&gt;
# Checks to see if monitors should be invoked:&lt;br /&gt;
#* Alarm Monitors are invoked if ADEL and MDEL conditions are met.&lt;br /&gt;
#* Archive and value change monitors are invoked if ODEL conditions are met. If monitors are triggered from DM, they are also triggered for P, I, D, CT, DT, E&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Permissive&amp;diff=2890</id>
		<title>RRM 3-14 Permissive</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Permissive&amp;diff=2890"/>
		<updated>2008-04-18T19:38:14Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Permissive =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The permissive record is for communication between a server and a client. An example would be a sequence program server and an operator interface client.  By using multiple permissive records a sequence program can communicate its current state to the client.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* client-server parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* monitor parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The permissive record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the permissive record supports no direct interfaces to hardware, its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Client-server Parameters ===&lt;br /&gt;
&lt;br /&gt;
The client and server communicate through the VAL and watchdog flag (WFLG) fields. At initialization, both fields are set equal to 0, which means OFF. The server sets WFLG equal to ON when it is ready to accept a request. The client monitors WFLG and when WFLG equals 1, the client-server action is performed (a private matter between server and client).&lt;br /&gt;
&lt;br /&gt;
When WFLG is off--when the server is busy--the client program may turn the VAL field from OFF to ON. After the server finishes its task, it will notice that VAL is ON and will turn both WFLG and VAL OFF and performs the requested service.&lt;br /&gt;
&lt;br /&gt;
Note that the when WFLG is ON, the client program ''must not'' turn VAL to on.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL  &amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;WFLG &amp;lt;TD&amp;gt;Watchdog Flag&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
The label field (LABL) contains a string given to it that should describe the record in further detail. In  addition to the DESC field. See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LABL &amp;lt;TD&amp;gt; Label&amp;lt;TD&amp;gt;STRING [20]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Permissive record has the alarm parameters common to all record types.  [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields are used to trigger monitors for each field. Monitors for the VAL field are triggered when OVAL, the old value field, does not equal VAL. Likewise, OFLG causes monitors to be invoked for WFLG when WFLG does not equal OLFG.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OVAL&amp;lt;TD&amp;gt;  Old Value &amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OFLG&amp;lt;TD&amp;gt; Old Flag Value&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Two record support routines are provided: process, and get_value.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
process sets UDF to FALSE, triggers monitors on VAL and WFLG when they change, and scans the forward link if necessary.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
get_value fills in struct &amp;lt;CODE&amp;gt;valueDes&amp;lt;/CODE&amp;gt; so that it refers to VAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Multi-Bit_Binary_Output_Direct&amp;diff=1746</id>
		<title>RRM 3-14 Multi-Bit Binary Output Direct</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Multi-Bit_Binary_Output_Direct&amp;diff=1746"/>
		<updated>2008-04-18T19:37:24Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= mbboDirect - Multi-Bit Binary Output Direct =&lt;br /&gt;
&lt;br /&gt;
: Johnny Tang, Matthew Bickley, and Chip Watson&lt;br /&gt;
: Continuous Electron Beam Accelerator Facility&lt;br /&gt;
: Southeastern Universities Research Association&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The mbboDirect record performs the opposite function to that of the mbbiDirect record. It accumulates bits (in the fields B0 - BF) as unsigned characters, and converts them to a word which is then written out to hardware. If a bit field is non-zero, it is interpreted as a binary 1. On the other hand, if it is zero, it is interpreted as a binary 0.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The mbboDirect record's fields fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* desired output parameters&lt;br /&gt;
* write and convert parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
* run-time parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The mbboDirect record has the standard fields for specifying under what circumstances it will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Note that I/O event scanning is only supported for those card types that interrupt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Desired Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The mbboDirect record, like all output records, must specify where its output originates. The output mode select field (OMSL) determines whether the output originates from another record or from database access. When set to &amp;lt;CODE&amp;gt;closed_loop&amp;lt;/CODE&amp;gt;, the desired output is retrieved from the link specified in the desired output (DOL) field--which can specify either a database or channel access link--and placed into the VAL field. When set to &amp;lt;CODE&amp;gt;supervisory&amp;lt;/CODE&amp;gt;, the DOL field is ignored and the current value of VAL is used. The desired output can be written into the VAL field via dpPuts at run-time when the record is in &amp;lt;CODE&amp;gt;supervisory&amp;lt;/CODE&amp;gt; mode. DOL can also be a constant, in which case VAL is initialized to the constant value. Note that OMSL cannot be &amp;lt;CODE&amp;gt;closed_loop&amp;lt;/CODE&amp;gt; when DOL is a constant. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
VAL is then converted to RVAL in the routine described in the next section. However, the &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support module for the mbboDirect record writes the VAL field's value without any conversion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OMSL&amp;lt;TD&amp;gt;Output Mode Select&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL&amp;lt;TD&amp;gt;Desired Output Location (an Input Link)&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;ENUM&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Convert and Write Parameters ===&lt;br /&gt;
&lt;br /&gt;
For records that are to write values to hardware devices, the OUT output link must contain the address of the I/O card, and the DTYP field must specify the proper device support module. Be aware that the address format differs according to the I/O bus used. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on the format of hardware addresses. You can see a list of the device support modules currently supported at the user's local site by using the dbst utility in R3.13.&lt;br /&gt;
&lt;br /&gt;
If the mbboDirect record does not use the &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support module, then VAL is converted to RVAL, and RVAL is the actual 16-bit word sent out. RVAL is set equal to VAL and then shifted left by the number of bits specified in the SHFT field (the SHFT value is set by device support and is not configurable by the user). RVAL is then sent out to the location specified in the OUT field.&lt;br /&gt;
&lt;br /&gt;
For mbboDirect records that specify a database link, a channel access link, or a constant, the DTYP field must specify either one of two soft device support routines--&amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; or &amp;lt;CODE&amp;gt;Raw Soft Channel&amp;lt;/CODE&amp;gt;. The difference between the two is that &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; writes the desired output value from VAL directly to the output link while &amp;lt;CODE&amp;gt;Raw Soft Channel&amp;lt;/CODE&amp;gt; writes the value from RVAL to the output link after it has undergone the conversion described above. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;TD&amp;gt;Output Link&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RVAL&amp;lt;TD&amp;gt;Raw Data Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHFT&amp;lt;TD&amp;gt;Shift&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B0&amp;lt;TD&amp;gt;Bit 0 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B1&amp;lt;TD&amp;gt;Bit 1 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B2&amp;lt;TD&amp;gt;Bit 2 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B3&amp;lt;TD&amp;gt;Bit 3 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B4&amp;lt;TD&amp;gt;Bit 4 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B5&amp;lt;TD&amp;gt;Bit 5 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B6&amp;lt;TD&amp;gt;Bit 6 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B7&amp;lt;TD&amp;gt;Bit 7 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B8&amp;lt;TD&amp;gt;Bit 8 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B9&amp;lt;TD&amp;gt;Bit 9 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BA&amp;lt;TD&amp;gt;Bit 10 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BB&amp;lt;TD&amp;gt;Bit 12 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BC&amp;lt;TD&amp;gt;Bit 13 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BD&amp;lt;TD&amp;gt;Bit 14 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BE&amp;lt;TD&amp;gt;Bit 15 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BF&amp;lt;TD&amp;gt;Bit 16 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for mbboDirect records are the SCAN, READ, and INVALID alarms. The SCAN and READ alarms are not configurable by the user since they are always of MAJOR severity. See [[RRM 3-14 Concepts#Alarm Specification|Alarm Specification]] for a complete explanation of Scan and Read alarms.&lt;br /&gt;
&lt;br /&gt;
The IVOA field specifies an action to take when the INVALID alarm is triggered. There are three possible actions: &amp;lt;CODE&amp;gt;Continue normally&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Don't drive outputs&amp;lt;/CODE&amp;gt;, or &amp;lt;CODE&amp;gt;Set output to IVOV&amp;lt;/CODE&amp;gt;. When &amp;lt;CODE&amp;gt;Set output to IVOV&amp;lt;/CODE&amp;gt; is specified and a INVALID alarm is triggered, the record will write the value in the IVOV field to output. See [[RRM 3-14 Common#Invalid Alarm Output Action|Invalid Alarm Output Action]] for more information. [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
No fields exist for this record to have state alarms.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOA&amp;lt;TD&amp;gt;Invalid Alarm Output Action&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOV&amp;lt;TD&amp;gt;Invalid Alarm Output Value, in eng. units&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time and Simulation Mode Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the mbbo Direct record.&lt;br /&gt;
&lt;br /&gt;
MASK is used by device support routine to read the hardware register. Record support sets low order NOBT bits. Device support can shift this value.&lt;br /&gt;
&lt;br /&gt;
The LALM field implements the change of state alarm severity by holding the value of VAL when the previous change of state alarm was issued.&lt;br /&gt;
&lt;br /&gt;
MLST holds the value when the last monitor for value change was triggered.&lt;br /&gt;
&lt;br /&gt;
SDEF is used by record support to save time if no states are defined.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NOBT&amp;lt;TD&amp;gt;Number of Bits&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ORAW&amp;lt;TD&amp;gt;Old Raw Data&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MASK&amp;lt;TD&amp;gt;Mask&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;TD&amp;gt;Last Alarmed&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;TD&amp;gt;Monitor Last&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SDEF&amp;lt;TD&amp;gt;States Defined?&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following fields are used to operate the mbboDirect record in the simulation mode. See [[RRM 3-14 Common#Simulation Mode|Simulation Mode]] for more information on the simulation mode fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIOL&amp;lt;TD&amp;gt;Simulation Value Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVAL&amp;lt;TD&amp;gt;Simulation Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIML&amp;lt;TD&amp;gt;Simulation Mode Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMM&amp;lt;TD&amp;gt;Simulation Mode&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMS&amp;lt;TD&amp;gt;Simulation Mode Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
This routine initializes SIMM if SIML is a constant or creates a channel access link if SIML is PV_LINK. If SIOL is PV_LINK a channel access link is created.&lt;br /&gt;
&lt;br /&gt;
This routine next checks to see that device support is available.The routine next checks to see if the device support write routine is defined. If either device support or the device support write routine does not exist, an error message is issued and processing is terminated.&lt;br /&gt;
&lt;br /&gt;
If DOL is a constant, then VAL is initialized to its value and UDF is set to FALSE.&lt;br /&gt;
&lt;br /&gt;
MASK is cleared and then the NOBT low order bits are set.&lt;br /&gt;
&lt;br /&gt;
If device support includes init_record, it is called.&lt;br /&gt;
&lt;br /&gt;
init_common is then called to determine if any states are defined. If states are defined, SDEF is set to TRUE.&lt;br /&gt;
&lt;br /&gt;
If device support returns success, VAL is then set from RVAL and UDF is set to FALSE.&lt;br /&gt;
&lt;br /&gt;
==== Process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# Check to see that the appropriate device support module exists. If it doesn't, an error message is issued and processing is terminated with the PACT field still set to TRUE. This ensures that processes will no longer be called for this record. Thus error storms will not occur.&lt;br /&gt;
# If PACT is FALSE&lt;br /&gt;
#* If DOL is DB_LINK and OMSL is CLOSED_LOOP&lt;br /&gt;
#** Get value from DOL&lt;br /&gt;
#** Set PACT to FALSE&lt;br /&gt;
# Convert&lt;br /&gt;
#* If PACT is FALSE, compute RVAL&lt;br /&gt;
#** Set RVAL = VAL&lt;br /&gt;
#** Shift RVAL left SHFT bits&lt;br /&gt;
#* Status=write_mbboDirect&lt;br /&gt;
# If PACT has been changed to TRUE, the device support write output routine has started but has not completed writing the new value. In this case, the processing routine merely returns, leaving PACT TRUE.&lt;br /&gt;
# Check to see if monitors should be invoked.&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* Archive and value change monitors are invoked if MLST is not equal to VAL.&lt;br /&gt;
#* Monitors for RVAL and RBV are checked whenever other monitors are invoked.&lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
Each mbboDirect record must have an associated set of device support routines. The primary responsibility of the device support routines is to obtain a new raw mbbo value whenever write_mbboDirect is called. The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Description &amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PACT&amp;lt;TD&amp;gt;Processing Active&amp;lt;TD rowspan=5&amp;gt;See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for an explanation of these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DPVT&amp;lt;TD&amp;gt;Device Private&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;UDF&amp;lt;TD&amp;gt;VAL Undefined&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSEV&amp;lt;TD&amp;gt;New Alarm Severity&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSTA&amp;lt;TD&amp;gt;New Alarm Status&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NOBT&amp;lt;TD&amp;gt;Number of Bits&amp;lt;TD&amp;gt;Number of hardware bits accessed. They must be consecutive.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;TD&amp;gt;Output Link&amp;lt;TD&amp;gt;This field is used by the device support routines to locate its output.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RVAL&amp;lt;TD&amp;gt;Raw data value&amp;lt;TD&amp;gt;This is the value to be written to OUT.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RBV&amp;lt;TD&amp;gt;Read Back Value&amp;lt;TD&amp;gt;It is the responsibility of the device support modules to set this field.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MASK&amp;lt;TD&amp;gt;Mask&amp;lt;TD&amp;gt;This is a mask used to read the hardware. Record support sets the low order NOBT bits. The device support routine can shift the bits. The device support routine should perform the shift in init_record.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHFT&amp;lt;TD&amp;gt;Shift&amp;lt;TD&amp;gt;This can be set by the device support module at init_record time.&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== report ====&lt;br /&gt;
&lt;br /&gt;
 report(FILE fp, paddr)&lt;br /&gt;
&lt;br /&gt;
Not currently used.&lt;br /&gt;
&lt;br /&gt;
==== init ====&lt;br /&gt;
&lt;br /&gt;
 init()&lt;br /&gt;
&lt;br /&gt;
This routine is called once during IOC initialization.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is optional. If provided, it is called by the record support init_record routine. If MASK is used, it should be shifted if necessary and SHFT given a value.&lt;br /&gt;
&lt;br /&gt;
==== get_ioint_info ====&lt;br /&gt;
&lt;br /&gt;
 get_ioint_info(int cmd,struct dbCommon *precord,IOSCANPVT *ppvt)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the ioEventScan system each time the record is added or deleted from an I/O event scan list. cmd has the value (0,1) if the record is being (added to, deleted from) an I/O event list. It must be provided for any device type that can use the ioEvent scanner.&lt;br /&gt;
&lt;br /&gt;
==== write_mbboDirect ====&lt;br /&gt;
&lt;br /&gt;
 write_mbboDirect(precord)&lt;br /&gt;
&lt;br /&gt;
This routine must output a new value. It returns the following values:&lt;br /&gt;
&lt;br /&gt;
* 0: Success.&lt;br /&gt;
* Other: Error.&lt;br /&gt;
&lt;br /&gt;
=== Device Support For Soft Records ===&lt;br /&gt;
&lt;br /&gt;
This &amp;lt;CODE&amp;gt;SOft Channel&amp;lt;/CODE&amp;gt; module writes the current value of VAL.&lt;br /&gt;
&lt;br /&gt;
If the OUT link type is PV_LINK, then dbCaAddInlink is called by init_record.&lt;br /&gt;
&lt;br /&gt;
write_mbboDirect calls recGblPutLinkValue to write the current value of VAL.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 Common#Soft Output|Soft Output]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Multi-Bit_Binary_Output&amp;diff=1730</id>
		<title>RRM 3-14 Multi-Bit Binary Output</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Multi-Bit_Binary_Output&amp;diff=1730"/>
		<updated>2008-04-18T19:36:40Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= mbbo -- Multi-Bit Binary Output =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The normal use for the mbbo record type is to send a binary value (representing one of up to 16 states) to a Digital Output module. It is used for any device that uses more than one bit to control it. The mbbo record can also be used to write discrete values to other records via database or channel access links.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The multi-bit binary output fields fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* desired output parameters&lt;br /&gt;
* write and convert parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
* run-time parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The mbbo record has the standard fields for specifying under what circumstances it will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Note that I/O event scanning is only supported for those card types that interrupt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Desired Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The multi-bit binary output record, like all output records, must specify where its output originates. The output mode select (OMSL) field determines whether the output originates from another record or from database access (i.e., the operator). When set to &amp;lt;CODE&amp;gt;closed_loop&amp;lt;/CODE&amp;gt;, the desired output is retrieved from the link specified in the desired output (DOL) field--which can specify either a database or channel access link--and placed into the VAL field. When set to &amp;lt;CODE&amp;gt;supervisory&amp;lt;/CODE&amp;gt;, the DOL field is ignored and the current value of VAL is simply written. VAL can be changed via dpPuts at run-time when OMSL is &amp;lt;CODE&amp;gt;supervisory&amp;lt;/CODE&amp;gt;. The DOL field can also be a constant, in which case the VAL field is initialized to the constant value. If DOL is a constant, OMSL cannot be set to &amp;lt;CODE&amp;gt;closed_loop&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The VAL field itself usually consists of an index that specifies one of the states. The actual output written is the value of RVAL, which is converted from VAL following the routine explained in the next section. However, records that use the &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support module write the VAL field's value without any conversion.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OMSL&amp;lt;TD&amp;gt;Output Mode Select&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL&amp;lt;TD&amp;gt;Desired Output Location (an Input Link)&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;ENUM&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Convert and Write Parameters ===&lt;br /&gt;
&lt;br /&gt;
The device support routines write the desired output to the location specified in the OUT field. If the record uses soft device support, OUT can contain a constant, a database link, or a channel access link; however, if OUT is a constant, no value will be written.&lt;br /&gt;
&lt;br /&gt;
For records that write their values to hardware devices, the OUT output link must specify the address of the I/O card, and the DTYP field must specify the corresponding device support module. Be aware that the address format differs according to the I/O bus used. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on the format of hardware addresses. The user can see a list of the device support modules currently supported at the user's local site by using the &amp;lt;CODE&amp;gt;dbst&amp;lt;/CODE&amp;gt; utility in R3.13.&lt;br /&gt;
&lt;br /&gt;
For mbbo records that write to hardware, the value written to the output location is the value contained in RVAL, which is converted from VAL, VAL containing an index of one of the 16 states (0-15). RVAL is then set to the corresponding state value, the value in one of the fields ZRVL through FFVL. Then this value is shifted left according to the number in the SHFT field so that the value is in the correct position for the bits being used (the SHFT value is set by device support and is not configurable by the user).&lt;br /&gt;
&lt;br /&gt;
The state value fields ZRVL through FFVL must be configured by the user before run-time. When the state values are not defined, the states defined (SDEF) field is set to FALSE at initialization time by the record routines. When SDEF is FALSE, then the record processing routine does not try to find a match, RVAL is set equal to VAL, the bits are shifted using the number in SHFT, and the value is written thus.&lt;br /&gt;
&lt;br /&gt;
If the OUT output link specifies a database link, channel access link, or constant, then the DTYP field must specify either one of the two soft device support modules--&amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; or &amp;lt;CODE&amp;gt;Raw&amp;lt;/CODE&amp;gt; &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt;. &amp;lt;CODE&amp;gt;Soft&amp;lt;/CODE&amp;gt; &amp;lt;CODE&amp;gt;Channel&amp;lt;/CODE&amp;gt; writes the value of VAL to the output link, without any conversion, while &amp;lt;CODE&amp;gt;Raw Soft Channel &amp;lt;/CODE&amp;gt;writes the value from RVAL after it has undergone the above conversion. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on specifying links.&lt;br /&gt;
&lt;br /&gt;
Note also that when a string is retrieved as the desired output, a record support routine is provided (&amp;lt;CODE&amp;gt;put_enum_str&amp;lt;/CODE&amp;gt;) that will set check to see if the string matches one of the strings in the ZRST through FFST fields. If a match is found, RVAL is set equal to the corresponding state value of that string. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;TD&amp;gt;Output Link&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RVAL&amp;lt;TD&amp;gt;Raw Data Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHFT&amp;lt;TD&amp;gt;Shift&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SDEF&amp;lt;TD&amp;gt;States Defined?&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ZRVL&amp;lt;TD&amp;gt;Zero Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ONVL&amp;lt;TD&amp;gt;One value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TWVL&amp;lt;TD&amp;gt;Two Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;THVL&amp;lt;TD&amp;gt;Three Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FRVL&amp;lt;TD&amp;gt;Four Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FVVL&amp;lt;TD&amp;gt;Five Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SXVL&amp;lt;TD&amp;gt;Six Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVVL&amp;lt;TD&amp;gt;Seven Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EIVL&amp;lt;TD&amp;gt;Eight value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NIVL&amp;lt;TD&amp;gt;Nine Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TEVL&amp;lt;TD&amp;gt;Ten Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ELVL&amp;lt;TD&amp;gt;Eleven Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TVVL&amp;lt;TD&amp;gt;Twelve Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TTVL&amp;lt;TD&amp;gt;Thirteen Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FTVL&amp;lt;TD&amp;gt;Fourteen Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FFVL&amp;lt;TD&amp;gt;Fifteen Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ZRST&amp;lt;TD&amp;gt;Zero String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ONST&amp;lt;TD&amp;gt;One String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TWST&amp;lt;TD&amp;gt;Two String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;THST&amp;lt;TD&amp;gt;Three String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FRST&amp;lt;TD&amp;gt;Four String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FVST&amp;lt;TD&amp;gt;Five String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SXST&amp;lt;TD&amp;gt;Six String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVST&amp;lt;TD&amp;gt;Seven String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EIST&amp;lt;TD&amp;gt;Eight String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NIST&amp;lt;TD&amp;gt;Nine String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TEST&amp;lt;TD&amp;gt;Ten String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ELST&amp;lt;TD&amp;gt;Eleven String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TVST&amp;lt;TD&amp;gt;Twelve String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TTST&amp;lt;TD&amp;gt;Thirteen String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FTST&amp;lt;TD&amp;gt;Fourteen String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FFST&amp;lt;TD&amp;gt;Fifteen String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. These fields are used to display the value and other parameters of the mbbo record either textually or graphically. The ZRST-FFST fields contain strings describing each of the corresponding states. The &amp;lt;CODE&amp;gt;get_enum_str&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;get_enum_strs&amp;lt;/CODE&amp;gt; record routines retrieve these strings for the operator. &amp;lt;CODE&amp;gt;Get_enum_str&amp;lt;/CODE&amp;gt; gets the string corresponding to the value set in VAL, and &amp;lt;CODE&amp;gt;get_enum_strs&amp;lt;/CODE&amp;gt; retrieves all the strings.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ZRST,...,FFST&amp;lt;TD&amp;gt;Zero String, One String, ...&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for multi-bit binary outputs are the SCAN, READ, INVALID, and state alarms. The SCAN and READ alarms are called by the support modules and are not configurable by the user, as their severity is always MAJOR.&lt;br /&gt;
&lt;br /&gt;
The IVOA field specifies an action to take from a number of possible choices when the INVALID alarm is triggered. The IVOV field contains a value to be written once the INVALID alarm has been triggered if &amp;lt;CODE&amp;gt;Set output to IVOV&amp;lt;/CODE&amp;gt; has been chosen in the IVOA field. The severity of the INVALID alarm is not configurable by the user.&lt;br /&gt;
&lt;br /&gt;
The state alarms are configured in the below severity fields. These fields have the usual possible values for severity fields: NO ALARM, MINOR, and MAJOR.&lt;br /&gt;
&lt;br /&gt;
The unknown state severity field (UNSV), if set to MINOR or MAJOR, triggers an alarm when the record support routine cannot find a matching value in the state value fields for VAL or when VAL is out of range.&lt;br /&gt;
&lt;br /&gt;
The change of state severity field (COSV) triggers an alarm when the record's state changes, if set to MAJOR or MINOR.&lt;br /&gt;
&lt;br /&gt;
The state severity (ZRSV-FFSV) fields, when set to MAJOR or MINOR, trigger an alarm when VAL equals the corresponding field.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 Concepts#Alarm Specification|Alarm Specification]] for a complete explanation of discrete alarms and these fields. See [[RRM 3-14 Common#Invalid Alarm Output Action|Invalid Alarm Output Action]] for an explanation of the IVOA and IVOV fields. [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;UNSV&amp;lt;TD&amp;gt;Unknown State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;COSV&amp;lt;TD&amp;gt;Change of State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOA&amp;lt;TD&amp;gt;Invalid Alarm Output Action&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOV&amp;lt;TD&amp;gt;Invalid Alarm Output Value, in eng. units&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ZRSV&amp;lt;TD&amp;gt;0 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ONSV&amp;lt;TD&amp;gt;1 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TWSV&amp;lt;TD&amp;gt;2 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;THSV&amp;lt;TD&amp;gt;3 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FRSV&amp;lt;TD&amp;gt;4 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FVSV&amp;lt;TD&amp;gt;5 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SXSV&amp;lt;TD&amp;gt;6 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVSV&amp;lt;TD&amp;gt;7 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EISV&amp;lt;TD&amp;gt;8 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NISV&amp;lt;TD&amp;gt;9 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TESV&amp;lt;TD&amp;gt;10 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ELSV&amp;lt;TD&amp;gt;11 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TVSV&amp;lt;TD&amp;gt;12 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TTSV&amp;lt;TD&amp;gt;13 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FTSV&amp;lt;TD&amp;gt;14 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FFSV&amp;lt;TD&amp;gt;15 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-Time and Simulation Mode Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the multi-bit binary output.&lt;br /&gt;
&lt;br /&gt;
MASK is used by device support routine to read the hardware register. Record support sets low order of MASK the number of bits specified in NOBT. Device support can shift this value.&lt;br /&gt;
&lt;br /&gt;
The LALM field implements the change of state alarm severity by holding the value of VAL when the previous change of state alarm was issued.&lt;br /&gt;
&lt;br /&gt;
MLST holds the value when the last monitor for value change was triggered.&lt;br /&gt;
&lt;br /&gt;
SDEF is used by record support to save time if no states are defined; it is used for converting VAL to RVAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NOBT&amp;lt;TD&amp;gt;Number of Bits&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ORAW&amp;lt;TD&amp;gt;Old Raw Data&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MASK&amp;lt;TD&amp;gt;Mask&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;TD&amp;gt;Last Alarmed&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;TD&amp;gt;Monitor Last&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SDEF&amp;lt;TD&amp;gt;States Defined?&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following fields are used to operate the mbbo record in the simulation mode. See [[RRM 3-14 Common#Fields Common to Many Record Types|Fields Common to Many Record Types]] for more information on the simulation mode fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIOL&amp;lt;TD&amp;gt;Simulation Value Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVAL&amp;lt;TD&amp;gt;Simulation Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIML&amp;lt;TD&amp;gt;Simulation Mode Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMM&amp;lt;TD&amp;gt;Simulation Mode&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMS&amp;lt;TD&amp;gt;Simulation Mode Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
This routine initializes SIMM if SIML is a constant or creates a channel access link if SIML is PV_LINK. If SIOL is PV_LINK a channel access link is created.&lt;br /&gt;
&lt;br /&gt;
This routine next checks to see that device support is available. The routine next checks to see if the device support write routine is defined. If either device support or the device support write routine does not exist, an error message is issued and processing is terminated.&lt;br /&gt;
&lt;br /&gt;
If DOL is a constant, then VAL is initialized to its value and UDF is set to FALSE.&lt;br /&gt;
&lt;br /&gt;
MASK is cleared and then the NOBT low order bits are set.&lt;br /&gt;
&lt;br /&gt;
If device support includes init_record, it is called.&lt;br /&gt;
&lt;br /&gt;
init_common is then called to determine if any states are defined. If states are defined, SDEF is set to TRUE.&lt;br /&gt;
&lt;br /&gt;
If device support returns success, VAL is then set from RVAL and UDF is set to FALSE.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
Computes SDEF when any of the fields ZRVL,...FFVL change value.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_enum_str ====&lt;br /&gt;
&lt;br /&gt;
Retrieves ASCII string corresponding to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_enum_strs ====&lt;br /&gt;
&lt;br /&gt;
Retrieves ASCII strings for ZRST,...FFST.&lt;br /&gt;
&lt;br /&gt;
==== put_enum_str ====&lt;br /&gt;
&lt;br /&gt;
Checks if string matches ZRST,...FFST and if it does, sets VAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Check to see that the appropriate device support module exists. If it doesn't, an error message is issued and processing is terminated with the PACT field still set to TRUE. This ensures that processes will not longer be called for this record. Thus error storms will not occur.&lt;br /&gt;
# If PACT is FALSE&lt;br /&gt;
#* If DOL is DB_LINK and OMSL is CLOSED_LOOP&lt;br /&gt;
#** Get value from DOL&lt;br /&gt;
#** Set UDF to FALSE&lt;br /&gt;
#** Check for link alarm&lt;br /&gt;
#* If any state values are defined&lt;br /&gt;
#** If VAL &amp;amp;gt; 15, then raise alarm and go to 4&lt;br /&gt;
#** Else using VAL as index set RVAL = one of ZRVL,...FFVL&lt;br /&gt;
#* Else set RVAL = VAL&lt;br /&gt;
#* Shift RVAL left SHFT bits&lt;br /&gt;
# Convert&lt;br /&gt;
#* If PACT is FALSE, compute RVAL&lt;br /&gt;
#** If VAL is 0,...,15, set RVAL from ZRVL,...,FFVL&lt;br /&gt;
#** If VAL out of range, set RVAL = undefined&lt;br /&gt;
#* Status = write_mbbo&lt;br /&gt;
# Check alarms. This routine checks to see if the new VAL causes the alarm status and severity to change. If so, NSEV, NSTA and LALM are set.&lt;br /&gt;
# Check severity and write the new value. See [[RRM 3-14 Common#Simulation Mode|Simulation Mode]] and [[RRM 3-14 Common#Invalid Alarm Output Action|Invalid Alarm Output Action]] for more information.&lt;br /&gt;
# If PACT has been changed to TRUE, the device support write output routine has started but has not completed writing the new value. In this case, the processing routine merely returns, leaving PACT TRUE.&lt;br /&gt;
# Check to see if monitors should be invoked.&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* Archive and value change monitors are invoked if MLST is not equal to VAL.&lt;br /&gt;
#* Monitors for RVAL and RBV are checked whenever other monitors are invoked.&lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
Each mbbo record must have an associated set of device support routines. The primary responsibility of the device support routines is to obtain a new raw mbbo value whenever write_mbbo is called. The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PACT&amp;lt;TD&amp;gt;Processing Active&amp;lt;TD rowspan=4&amp;gt;See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for an explanation of these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DPVT&amp;lt;TD&amp;gt;Device Private&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSEV&amp;lt;TD&amp;gt;New Alarm Severity&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSTA&amp;lt;TD&amp;gt;New Alarm Status&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NOBT&amp;lt;TD&amp;gt;Number of Bits&amp;lt;TD&amp;gt;Number of hardware bits accessed. They must be consecutive.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;TD&amp;gt;Output Link&amp;lt;TD&amp;gt;This field is used by the device support routines to locate its output.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RVAL&amp;lt;TD&amp;gt;Raw data value.&amp;lt;TD&amp;gt;This is the value to be written to OUT.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RBV&amp;lt;TD&amp;gt;Read Back Value&amp;lt;TD&amp;gt;It is the responsibility of the device support modules to set this field.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MASK&amp;lt;TD&amp;gt;Mask&amp;lt;TD&amp;gt;This is a mask used to read the hardware. Record support sets the low order NOBT bits. The device support routine can shift the bits. The device support routine should perform the shift in init_record.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHFT&amp;lt;TD&amp;gt;Shift&amp;lt;TD&amp;gt;This can be set by the device support module at init_record time.&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== report ====&lt;br /&gt;
&lt;br /&gt;
 report(FILE fp, paddr)&lt;br /&gt;
&lt;br /&gt;
Not currently used.&lt;br /&gt;
&lt;br /&gt;
==== init ====&lt;br /&gt;
&lt;br /&gt;
 init()&lt;br /&gt;
&lt;br /&gt;
This routine is called once during IOC initialization.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is optional. If provided, it is called by the record support init_record routine. If MASK is used, it should be shifted if necessary and SHFT given a value.&lt;br /&gt;
&lt;br /&gt;
==== get_ioint_info ====&lt;br /&gt;
&lt;br /&gt;
 get_ioint_info(int cmd,struct dbCommon *precord,IOSCANPVT *ppvt)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the ioEventScan system each time the record is added or deleted from an I/O event scan list. cmd has the value (0,1) if the record is being (added to, deleted from) an I/O event list. It must be provided for any device type that can use the ioEvent scanner.&lt;br /&gt;
&lt;br /&gt;
==== write_mbbo ====&lt;br /&gt;
&lt;br /&gt;
 write_mbbo(precord)&lt;br /&gt;
&lt;br /&gt;
This routine must output a new value. It returns the following values:&lt;br /&gt;
&lt;br /&gt;
* 0: Success.&lt;br /&gt;
* Other: Error.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support For Soft Records ===&lt;br /&gt;
&lt;br /&gt;
==== Soft Channel ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; module writes the current value of VAL.&lt;br /&gt;
&lt;br /&gt;
If the OUT link type is PV_LINK, then dbCaAddInlink is called by init_record.&lt;br /&gt;
&lt;br /&gt;
write_mbbo calls recGblPutLinkValue to write the current value of VAL. See [[RRM 3-14 Common#Soft Output|Soft Output]] for more information.&lt;br /&gt;
&lt;br /&gt;
==== Raw Soft Channel ====&lt;br /&gt;
&lt;br /&gt;
This module writes RVAL to the location specified in the output link. It returns a 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Multi-Bit_Binary_Input_Direct&amp;diff=2887</id>
		<title>RRM 3-14 Multi-Bit Binary Input Direct</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Multi-Bit_Binary_Input_Direct&amp;diff=2887"/>
		<updated>2008-04-18T19:35:49Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= mbbiDirect - Multi-Bit Binary Input Direct =&lt;br /&gt;
&lt;br /&gt;
: Johnny Tang, Matthew Bickley, and Chip Watson&lt;br /&gt;
: Continuous Electron Beam Accelerator Facility&lt;br /&gt;
: Southeastern Universities Research Association&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The mbbiDirect record retrieves a sixteen-bit hardware value and converts it to an array of sixteen unsigned characters, each representing a bit of the word. These fields (B0-B9, BA-BF) are set to 1 if a bit is set, and 0 if not.&lt;br /&gt;
&lt;br /&gt;
This record's operation is similar to that of the multi-bit binary input record, and it has many fields in common with it. This record also has two available soft device support modules--&amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;Raw Soft Channel&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read and convert parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
* run-time and simulation mode parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Scan fields ===&lt;br /&gt;
&lt;br /&gt;
The mbbiDirect record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Note that I/O event scanning is only supported for those card types that interrupt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read and Convert fields ===&lt;br /&gt;
&lt;br /&gt;
The device support routines obtain the record's input from the device or link specified in the INP field. For records that obtain their input from devices, the INP field must contain the address of the I/O card, and the DTYP field must specify the proper device support module. Be aware that the address format differs according to the I/O bus used. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on the format of hardware addresses. You can see a list of the device support modules currently supported at the user's local site by using the &amp;lt;CODE&amp;gt;dbst&amp;lt;/CODE&amp;gt; utility in R3.13.&lt;br /&gt;
&lt;br /&gt;
Two soft device support modules can be specified in DTYP--&amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;Raw Soft Channel&amp;lt;/CODE&amp;gt;. &amp;lt;CODE&amp;gt;Raw Soft Channel&amp;lt;/CODE&amp;gt; reads the value into RVAL, upon which the normal conversion process is undergone. &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; reads any unsigned integer directly into VAL. For a soft mbbiDirect record, the INP field can be a constant, a database, or a channel access link. If INP is a constant, then the VAL is initialized to the INP value but can be changed at run-time via dbPutField or dbPutLink. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on how to database links.&lt;br /&gt;
&lt;br /&gt;
For records that don't use &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support, RVAL is used to determine VAL as follows:&lt;br /&gt;
&lt;br /&gt;
# RVAL is assigned to a temporary variable--rval = RVAL&lt;br /&gt;
# rval is shifted right SHFT number of bits.&lt;br /&gt;
# VAL is set equal to rval.&lt;br /&gt;
&lt;br /&gt;
Each of the fields, B0-BF, represents one bit of the word. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;ENUM&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INP&amp;lt;TD&amp;gt;Input Link&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RVAL&amp;lt;TD&amp;gt;Raw Data Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHFT&amp;lt;TD&amp;gt;Shift&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B0&amp;lt;TD&amp;gt;Bit 0 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B1&amp;lt;TD&amp;gt;Bit 1 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B2&amp;lt;TD&amp;gt;Bit 2 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B3&amp;lt;TD&amp;gt;Bit 3 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B4&amp;lt;TD&amp;gt;Bit 4 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B5&amp;lt;TD&amp;gt;Bit 5 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B6&amp;lt;TD&amp;gt;Bit 6 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B7&amp;lt;TD&amp;gt;Bit 7 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B8&amp;lt;TD&amp;gt;Bit 8 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B9&amp;lt;TD&amp;gt;Bit 9 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BA&amp;lt;TD&amp;gt;Bit 10 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BB&amp;lt;TD&amp;gt;Bit 12 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BC&amp;lt;TD&amp;gt;Bit 13 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BD&amp;lt;TD&amp;gt;Bit 14 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BE&amp;lt;TD&amp;gt;Bit 15 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BF&amp;lt;TD&amp;gt;Bit 16 Value&amp;lt;TD&amp;gt;UCHAR&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for multi-bit binary input direct records  are the SCAN and READ alarms. These alarms are not configurable by the user  since they are always of MAJOR severity. See [[RRM 3-14 Concepts#Alarm Specification|Alarm Specification]] for a complete explanation of Scan and Read alarms. No fields exist for the mbbi direct record to have state alarms.&lt;br /&gt;
&lt;br /&gt;
[[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time and Simulation Mode Fields ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the mbbi direct record. They are not configurable prior to run-time.&lt;br /&gt;
&lt;br /&gt;
MASK is used by device support routine to read hardware register. Record support sets low order NOBT bits in MASK. Device support can shift this value.&lt;br /&gt;
&lt;br /&gt;
The LALM field implements the change of state alarm severity by holding the value of VAL when the previous change of state alarm was issued.&lt;br /&gt;
&lt;br /&gt;
MLST holds the value when the last monitor for value change was triggered.&lt;br /&gt;
&lt;br /&gt;
SDEF is used by record support to save time if no states are defined.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NOBT&amp;lt;TD&amp;gt;Number of Bits&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ORAW&amp;lt;TD&amp;gt;Old Raw Data&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MASK&amp;lt;TD&amp;gt;Mask&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;TD&amp;gt;Last Alarmed&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;TD&amp;gt;Monitor Last&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SDEF&amp;lt;TD&amp;gt;States Defined?&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following fields are used to operate the mbbiDirect record in the simulation mode.  See [[RRM 3-14 Common#Fields Common to Many Record Types|Fields Common to Many Record Types]] for more information on these fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIOL&amp;lt;TD&amp;gt;Simulation Value Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVAL&amp;lt;TD&amp;gt;Simulation Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIML&amp;lt;TD&amp;gt;Simulation Mode Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMM&amp;lt;TD&amp;gt;Simulation Mode&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMS&amp;lt;TD&amp;gt;Simulation Mode Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
This routine initializes SIMM with the value of SIML if SIML type is CONSTANT link or creates a channel access link if SIML type is PV_LINK. SVAL is likewise initialized if SIOL is CONSTANT or PV_LINK.&lt;br /&gt;
&lt;br /&gt;
This routine next checks to see that device support is available and a device support read routine is defined. If either does not exist, an error message is issued and processing is terminated.&lt;br /&gt;
&lt;br /&gt;
Clears MASK and then sets the NOBT low order bits.&lt;br /&gt;
&lt;br /&gt;
If device support includes init_record, it is called.&lt;br /&gt;
&lt;br /&gt;
refresh_bits is then called to refresh all the bit fields based on a hardware value.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# Check to see that the appropriate device support module exists. If it doesn't, an error message is issued and processing is terminated with the PACT field still set to TRUE. This ensures that processes will no longer be called for this record. Thus error storms will not occur.&lt;br /&gt;
# readValue is called. See [[RRM 3-14 Common#Output Records|Output Records]] for information.&lt;br /&gt;
# If PACT has been changed to TRUE, the device support read routine has started but has not completed reading a new input value. In this case, the processing routine merely returns, leaving PACT TRUE.&lt;br /&gt;
# Convert.&lt;br /&gt;
#* status=read_mbbiDirect&lt;br /&gt;
#* PACT = TRUE&lt;br /&gt;
#* TIME = tsLocalTime&lt;br /&gt;
#* If status is 0, then determine VAL&lt;br /&gt;
#** Set rval = RVAL&lt;br /&gt;
#** Shift rval right SHFT bits&lt;br /&gt;
#** Set VAL = RVAL&lt;br /&gt;
#** If status is 1, return(0)&lt;br /&gt;
#* If status is 2, set status = 0&lt;br /&gt;
# Check to see if monitors should be invoked.&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has  changed.&lt;br /&gt;
#* Archive and value change monitors are invoked if MLST is not equal to VAL.&lt;br /&gt;
#* Monitors for RVAL are checked whenever other monitors are invoked.&lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
Each input record must have an associated set of device support routines.&lt;br /&gt;
&lt;br /&gt;
The primary responsibility of the device support routines is to obtain a new raw input value whenever read_mbbiDirect is called. The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PACT&amp;lt;TD&amp;gt;Processing Active&amp;lt;TD rowspan=5&amp;gt;See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for an explanation of these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DPVT&amp;lt;TD&amp;gt;Device Private&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;UDF&amp;lt;TD&amp;gt;VAL Undefined&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSEV&amp;lt;TD&amp;gt;New Alarm Severity&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSTA&amp;lt;TD&amp;gt;New Alarm Status&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NOBT&amp;lt;TD&amp;gt;Number of Bits&amp;lt;TD&amp;gt;Number of hardware bits accessed. They must be consecutive.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;This field is set by the device support routines if they don't want record support to set it.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INP&amp;lt;TD&amp;gt;Input Link&amp;lt;TD&amp;gt;This field is used by the device support routines to locate its input.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RVAL&amp;lt;TD&amp;gt;Raw Data Value&amp;lt;TD&amp;gt;It is the responsibility of the device support routine to give this field a value.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MASK&amp;lt;TD&amp;gt;Mask&amp;lt;TD&amp;gt;This is a mask used to read the hardware. Record support sets the low order NOBT bits. The device support routine can shift the bits. The device support routine should perform the shift in init_record.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHFT&amp;lt;TD&amp;gt;Shift&amp;lt;TD&amp;gt;This can be set by the device support module at init_record time.&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== report ====&lt;br /&gt;
&lt;br /&gt;
 report(FILE fp, paddr)&lt;br /&gt;
&lt;br /&gt;
Not currently used.&lt;br /&gt;
&lt;br /&gt;
==== init ====&lt;br /&gt;
&lt;br /&gt;
 init()&lt;br /&gt;
&lt;br /&gt;
This routine is called once during IOC initialization.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is optional. If provided, it is called by the record support init_record routine. If it uses MASK, it should shift it as necessary and also give SHFT a value.&lt;br /&gt;
&lt;br /&gt;
==== get_ioint_info ====&lt;br /&gt;
&lt;br /&gt;
 get_ioint_info(int cmd,struct dbCommon *precord,IOSCANPVT *ppvt)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the ioEventScan system each time the record is added or deleted from an I/O event scan list. cmd has the value (0,1) if the record is being (added to, deleted from) an I/O event list. It must be provided for any device type that can use the ioEvent scanner.&lt;br /&gt;
&lt;br /&gt;
==== read_mbbiDirect ====&lt;br /&gt;
&lt;br /&gt;
 read_mbbiDirect(precord)&lt;br /&gt;
&lt;br /&gt;
This routine must provide a new input value. It returns the following values:&lt;br /&gt;
&lt;br /&gt;
* 0: Success. A new raw value is placed in RVAL. The record support module determines VAL from RVAL and SHFT.&lt;br /&gt;
* 2: Success, but don't modify VAL.&lt;br /&gt;
* Other: Error.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support For Soft Records ===&lt;br /&gt;
&lt;br /&gt;
Two soft device support modules, &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;Raw Soft Channel&amp;lt;/CODE&amp;gt;, are provided for multi-bit binary input direct records not related to actual hardware devices. The INP link type must be either CONSTANT, DB_LINK, or CA_LINK.&lt;br /&gt;
&lt;br /&gt;
==== Soft Channel ====&lt;br /&gt;
&lt;br /&gt;
For this module, read_mbbiDirect always returns a value of 2, which means that no conversion is performed.&lt;br /&gt;
&lt;br /&gt;
If the INP link type is constant, then the constant value is stored into VAL by init_record, and UDF is set to FALSE. VAL can be changed via dbPut requests. If the INP link type is PV_LINK, then dbCaAddInlink is called by init_record.&lt;br /&gt;
&lt;br /&gt;
read_mbbiDirect calls recGblGetLinkValue to read the current value of VAL.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 Common#Input Records|Input Records]] for a further explanation.&lt;br /&gt;
&lt;br /&gt;
If the return status of recGblGetLinkValue is zero, then read_mbbi sets UDF to FALSE. The status of recGblGetLinkValue is returned.&lt;br /&gt;
&lt;br /&gt;
==== Raw Soft Channel ====&lt;br /&gt;
&lt;br /&gt;
This module is like the previous except that values are read into RVAL, VAL is computed from RVAL, and read_mbbiDirect returns a value of 0. Thus the record processing routine will determine VAL in the normal way.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Multi-Bit_Binary_Input&amp;diff=1729</id>
		<title>RRM 3-14 Multi-Bit Binary Input</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Multi-Bit_Binary_Input&amp;diff=1729"/>
		<updated>2008-04-18T19:34:59Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= mbbi -- Multi-Bit Binary Input =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The normal use for the multi-bit binary input record is to read multiple bit inputs from hardware. The binary value represents a state from a range of up to 16 states. The multi-bit input record interfaces with devices that use more than one bit.&lt;br /&gt;
&lt;br /&gt;
Most device support modules obtain values from hardware and place the value in RVAL. For these device support modules record processing uses RVAL to determine the current state (VAL is given a value between 0 and 15). Device support modules may optionally read a value directly into VAL.&lt;br /&gt;
&lt;br /&gt;
Soft device modules are provided to obtain input via database or channel access links or via dbPutField or dbPutLink requests. Two soft device support modules are provided: &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; allows VAL to be an arbitrary unsigned short integer. &amp;lt;CODE&amp;gt;Raw Soft Channel&amp;lt;/CODE&amp;gt; reads the value into RVAL just like normal device support modules.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The multi-bit binary input fields fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read and convert parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
* run-time and simulation mode parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Scan parameters ===&lt;br /&gt;
&lt;br /&gt;
The multi-bit binary input record has the standard fields for specifying under what circumstances it will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Note that I/O event scanning is only supported for those card types that interrupt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read and Convert Parameters ===&lt;br /&gt;
&lt;br /&gt;
The device support routines obtain the record's input from the device or link specified in the INP field. For records that obtain their input from devices, the INP field must contain the address of the I/O card, and the DTYP field must specify the proper device support module. Be aware that the address format differs according to the I/O bus used. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on the format of hardware addresses. You can see a list of the device support modules currently supported at the user's local site by using the &amp;lt;CODE&amp;gt;dbst&amp;lt;/CODE&amp;gt; utility in R3.13.&lt;br /&gt;
&lt;br /&gt;
Two soft device support modules can be specified in DTYP--&amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;Raw Soft Channel&amp;lt;/CODE&amp;gt;. &amp;lt;CODE&amp;gt;Raw Soft Channel&amp;lt;/CODE&amp;gt; reads the value into RVAL, upon which the normal conversion process is undergone. &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; reads any unsigned integer directly into VAL. For a soft mbbi record, the INP field can be a constant, a database, or a channel access link. If INP is a constant, then the VAL is initialized to the constant value but can be changed at run-time via dbPutField or dbPutLink. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on the format of database addresses.&lt;br /&gt;
&lt;br /&gt;
Unless the device support routine specifies no conversion, RVAL is used to determine VAL as follows:&lt;br /&gt;
&lt;br /&gt;
# RVAL is assigned to a temporary variable -- rval = RVAL&lt;br /&gt;
# rval is shifted right SHFT number of bits.&lt;br /&gt;
# A match is sought between rval and one of the state value fields, ZRVL-FFVL.&lt;br /&gt;
&lt;br /&gt;
Each of the fields, ZRVL-FFVL, represents one of the possible sixteen states (not all sixteen have to be used).&lt;br /&gt;
&lt;br /&gt;
Alternatively, the input value can be read as a string, in which case, a match is sought with one of the strings specified in the ZRST-FFST fields. Then RVAL is set equal to the corresponding value for that string, and the conversion process occurs. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;ENUM&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INP&amp;lt;TD&amp;gt;Input Link&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RVAL&amp;lt;TD&amp;gt;Raw Data Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHFT&amp;lt;TD&amp;gt;Shift&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ZRVL&amp;lt;TD&amp;gt;Zero Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ONVL&amp;lt;TD&amp;gt;One value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TWVL&amp;lt;TD&amp;gt;Two Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;THVL&amp;lt;TD&amp;gt;Three Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FRVL&amp;lt;TD&amp;gt;Four Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FVVL&amp;lt;TD&amp;gt;Five Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SXVL&amp;lt;TD&amp;gt;Six Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVVL&amp;lt;TD&amp;gt;Seven Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EIVL&amp;lt;TD&amp;gt;Eight value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NIVL&amp;lt;TD&amp;gt;Nine Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TEVL&amp;lt;TD&amp;gt;Ten Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ELVL&amp;lt;TD&amp;gt;Eleven Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TVVL&amp;lt;TD&amp;gt;Twelve Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TTVL&amp;lt;TD&amp;gt;Thirteen Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FTVL&amp;lt;TD&amp;gt;Fourteen Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FFVL&amp;lt;TD&amp;gt;Fifteen Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ZRST&amp;lt;TD&amp;gt;Zero String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ONST&amp;lt;TD&amp;gt;One String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TWST&amp;lt;TD&amp;gt;Two String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;THST&amp;lt;TD&amp;gt;Three String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FRST&amp;lt;TD&amp;gt;Four String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FVST&amp;lt;TD&amp;gt;Five String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SXST&amp;lt;TD&amp;gt;Six String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVST&amp;lt;TD&amp;gt;Seven String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EIST&amp;lt;TD&amp;gt;Eight String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NIST&amp;lt;TD&amp;gt;Nine String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TEST&amp;lt;TD&amp;gt;Ten String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ELST&amp;lt;TD&amp;gt;Eleven String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TVST&amp;lt;TD&amp;gt;Twelve String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TTST&amp;lt;TD&amp;gt;Thirteen String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FTST&amp;lt;TD&amp;gt;Fourteen String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FFST&amp;lt;TD&amp;gt;Fifteen String&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. They display the value and other parameters of the mbbi record either textually or graphically. The ZRST-FFST fields contain strings describing one of the possible states of the record. The &amp;lt;CODE&amp;gt;get_enum_str&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;get_enum_strs&amp;lt;/CODE&amp;gt; record routines retrieve these strings for the operator. &amp;lt;CODE&amp;gt;Get_enum_str&amp;lt;/CODE&amp;gt; gets the string corresponding to the value set in VAL, and &amp;lt;CODE&amp;gt;get_enum_strs&amp;lt;/CODE&amp;gt; retrieves all the strings.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ZRST,...,FFST&amp;lt;TD&amp;gt;Zero String, One String, ...&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for multi-bit binary inputs are the SCAN, READ, and state alarms. The state alarms are configured in the below severity fields. These fields have the usual possible values for severity fields: NO ALARM, MINOR, and MAJOR.&lt;br /&gt;
&lt;br /&gt;
The unknown state severity (UNSV) field, if set to MINOR or MAJOR, triggers an alarm when the record support routine cannot find a matching value in the state value fields for &amp;lt;CODE&amp;gt;rval&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The change of state severity (COSV) field triggers an alarm when any change of state occurs, if set to MAJOR or MINOR.&lt;br /&gt;
&lt;br /&gt;
The other fields, when set to MAJOR or MINOR, trigger an alarm when VAL equals the corresponding state. See the See [[RRM 3-14 Concepts#Alarm Specification|Alarm Specification]] for a complete explanation of discrete alarms and these fields. [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;UNSV&amp;lt;TD&amp;gt;Unknown State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;COSV&amp;lt;TD&amp;gt;Change of State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ZRSV&amp;lt;TD&amp;gt;0 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ONSV&amp;lt;TD&amp;gt;1 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TWSV&amp;lt;TD&amp;gt;2 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;THSV&amp;lt;TD&amp;gt;3 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FRSV&amp;lt;TD&amp;gt;4 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FVSV&amp;lt;TD&amp;gt;5 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SXSV&amp;lt;TD&amp;gt;6 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVSV&amp;lt;TD&amp;gt;7 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EISV&amp;lt;TD&amp;gt;8 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NISV&amp;lt;TD&amp;gt;9 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TESV&amp;lt;TD&amp;gt;10 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ELSV&amp;lt;TD&amp;gt;11 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TVSV&amp;lt;TD&amp;gt;12 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TTSV&amp;lt;TD&amp;gt;13 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FTSV&amp;lt;TD&amp;gt;14 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FFSV&amp;lt;TD&amp;gt;15 State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time and Simulation Mode Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the multi-bit binary input.&lt;br /&gt;
&lt;br /&gt;
MASK is used by device support routine to read the hardware register. It is shifted left NOBT bits by the record processing routine. The user can configure the NOBT field, but the device support routines may set it, in which case the value given to it by the user is simply overridden.&lt;br /&gt;
&lt;br /&gt;
The LALM field implements the change of state alarm severity by holding the value of VAL when the previous change of state alarm was issued.&lt;br /&gt;
&lt;br /&gt;
MLST holds the value when the last monitor for value change was triggered.&lt;br /&gt;
&lt;br /&gt;
SDEF is used by record support to save time if no states are defined.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHFT&amp;lt;TD&amp;gt;Shift&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ORAW&amp;lt;TD&amp;gt;Old Raw Data&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NOBT&amp;lt;TD&amp;gt;Number of Bits&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MASK&amp;lt;TD&amp;gt;Mask&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;TD&amp;gt;Last Alarmed&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;TD&amp;gt;Monitor Last&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SDEF&amp;lt;TD&amp;gt;States Defined?&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following fields are used to operate the mbbi record in the simulation mode. See [[RRM 3-14 Common#Fields Common to Many Record Types|Fields Common to Many Record Types]] for more information on these fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIOL&amp;lt;TD&amp;gt;Simulation Value Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVAL&amp;lt;TD&amp;gt;Simulation Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIML&amp;lt;TD&amp;gt;Simulation Mode Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMM&amp;lt;TD&amp;gt;Simulation Mode&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMS&amp;lt;TD&amp;gt;Simulation Mode Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
This routine initializes SIMM with the value of SIML if SIML type is CONSTANT link or creates a channel access link if SIML type is PV_LINK. SVAL is likewise initialized if SIOL is CONSTANT or PV_LINK.&lt;br /&gt;
&lt;br /&gt;
This routine next checks to see that device support is available and a device support read routine is defined. If either does not exist, an error message is issued and processing is terminated.&lt;br /&gt;
&lt;br /&gt;
Clears MASK and then sets the NOBT low order bits.&lt;br /&gt;
&lt;br /&gt;
If device support includes init_record, it is called.&lt;br /&gt;
&lt;br /&gt;
init_common is then called to determine if any states are defined. If states are defined, SDEF is set to TRUE.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
Calls init_common to compute SDEF when any of the fields ZRVL, ... FFVL change value.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_enum_str ====&lt;br /&gt;
&lt;br /&gt;
Retrieves ASCII string corresponding to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_enum_strs ====&lt;br /&gt;
&lt;br /&gt;
Retrieves ASCII strings for ZRST,...FFST.&lt;br /&gt;
&lt;br /&gt;
==== put_enum_str ====&lt;br /&gt;
&lt;br /&gt;
Checks if string matches ZRST,...FFST and if it does, sets VAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# Check to see that the appropriate device support module exists. If it doesn't, an error message is issued and processing is terminated with the PACT field still set to TRUE. This ensures that processes will no longer be called for this record. Thus error storms will not occur.&lt;br /&gt;
# readValue is called. See [[RRM 3-14 Common#Input Records|Input Records]] for more information.&lt;br /&gt;
# If PACT has been changed to TRUE, the device support read routine has started but has not completed reading a new input value. In this case, the processing routine merely returns, leaving PACT TRUE.&lt;br /&gt;
# Convert:&lt;br /&gt;
#* status=read_mbbi&lt;br /&gt;
#* PACT = TRUE&lt;br /&gt;
#* TIME = tsLocalTime&lt;br /&gt;
#* If status is 0, then determine VAL&lt;br /&gt;
#** Set rval = RVAL&lt;br /&gt;
#** Shift rval right SHFT bits&lt;br /&gt;
#* If at least one state value is defined&lt;br /&gt;
#** Set UDF to TRUE&lt;br /&gt;
#* If RVAL is ZRVL,...,FFVL then set&lt;br /&gt;
#** VAL equals index of state&lt;br /&gt;
#** UDF set to FALSE&lt;br /&gt;
#* Else set VAL = undefined&lt;br /&gt;
#** Else set VAL = RVAL&lt;br /&gt;
#* Set UDF to FALSE&lt;br /&gt;
#** If status is 1, return(0)&lt;br /&gt;
#* If status is 2, set status = 0&lt;br /&gt;
# Check alarms. This routine checks to see if the new VAL causes the alarm status and severity to change. If so, NSEV, NSTA and LALM are set.&lt;br /&gt;
# Check to see if monitors should be invoked.&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* Archive and value change monitors are invoked if MLST is not equal to VAL.&lt;br /&gt;
#* Monitors for RVAL are checked whenever other monitors are invoked.&lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
Each input record must have an associated set of device support routines.&lt;br /&gt;
&lt;br /&gt;
The primary responsibility of the device support routines is to obtain a new raw input value whenever read_mbbi is called. The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PACT&amp;lt;TD&amp;gt;Processing Active&amp;lt;TD rowspan=5&amp;gt;See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for an explanation of these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DPVT&amp;lt;TD&amp;gt;Device Private&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;UDF&amp;lt;TD&amp;gt;VAL Undefined&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSEV&amp;lt;TD&amp;gt;New Alarm Severity&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSTA&amp;lt;TD&amp;gt;New Alarm Status&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NOBT&amp;lt;TD&amp;gt;Number of Bits&amp;lt;TD&amp;gt;Number of hardware bits accessed. They must be consecutive.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;This field is set by the device support routines if they don't want record support to set it.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INP&amp;lt;TD&amp;gt;Input Link&amp;lt;TD&amp;gt;This field is used by the device support routines to locate its input.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RVAL&amp;lt;TD&amp;gt;Raw Data Value&amp;lt;TD&amp;gt;It is the responsibility of the device support routine to give this field a value.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MASK&amp;lt;TD&amp;gt;Mask&amp;lt;TD&amp;gt;This is a mask used to read the hardware. Record support sets the low order NOBT bits. The device support routine can shift the bits. The device support routine should perform the shift in init_record.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHFT&amp;lt;TD&amp;gt;Shift&amp;lt;TD&amp;gt;This can be set by the device support module at init_record time.&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== report ====&lt;br /&gt;
&lt;br /&gt;
 report(FILE fp, paddr)&lt;br /&gt;
&lt;br /&gt;
Not currently used.&lt;br /&gt;
&lt;br /&gt;
==== init ====&lt;br /&gt;
&lt;br /&gt;
 init()&lt;br /&gt;
&lt;br /&gt;
This routine is called once during IOC initialization.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is optional. If provided, it is called by the record support init_record routine. If it uses MASK, it should shift it as necessary and also give SHFT a value.&lt;br /&gt;
&lt;br /&gt;
==== get_ioint_info ====&lt;br /&gt;
&lt;br /&gt;
get_ioint_info(int cmd,struct dbCommon *precord,IOSCANPVT *ppvt)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the ioEventScan system each time the record is added or deleted from an I/O event scan list. cmd has the value (0,1) if the record is being (added to, deleted from) an I/O event list. It must be provided for any device type that can use the I/O Event scanner.&lt;br /&gt;
&lt;br /&gt;
==== read_mbbi ====&lt;br /&gt;
&lt;br /&gt;
 read_mbbi(precord)&lt;br /&gt;
&lt;br /&gt;
This routine must provide a new input value. It returns the following values:&lt;br /&gt;
&lt;br /&gt;
* 0: Success. A new raw value is placed in RVAL. The record support      module determines VAL from RVAL, SHFT, and ZEVL ... FFVL.&lt;br /&gt;
* 2: Success, but don't modify VAL.&lt;br /&gt;
* Other: Error.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support For Soft Records ===&lt;br /&gt;
&lt;br /&gt;
Two soft device support modules &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;Raw Soft Channel&amp;lt;/CODE&amp;gt; are provided for multi-bit binary input records not related to actual hardware devices. The INP link type must be either CONSTANT, DB_LINK, or CA_LINK.&lt;br /&gt;
&lt;br /&gt;
==== Soft Channel ====&lt;br /&gt;
&lt;br /&gt;
read_mbbi always returns a value of 2, which means that no conversion is performed.&lt;br /&gt;
&lt;br /&gt;
If the INP link type is constant, then the constant value is stored into VAL by init_record, and UDF is set to FALSE. VAL can be changed via dbPut requests. If the INP link type is PV_LINK, then dbCaAddInlink is called by init_record.&lt;br /&gt;
&lt;br /&gt;
read_mbbi calls recGblGetLinkValue to read the current value of VAL. See [[RRM 3-14 Common#Soft Input|Soft Input]].&lt;br /&gt;
&lt;br /&gt;
If the return status of recGblGetLinkValue is zero, then read_mbbi sets UDF to FALSE. The status of recGblGetLinkValue is returned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Raw Soft Channel ====&lt;br /&gt;
&lt;br /&gt;
This module is like the previous except that values are read into RVAL, VAL is computed from RVAL, and read_mbbi returns a value of 0. Thus the record processing routine will determine VAL in the normal way.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Long_Output&amp;diff=1744</id>
		<title>RRM 3-14 Long Output</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Long_Output&amp;diff=1744"/>
		<updated>2008-04-18T19:33:46Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= longout - Long Output =&lt;br /&gt;
&lt;br /&gt;
The normal use for the long output or &amp;quot;longout&amp;quot; record type is to store long integer values of up to 32 bits  and write them to hardware devices. The &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support routine can also be used to write values to other records via database or channel access links. The OUT field determines how the record is used. The record supports alarm limits and graphics and control limits.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* desired output parameters&lt;br /&gt;
* write parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
* monitor parameters&lt;br /&gt;
* simulation mode parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The longout record has the standard fields for specifying under what circumstances it will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Note that I/O event scanning is only supported for those card types that interrupt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Desired Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The data fanout record must specify where the desired output originates, i.e., the 32 bit integer value it is to write. The output mode select (OMSL) field determines whether the output originates from another record or from database access. When set to &amp;lt;CODE&amp;gt;closed_loop&amp;lt;/CODE&amp;gt;, the desired output is retrieved from the link specified in the desired output (DOL) field--which can specify either a database or channel access link--and placed into the VAL field. When set to &amp;lt;CODE&amp;gt;supervisory&amp;lt;/CODE&amp;gt;, the desired output can be written into the VAL field via dpPuts at run-time.&lt;br /&gt;
&lt;br /&gt;
The DOL field can be configured as constant, so that when the record is initialized, the VAL field will be initialized with this VALUE. If DOL is a constant, then the OMSL loop cannot be &amp;lt;CODE&amp;gt;closed_loop&amp;lt;/CODE&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL&amp;lt;TD&amp;gt;Desired Output Location (input link)&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OMSL&amp;lt;TD&amp;gt;Output Mode Select&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Write Parameters ===&lt;br /&gt;
&lt;br /&gt;
The OUT link field determines where the record is to send its output. For records that write values to hardware devices, the OUT output link field must specify the address of the I/O card, and the DTYP field must specify the name of the corresponding device support module. You can see a list of the device support modules currently supported at the user's local site by using the &amp;lt;CODE&amp;gt;dbst&amp;lt;/CODE&amp;gt; utility in R3.13.&lt;br /&gt;
&lt;br /&gt;
For soft records, the OUT output link can be a constant, a database link, or a channel access link. If the link is a constant, the result is no output. The DTYP field must then specify the &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support routine.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on the format of hardware addresses and database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;TD&amp;gt;Output Link&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. They display the value and other parameters of the long output either textually or graphically.&lt;br /&gt;
&lt;br /&gt;
EGU is a string of up to 16 characters describing the units that the long output measures. It is retrieved by the &amp;lt;CODE&amp;gt;get_units&amp;lt;/CODE&amp;gt; record support routine.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields set the upper and lower display limits for the VAL, HIHI, HIGH, LOW, and LOLO fields. Both the &amp;lt;CODE&amp;gt;get_graphic_double&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;get_control_double&amp;lt;/CODE&amp;gt; record support routines retrieve these fields.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for long inputs are the SCAN, READ, INVALID, and limit alarms. The SCAN and READ alarms are not configurable by the user because their severity is always MAJOR. The INVALID alarm is called by the record support routine when the record or device support routines cannot write the record's output. The IVOA field specifies the action to take in this case.&lt;br /&gt;
&lt;br /&gt;
The limit alarms are configured by the user in the HIHI, LOLO, HIGH, and LOW fields using floating-point values. For each of these fields, there is a corresponding severity field which can be either NO_ALARM, MINOR, or MAJOR. The HYST field contains the alarm deadband around each limit alarm.&lt;br /&gt;
&lt;br /&gt;
See the See [[RRM 3-14 Concepts#Alarm Specification|Alarm Specification]] for a complete explanation of alarms and these fields. For an explanation of the IVOA and IVOV fields, see [[RRM 3-14 Common#Output Records|Output Records]]. [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;TD&amp;gt;Hihi Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;TD&amp;gt;High Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;TD&amp;gt;Low Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;TD&amp;gt;Lolo Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOA&amp;lt;TD&amp;gt;Invalid Alarm Output Action&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOV&amp;lt;TD&amp;gt;Invalid Alarm Output Value, in eng. units&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine when to send monitors placed on the value field. The monitors are sent when the value field exceeds the last monitored field by the appropriate delta. If these fields have a value of zero, everytime the value changes, a monitor will be triggered; if they have a value of -1, everytime the record is scanned, monitors are triggered. The ADEL field is the delta for archive monitors, and the MDEL field is the delta for all other types of monitors. See [[RRM 3-14 Concepts#Monitor Specification|Monitor Specification]] for a complete explanation of monitors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time and Simulation Mode Parameters ===&lt;br /&gt;
&lt;br /&gt;
The LALM, MLST, and ALST fields are used to implement the hysteresis factors for monitor callbacks. Only if the difference between these fields and the corresponding value field is greater than the appropriate delta (MDEL, ADEL, HYST)--only then are monitors triggered. For instance, only if the difference between VAL and MLST is greater than MDEL are the monitors triggered for VAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;TD&amp;gt;Last Alarm Monitor Trigger Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;TD&amp;gt;Last Archiver Monitor Trigger Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;TD&amp;gt;Last Value Change Monitor Trigger Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following fields are used to operate the long output in the simulation mode. See [[RRM 3-14 Common#Fields Common to Many Record Types|Fields Common to Many Record Types]] for more information on the simulation mode fields&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIOL&amp;lt;TD&amp;gt;Simulation Value Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVAL&amp;lt;TD&amp;gt;Simulation Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIML&amp;lt;TD&amp;gt;Simulation Mode Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMM&amp;lt;TD&amp;gt;Simulation Mode&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMS&amp;lt;TD&amp;gt;Simulation Mode Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
This routine initializes SIMM if SIML is a constant or creates a channel access link if SIML is PV_LINK. If SIOL is PV_LINK a channel access link is created.&lt;br /&gt;
&lt;br /&gt;
This routine next checks to see that device support is available. The routine next checks to see if the device support write routine is defined.&lt;br /&gt;
&lt;br /&gt;
If either device support or the device support write routine does not exist, an error message is issued and processing is terminated.&lt;br /&gt;
&lt;br /&gt;
If DOL is a constant, then VAL is initialized to its value and UDF is set to FALSE. If DOL type is a PV_LINK then dbCaAddInlink is called to create a channel access link.&lt;br /&gt;
&lt;br /&gt;
If device support includes init_record, it is called.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the field is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
  upper_alarm_limit = HIHI&lt;br /&gt;
  upper_warning_limit = HIGH&lt;br /&gt;
  lower_warning_limit = LOW&lt;br /&gt;
  lower_alarm_limit = LOLO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# Check to see that the appropriate device support module exists. If it doesn't, an error message is issued and processing is terminated with the PACT field still set to TRUE. This ensures that processes will no longer be called for this record. Thus error storms will not occur.&lt;br /&gt;
# If PACT is FALSE and OMSL is CLOSED_LOOP recGblGetLinkValue is called to read the current value of VAL. See [[RRM 3-14 Common#Output Records|Output Records]] for more information. If the return status of recGblGetLinkValue is zero then UDF is set to FALSE.&lt;br /&gt;
# Check alarms. This routine checks to see if the new VAL causes the alarm status and severity to change. If so, NSEV, NSTA and LALM are set. It also honors the alarm hysteresis factor (HYST). Thus the value must change by more than HYST before the alarm status and severity is lowered.&lt;br /&gt;
# Check severity and write the new value. See [[RRM 3-14 Common#Invalid Alarm Output Action|Invalid Alarm Output Action]] for information on how INVALID alarms affect output records.&lt;br /&gt;
# If PACT has been changed to TRUE, the device support write output routine has started but has not completed writing the new value. In this case, the processing routine merely returns, leaving PACT TRUE.&lt;br /&gt;
# Check to see if monitors should be invoked:&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* Archive and value change monitors are invoked if ADEL and MDEL conditions are met.&lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
Each long output record must have an associated set of device support routines. The primary responsibility of the device support routines is to output a new value whenever write_longout is called. The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PACT&amp;lt;TD&amp;gt;Processing Active&amp;lt;TD rowspan=4&amp;gt;See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for an explanation of these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DPVT&amp;lt;TD&amp;gt;Device Private&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSEV&amp;lt;TD&amp;gt;New Alarm Severity&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSTA&amp;lt;TD&amp;gt;New Alarm Status&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;TD&amp;gt;Output Link&amp;lt;TD&amp;gt;This field is used by the device support routines to locate its output.&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== init ====&lt;br /&gt;
&lt;br /&gt;
 init()&lt;br /&gt;
&lt;br /&gt;
This routine is called once during IOC initialization.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is optional. If provided, it is called by the record support init_record routine.&lt;br /&gt;
&lt;br /&gt;
==== get_ioint_info ====&lt;br /&gt;
&lt;br /&gt;
 get_ioint_info(int cmd,struct dbCommon *precord,IOSCANPVT *ppvt)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the ioEventScan system each time the record is added or deleted from an I/O event scan list. cmd has the value (0,1) if the record is being (added to, deleted from) an I/O event list. It must be provided for any device type that can use the ioEvent scanner.&lt;br /&gt;
&lt;br /&gt;
==== write_longout ====&lt;br /&gt;
&lt;br /&gt;
 write_longout(precord)&lt;br /&gt;
&lt;br /&gt;
This routine must output a new value. It returns the following values:&lt;br /&gt;
&lt;br /&gt;
* 0: Success.&lt;br /&gt;
* Other: Error.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support For Soft Records ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; module writes the current value of VAL.&lt;br /&gt;
&lt;br /&gt;
If the OUT link type is PV_LINK, then dbCaAddInlink is called by init_record.&lt;br /&gt;
&lt;br /&gt;
write_longout calls recGblPutLinkValue to write the current value of VAL.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 Common#Soft Output|Soft Output]] for a further explanation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Long_Input&amp;diff=2884</id>
		<title>RRM 3-14 Long Input</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Long_Input&amp;diff=2884"/>
		<updated>2008-04-18T19:32:48Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= longin - Long Input =&lt;br /&gt;
&lt;br /&gt;
The normal use for the long input record or &amp;quot;longin&amp;quot; record is to retrieve a long integer value of up to 32 bits. Device support routines are provided to support direct interfaces to hardware. In addition, the &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device module is provided to obtain input via database or channel access links or via dbPutField or dbPutLink requests.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
* run-time and simulation mode parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The long input record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Note that I/O event scanning is only supported for those card types that interrupt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The device support routines use the INP field to obtain the record's input. For records that obtain their input from devices, the INP field must contain the address of the I/O card, and the DTYP field must specify the proper device support module. Be aware that the address format differs according to the I/O bus used. You can see a list of the device support modules currently supported at the user's local site by using the &amp;lt;CODE&amp;gt;dbst&amp;lt;/CODE&amp;gt; utility in R3.13.&lt;br /&gt;
&lt;br /&gt;
For soft records, the INP can be a constant, a database link, or a channel access link. The value is read directly into VAL. The &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support module is available for longin records. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on the format of hardware addresses and a database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INP&amp;lt;TD&amp;gt;Input Link&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. These fields are used to display the value and other parameters of the long input either textually or graphically.&lt;br /&gt;
&lt;br /&gt;
EGU is a string of up to 16 characters describing the units that the long input measures. It is retrieved by the &amp;lt;CODE&amp;gt;get_units&amp;lt;/CODE&amp;gt; record support routine.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields set the upper and lower display limits for the VAL, HIHI, HIGH, LOW, and LOLO fields. Both the &amp;lt;CODE&amp;gt;get_graphic_double&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;get_control_double&amp;lt;/CODE&amp;gt; record support routines retrieve these fields.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for long inputs are the SCAN, READ, and limit alarms. The SCAN and READ alarms are called by the record or device support routines.&lt;br /&gt;
&lt;br /&gt;
The limit alarms are configured by the user in the HIHI, LOLO, HIGH, and LOW fields using numerical values. For each of these fields, there is a corresponding severity field which can be either NO_ALARM, MINOR, or MAJOR. The HYST field can be used to specify a deadband around each limit.  See [[RRM 3-14 Concepts#Alarm Specification|Alarm Specification]] for a complete explanation of alarms and these fields. [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;TD&amp;gt;Hihi Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;TD&amp;gt;High Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;TD&amp;gt;Low Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;TD&amp;gt;Lolo Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine when to send monitors placed on the value field. The monitors are sent when the value field exceeds the last monitored field (see the next section) by the appropriate deadband. If these fields have a value of zero, everytime the value changes, a monitor will be triggered; if they have a value of -1, everytime the record is scanned, monitors are triggered. The ADEL field is used by archive monitors and the MDEL field for all other types of monitors. See [[RRM 3-14 Concepts#Monitor Specification|Monitor Specification]] for a complete explanation of monitors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time and Simulation Mode Parameters ===&lt;br /&gt;
&lt;br /&gt;
The LALM, MLST, and ALST fields are used to implement the hysteresis factors for monitor callbacks. Only if the difference between these fields and the corresponding value field is greater than the appropriate delta (MDEL, ADEL, HYST)--only then are monitors triggered. For instance, only if the difference between VAL and MLST is greater than MDEL are the monitors triggered for VAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;TD&amp;gt;Last Alarm Monitor Trigger Value&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;TD&amp;gt;Last Archiver Monitor Trigger Value&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;TD&amp;gt;Last Value Change Monitor Trigger Value&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following fields are used to operate the long input in the simulation mode. See [[RRM 3-14 Common#Fields Common to Many Record Types|Fields Common to Many Record Types]] for more information on these fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIOL&amp;lt;TD&amp;gt;Simulation Value Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVAL&amp;lt;TD&amp;gt;Simulation Value&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIML&amp;lt;TD&amp;gt;Simulation Mode Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMM&amp;lt;TD&amp;gt;Simulation Mode&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMS&amp;lt;TD&amp;gt;Simulation Mode Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
This routine initializes SIMM with the value of SIML if SIML type is CONSTANT link or creates a channel access link if SIML type is PV_LINK. SVAL is likewise initialized if SIOL is CONSTANT or PV_LINK.&lt;br /&gt;
&lt;br /&gt;
This routine next checks to see that device support is available and a device support read routine is defined. If either does not exist, an error message is issued and processing is terminated.&lt;br /&gt;
&lt;br /&gt;
If device support includes init_record, it is called.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the field is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
  upper_alarm_limit = HIHI&lt;br /&gt;
  upper_warning_limit = HIGH&lt;br /&gt;
  lower_warning_limit = LOW&lt;br /&gt;
  lower_alarm_limit = LOLO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Check to see that the appropriate device support module exists. If it doesn't, an error message is issued and processing is terminated with the PACT field still set to TRUE. This ensures that processes will no longer be called for this record. Thus error storms will not occur.&lt;br /&gt;
# readValue is called. See [[RRM 3-14 Common#Input Records|Input Records]] for more information.&lt;br /&gt;
# If PACT has been changed to TRUE, the device support read routine has started but has not completed reading a new input value. In this case, the processing routine merely returns, leaving PACT TRUE.&lt;br /&gt;
# Check alarms. This routine checks to see if the new VAL causes the alarm status and severity to change. If so, NSEV, NSTA and LALM are set. It also honors the alarm hysteresis factor (HYST). Thus the value must change by more than HYST before the alarm status and severity is lowered.&lt;br /&gt;
# Check to see if monitors should be invoked:&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has      changed.&lt;br /&gt;
#* Archive and value change monitors are invoked if ADEL and MDEL      conditions are met.&lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
Each long input record must have an associated set of device support routines. The primary responsibility of the device support routines is to obtain a new input value whenever read_longin is called. The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PACT&amp;lt;TD&amp;gt;Processing Active&amp;lt;TD rowspan=5&amp;gt;See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for an explanation of these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DPVT&amp;lt;TD&amp;gt;Device Private&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;UDF&amp;lt;TD&amp;gt;VAL Undefined&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSEV&amp;lt;TD&amp;gt;New Alarm Severity&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSTA&amp;lt;TD&amp;gt;New Alarm Status&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;This field is set by device support routines.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INP&amp;lt;TD&amp;gt;Input Link&amp;lt;TD&amp;gt;This field is used by the device support routines to locate its input.&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== report ====&lt;br /&gt;
&lt;br /&gt;
 report(FILE fp, paddr)&lt;br /&gt;
&lt;br /&gt;
Not currently used.&lt;br /&gt;
&lt;br /&gt;
==== init ====&lt;br /&gt;
&lt;br /&gt;
 init()&lt;br /&gt;
&lt;br /&gt;
This routine is called once during IOC initialization.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is optional. If provided, it is called by the record support init_record routine.&lt;br /&gt;
&lt;br /&gt;
==== get_ioint_info ====&lt;br /&gt;
&lt;br /&gt;
 get_ioint_info(int cmd,struct dbCommon *precord,IOSCANPVT *ppvt)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the ioEventScan system each time the record is added or deleted from an I/O event scan list. cmd has the value (0,1) if the record is being (added to, deleted from) an I/O event list. It must be provided for any device type that can use the ioEvent scanner.&lt;br /&gt;
&lt;br /&gt;
==== read_longin ====&lt;br /&gt;
&lt;br /&gt;
 read_longin(precord)&lt;br /&gt;
&lt;br /&gt;
This routine must provide a new input value. It returns the following values:&lt;br /&gt;
&lt;br /&gt;
* 0: Success. A new value is placed in VAL.&lt;br /&gt;
* Other: Error.&lt;br /&gt;
&lt;br /&gt;
=== Device Support For Soft Records ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support module places a value directly in VAL.&lt;br /&gt;
&lt;br /&gt;
If the INP link type is constant, then the constant value is stored into VAL by init_record, and UDF is set to FALSE. If the INP link type is PV_LINK, then dbCaAddInlink is called by init_record.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;CODE&amp;gt;read_longin&amp;lt;/CODE&amp;gt; calls recGblGetLinkValue to read the current value of VAL. See [[RRM 3-14 Common#Soft Input|Soft Input]] for more information&lt;br /&gt;
&lt;br /&gt;
If the return status of &amp;lt;CODE&amp;gt;recGblGetLinkValue&amp;lt;/CODE&amp;gt; is zero then read_longin sets UDF to FALSE. read_longin returns the status of &amp;lt;CODE&amp;gt;recGblGetLinkValue&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Histogram&amp;diff=2883</id>
		<title>RRM 3-14 Histogram</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Histogram&amp;diff=2883"/>
		<updated>2008-04-18T19:16:03Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Histogram =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The histogram record is used to store frequency counts of a signal into an array of arbitrary length. The user can configure the range of the signal value that the array will store. Anything outside this range will be ignored.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* monitor parameters&lt;br /&gt;
* run-time and simulation mode parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Scanning Parameters ===&lt;br /&gt;
&lt;br /&gt;
The histogram record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The SVL is the input link where the record reads its value. It can be a constant, a database link, or a channel access link. If SVL is a database or channel access link, then SGNL is read from SVL. If SVL is a constant, then SGNL is initialized with the constant value but can be changed via dbPuts. The &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support module can be specified in the DTYP field. For a list of other device support modules currently supported at the user's local site, use the &amp;lt;CODE&amp;gt;dbst&amp;lt;/CODE&amp;gt; utility in R3.13.&lt;br /&gt;
&lt;br /&gt;
The ULIM and LLIM fields determine the usable range of signal values. Any value of SGNL below LLIM or above ULIM is outside the range and will not be stored in the array. In the NELM field the user must specify the array size, e.g., the number of array elements. Each element in the NELM field holds the counts for an interval of the range of signal counts, the range specified by ULIM and LLIM. These intervals are determined by dividing the range by NELM:&lt;br /&gt;
&lt;br /&gt;
 (ULIM - LLIM) / NELM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVL&amp;lt;TD&amp;gt;Signal Value Location (an input link)&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SGNL&amp;lt;TD&amp;gt;Signal Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NELM&amp;lt;TD&amp;gt;Number of elements in array&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ULIM&amp;lt;TD&amp;gt;Upper Signal Limit&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLIM&amp;lt;TD&amp;gt;Lower Signal Limit&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. These fields are used to display the value and other parameters of the histogram either textually or graphically. See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Histogram record has the alarm parameters common to all record types.  [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
The MDEL field implements the monitor count deadband. Only when MCNT is greater than the value given to MDEL are monitors triggered, MCNT being the number of counts since the last time the record was processed. If MDEL is -1, everytime the record is processed, a monitor is triggered regardless.&lt;br /&gt;
&lt;br /&gt;
If SDEL is greater than 0, it causes a callback routine to be called. The number specified in SDEL is the callback routines interval. The callback routine is called every SDEL seconds. The callback routine posts an event if MCNT is greater than 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;TD&amp;gt;Monitor Delta&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SDEL&amp;lt;TD&amp;gt;Monitor Seconds Deadband&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time and Simulation Mode Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the histogram. They are not configurable by the user prior to run-time. They represent the current state of the record. Many of them are used to process the histogram more efficiently.&lt;br /&gt;
&lt;br /&gt;
The BPTR field contains a pointer to the unsigned long array of frequency values. The VAL field references this array as well. However, the BPTR field is not accessible at run-time.&lt;br /&gt;
&lt;br /&gt;
The MCNT field keeps counts the number of signal counts since the last monitor was invoked.&lt;br /&gt;
&lt;br /&gt;
The WDOG field contains a pointer to the callback control structure and is of no interest to the user.&lt;br /&gt;
&lt;br /&gt;
The collections controls field (CMD) is a menu field with five choices: &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Clear&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Start&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt;, and &amp;lt;CODE&amp;gt;Setup&amp;lt;/CODE&amp;gt;. When &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt;, the record retrieves its values and adds them to the signal array. This command will first clear the signal counts which have already been read when it is first invoked. The &amp;lt;CODE&amp;gt;Clear&amp;lt;/CODE&amp;gt; command erases the signal counts, setting the elements in the array back to zero. Afterwards, the field is set back to &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt;. The &amp;lt;CODE&amp;gt;Start&amp;lt;/CODE&amp;gt; command simply causes the record to read signal values into the array. Unlike &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt;, it doesn't clear the array first. The &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt; command disables the reading of signal values into the array. The &amp;lt;CODE&amp;gt;Setup&amp;lt;/CODE&amp;gt; command waits until the &amp;lt;CODE&amp;gt;start&amp;lt;/CODE&amp;gt; or &amp;lt;CODE&amp;gt;read&amp;lt;/CODE&amp;gt; command has been issued to start counting.&lt;br /&gt;
&lt;br /&gt;
The CSTA or collections status field implements the CMD field choices by enabling or disabling the reading of values into the histogram array. While FALSE, no signals are added to the array. While TRUE, signals are read and added to the array. The field is initialized to TRUE. The &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt; command is the only command that sets CSTA to FALSE. On the other hand, the &amp;lt;CODE&amp;gt;Start&amp;lt;/CODE&amp;gt; command is the only command that sets it to TRUE. Thus, &amp;lt;CODE&amp;gt;Start&amp;lt;/CODE&amp;gt; must be invoked after each &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt; command in order to enable counting; invoking &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt; will not enable signal counting after &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt; has been invoked.&lt;br /&gt;
&lt;br /&gt;
A typical use of these fields would be to initialize the CMD field to &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt; (it is initialized to this command by default), to use the &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt; command to disable counting when necessary, after which the &amp;lt;CODE&amp;gt;Start&amp;lt;/CODE&amp;gt; command can be invoked to re-start the signal count.&lt;br /&gt;
&lt;br /&gt;
The WDTH field is a private field that holds the signal width of the array elements. For instance, if the LLIM was configured to be 4.0 and ULIM was configured to be 12.0 and the NELM was set to 4, then the WDTH for each array would be 2. Thus, it is (ULIM - LLIM) / NELM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BPTR&amp;lt;TD&amp;gt;Buffer Pointer&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;See BPTR&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MCNT&amp;lt;TD&amp;gt;Monitor Counts&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;WDOG&amp;lt;TD&amp;gt;Watchdog Callback&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CMD&amp;lt;TD&amp;gt;Collections Control&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CSTA&amp;lt;TD&amp;gt;Collections Status&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;WDTH&amp;lt;TD&amp;gt;Element Width&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following fields are used to operate the histogram record in simulation mode. See [[RRM 3-14 Common#Fields Common to Many Record Types|Fields Common to Many Record Types]] for more information on the simulation mode fields. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIOL&amp;lt;TD&amp;gt;Simulation Value Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVAL&amp;lt;TD&amp;gt;Simulation Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIML&amp;lt;TD&amp;gt;Simulation Mode Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMM&amp;lt;TD&amp;gt;Simulation Mode&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMS&amp;lt;TD&amp;gt;Simulation Mode Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
Using NELM, space for the unsigned long array is allocated and the width WDTH of the array is calculated.&lt;br /&gt;
&lt;br /&gt;
This routine initializes SIMM with the value of SIML if SIML type is CONSTANT link or creates a channel access link if SIML type is PV_LINK. SVAL is likewise initialized if SIOL is CONSTANT or PV_LINK.&lt;br /&gt;
&lt;br /&gt;
This routine next checks to see that device support and a device support read routine are available. If device support includes init_record, it is called.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
Special is invoked whenever the fields CMD, SGNL, ULIM, or LLIM are changed.&lt;br /&gt;
&lt;br /&gt;
If SGNL is changed, add_count is called.&lt;br /&gt;
&lt;br /&gt;
If ULIM or LLIM are changed, WDTH is recalculated and clear_histogram is called.&lt;br /&gt;
&lt;br /&gt;
If CMD is less or equal to 1, clear_histogram is called and CMD is reset to 0. If CMD is 2, CSTA is set to TRUE and CMD is reset to 0. If CMD is 3, CSTA is set to FALSE and CMD is reset to 0.&lt;br /&gt;
&lt;br /&gt;
clear_histogram zeros out the histogram array. add_count increments the frequency in the histogram array.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to the array.&lt;br /&gt;
&lt;br /&gt;
==== cvt_dbaddr ====&lt;br /&gt;
&lt;br /&gt;
This is called by dbNameToAddr. It makes the dbAddr structure refer to the actual buffer holding the array.&lt;br /&gt;
&lt;br /&gt;
==== get_array_info ====&lt;br /&gt;
&lt;br /&gt;
Obtains values from the array referenced by VAL.&lt;br /&gt;
&lt;br /&gt;
==== put_array_info ====&lt;br /&gt;
&lt;br /&gt;
Writes values into the array referenced by VAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# Check to see that the appropriate device support module exists. If it doesn't, an error message is issued and processing is terminated with the PACT field set to TRUE. This ensures that processes will no longer be called for this record. Thus error storms will not occur.&lt;br /&gt;
# readValue is called. See  [[RRM 3-14 Common#Input Records|Input Records]] for more information&lt;br /&gt;
# If PACT has been changed to TRUE, the device support read routine has started but has not completed writing the new value. In this case, the processing routine merely returns, leaving PACT TRUE.&lt;br /&gt;
# Add count to histogram array.&lt;br /&gt;
# Check to see if monitors should be invoked. Alarm monitors are invoked if the alarm status or severity has changed. Archive and value change monitors are invoked if MDEL conditions are met. NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT and INIT to FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt; Summary &amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PACT &amp;lt;TD&amp;gt;Processing Active&amp;lt;TD rowspan=5&amp;gt;See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for an explanation of these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DPVT&amp;lt;TD&amp;gt;Device Private &amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;UDF&amp;lt;TD&amp;gt;VAL Undefined&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSEV&amp;lt;TD&amp;gt;New Alarm Severity&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSTA&amp;lt;TD&amp;gt;New Alarm Status &amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVL&amp;lt;TD&amp;gt;Signal Value&amp;lt;TD rowspan=2&amp;gt;The device support module retrieves a value from SGNL for SVL&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SGNL&amp;lt;TD&amp;gt;Signal Value Location&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the record support init_record routine. It makes sure that SGNL is a CONSTANT, PV_LINK, DB_LINK, or CA_LINK. It also retrieves a value for SVL from SGNL. If SGNL is none of the above, an error is generated.&lt;br /&gt;
&lt;br /&gt;
==== read_histogram ====&lt;br /&gt;
&lt;br /&gt;
 read_histogram(*precord)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the record support routines. It retrieves a value for SVL from SGNL.&lt;br /&gt;
&lt;br /&gt;
=== Device Support For Soft Records ===&lt;br /&gt;
&lt;br /&gt;
Only the device support module &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; is currently provided, though other device support modules may be provided at the user's site.&lt;br /&gt;
&lt;br /&gt;
==== Soft Channel ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support routine retrieves a value from SGNL. SGNL must be CONSTANT, PV_LINK, DB_LINK, or CA_LINK.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Fanout&amp;diff=2882</id>
		<title>RRM 3-14 Fanout</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Fanout&amp;diff=2882"/>
		<updated>2008-04-18T19:14:29Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Fanout =&lt;br /&gt;
&lt;br /&gt;
The fanout record uses several forward processing links to force multiple passive records to scan. When more than one record needs to be scanned as the result of a record being processed, the forward link of that record can specify a fanout record. The fanout record can specify up to six other records to process. When more than six are needed, one of the links in the fanout record can point to another fanout record.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;B&amp;gt;NOTE: Fanout records only propagate processing, not data. The dfanout or data fanout record can, on the other hand, send data to up to eight other records.&amp;lt;/B&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fanout record's fields fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* run-time parameters.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The forward link fields of the fanout record (LINK1-LINK6) specify records to be scanned. The records to be processed must specify &amp;lt;CODE&amp;gt;Passive&amp;lt;/CODE&amp;gt; in their SCAN fields; otherwise the forward link to it will not cause it to process. Also when specifying database links for the fanout record, the user needs only to specify the record name. As no value is being sent or retrieved, the field name is optional.&lt;br /&gt;
&lt;br /&gt;
The SELM, SELN, and SELL fields specify the order of processing for the forward links. The select mechanism field (SELM) has three choices--&amp;lt;CODE&amp;gt;All&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Specified&amp;lt;/CODE&amp;gt;, or &amp;lt;CODE&amp;gt;Mask&amp;lt;/CODE&amp;gt;. How these affect which links to process and in which order is as follows:&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;B&amp;gt;All&amp;lt;/B&amp;gt;&lt;br /&gt;
: Links are processed in numerical order--LNK1, LNK2, etc.&lt;br /&gt;
; &amp;lt;B&amp;gt;Specified&amp;lt;/B&amp;gt;&lt;br /&gt;
: SELN is used as the specifier of which link to process. For instance, if SELN=1, then LNK1 will be processed.&lt;br /&gt;
; &amp;lt;B&amp;gt;Mask&amp;lt;/B&amp;gt;&lt;br /&gt;
: The individual bits in SELN are used to select which links to process as follows: &lt;br /&gt;
:* If bit 0 of SELN is set, LNK1 is processed.&lt;br /&gt;
:* If bit 1 of SELN is set, LNK2 is processed.&lt;br /&gt;
:* If bit 2 of SELN is set, LNK3 is processed, etc.&lt;br /&gt;
&lt;br /&gt;
SELN reads its value from SELL. SELL can be a constant, a database link, or a channel access link.  If a constant, SELN is initialized with the constant value and can be changed via dbPuts. For database/channel access links, SELN is retrieved from SELL each time the record is processed and can also be changed via dbPuts.&lt;br /&gt;
&lt;br /&gt;
The Fanout record also has the standard scanning fields common to all records. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains in more detail how forward links and the scanning algorithms work.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LNK1&amp;lt;TD&amp;gt; Forward Links&amp;lt;TD&amp;gt;FWDLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LNK2&amp;lt;TD&amp;gt; Forward Links&amp;lt;TD&amp;gt;FWDLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LNK3&amp;lt;TD&amp;gt; Forward Links&amp;lt;TD&amp;gt;FWDLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LNK4&amp;lt;TD&amp;gt; Forward Links&amp;lt;TD&amp;gt;FWDLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LNK5&amp;lt;TD&amp;gt; Forward Links&amp;lt;TD&amp;gt;FWDLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LNK6&amp;lt;TD&amp;gt; Forward Links&amp;lt;TD&amp;gt;FWDLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SELM&amp;lt;TD&amp;gt;Select Mechanism:&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SELN&amp;lt;TD&amp;gt;Link Selection Algorithm&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SELL&amp;lt;TD&amp;gt;Link Selection Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on these fields. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Fanout record has the alarm parameters common to all record types.  [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
The VAL field is used only so that dbNameAddr succeeds when no field name is specified. Otherwise, it has no significance.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
This routine initializes SELN with the value of SELL, if SELL type is CONSTANT link, or creates a channel access link if SELL type is PV_LINK.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# PACT is set to TRUE.&lt;br /&gt;
# The link selection SELN is fetched.&lt;br /&gt;
# Depending on the selection mechanism, the link selection forward links are processed. and UDF is set to FALSE.&lt;br /&gt;
# Check to see if monitors should be invoked:&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Event&amp;diff=2881</id>
		<title>RRM 3-14 Event</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Event&amp;diff=2881"/>
		<updated>2008-04-18T19:13:47Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Event =&lt;br /&gt;
&lt;br /&gt;
The normal use for this record type is to post an event and/or process a forward link. Device support for this record can provide a hardware interrupt handler routine for I/O Event-scanned records.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The records in this field fall into the following groups of parameters:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* event number parameters&lt;br /&gt;
* simulation mode parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The event record has the standard fields for specifying under what circumstances it will be processed. If the SCAN field specifies &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;, then device support will provide an interrupt handler, posting an event number when an I/O interrupt occurs. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how the scanning fields work. Note that I/O event scanning is only supported for those card types that interrupt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Input Specification ===&lt;br /&gt;
&lt;br /&gt;
The device support routines use the address in this record to obtain input. For records that provide an interrupt handler, the INP field should specify the address of the I/O card, and the DTYP field should specify a valid device support module. Be aware that the address format differs according to the card type  used. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on the format of hardware addresses and specifying links. You can see a list of the device support modules currently supported at the user's local site by using the dbst utility in R3.13.&lt;br /&gt;
&lt;br /&gt;
For soft records, the INP field can be a constant, a database link, or a channel access link. For soft records, the DTYP field should specify &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INP&amp;lt;TD&amp;gt;Input Link&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Event Number Parameters ===&lt;br /&gt;
&lt;br /&gt;
The VAL field contains the event number read by the device support routines. It is this number which is posted. For records that use &amp;lt;CODE&amp;gt;Soft Channe&amp;lt;/CODE&amp;gt;l device support, it can be configured before run-time or set via dbPuts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Event Number to Post&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Event record has the alarm parameters common to all record types.  [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Simulation Mode Parameters ===&lt;br /&gt;
&lt;br /&gt;
The following fields are used to operate the event record in the simulation mode.  See [[RRM 3-14 Common#Fields Common to Many Record Types|Fields Common to Many Record Types]] for more information on these fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIOL&amp;lt;TD&amp;gt;Simulation Value Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVAL&amp;lt;TD&amp;gt;Simulation Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIML&amp;lt;TD&amp;gt;Simulation Mode Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMM&amp;lt;TD&amp;gt;Simulation Mode&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMS&amp;lt;TD&amp;gt;Simulation Mode Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
This routine initializes SIMM with the value of SIML if SIML type is a CONSTANT link or creates a channel access link if SIML type is PV_LINK. SVAL is likewise initialized if SIOL is CONSTANT or PV_LINK.&lt;br /&gt;
&lt;br /&gt;
If device support includes init_record, it is called.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# readValue is called. See [[RRM 3-14 Common#Input Records|Input Records]] for more information.&lt;br /&gt;
# If PACT has been changed to TRUE, the device support read routine has started but has not completed reading a new input value. In this case, the processing routine merely returns, leaving PACT TRUE.&lt;br /&gt;
# If VAL &amp;amp;gt; 0, post event number VAL.&lt;br /&gt;
# Check to see if monitors should be invoked. Alarm monitors are invoked if the alarm status or severity has changed NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields of Interest To Device Support ===&lt;br /&gt;
Each record must have an associated set of device support routines. The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PACT&amp;lt;TD&amp;gt;Processing Active&amp;lt;TD rowspan=5&amp;gt;See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for an explanation of these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DPVT&amp;lt;TD&amp;gt;Device Private&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;UDF&amp;lt;TD&amp;gt;VAL Undefined&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSEV&amp;lt;TD&amp;gt;New Alarm Severity&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSTA&amp;lt;TD&amp;gt;New Alarm Status&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INP&amp;lt;TD&amp;gt;Input Link&amp;lt;TD&amp;gt;This field is used by the device support routines to locate its input.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PRIO&amp;lt;TD&amp;gt;Priority&amp;lt;TD&amp;gt;This value must be used by the device support interrupt handler to set the scheduling priority for processing this  record.&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== report ====&lt;br /&gt;
&lt;br /&gt;
 report(FILE fp, interest)&lt;br /&gt;
&lt;br /&gt;
Not currently used.&lt;br /&gt;
&lt;br /&gt;
==== init ====&lt;br /&gt;
&lt;br /&gt;
 init()&lt;br /&gt;
&lt;br /&gt;
This routine is called once during IOC initialization.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is optional. If provided, it is called by the record support init_record routine.&lt;br /&gt;
&lt;br /&gt;
==== get_ioint_info ====&lt;br /&gt;
&lt;br /&gt;
 get_ioint_info(int cmd,struct dbCommon *precord,IOSCANPVT *ppvt)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the ioEventScan system each time the record is added or deleted from an I/O event scan list. cmd has the value (0,1) if the record is being (added to, deleted from) an I/O event list. It must be provided for any device type that can use the ioEvent scanner.&lt;br /&gt;
&lt;br /&gt;
==== read_event ====&lt;br /&gt;
&lt;br /&gt;
 read_event(precord)&lt;br /&gt;
&lt;br /&gt;
This routine returns the following values:&lt;br /&gt;
&lt;br /&gt;
* 0: Success.&lt;br /&gt;
* Other: Error.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support For Soft Records ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support module is available. The INP link type must be either CONSTANT, DB_LINK, or CA_LINK.&lt;br /&gt;
&lt;br /&gt;
If the INP link type is CONSTANT, then the constant value is stored into VAL by init_record, and UDF is set to FALSE. If the INP link type is PV_LINK, then dbCaAddInlink is called by init_record.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;CODE&amp;gt;read_event&amp;lt;/CODE&amp;gt; calls recGblGetLinkValue to read the current value of VAL. See [[RRM 3-14 Common#Input Records|Input Records]] for details on soft input.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Data_Fanout&amp;diff=1793</id>
		<title>RRM 3-14 Data Fanout</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Data_Fanout&amp;diff=1793"/>
		<updated>2008-04-18T19:12:58Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= dfanout - Data Fanout =&lt;br /&gt;
&lt;br /&gt;
: Johnny Tang, Matthew Bickley, and Chip Watson&lt;br /&gt;
: Continuous Electron Beam Accelerator Facility&lt;br /&gt;
: Southeastern Universities Research Association&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The dfanout record or data fanout record is used to forward data to up to eight other records. It's similar to the fanout record except that the capability to forward data has been added to it. It has no associated device support.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record can be classified into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* desired output parameters&lt;br /&gt;
* write parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
* monitor parameters&lt;br /&gt;
* run-time and simulation mode parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The data fanout record has the standard fields for specifying under what circumstances it will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the data fanout record supports no direct interfaces to hardware, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Desired Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The data fanout record must specify where the desired output value originates, i.e., the data which it is to forward to the records in its output links. The output mode select (OMSL) field determines whether the output originates from another record or from run-time database access. When set to &amp;lt;CODE&amp;gt;closed loop&amp;lt;/CODE&amp;gt;, the desired output is retrieved from the link specified in the desired output (DOL) field, which can specify either a database or channel access link, and placed into the VAL field. When set to &amp;lt;CODE&amp;gt;supervisory&amp;lt;/CODE&amp;gt;, the desired output can be written to the VAL field via dpPuts at run-time.&lt;br /&gt;
&lt;br /&gt;
The DOL field can also be a constant in which case the VAL field is initialized to the constant value.&lt;br /&gt;
&lt;br /&gt;
Note that there are no conversion parameters, so the desired output value undergoes no conversions before it is sent out to the output links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL&amp;lt;TD&amp;gt;Desired Output Location (Input Link)&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OMSL&amp;lt;TD&amp;gt;Output Mode Select &amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL &amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Write Parameters ===&lt;br /&gt;
&lt;br /&gt;
The OUTA-OUTH fields specify where VAL is to be sent. Each field that is to forward data must specify an address to another record. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on specifying links.&lt;br /&gt;
&lt;br /&gt;
The SELL, SELM, and SELN fields specify which output link(s) are to be used.&lt;br /&gt;
SELM is a menu, with the following choices: &amp;quot;All&amp;quot;, &amp;quot;Specified&amp;quot;, &amp;quot;Mask&amp;quot;.  If&lt;br /&gt;
SELM==&amp;quot;All&amp;quot;, then all output links are used, and the values of SELL and SELN&lt;br /&gt;
are ignored.&lt;br /&gt;
&lt;br /&gt;
If SELM==&amp;quot;Specified&amp;quot;, then the value of SELN is used to specify a single link&lt;br /&gt;
which will be used.  If SELN==0, then no link will be used; if SELN==1, then OUTA will be used, and so on.&lt;br /&gt;
&lt;br /&gt;
SELN can either have its value set directly, or have its value retrieved from&lt;br /&gt;
another EPICS PV.  If SELL is a valid PV link, then SELN will be set to the&lt;br /&gt;
value of the linked PV&lt;br /&gt;
&lt;br /&gt;
If SELM==&amp;quot;Mask&amp;quot;, then SELN will be treated as a bit mask.  If bit one of SELN&lt;br /&gt;
is set, then OUTA will be used, if bit two is set, OUTB will be used.  Thus&lt;br /&gt;
if SELN==5, OUTC and OUTA will be used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTA&amp;lt;TD&amp;gt;Output Link A&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTB&amp;lt;TD&amp;gt;Output Link B&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTC&amp;lt;TD&amp;gt;Output Link C&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTD&amp;lt;TD&amp;gt;Output Link D&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTE&amp;lt;TD&amp;gt;Output Link E&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTF&amp;lt;TD&amp;gt;Output Link F&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTG&amp;lt;TD&amp;gt;Output Link G&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTH&amp;lt;TD&amp;gt;Output Link H&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. They display the value and other parameters of the data fanout record either textually or graphically.&lt;br /&gt;
&lt;br /&gt;
The EGU field can contain a string of up to 16 characters describing the value in the VAL field.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields determine the upper and lower display limits for graphics displays and the upper and lower control limits for control displays. They apply to the VAL, HIHI, HIGH, LOW, and LOLO fields. The record support routines &amp;lt;CODE&amp;gt;get_graphic_double&amp;lt;/CODE&amp;gt; or &amp;lt;CODE&amp;gt;get_control_double&amp;lt;/CODE&amp;gt; retrieve HOPR and LOPR&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for data fanouts are the SCAN, READ, INVALID, and limit alarms. The SCAN and READ alarms are called by the record routines. The limit alarms are configured by the user in the HIHI, LOLO, HIGH, and LOW fields using floating-point values. The limit alarms apply only to the VAL field. The severity for each of these limits is specified in the corresponding field (HHSV, LLSV, HSV, LSV) and can be either NO_ALARM, MINOR, or MAJOR. In the hysteresis field (HYST) can be entered a number which serves as the deadband on the limit alarms.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 Concepts#Alarm Specification|Alarm Specification]] for a complete explanation of alarms and these fields. [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;TD&amp;gt;Hihi Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;TD&amp;gt;High Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;TD&amp;gt;Low Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;TD&amp;gt;Lolo Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine when to send monitors placed on the VAL field. The monitors are sent when the value field exceeds the last monitored field by the specified deadband, ADEL for archiver monitors and MDEL for all other types of monitors. If these fields have a value of zero, everytime the value changes, a monitor will be triggered; if they have a value of -1, everytime the record is scanned, monitors are triggered. See [[RRM 3-14 Concepts#Monitor Specification|Monitor Specification]] for a complete explanation of monitors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-Time Parameters and Simulation Mode Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the data fanout record. They are not configurable. They are used to implement the hysteresis factors for monitor callbacks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;TD&amp;gt;Last Alarm Monitor Trigger Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;TD&amp;gt;Last Archiver Monitor Trigger Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;TD&amp;gt;Last Value Change Monitor Trigger Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== init_record() ====&lt;br /&gt;
&lt;br /&gt;
This routine initializes all output links that are defined. Then it initializes DOL is DOL is a constant or PV_LINK. When initializing the output links and the DOL link, a non-zero value is returned if an error occurs.&lt;br /&gt;
&lt;br /&gt;
==== process() ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value() ====&lt;br /&gt;
&lt;br /&gt;
This routine fills in the members of &amp;lt;CODE&amp;gt;struct valueDes&amp;lt;/CODE&amp;gt; with the VAL fields value and characteristics.&lt;br /&gt;
&lt;br /&gt;
==== get_units() ====&lt;br /&gt;
&lt;br /&gt;
The routine copies the string specified in the EGU field to the location specified by a pointer which is passed to the routine.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double() ====&lt;br /&gt;
&lt;br /&gt;
If the referenced field is VAL, HIHI, HIGH, LOW, or LOLO, this routine sets the &amp;lt;CODE&amp;gt;upper_disp_limit&amp;lt;/CODE&amp;gt; member of the &amp;lt;CODE&amp;gt;dbr_grDouble&amp;lt;/CODE&amp;gt; structure to HOPR and the &amp;lt;CODE&amp;gt;lower_disp_limit&amp;lt;/CODE&amp;gt; member to LOPR. If the referenced field is not one of the above fields, then the &amp;lt;CODE&amp;gt;recGblGetControlDouble()&amp;lt;/CODE&amp;gt; routine is called.&lt;br /&gt;
&lt;br /&gt;
==== get_control_double() ====&lt;br /&gt;
&lt;br /&gt;
Same as the &amp;lt;CODE&amp;gt;get_graphic_double&amp;lt;/CODE&amp;gt; routine except that it uses the &amp;lt;CODE&amp;gt;dbr_ctrlDouble&amp;lt;/CODE&amp;gt; structure.&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double() ====&lt;br /&gt;
&lt;br /&gt;
This sets the members of the &amp;lt;CODE&amp;gt;dbr_alDouble&amp;lt;/CODE&amp;gt; structure to the specified alarm limits if the referenced field is VAL:&lt;br /&gt;
&lt;br /&gt;
 upper_alarm_limit = HIHI&lt;br /&gt;
 upper_warning_limit = HIGHT&lt;br /&gt;
 lower_warning_limit = LOW&lt;br /&gt;
 lower_alarm_limit = LOLO&lt;br /&gt;
&lt;br /&gt;
If the referenced field is not VAL, the &amp;lt;CODE&amp;gt;recGblGetAlarmDouble()&amp;lt;/CODE&amp;gt; routine is called.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
# The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine first retrieves a value for DOL and places it in VAL if OMSL is set to closed loop mode. If ann error occurs, then UDF is set to FALSE.&lt;br /&gt;
# PACT is set TRUE.&lt;br /&gt;
# VAL is then sent to all the records specified in the OUTA-OUTH fields by calling the &amp;lt;CODE&amp;gt;recGblPutLinkValue()&amp;lt;/CODE&amp;gt; for each link.&lt;br /&gt;
# Alarms are checked and monitors are called if conditions apply.&lt;br /&gt;
# The data fanout's own forward link is then processed.&lt;br /&gt;
# PACT is set FALSE, and the &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine returns. A -1 is returned if there was an error writing values to one of the output links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_CPID_Control&amp;diff=2879</id>
		<title>RRM 3-14 CPID Control</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_CPID_Control&amp;diff=2879"/>
		<updated>2008-04-18T19:12:11Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= CPID Control =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The CPID record, like the PID record, is used for making error corrections on output values in order to maintain a specified setpoint. In the CPID record, the setpoint must be retrieved from another database record. When the record is processed, it reads the controlled value and the setpoint, and then computes the error correction. Unlike the PID record, the CPID record can write this value because it has its own output link.&lt;br /&gt;
&lt;br /&gt;
Another important difference is that unlike the PID record, the CPID record has four different modes: normal mode, sequencer mode, local mode, and manual mode. The normal mode causes the CPID record to function in the same way as the PID record does. The other modes significantly change how the CPID record functions. All these modes are explained in this chapter.&lt;br /&gt;
&lt;br /&gt;
When in normal mode, the CPID record performs the same equation as the PID record. This equation consists of three parts: the proportional, the integral, and the derivative. Using the gain that exists for each of these terms, the user can weight each contribution according to the response of the process being controlled.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into several categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* controlled variable and setpoint parameters&lt;br /&gt;
* output, readback, and mode parameters&lt;br /&gt;
* expression parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
* monitor parameters&lt;br /&gt;
* run-time parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The CPID record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the CPID record supports no direct interfaces to hardware, it cannot be scanned on I/O interrupt, i.e., its SCAN field cannot specify &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
However, the CPID record contains an additional field that affects its processing while in normal mode. The minimum delta time field (MDT) is a scanning field particular to the CPID record and PID records. It can be configured by the user or modified at run-time. It contains a floating point value which represents the minimum amount of time between record processing so that if the amount of time between the last time the record was processed and the current time is less than MDT, then DM and the output value (OVAL) are set to 0. If MDT is left at its default value (0), the minimum delta will be equal to one clock tick. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDT&amp;lt;TD&amp;gt;Minimum Delta Time&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Controlled Variable and Setpoint Parameters ===&lt;br /&gt;
&lt;br /&gt;
The control variable location field (CVL) is used to obtain the value of the controlled process variable, the value read into the CVAL field. The link must be a database link. If it is not a database link an INVALID alarm is triggered when the record is processed. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on specifying links.&lt;br /&gt;
&lt;br /&gt;
The setpoint value is set in the VAL field. Unlike the PID record, the setpoint value cannot be read from other records, but must be set via dbPuts. It is set equal to CVAL, the value retrieved from the CVL link, when the record is initialized.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CVL&amp;lt;TD&amp;gt;Controlled value location (an input link)&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Setpoint value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
The PID expression calculated by the CPID record in Normal mode is the same as the PID record's expression. The discrete from of the PID expression is as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE&amp;gt;&lt;br /&gt;
&amp;lt;TD ROWSPAN=3&amp;gt;M(n) = KP &amp;amp;times; E(n) + KI &amp;amp;times; SUMi ( E(i) &amp;amp;times; dT(n) ) + KD &amp;amp;times; (&lt;br /&gt;
&amp;lt;TD&amp;gt;E(n) - E(n-1)&lt;br /&gt;
&amp;lt;TD ROWSPAN=3&amp;gt;) + Mr&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD ALIGN=CENTER&amp;gt;-----------------&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD ALIGN=CENTER&amp;gt;dT(n)&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where&lt;br /&gt;
&lt;br /&gt;
: M(n) = value of manipulated variable at ''n''th instant.&lt;br /&gt;
: KP, KI, and KD = Proportional, Integral, Derivative gains set by the user&lt;br /&gt;
: E(n) = Error at ''n''th sampling instant&lt;br /&gt;
: SUMi = Sum from i=0 to i=n&lt;br /&gt;
: dT(n) = Time difference between ''n-1''th instance and ''n''th instance&lt;br /&gt;
: Mr = Midrange adjustment&lt;br /&gt;
&lt;br /&gt;
Taking the first difference between instances yields the following equation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE&amp;gt;&lt;br /&gt;
&amp;lt;TD ROWSPAN=3&amp;gt;delM(n) = KP &amp;amp;times; (E(n) - E(n-1)) + KI &amp;amp;times; E(i) &amp;amp;times; dT(n) + KD &amp;amp;times; (&lt;br /&gt;
&amp;lt;TD&amp;gt;E(n) - E(n-1)&lt;br /&gt;
&amp;lt;TD ROWSPAN=3&amp;gt;) - (&lt;br /&gt;
&amp;lt;TD&amp;gt;E(n) - E(n-1)&lt;br /&gt;
&amp;lt;TD ROWSPAN=3&amp;gt;)&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD ALIGN=CENTER&amp;gt;-----------------&lt;br /&gt;
&amp;lt;TD ALIGN=CENTER&amp;gt;-----------------&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD ALIGN=CENTER&amp;gt;dT(n)&lt;br /&gt;
&amp;lt;TD ALIGN=CENTER&amp;gt;dT(n-1)&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The terms KP, KI, and KD are the only terms configured by the user. These terms represent the gain for the proportional (KP), integral (KI), and the derivative (KD). A field exists for each of these terms (the KP, KI, and KD fields). KP should be configured according to the characteristics of the controlled variable; KI should be set equal to the number of times that the integral contribution repeats the proportional contribution; and KD should equal the number of minutes until the derivative contribution repeats the proportional contribution.&lt;br /&gt;
&lt;br /&gt;
The PID record calculates the other terms of the expression:&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;B&amp;gt;E(n)&amp;lt;/B&amp;gt;&lt;br /&gt;
: Error at ''n''th sampling instant, where the Error equals the setpoint minus the value of the controlled variable (VAL - CVAL).&lt;br /&gt;
; &amp;lt;B&amp;gt;delM(n)&amp;lt;/B&amp;gt;&lt;br /&gt;
: This is the end result of the PID expression -- the change in the manipulated value. The DM field holds this value.&lt;br /&gt;
; &amp;lt;B&amp;gt;dT(n)&amp;lt;/B&amp;gt;&lt;br /&gt;
: This is the time difference between n and n-1, between current and last samplings.&lt;br /&gt;
&lt;br /&gt;
The final result of the expression &amp;lt;CODE&amp;gt;delM(n)&amp;lt;/CODE&amp;gt; and the other parts of the expression are held in several different run-time fields, which are not configurable prior to run-time, nor modifiable at run-time, but can be accessed so that their values can be used.&lt;br /&gt;
&lt;br /&gt;
When in Normal Mode, the DM field contains the change in manipulated value, i.e., the result of the PID expression delM(n). For other modes, the value is different, but is always an increment which can be accessed by the desired output link (DOL) of an analog output record. Since its value represents an increment, the OIF field of the analog output record should be set to &amp;lt;CODE&amp;gt;Incremental&amp;lt;/CODE&amp;gt;. Note that the final result to be written may not be the same as the final result of the equation; that is, DM, the result of the equation, may not equal OVAL, the output value, depending on the mode.&lt;br /&gt;
&lt;br /&gt;
The P, I, D, CT, DT, ERR, and DERR fields are used to calculate the PID expression. They are not configurable prior to, nor modifiable during, run-time, but may be of interest when fine tuning the gains of each contribution (KP, KI, KD). The following lists the fields as they relate to the expression:&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;B&amp;gt;ERR&amp;lt;/B&amp;gt;&lt;br /&gt;
: E(n). Error at current sampling (VAL-CVAL).&lt;br /&gt;
; &amp;lt;B&amp;gt;DERR&amp;lt;/B&amp;gt;&lt;br /&gt;
: E(n) - E(n-1). Difference between current error and error at last sampling.&lt;br /&gt;
; &amp;lt;B&amp;gt;P&amp;lt;/B&amp;gt;&lt;br /&gt;
: This field corresponds to &amp;lt;CODE&amp;gt;KP * DERR&amp;lt;/CODE&amp;gt;&lt;br /&gt;
; &amp;lt;B&amp;gt;I&amp;lt;/B&amp;gt;&lt;br /&gt;
: This field corresponds to &amp;lt;CODE&amp;gt;E(n) * dTn * KI&amp;lt;/CODE&amp;gt;&lt;br /&gt;
; &amp;lt;B&amp;gt;D&amp;lt;/B&amp;gt;&lt;br /&gt;
: This field corresponds to &amp;lt;CODE&amp;gt;Kp * Kd * (err/dt(n) - derr/dt(n-1))&amp;lt;/CODE&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;KP&amp;lt;TD&amp;gt;Proportional Gain&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;KI&amp;lt;TD&amp;gt;Integral Gain, in repeats per minute.&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;KD&amp;lt;TD&amp;gt;Derivative Gain, in repeats per minute&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DM&amp;lt;TD&amp;gt;Change in Manipulated Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;P&amp;lt;TD&amp;gt;Proportional contribution to DM.&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;I&amp;lt;TD&amp;gt;Integral contribution to DM.&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D&amp;lt;TD&amp;gt;Derivative contribution to DM.&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CT&amp;lt;TD&amp;gt;Clock ticks when previous process occurred.&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DT&amp;lt;TD&amp;gt;Time difference in seconds between processing steps.&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ERR&amp;lt;TD&amp;gt;Current error (VAL - CVAL).&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DERR&amp;lt;TD&amp;gt;Delta Error&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Output, Readback, and Mode Parameters ===&lt;br /&gt;
&lt;br /&gt;
Unlike the PID record, the CPID record has an output link so that it can write its output. The value written is the value of the OVAL field. How record processing determines this value depends on, among other things, the current mode and the limits.&lt;br /&gt;
&lt;br /&gt;
Firstly, the record has two output modes, CHANGE and POSITION, set by the OMOD field. If OMOD is (0,1), then the output mode will be (CHANGE, POSITION). The OMOD field cannot be modified at run-time, so it must be configured to be either CHANGE or POSITION. It is initialized to CHANGE by default.&lt;br /&gt;
&lt;br /&gt;
When CHANGE, the record sets OVAL equal to DM, the result of  the PID expression. DM being itself an increment, OVAL is an incremental value in the CHANGE mode. If the record is in POSITION mode, OVAL is an absolute value obtained by adding OVAL to DM. In this case, OVAL will be the last value of OVAL when it was written unless it was changed by database access.&lt;br /&gt;
&lt;br /&gt;
 if CHANGE&lt;br /&gt;
     OVAL = DM&lt;br /&gt;
 if POSITION&lt;br /&gt;
     OVAL = OVAL + DM&lt;br /&gt;
&lt;br /&gt;
After OVAL is adjusted in case it violates the value limits explained below, DM is set equal to OVAL when in CHANGE mode. When in position mode, after any adjustments, DM is set equal to OVAL - MLST, MLST being the value of OVAL the last time the record was processed. This way, DM is always an increment, adjusted to be within the value limits.&lt;br /&gt;
&lt;br /&gt;
Secondly, there are four different modes on top of the output mode: Normal, Sequencer, Manual, and Local.&lt;br /&gt;
&lt;br /&gt;
# In Normal mode, OVAL is computed as explained above. DM is also computed as usual.&lt;br /&gt;
# In Sequencer mode, the CPID record computes OVAL as SVAL - ORBV when in CHANGE mode, and sets OVAL equal to SVAL in the POSITION mode. DM is computed as SVAL - ORBV in CHANGE mode and OVAL - SVAL in POSITION mode. The sequencer program should determine the value of SVAL while in Sequencer mode.&lt;br /&gt;
# In Manual mode, the CPID record computes OVAL as MVAL - ORBV when in CHANGE mode, and sets OVAL equal to MVAL when in POSITION mode. DM is set equal to MVAL - ORBV in CHANGE mode and OVAL - MVAL in POSITION mode. MVAL is determined by the operator at run-time, via dbPuts.&lt;br /&gt;
# In Local mode, the CPID record sets OVAL equal to 0 when the output mode is CHANGE and ORBV when the output mode is POSITION. The Local mode was implemented to support the setting of the output by a local hardware control.&lt;br /&gt;
&lt;br /&gt;
The MMOD, SMOD, and LOC field determine which of these four modes the CPID record is in. The MMOD and SMOD fields are set via database access (by the operator or the sequencer). The LOC field must specify a database link if the record is to be placed into Local mode. If the MMOD field is true (has a value other than 0), then the mode is Manual. If the SMOD field is true, then the mode is Sequencer. If the LOC field is a database link and the value retrieved from it is 0, then the mode is Local. The default mode is the normal mode so that if none of the above conditions exist, the mode is normal. An order of precedence exists so that the mode can be determined when more than one of the above conditions is true. The order of precedence is Local mode, Manual mode, Sequencer, then Normal mode, so that if the MMOD and SMOD fields are true and the value retrieved from the LOC field ''is not 0'' (i.e., local mode is not requested), then the mode is Sequencer.&lt;br /&gt;
&lt;br /&gt;
Note: DM is calculated even for modes other than Normal. This prevents the DT change in time contribution from &amp;quot;winding up&amp;quot; when the mode is other than Normal.&lt;br /&gt;
&lt;br /&gt;
Finally, MAX, MIN, DMAX, and DMIN fields are used to specify limits for the output value. The MAX and MIN fields limit the value of OVAL, whereas the DMAX and DMIN fields limit the value of DM. How these fields do this for the different modes is somewhat complex. See [[#Record Processing|Record Processing]] in this chapter for a further explanation of how these fields work.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;TD&amp;gt;Output Link&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ORBL&amp;lt;TD&amp;gt;Output Readback Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OMOD&amp;lt;TD&amp;gt;Output Mode&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ORBV&amp;lt;TD&amp;gt;Output Readback Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MAX&amp;lt;TD&amp;gt;Maximum Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MIN&amp;lt;TD&amp;gt;Minimum Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DMAX&amp;lt;TD&amp;gt;Maximum Change&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DMIN&amp;lt;TD&amp;gt;Minimum Change&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOC&amp;lt;TD&amp;gt;Local Mode Switch&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MMOD&amp;lt;TD&amp;gt;Manual Mode Request&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SMOD&amp;lt;TD&amp;gt;Sequencer Mode Request&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MVAL&amp;lt;TD&amp;gt;Manual Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVAL&amp;lt;TD&amp;gt;Sequencer Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. These fields are used to display the setpoint (VAL), the controlled variable (CVAL), the change in manipulated value (DM), and other fields of the PID, either textually or graphically.&lt;br /&gt;
&lt;br /&gt;
EGU is a string of up to 16 characters describing the units of PID's manipulated values measures. It is retrieved by the &amp;lt;CODE&amp;gt;get_units&amp;lt;/CODE&amp;gt; record support routine. It must be configured by the user if at all.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields set the upper and lower display limits for the VAL, HIHI, HIGH, LOW, LOLO, VAL, P, I, D, and CVAL fields.&lt;br /&gt;
&lt;br /&gt;
The PREC field determines the floating point precision with which to display VAL and CVAL. It is used whenever the &amp;lt;CODE&amp;gt;get_precision&amp;lt;/CODE&amp;gt; record support routine is called.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for PID are the SCAN alarm, limit alarms, and an INVALID alarm that is triggered when CVL is not a database link. The SCAN and INVALID alarms are called by the record routines and are always of MAJOR severity.&lt;br /&gt;
&lt;br /&gt;
The limit alarms trigger alarms on the VAL field. They are configured by the user in the HIHI, LOLO, HIGH, and LOW fields using floating point values. For each of these fields, there is a corresponding severity field which can be either NO ALARM, MINOR, or MAJOR. See [[RRM 3-14 Concepts#Alarm Specification|Alarm Specification]] for a complete explanation of alarms and these fields. [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;TD&amp;gt;Hihi Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;TD&amp;gt;High Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;TD&amp;gt;Low Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;TD&amp;gt;Lolo Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are deadbands configured by the user which determine when to send monitors on the DM field. If the value of DM is greater than ADEL, archive monitors for the OVAL, CT, and DM fields are sent. Additionally, if the record is in Normal mode, monitors for P, I, D, ERR, DERR, and DT are sent. MDEL is used the same way as ADEL for all other types of monitors.&lt;br /&gt;
&lt;br /&gt;
The ODEL field is not implemented in the PID record.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 Concepts#Monitor Specification|Monitor Specification]] for a complete explanation of monitors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ODEL&amp;lt;TD&amp;gt;Output deadband for DM&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the PID. They are not configurable prior to run-time. They represent the current state of the PID and/or the terms of the PID expression. Many of them are used to process the PID record more efficiently.&lt;br /&gt;
&lt;br /&gt;
The CVAL field is the controlled variable value retrieved from the CVL link.&lt;br /&gt;
&lt;br /&gt;
The LALM field is used to implement the hysteresis factor for the alarms.&lt;br /&gt;
&lt;br /&gt;
The ALST field holds the last value for OVAL, but has no other function for the record.&lt;br /&gt;
&lt;br /&gt;
The MLST field holds the last value for the OVAL field. It is used to calculate a value for DM when the record is in the POSITION mode. After any other calculations, DM is set equal to OVAL - MLST. Thus, even in POSTION mode, DM always holds a relative value, the difference between DM and the value of OVAL from the last time the record was processed.&lt;br /&gt;
&lt;br /&gt;
The PMOD field indicates the current mode of the record:&lt;br /&gt;
&lt;br /&gt;
* 0 Normal Mode&lt;br /&gt;
* 1 Manual Mode&lt;br /&gt;
* 2 Sequencer Mode&lt;br /&gt;
* 3 Local Control Mode&lt;br /&gt;
&lt;br /&gt;
The last mode field (LMOD) implements monitors for PMOD. If PMOD is not equal to LMOD, monitors are posted for the PMOD field.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CVAL&amp;lt;TD&amp;gt;Value of controlled variable&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OVAL&amp;lt;TD&amp;gt;Output Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ODM&amp;lt;TD&amp;gt;Old DM. &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;TD&amp;gt;Value from when last monitors for alarm were triggered&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;TD&amp;gt;Value when last monitors for archiver were triggered&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;TD&amp;gt;Value when last monitors for value changes were triggered&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOVL&amp;lt;TD&amp;gt;Last Readback Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PMOD&amp;lt;TD&amp;gt;Current Mode&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LMOD&amp;lt;TD&amp;gt;Last Mode&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ODM&amp;lt;TD&amp;gt;Old DM Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
Set UDF to false. Return 0.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC if field is CVAL or VAL. Otherwise, calls &amp;lt;B&amp;gt;recGblGetPrec()&amp;lt;/B&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values if field is VAL, HIHI, HIGH, LOW, LOLO, P, I, D, or CVAL:&lt;br /&gt;
&lt;br /&gt;
 upper_disp_limit = hopr&lt;br /&gt;
 lower_disp_limit = lopr&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values if field is VAL, HIHI, HIGH, LOW, LOLO, P, I, D, or CVAL:&lt;br /&gt;
&lt;br /&gt;
 upper_ctrl_limit = hopr&lt;br /&gt;
 lower_ctrl_limit = lopr&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
 upper_alarm_limit = hihi&lt;br /&gt;
 upper_warning_limit = high&lt;br /&gt;
 lower_warning_limit = low&lt;br /&gt;
 lower_alarm_limit = lolo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# Set PACT to TRUE.&lt;br /&gt;
# If CVL is not a database link an INVALID alarm is declared, PACT is set to FALSE, and the routine returns (0).&lt;br /&gt;
# The current value of CVAL is obtained from CVL.&lt;br /&gt;
# If ORBL is a database link, the current value of ORBV is obtained.&lt;br /&gt;
# Determine the mode:&lt;br /&gt;
#* mode  =  normal&lt;br /&gt;
#* if SMOD true&lt;br /&gt;
#** mode  =  Sequencer mode&lt;br /&gt;
#* if MMOD true&lt;br /&gt;
#** mode = Manual mode&lt;br /&gt;
#* if value retrieved from LOC is 0&lt;br /&gt;
#** mode = Local Mode&lt;br /&gt;
# Compute time difference between current and last processing; that is , compute DT.&lt;br /&gt;
# Set DM = 0.&lt;br /&gt;
# If Mode is Normal and DT &amp;amp;lt; MDT, calculate DM using PID expression.&lt;br /&gt;
# If Mode is Normal and OMOD is CHANGE:&lt;br /&gt;
#* if (ORBV + DM) is less than MAX&lt;br /&gt;
#** set OVAL = MAX - ORBV&lt;br /&gt;
#* else if (ORBV + DM) &amp;amp;lt; MIN&lt;br /&gt;
#** set OVAL = MIN - ORBV&lt;br /&gt;
#* else set OVAL = DM&lt;br /&gt;
# If Mode is Normal and OMOD is POSITION and OVAL &amp;amp;gt; MAX:&lt;br /&gt;
#* if (OVAL - MAX) &amp;amp;gt; DMAX&lt;br /&gt;
#** set OVAL = OVAL - DMAX&lt;br /&gt;
#* if (OVAL - MAX) &amp;amp;gt;= DMIN&lt;br /&gt;
#** set OVAL = MAX&lt;br /&gt;
# If Mode is Normal and OMOD is POSITION and OVAL &amp;amp;lt; MIN.&lt;br /&gt;
#* if (MIN - OVAL) &amp;amp;gt; DMAX&lt;br /&gt;
#** Set OVAL = OVAL + DMAX&lt;br /&gt;
#* if ( MIN - OVAL) &amp;amp;gt;= DMIN&lt;br /&gt;
#** set OVAL = MIN&lt;br /&gt;
# If Mode is Manual and OMOD is CHANGE&lt;br /&gt;
#* set DM and OVAL to MVAL - ORBV.&lt;br /&gt;
# If Mode is Manual and OMOD is POSITION&lt;br /&gt;
#* set DM and OVAL to MVAL - ORBV.&lt;br /&gt;
# if Mode is Local Control and OMOD is CHANGE&lt;br /&gt;
#* set OVAL equal to  0.&lt;br /&gt;
# If Mode is Local Control and OMOD is POSITION&lt;br /&gt;
#* set OVAL equal to  ORBV.&lt;br /&gt;
# If Mode is Sequencer and OMOD is CHANGE&lt;br /&gt;
#* set DM and OVAL to SVAL - ORBV&lt;br /&gt;
# If Mode is Sequencer and OMOD is POSITION&lt;br /&gt;
#* set DM and OVAL to SVAL.&lt;br /&gt;
# If OMOD is CHANGE&lt;br /&gt;
#* set DM equal to OVAL.&lt;br /&gt;
# If OMOD is POSITION&lt;br /&gt;
#* set DM equal to OVAL - MLST.&lt;br /&gt;
# Write OVAL to output location.&lt;br /&gt;
# Check alarms and post if any.&lt;br /&gt;
# Check monitors and post if any.&lt;br /&gt;
# Process FLNK.&lt;br /&gt;
# Set PACT equal to FALSE and return 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
The CPID record has no associated device support.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Compression&amp;diff=1821</id>
		<title>RRM 3-14 Compression</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Compression&amp;diff=1821"/>
		<updated>2008-04-18T19:11:05Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= compress - Compression =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The data compression record is used to collect and compress data from arrays. When the INP field references a data array field, it immediately compresses the entire array into an element of an array using one of several algorithms, overwriting the previous element. If the INP field obtains its value from a scalar-value field, the compression record will collect a new sample each time the record is processed and add it to the compressed data array as a circular buffer.&lt;br /&gt;
&lt;br /&gt;
The INP link can also specify a constant; however, if this is the case, the compression algorithms are ignored, and the record support routines merely return after checking the FLNK field.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The data compression fields fall into the following categories: &lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* run-time parameters&lt;br /&gt;
&lt;br /&gt;
=== Scanning Parameters ===&lt;br /&gt;
&lt;br /&gt;
The compression record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition,  [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since  the compression record supports no direct interfaces to hardware, its SCAN field cannot specify &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters and Algorithm Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields determine what channel to read and how to compress the data. The user specifies the algorithm to be used in the ALG field. There are five possible algorithms which can be specified as follows:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Circular Buffer&amp;lt;/CODE&amp;gt;&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Average&amp;lt;/CODE&amp;gt;&lt;br /&gt;
* &amp;lt;CODE&amp;gt;N to 1 Low Value&amp;lt;/CODE&amp;gt;&lt;br /&gt;
* &amp;lt;CODE&amp;gt;N to 1 High Value&amp;lt;/CODE&amp;gt;&lt;br /&gt;
* &amp;lt;CODE&amp;gt;N to 1 Average&amp;lt;/CODE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These algorithms are explained in one of the sections below.&lt;br /&gt;
&lt;br /&gt;
The RES field can be accessed at run time to cause the algorithm to reset itself.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RES&amp;lt;TD&amp;gt;Reset&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALG&amp;lt;TD&amp;gt;Algorithm&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSAM&amp;lt;TD&amp;gt;Number in Sample&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;N&amp;lt;TD&amp;gt;Number&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ILIL&amp;lt;TD&amp;gt;Initial Low Interest Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IHIL&amp;lt;TD&amp;gt;Initial High Interest Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Input Specification ====&lt;br /&gt;
&lt;br /&gt;
The input specification should be a database or channel access link. Though INP can be a constant, the data compression algorithms are supported only when INP is a database link. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on specifying links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Algorithms and Related Fields ====&lt;br /&gt;
&lt;br /&gt;
As stated above, the ALG field specifies which algorithm to be performed on the data. The rest of the fields--NSAM, N, ILIL, IHIL, and OFF--are used in the compressions, though N is not used in the &amp;lt;CODE&amp;gt;Circular Buffer&amp;lt;/CODE&amp;gt; algorithm and ILIL, IHIL, and OFF are used neither in the &amp;lt;CODE&amp;gt;Circular Buffer&amp;lt;/CODE&amp;gt; algorithm nor in the &amp;lt;CODE&amp;gt;Average&amp;lt;/CODE&amp;gt; algorithm.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;Circular Buffer&amp;lt;/CODE&amp;gt; algorithm keeps a circular buffer of length NSAM. Each time the record is processed, it gets the data referenced by INP and puts it into the circular buffer referenced by VAL. Note that when INP refers to a scalar, VAL is just a time ordered circular buffer of values obtained from INP.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;CODE&amp;gt;Average&amp;lt;/CODE&amp;gt; takes an average of all the elements of the array obtained from INP; that is, the entire array referenced by INP is retrieved, and the average of the elements is placed in the next element of the circular buffer. The retrieved array is truncated to be of length NSAM. N successive arrays are averaged and placed in the circular buffer. Thus, VAL[0] holds the average of the first sampling of INP, VAL[1] holds the average of the next sampling of INP, and so on. The following shows the equation:&lt;br /&gt;
&lt;br /&gt;
[[Image:RRM 3-14 Compression-1.gif]]&lt;br /&gt;
&lt;br /&gt;
If &amp;lt;CODE&amp;gt;N to 1 Low Value&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;N to 1 High Value&amp;lt;/CODE&amp;gt;, or &amp;lt;CODE&amp;gt;N to 1 Average&amp;lt;/CODE&amp;gt; are chosen, then VAL is a circular buffer of NSAM samples. The actual algorithm depends on whether INP references a scalar or an array. If INP refers to a scalar, then N successive time ordered samples of INP are taken. After the Nth sample is obtained a new value, determined by the algorithm (LOW, HIGH, or AVE), is written to the circular buffer referenced by VAL. If LOW, the lowest value is written; if HIGH, the highest value of all the samples is written; and if AVE, the average of all the samples are written.&lt;br /&gt;
&lt;br /&gt;
If INP refers to an array, then the following applies:&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;CODE&amp;gt;N to 1 Low Value&amp;lt;/CODE&amp;gt;&lt;br /&gt;
: Compress N to 1 samples, keeping the lowest value&lt;br /&gt;
; &amp;lt;CODE&amp;gt;N to 1 High Value&amp;lt;/CODE&amp;gt;&lt;br /&gt;
: Compress N to 1 samples, keeping the highest value&lt;br /&gt;
; &amp;lt;CODE&amp;gt;N to 1 Average&amp;lt;/CODE&amp;gt;&lt;br /&gt;
: Compress N to 1 samples, taking the average&lt;br /&gt;
&lt;br /&gt;
The compression record keeps (NSAM) data samples.&lt;br /&gt;
&lt;br /&gt;
The N field determines the number of fields to compress into 1.&lt;br /&gt;
&lt;br /&gt;
Thus, if NSAM was 3, and N was also equal to 3, then the algorithms would work as in the following diagram:&lt;br /&gt;
&lt;br /&gt;
[[Image:RRM 3-14 Compression-2.gif]]&lt;br /&gt;
&lt;br /&gt;
OFF number of samples are ignored at the beginning of the array being compressed. IHIL and ILIL are used as initial value filters when compressing arrays; that is, the compression does not begin until a value is found that is either greater than IHIL or less than ILIL&lt;br /&gt;
&lt;br /&gt;
RES resets the algorithm before the maximum number of samples are reached.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. They display the value and other parameters of the record either textually or graphically.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields only specify the range for VAL, HIHI, HIGH, LOLO and LOW fields.&lt;br /&gt;
&lt;br /&gt;
PREC controls the floating-point precision whenever &amp;lt;CODE&amp;gt;get_precision&amp;lt;/CODE&amp;gt; is called, and the field being referenced is the VAL field (i.e., one of the values contained in the circular buffer).&lt;br /&gt;
&lt;br /&gt;
The EGU field should be given a string that describes the value of VAL, but is used whenever the &amp;lt;CODE&amp;gt;get_units&amp;lt;/CODE&amp;gt; record support routine is called.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The compression record has the alarm parameters common to all record types.  [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the data compression algorithm. They are not configurable by the user, though some are accessible at run-time. They can represent the current state of the waveform or of the record whose field is referenced by the INP field.&lt;br /&gt;
&lt;br /&gt;
NUSE holds the number of elements currently stored in VAL. &lt;br /&gt;
&lt;br /&gt;
BPTR is a pointer that refers to the buffer referenced by VAL.&lt;br /&gt;
&lt;br /&gt;
The SPTR field pointer to an array that is used for array averages.&lt;br /&gt;
&lt;br /&gt;
WPTR is used by the dbGetlinks routines. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NUSE&amp;lt;TD&amp;gt;Number Used&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BPTR&amp;lt;TD&amp;gt;Buffer Pointer&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SPTR&amp;lt;TD&amp;gt;Summing Buffer Pointer&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;WPTR&amp;lt;TD&amp;gt;Work Buffer Pointer&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CVB&amp;lt;TD&amp;gt;Compress Value Buffer&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INX&amp;lt;TD&amp;gt;Current Index of Circular Buffer&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
Space for all necessary arrays is allocated. The addresses are stored in the appropriate fields in the record.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This routine is called when RSET is set. It performs a reset.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
==== cvt_dbaddr ====&lt;br /&gt;
&lt;br /&gt;
This is called by dbNameToAddr. It makes the dbAddr structure refer to the actual buffer holding the result.&lt;br /&gt;
&lt;br /&gt;
==== get_array_info ====&lt;br /&gt;
&lt;br /&gt;
Obtains values from the circular buffer referenced by VAL.&lt;br /&gt;
&lt;br /&gt;
==== put_array_info ====&lt;br /&gt;
&lt;br /&gt;
Writes values into the circular buffer referenced by VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field is VAL, the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the field is VAL, the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# If INP is not a database link, check monitors and the forward link and return.&lt;br /&gt;
# Get the current data referenced by INP.&lt;br /&gt;
# Perform the appropriate algorithm:&lt;br /&gt;
#* Average: Read N successive instances of INP and perform an element by element average. Until N instances have been obtained it just return without checking monitors or the forward link. When N instances have been obtained complete the algorithm, store the result in the VAL array, check monitors and the forward link, and return.&lt;br /&gt;
#* Circular Buffer: Write the values obtained from INP into the VAL array as a circular buffer, check monitors and the forward link, and return.&lt;br /&gt;
#* N to 1 xxx and INP refers to a scalar: Obtain N successive values from INP and apply the NTO1xxx algorithm to these values. Until N values are obtained monitors and forward links are not checked. When N successive values have been obtained, complete the algorithm, check monitors and the forward link, and return.&lt;br /&gt;
#* N to 1 xxx and INP refers to an array: The ILIL and IHIL are honored if ILIL &amp;amp;lt; IHIL. The input array is divided into subarrays of length N. The specified N to 1 xxx compression algorithm is applied to each sub-array and the result stored in the array referenced by VAL. The monitors and forward link are checked.&lt;br /&gt;
# If success, set UDF to FALSE.&lt;br /&gt;
# Check to see if monitors should be invoked:&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Calcout&amp;diff=1550</id>
		<title>RRM 3-14 Calcout</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Calcout&amp;diff=1550"/>
		<updated>2008-04-18T19:10:22Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Calcout - Calculation Output Record =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Calculation Output or &amp;quot;Calcout&amp;quot; record is similar to the Calc record with the added feature of having outputs (an &amp;quot;output link&amp;quot; and an &amp;quot;output event&amp;quot;) which are conditionally executed based on the result of the calculation. This feature allows conditional branching to be implemented within an EPICS database (e.g., process Record_A only if Record_B has a value of 0). The Calcout record is also similar to the Wait record (with additional features) but uses EPICS standard INLINK and OUTLINK fields rather than the DBF_STRING fields used in the Wait record. For new databases, it is recommended that the Calcout record be used instead of the Wait record.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into these categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* expression parameters&lt;br /&gt;
* output parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
* monitor parameters&lt;br /&gt;
* run-time parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Calcout record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the Calcout record supports no direct interfaces to hardware, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the Calcout record consist of 12 input links INPA, INPB, ... INPL. The fields can be database links, channel access links, or constants. If they are links, they must specify another record's field. If they are constants, they will be initialized with the value they are configured with and can be changed via &amp;lt;CODE&amp;gt;dbPuts&amp;lt;/CODE&amp;gt;. These fields cannot be hardware addresses. In addition, the Calcout record contains the INAV, INBV, . . . INLV fields which indicate the status of the link fields, for example, whether or not the specified PV was found and a link to it established. See [[#Operator Display Parameters|Operator Display Parameters]] for an explanation of these fields.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPC&amp;lt;TD&amp;gt;Input Link C&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPD&amp;lt;TD&amp;gt;Input Link D&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPE&amp;lt;TD&amp;gt;Input Link E&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPF&amp;lt;TD&amp;gt;Input Link F&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPG&amp;lt;TD&amp;gt;Input Link G&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPH&amp;lt;TD&amp;gt;Input Link H&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPI&amp;lt;TD&amp;gt;Input Link I&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPJ&amp;lt;TD&amp;gt;Input Link J&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPK&amp;lt;TD&amp;gt;Input Link K&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPL&amp;lt;TD&amp;gt;Input Link L&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression ===&lt;br /&gt;
&lt;br /&gt;
Like the Calc record, the Calcout record has a CALC field in which the developer can enter an infix expression which the record routine will evaluate when it processes the record. The resulting value is placed in the VAL field. This value can then be used by the OOPT field (see [[#Output Parameters|Output Parameters]]) to determine whether or not to write to the output link or post an output event. It can also be the value that is written to the output link. The CALC expression is actually converted to opcode and stored in Reverse Polish Notation in the RPCL field. It is this expression which is actually used to calculate VAL. The Reverse Polish expression is evaluated more efficiently during run-time than an infix expression. CALC can be changed at run-time, and a special record routine will call a function to convert it to Reverse Polish Notation.&lt;br /&gt;
&lt;br /&gt;
The range of expressions supported by the calculation record are separated into operands, algebraic operators, trigonometric operators, relational operators, logical operators, parentheses and commas, and the conditional '?:' operator. The expression can consist of any of these operators, as well as any of the values from the input links which are the operands.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC&amp;lt;TD&amp;gt;Calculation&amp;lt;TD&amp;gt;STRING[36]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RPCL&amp;lt;TD&amp;gt;Reverse Polish&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt; Also, the RNDM unary function can be included as an operand in the expression in order to generate a random number between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Operands ====&lt;br /&gt;
&lt;br /&gt;
The expression can use the values retrieved from the INP''x'' links as operands, though constants can be used as operands too. These values retrieved from the input links are stored in the A-L fields. The values to be used in the expression are simply referenced by the field letter. For instance, the value obtained from the INPA link is stored in the field A, and the value obtained from INPB is stored in field B. The field names can be included in the expression which will operate on their respective values, as in A+B.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;A&amp;lt;TD&amp;gt;Input Value A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B&amp;lt;TD&amp;gt;Input Value B&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;C&amp;lt;TD&amp;gt;Input Value C&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D&amp;lt;TD&amp;gt;Input Value D&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;E&amp;lt;TD&amp;gt;Input Value E&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;F&amp;lt;TD&amp;gt;Input Value F&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;G&amp;lt;TD&amp;gt;Input Value G&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;H&amp;lt;TD&amp;gt;Input Value H&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;I&amp;lt;TD&amp;gt;Input Value I&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;J&amp;lt;TD&amp;gt;Input Value J&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;K&amp;lt;TD&amp;gt;Input Value K&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;L&amp;lt;TD&amp;gt;Input Value L&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Algebraic Operators ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* ABS: Absolute value (unary)&lt;br /&gt;
* SQR: Square root (unary)&lt;br /&gt;
* MIN: Minimum (binary function)&lt;br /&gt;
* MAX: Maximum (binary function)&lt;br /&gt;
* CEIL: Ceiling (unary)&lt;br /&gt;
* FLOOR: Floor (unary)&lt;br /&gt;
* LOG: Log base 10 (unary)&lt;br /&gt;
* LOGE: Natural log (unary)&lt;br /&gt;
* EXP: Exponential function (unary)&lt;br /&gt;
* ^: Exponential (binary)&lt;br /&gt;
* ** : Exponential (binary)&lt;br /&gt;
* + : Addition (binary)&lt;br /&gt;
* - : Subtraction (binary)&lt;br /&gt;
* * : Multiplication (binary)&lt;br /&gt;
* / : Division (binary)&lt;br /&gt;
* % : Modulo (binary)&lt;br /&gt;
* NOT: Negate (unary)&lt;br /&gt;
&lt;br /&gt;
==== Trigonometric Operators ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* SIN: Sine&lt;br /&gt;
* SINH: Hyperbolic sine&lt;br /&gt;
* ASIN: Arc sine&lt;br /&gt;
* COS: Cosine&lt;br /&gt;
* COSH: Hyperbolic cosine&lt;br /&gt;
* ACOS: Arc cosine&lt;br /&gt;
* TAN: Tangent&lt;br /&gt;
* TANH: Hyperbolic tangent&lt;br /&gt;
* ATAN: Arc tangent&lt;br /&gt;
&lt;br /&gt;
==== Relational Operators ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;amp;gt;= : Greater than or equal to&lt;br /&gt;
* &amp;amp;gt; : Greater than&lt;br /&gt;
* &amp;amp;lt;= : Less than or equal to&lt;br /&gt;
* &amp;amp;lt;: Less than&lt;br /&gt;
* # : Not equal to&lt;br /&gt;
* = : Equal to&lt;br /&gt;
&lt;br /&gt;
==== Logical Operators ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;amp;amp;&amp;amp;amp; : And&lt;br /&gt;
* || : Or&lt;br /&gt;
* ! : Not&lt;br /&gt;
&lt;br /&gt;
==== Bitwise Operators ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* | : Bitwise Or&lt;br /&gt;
* &amp;amp;amp; : Bitwise And&lt;br /&gt;
* OR : Bitwise Or&lt;br /&gt;
* AND: Bitwise And&lt;br /&gt;
* XOR: Bitwise Exclusive Or&lt;br /&gt;
* ~ : One's Complement&lt;br /&gt;
* &amp;amp;lt;&amp;amp;lt; : Left shift&lt;br /&gt;
* &amp;amp;gt;&amp;amp;gt; : Right shift&lt;br /&gt;
&lt;br /&gt;
==== Parentheses and Comma ====&lt;br /&gt;
&lt;br /&gt;
The open and close parentheses are supported. Nested parenthesis are supported.&lt;br /&gt;
&lt;br /&gt;
The comma is supported when used to separate the arguments of a binary function.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conditional Expression ====&lt;br /&gt;
&lt;br /&gt;
The C language's question mark operator is supported. The format is:&lt;br /&gt;
&lt;br /&gt;
 (condition)? True result : False result&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example Expressions ===&lt;br /&gt;
&lt;br /&gt;
==== Algebraic ====&lt;br /&gt;
&lt;br /&gt;
 A + B + 10&lt;br /&gt;
&lt;br /&gt;
* Result is A + B&lt;br /&gt;
&lt;br /&gt;
==== Relational ====&lt;br /&gt;
&lt;br /&gt;
 (A + B) &amp;amp;lt; (C + D)&lt;br /&gt;
&lt;br /&gt;
* Result is 1 if (A+B) &amp;amp;lt; (C+D)&lt;br /&gt;
* Result is 0 if (A+B) &amp;amp;gt;= (C+D)&lt;br /&gt;
&lt;br /&gt;
==== Question Mark ====&lt;br /&gt;
&lt;br /&gt;
 (A+B)&amp;amp;lt;(C+D)?E:F+L+10&lt;br /&gt;
&lt;br /&gt;
* Result is E if (A+B) &amp;amp;lt; (C+D)&lt;br /&gt;
* Result is F+L+10 if (A+B) &amp;amp;gt;= (C+D)&lt;br /&gt;
&lt;br /&gt;
 (A+B)&amp;amp;lt;(C+D)?E&lt;br /&gt;
&lt;br /&gt;
* Result is E if (A+B) &amp;amp;lt; (C+D)&lt;br /&gt;
* Result is unchanged if (A+B) &amp;amp;gt;= (C+D)&lt;br /&gt;
&lt;br /&gt;
==== Logical ====&lt;br /&gt;
&lt;br /&gt;
 A&amp;amp;amp;B&lt;br /&gt;
&lt;br /&gt;
* Causes the following to occur:&lt;br /&gt;
** Convert A to integer&lt;br /&gt;
** Convert B to integer&lt;br /&gt;
** Bit-wise And A and B&lt;br /&gt;
** Convert result to floating point&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters specify and control the output capabilities of the Calcout record. They determine when to write the output, where to write it, and what the output will be. The OUT link specifies the Process Variable to which the result will be written. The OOPT field determines the condition that causes the output link to be written to. It's a menu field that has six choices:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Every Time&amp;lt;/CODE&amp;gt; -- write output every time record is processed.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;On Change&amp;lt;/CODE&amp;gt; -- write output every time VAL changes, i.e., every time the result of the expression changes.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;When Zero&amp;lt;/CODE&amp;gt; -- when record is processed, write output if VAL is zero.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;When Non-zero&amp;lt;/CODE&amp;gt; -- when record is processed, write output if VAL is non-zero.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Transition To Zero&amp;lt;/CODE&amp;gt; -- when record is processed, write output only if VAL is zero and last value was non-zero.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Transition To Non-zero&amp;lt;/CODE&amp;gt; -- when record is processed, write output only if VAL is non-zero and last value was zero.&lt;br /&gt;
&lt;br /&gt;
The DOPT field determines what data is written to the output link when the output is executed. The field is a menu field with two options: &amp;lt;CODE&amp;gt;Use CALC&amp;lt;/CODE&amp;gt; or &amp;lt;CODE&amp;gt;Use OCAL&amp;lt;/CODE&amp;gt;. If &amp;lt;CODE&amp;gt;Use CALC&amp;lt;/CODE&amp;gt; is specified, when the record writes its output it will write the result of the expression in the CALC record, that is, it will write the value of the VAL field. If &amp;lt;CODE&amp;gt;Use OCAL&amp;lt;/CODE&amp;gt; is specified, the record will instead write the result of the expression in the OCAL field, which is contained in the OVAL field. The OCAL field is exactly like the CALC field and has the same functionality: it can contain the string representation of an expression which is evaluated at run-time. Thus, if necessary, the record can use the result of the CALC expression to determine if data should be written and can use the result of the OCAL expression as the data to write.&lt;br /&gt;
&lt;br /&gt;
If the OEVT field specifies a non-zero integer and the condition in the OOPT field is met, the record will post a corresponding event. If the ODLY field is non-zero, the record pauses for the specified number of seconds before executing the OUT link or posting the output event. During this waiting period the record is &amp;amp;quot;active&amp;amp;quot; and will not be processed again until the wait is over. The field DLYA is equal to 1 during the delay period. The resolution of the delay entry is 1/60 of a second (it uses the VxWorks &amp;lt;CODE&amp;gt;tickLib&amp;lt;/CODE&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The IVOA field specifies what action to take with the OUT link if the Calcout record enters an INVALID alarm status. The options are &amp;lt;CODE&amp;gt;Continue normally&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Don't drive outputs&amp;lt;/CODE&amp;gt;, and &amp;lt;CODE&amp;gt;Set output to IVOV&amp;lt;/CODE&amp;gt;. If the IVOA field is &amp;lt;CODE&amp;gt;Set output to IVOV&amp;lt;/CODE&amp;gt;, the data entered into the IVOV field is written to the OUT link if the record alarm severity is INVALID.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OOPT&amp;lt;TD&amp;gt;Output Execute Option&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOPT&amp;lt;TD&amp;gt;Output Data Option&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL&amp;lt;TD&amp;gt; Output Calculation&amp;lt;TD&amp;gt;STRING[36]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OVAL&amp;lt;TD&amp;gt;Output Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OEVT&amp;lt;TD&amp;gt;Event To Issue&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ODLY&amp;lt;TD&amp;gt;Output Execution Delay&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOV&amp;lt;TD&amp;gt;Invalid Output Action&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOA&amp;lt;TD&amp;gt;Invalid Output Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. Some are also meant to represent the status of the record at run-time. An example of an interactive MEDM display screen that displays the status of the Calcout record is located here.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is supplied by the user and which describes the values being operated upon. The string is retrieved whenever the routine &amp;lt;CODE&amp;gt;get_units&amp;lt;/CODE&amp;gt; is called. The EGU string is solely for an operator's sake and does not have to be used.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields only refer to the limits of the VAL, HIHI, HIGH, LOW, and LOLO fields. PREC controls the precision of the VAL field.&lt;br /&gt;
&lt;br /&gt;
The INAV-INLV fields indicate the status of the link to the PVs specified in the INPA-INPL fields, respectively. The field can have three possible values:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV NC&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link hasn't been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV OK&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link has been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Local PV&amp;lt;/CODE&amp;gt; -- the PV was found on this IOC.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Constant&amp;lt;/CODE&amp;gt; -- the corresponding link field is a constant.&lt;br /&gt;
&lt;br /&gt;
The OUTV field indicates the status of the OUT link. It has the same possible values as the INAV-INLV fields.&lt;br /&gt;
&lt;br /&gt;
The CLCV and OLCV fields indicate the validity of the expression in the CALC and OCAL fields, respectively. If the expression is invalid, the field is set to one.&lt;br /&gt;
&lt;br /&gt;
The DLYA field is set to one during the delay interval specified in ODLY.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INAV&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INBV&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INCV&amp;lt;TD&amp;gt;Link Status of INPC&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INDV&amp;lt;TD&amp;gt;Link Status of INPD&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INEV&amp;lt;TD&amp;gt;Link Status of INPE&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INFV&amp;lt;TD&amp;gt;Link Status of INPF&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INGV&amp;lt;TD&amp;gt;Link Status of INPG&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INHV&amp;lt;TD&amp;gt;Link Status of INPH&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INIV&amp;lt;TD&amp;gt;Link Status of INPI&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INJV&amp;lt;TD&amp;gt;Link Status of INPJ&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INKV&amp;lt;TD&amp;gt;Link Status of INPK&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INLV&amp;lt;TD&amp;gt;Link Status of INPL&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTV&amp;lt;TD&amp;gt;OUT PV Status&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CLCV&amp;lt;TD&amp;gt;CALC Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCLV&amp;lt;TD&amp;gt;OCAL Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLYA&amp;lt;TD&amp;gt;Output Delay Active&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for the Calc record are the SCAN, READ, Calculation, and limit alarms. The SCAN and READ alarms are called by the record support routines. The Calculation alarm is called by the record processing routine when the CALC expression is an invalid one, upon which an error message is generated.&lt;br /&gt;
&lt;br /&gt;
The following alarm parameters which are configured by the user define the limit alarms for the VAL field and the severity corresponding to those conditions.&lt;br /&gt;
&lt;br /&gt;
The HYST field defines an alarm deadband for each limit. See [[RRM 3-14 Concepts#Alarm Specification|Alarm Specification]] for a complete explanation of alarms and these fields. [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;TD&amp;gt;Severity for a Hihi Alarm&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;TD&amp;gt;Severity for a High Alarm&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;TD&amp;gt;Severity for a Low Alarm&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;TD&amp;gt;Severity for a Lolo Alarm&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine when to send monitors for the value fields. The monitors are sent when the value field exceeds the last monitored field by the appropriate deadband, the ADEL for archiver monitors and the MDEL field for all other types of monitors. If these fields have a value of zero, every time the value changes, monitors are triggered; if they have a value of -1, every time the record is scanned, monitors are triggered. See [[RRM 3-14 Concepts#Monitor Specification|Monitor Specification]] for a complete explanation of monitors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields are not configurable using a configuration too and none are modifiable at run-time. They are used to process the record.&lt;br /&gt;
&lt;br /&gt;
The LALM field is used to implement the hysteresis factor for the alarm limits.&lt;br /&gt;
&lt;br /&gt;
The LA-LL fields are used to decide when to trigger monitors for the corresponding fields. For instance, if LA does not equal the value for A, monitors for A are triggered. The MLST and MLST fields are used in the same manner for the VAL field.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;TD&amp;gt;Last Alarmed Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;TD&amp;gt;Archive Last Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;TD&amp;gt;Monitor Last Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LA&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LB&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LC&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LD&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LE&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LF&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LG&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LH&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LI&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LJ&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LK&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant value if the input link is CONSTANT or a channel access link is created if the input link is PV_LINK.&lt;br /&gt;
&lt;br /&gt;
A routine postfix is called to convert the infix expression in CALC and OCAL to reverse polish notation. The result is stored in RPCL and ORPC, respectively.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if CALC or OCAL is changed. special calls postfix.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the field is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
 upper_alarm_limit = HIHI&lt;br /&gt;
 upper_warning_limit = HIGH&lt;br /&gt;
 lower_warning_limit = LOW&lt;br /&gt;
 lower_alarm_limit = LOLO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
==== process() ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch all arguments.&lt;br /&gt;
# Call routine calcPerform(), which calculates VAL from the postfix version of the expression given in CALC. If calcPerform() returns success, UDF is set to FALSE.&lt;br /&gt;
# Check alarms. This routine checks to see if the new VAL causes the alarm status and severity to change. If so, NSEV, NSTA and LALM are set. It also honors the alarm hysteresis factor (HYST). Thus the value must change by at least HYST before the alarm status and severity changes.&lt;br /&gt;
# Determine if the Output Execution Option (OOPT) is met. If it is met, either execute the output link (and output event) immediately (if ODLY = 0), or schedule a callback after the specified interval. See the explanation for the &amp;lt;CODE&amp;gt;execOutput()&amp;lt;/CODE&amp;gt; routine below.&lt;br /&gt;
# Check to see if monitors should be invoked.&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* Archive and value change monitors are invoked if ADEL and MDEL conditions are met.&lt;br /&gt;
#* Monitors for A-L are checked whenever other monitors are invoked.&lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# If no output delay was specified, scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== execOutput() ====&lt;br /&gt;
&lt;br /&gt;
# If DOPT field specifies the use of OCAL, call the routine calcPerform for the postfix version of the expression in OCAL. Otherwise, use VAL.&lt;br /&gt;
# If the Alarm Severity is INVALID, follow the option as designated by the field IVOA.&lt;br /&gt;
# If the Alarm Severity is not INVALID or IVOA specifies &amp;amp;quot;Continue Normally&amp;amp;quot;, put the value of OVAL to the OUT link and post the event in OEVT (if non-zero).&lt;br /&gt;
# If an output delay was implemented, process the forward link.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Calculation&amp;diff=1777</id>
		<title>RRM 3-14 Calculation</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Calculation&amp;diff=1777"/>
		<updated>2008-04-18T19:09:10Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Calc - Calculation =&lt;br /&gt;
&lt;br /&gt;
The calculation or &amp;quot;Calc&amp;quot; record is used to perform algebraic, relational, and logical operations on values retrieved from other records. The result of its operations can then be accessed by another record so that it can be used.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into these categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* expression parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
* monitor parameters&lt;br /&gt;
* run-time parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Calc record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the Calc record supports no direct interfaces to hardware, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the Calc record consist of 12 input links INPA, INPB, ... INPL. The fields can be database links, channel access links, or constants. If they are links, they must specify another record's field or a channel access link. If they are constants, they will be initialized with the value they are configured with and can be changed via &amp;lt;CODE&amp;gt;dbPuts&amp;lt;/CODE&amp;gt;. They cannot be hardware addresses.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPC&amp;lt;TD&amp;gt;Input Link C&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPD&amp;lt;TD&amp;gt;Input Link D&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPE&amp;lt;TD&amp;gt;Input Link E&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPF&amp;lt;TD&amp;gt;Input Link F&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPG&amp;lt;TD&amp;gt;Input Link G&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPH&amp;lt;TD&amp;gt;Input Link H&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPI&amp;lt;TD&amp;gt;Input Link I&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPJ&amp;lt;TD&amp;gt;Input Link J&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPK&amp;lt;TD&amp;gt;Input Link K&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPL&amp;lt;TD&amp;gt;Input Link L&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression ===&lt;br /&gt;
&lt;br /&gt;
At the core of the Calc record lie the CALC and RPCL fields. The CALC field contains the infix expression which the record routine will use when it processes the record. The resulting value is placed in the VAL field and can be accessed from there. The CALC expression is actually converted to opcode and stored as in Reverse Polish Notation in the RPCL field. It is this expression which is actually used to calculate VAL. The Reverse Polish expression is evaluated more efficiently during run-time than an infix expression. CALC can be changed at run-time, and a special record routine calls a function to convert it to Reverse Polish Notation.&lt;br /&gt;
&lt;br /&gt;
The range of expressions supported by the calculation record are separated into operands, algebraic operators, trigonometric operators, relational operators, logical operators, parentheses and commas, and the question mark or '?:' operator. The expression can consist of any of these operators, as well as any of the values from the input links which are the operands.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC&amp;lt;TD&amp;gt;Calculation&amp;lt;TD&amp;gt;DBF_STRING&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RPCL&amp;lt;TD&amp;gt;Reverse Polish&amp;lt;TD&amp;gt;DBF_NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Operands ====&lt;br /&gt;
&lt;br /&gt;
The expression uses the values retrieved from the INP''x'' links as operands, though constants can be used as operands too. These values retrieved from the input links are stored in the A-L fields. The values to be used in the expression are simply referenced by the field letter. For instance, the value obtained from the INPA link is stored in the field A, and the value obtained from INPB is stored in field B. The field names can be included in the expression which will operate on their respective values, as in A+B. Also, the RNDM unary function can be included as an operand in the expression in order to generate a random number between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;A&amp;lt;TD&amp;gt;Input Value A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B&amp;lt;TD&amp;gt;Input Value B&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;C&amp;lt;TD&amp;gt;Input Value C&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D&amp;lt;TD&amp;gt;Input Value D&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;E&amp;lt;TD&amp;gt;Input Value E&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;F&amp;lt;TD&amp;gt;Input Value F&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;G&amp;lt;TD&amp;gt;Input Value G&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;H&amp;lt;TD&amp;gt;Input Value H&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;I&amp;lt;TD&amp;gt;Input Value I&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;J&amp;lt;TD&amp;gt;Input Value J&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;K&amp;lt;TD&amp;gt;Input Value K&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;L&amp;lt;TD&amp;gt;Input Value L&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Algebraic Operators ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* ABS: Absolute value (unary)&lt;br /&gt;
* SQR: Square root (unary)&lt;br /&gt;
* MIN: Minimum (binary function)&lt;br /&gt;
* MAX: Maximum (binary function)&lt;br /&gt;
* CEIL: Ceiling (unary)&lt;br /&gt;
* FLOOR: Floor (unary)&lt;br /&gt;
* LOG: Log base 10 (unary)&lt;br /&gt;
* LOGE: Natural log (unary)&lt;br /&gt;
* EXP: Exponential function (unary)&lt;br /&gt;
* ^: Exponential (binary)&lt;br /&gt;
* ** : Exponential (binary)&lt;br /&gt;
* + : Addition (binary)&lt;br /&gt;
* - : Subtraction (binary)&lt;br /&gt;
* * : Multiplication (binary)&lt;br /&gt;
* / : Division (binary)&lt;br /&gt;
* % : Modulo (binary)&lt;br /&gt;
* NOT: Negate (unary)&lt;br /&gt;
&lt;br /&gt;
==== Trigonometric Operators ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* SIN: Sine&lt;br /&gt;
* SINH: Hyperbolic sine&lt;br /&gt;
* ASIN: Arc sine&lt;br /&gt;
* COS: Cosine&lt;br /&gt;
* COSH: Hyperbolic cosine&lt;br /&gt;
* ACOS: Arc cosine&lt;br /&gt;
* TAN: Tangent&lt;br /&gt;
* TANH: Hyperbolic tangent&lt;br /&gt;
* ATAN: Arc tangent&lt;br /&gt;
&lt;br /&gt;
==== Relational Operators ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;amp;gt;= : Greater than or equal to&lt;br /&gt;
* &amp;amp;gt; : Greater than&lt;br /&gt;
* &amp;amp;lt;= : Less than or equal to&lt;br /&gt;
* &amp;amp;lt;: Less than&lt;br /&gt;
* # : Not equal to&lt;br /&gt;
* = : Equal to&lt;br /&gt;
&lt;br /&gt;
==== Logical Operators ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &amp;amp;amp;&amp;amp;amp; : And&lt;br /&gt;
* || : Or&lt;br /&gt;
* ! : Not&lt;br /&gt;
&lt;br /&gt;
==== Bitwise Operators ====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* | : Bitwise Or&lt;br /&gt;
* &amp;amp;amp; : Bitwise And&lt;br /&gt;
* OR : Bitwise Or&lt;br /&gt;
* AND: Bitwise And&lt;br /&gt;
* XOR: Bitwise Exclusive Or&lt;br /&gt;
* ~ : One's Complement&lt;br /&gt;
* &amp;amp;lt;&amp;amp;lt; : Left shift&lt;br /&gt;
* &amp;amp;gt;&amp;amp;gt; : Right shift&lt;br /&gt;
&lt;br /&gt;
==== Parentheses and Comma ====&lt;br /&gt;
&lt;br /&gt;
The open and close parentheses are supported. Nested parenthesis are supported.&lt;br /&gt;
&lt;br /&gt;
The comma is supported when used to separate the arguments of a binary function.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conditional Expression ====&lt;br /&gt;
&lt;br /&gt;
The C language's question mark operator is supported. The format is:&lt;br /&gt;
&lt;br /&gt;
 (condition)? True result : False result&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Examples ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Algebraic ====&lt;br /&gt;
&lt;br /&gt;
 A + B + 10&lt;br /&gt;
&lt;br /&gt;
* Result is A + B&lt;br /&gt;
&lt;br /&gt;
==== Relational ====&lt;br /&gt;
&lt;br /&gt;
 (A + B) &amp;amp;lt; (C + D)&lt;br /&gt;
&lt;br /&gt;
* Result is 1 if (A+B) &amp;amp;lt; (C+D)&lt;br /&gt;
* Result is 0 if (A+B) &amp;amp;gt;= (C+D)&lt;br /&gt;
&lt;br /&gt;
==== Question Mark ====&lt;br /&gt;
&lt;br /&gt;
 (A+B)&amp;amp;lt;(C+D)?E:F+L+10&lt;br /&gt;
&lt;br /&gt;
* Result is E if (A+B) &amp;amp;lt; (C+D)&lt;br /&gt;
* Result is F+L+10 if (A+B) &amp;amp;gt;= (C+D)&lt;br /&gt;
&lt;br /&gt;
 (A+B)&amp;amp;lt;(C+D)?E&lt;br /&gt;
&lt;br /&gt;
* Result is E if (A+B) &amp;amp;lt; (C+D)&lt;br /&gt;
* Result is unchanged if (A+B) &amp;amp;gt;= (C+D)&lt;br /&gt;
&lt;br /&gt;
==== Logical ====&lt;br /&gt;
&lt;br /&gt;
 A&amp;amp;amp;B&lt;br /&gt;
&lt;br /&gt;
* Causes the following to occur:&lt;br /&gt;
** Convert A to integer&lt;br /&gt;
** Convert B to integer&lt;br /&gt;
** Bit-wise And A and B&lt;br /&gt;
** Convert result to floating point&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. These fields are used to display VAL and the other parameters of the calculation record either textually or graphically.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is supplied by the user and which describes the values being operated upon. The string is retrieved whenever the routine &amp;lt;CODE&amp;gt;get_units&amp;lt;/CODE&amp;gt; is called. The EGU string is solely for an operator's sake and does not have to be used.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields only refer to the limits of the VAL, HIHI, HIGH, LOW, and LOLO fields. PREC controls the precision of the VAL field.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for the Calc record are the SCAN, READ, Calculation, and limit alarms. The SCAN and READ alarms are called by the record support routines. The Calculation alarm is called by the record processing routine when the CALC expression is an invalid one, upon which an error message is generated.&lt;br /&gt;
&lt;br /&gt;
The following alarm parameters which are configured by the user define the limit alarms for the VAL field and the severity corresponding to those conditions.&lt;br /&gt;
&lt;br /&gt;
The HYST field defines an alarm deadband for each limit. See [[RRM 3-14 Concepts#Alarm Specification|Alarm Specification]] for a complete explanation of alarms and these fields. [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;TD&amp;gt;Severity for a Hihi Alarm&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;TD&amp;gt;Severity for a High Alarm&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;TD&amp;gt;Severity for a Low Alarm&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;TD&amp;gt;Severity for a Lolo Alarm&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine when to send monitors for the value fields. The monitors are sent when the value field exceeds the last monitored field by the appropriate deadband, the ADEL for archiver monitors and the MDEL field for all other types of monitors. If these fields have a value of zero, everytime the value changes, monitors are triggered; if they have a value of -1, everytime the record is scanned, monitors are triggered. See [[RRM 3-14 Concepts#Monitor Specification|Monitor Specification]] for a complete explanation of monitors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields are not configurable using a configuration too and none are modifiable at run-time. They are used to process the record.&lt;br /&gt;
&lt;br /&gt;
The LALM field is used to implement the hysteresis factor for the alarm limits.&lt;br /&gt;
&lt;br /&gt;
The LA-LL fields are used to decide when to trigger monitors for the corresponding fields. For instance, if LA does not equal the value for A, monitors for A are triggered. The MLST and MLST fields are used in the same manner for the VAL field.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;TD&amp;gt;Last Alarmed Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;TD&amp;gt;Archive Last Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;TD&amp;gt;Monitor Last Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LA&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LB&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LC&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LD&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LE&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LF&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LG&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LH&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LI&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LJ&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LK&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant value if the input link is CONSTANT or a channel access link is created if the input link is PV_LINK.&lt;br /&gt;
&lt;br /&gt;
A routine postfix is called to convert the infix expression in CALC to reverse polish notation. The result is stored in RPCL.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if CALC is changed. special calls postfix.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the field is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
  upper_alarm_limit = HIHI&lt;br /&gt;
  upper_warning_limit = HIGH&lt;br /&gt;
  lower_warning_limit = LOW&lt;br /&gt;
  lower_alarm_limit = LOLO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# Fetch all arguments.&lt;br /&gt;
# Call routine calcPerform, which calculates VAL from the postfix version of the expression given in CALC. If calcPerform returns success UDF is set to FALSE.&lt;br /&gt;
# Check alarms. This routine checks to see if the new VAL causes the alarm status and severity to change. If so, NSEV, NSTA and LALM are set. It also honors the alarm hysteresis factor (HYST). Thus the value must change by at least HYST before the alarm status and severity changes.&lt;br /&gt;
# Check to see if monitors should be invoked.&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* Archive and value change monitors are invoked if ADEL and MDEL conditions are met.&lt;br /&gt;
#* Monitors for A-L are checked whenever other monitors are invoked.&lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Binary_Output&amp;diff=1599</id>
		<title>RRM 3-14 Binary Output</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Binary_Output&amp;diff=1599"/>
		<updated>2008-04-18T19:08:06Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= bo - Binary Output =&lt;br /&gt;
&lt;br /&gt;
The normal use for this record type is to store a simple bit  (0 or 1) value to be sent to a Digital Output module. It can also be used to write binary values into other records via database or channel access links.  This record can implement both latched and momentary binary outputs depending on how the HIGH field is configured.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The binary output's fields fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* convert and write parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
* run-time parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The binary output record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Note that I/O event scanning is only supported for those card types that interrupt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Desired Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The  binary output record must specify where its desired output originates. The desired output needs to be in engineering units.&lt;br /&gt;
&lt;br /&gt;
The first field that determines where the desired output originates is the output mode select (OSML) field, which can have two possible values: &amp;lt;CODE&amp;gt;closed_loop&amp;lt;/CODE&amp;gt; or &amp;lt;CODE&amp;gt;supervisory&amp;lt;/CODE&amp;gt;.  If &amp;lt;CODE&amp;gt;supervisory&amp;lt;/CODE&amp;gt; is specified, the value in the VAL field can be set externally via dbPuts at run-time. If &amp;lt;CODE&amp;gt;closed loop&amp;lt;/CODE&amp;gt; is specified, the VAL field's value is obtained from the address specified in the desired output location (DOL) field which can be either a database link or a channel access link. To achieve continuous control, a database link to a control algorithm record should be entered in the DOL field.&lt;br /&gt;
&lt;br /&gt;
[[RRM 3-14 Concepts#Address Specification|Address Specification]] presents more information on database addresses and links. [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains the effect of database linkage on scanning.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL&amp;lt;TD&amp;gt;Desired Output Location (Input Link)&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OMSL&amp;lt;TD&amp;gt;Output Mode Select&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Convert and Write Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine where the binary output writes to and how to convert the engineering units to a raw signal. After VAL is set and forced to be either 1 or 0,  as the result of either a dbPut or a new value being retrieved from the link in the DOL field, then what happens next depends on which  device support routine is used and how the HIGH field is configured.&lt;br /&gt;
&lt;br /&gt;
If the &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support routine is specified, then the device support routine writes the VAL field's value to the address specified in the OUT field. Otherwise, RVAL is the value finally written by the device support routines after being converted.&lt;br /&gt;
&lt;br /&gt;
If VAL is equal to 0, then the record processing routine sets RVAL equal to zero. When VAL is not equal to 0, then RVAL is set equal to the value contained in the MASK field. (MASK is set by the device support routines and is of no concern to the user.) Also when VAL is not 0 and after RVAL is set equal to MASK, the record processing routine checks to see if the HIGH field is greater than 0. If it is, then the routine will process the record again with VAL set to 0 after the number of seconds specified by HIGH. Thus, HIGH implements a momentary output which changes the state of the device back to 0 after ''N'' number of seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;TD&amp;gt;Output Link&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;ENUM&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RVAL&amp;lt;TD&amp;gt;Raw Data Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;TD&amp;gt;Seconds to Hold High&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ZNAM&amp;lt;TD&amp;gt;Zero Name&amp;lt;TD&amp;gt;STRING [20]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ONAM&amp;lt;TD&amp;gt;One Name&amp;lt;TD&amp;gt;STRING [20]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conversion Parameters ====&lt;br /&gt;
&lt;br /&gt;
The ZNAM field has the string that corresponds to the 0 state, and the ONAM field holds the string that corresponds to the 1 state. These fields, other than being used to tell the operator what each state represents, are used to perform conversions if the value fetched by DOL is a string. If it is, VAL is set to the state correspond to that string. For instance, if the value fetched is the string &amp;quot;Off&amp;quot; and the ZNAM string is &amp;quot;Off,&amp;quot; then VAL is set to 0.&lt;br /&gt;
&lt;br /&gt;
After VAL is set, if VAL is equal to 0, then the record processing routine sets RVAL equal to zero. When VAL is not equal to 0, then RVAL is set equal to the value contained in the MASK field. (MASK is set by the device support routines and is of no concern to the user.) Also when VAL is equal to 1 and after RVAL is set equal to MASK, the record processing routine checks to see if the HIGH field is greater than 0. If it is, then the routine process the record again with VAL=0 after the number of seconds specified by HIGH. Thus, HIGH implements a latched output which changes the state of the device or link to 1, then changes it back to 0 after N number of seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ZNAM&amp;lt;TD&amp;gt;ASCII string defining state zero&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ONAM&amp;lt;TD&amp;gt;ASCII string defining state one&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;TD&amp;gt;If this value is greater than zero, then whenever VAL is set equal to 1, it is reset to zero after HIGH seconds.&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Output Specification ====&lt;br /&gt;
&lt;br /&gt;
The OUT field specifies where the binary output record gets its input. It must specify the address of an I/O card if the record sends its output to hardware, and the DTYP field must contain a the corresponding device support module. Be aware that the address format differs according to the I/O bus used. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on the format of hardware addresses. You can see a list of the device support modules currently supported at the user's local site by using the &amp;lt;CODE&amp;gt;dbst&amp;lt;/CODE&amp;gt; utility in R3.13.&lt;br /&gt;
&lt;br /&gt;
Otherwise, if the record is configured to use the soft device support modules, then it can be either a database link, a channel access link, or a constant. Be aware that nothing will be written when OUT is a constant. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on the format of database and channel access addresses. Also, see [[#Device Support For Soft Records|Device Support For Soft Records]] in this chapter for more on output to other records.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. The &amp;lt;CODE&amp;gt;get_enum_str&amp;lt;/CODE&amp;gt; record support routine can retrieve the state string corresponding to the VAL's state. So if the value is 1, &amp;lt;CODE&amp;gt;get_enum_str&amp;lt;/CODE&amp;gt; will return the string in the ONAM field; and if 0, &amp;lt;CODE&amp;gt;get_enum_str&amp;lt;/CODE&amp;gt; will return the ZNAM string.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ZNAM&amp;lt;TD&amp;gt;Zero Name&amp;lt;TD&amp;gt;STRING [20]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ONAM&amp;lt;TD&amp;gt;One Name&amp;lt;TD&amp;gt;STRING [20]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine the binary output's alarm condition and to determine the severity of that condition. The possible alarm conditions for binary outputs are the SCAN, READ , INVALID, and state alarms. The user can configure the state alarm conditions using these fields.&lt;br /&gt;
&lt;br /&gt;
The possible values for these fields are &amp;lt;CODE&amp;gt;NO_ALARM&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;MINOR&amp;lt;/CODE&amp;gt;, and &amp;lt;CODE&amp;gt;MAJOR&amp;lt;/CODE&amp;gt;. The ZSV holds the severity for the zero state; OSV for the one state. COSV is used to cause an alarm whenever the state changes between the states (0-1, or 1-0) and its severity is configured as MINOR or MAJOR.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 Common#Invalid Alarm Output Action|Invalid Alarm Output Action]] for more information on the IVOA and IVOV fields. [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ZSV&amp;lt;TD&amp;gt;Zero Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OSV&amp;lt;TD&amp;gt;One Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;COSV&amp;lt;TD&amp;gt;Change of State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOA&amp;lt;TD&amp;gt;Invalid Alarm&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOV&amp;lt;TD&amp;gt;Invalid Alarm Output Value&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-Time and Simulation Mode Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the binary output. They are not configurable using a configuration tool. They represent the current state of the binary output.&lt;br /&gt;
&lt;br /&gt;
ORAW is used to determine if monitors should be triggered for RVAL at the same time they are triggered for VAL.&lt;br /&gt;
&lt;br /&gt;
MASK is given a value by the device support routines and should not concern the user.&lt;br /&gt;
&lt;br /&gt;
The RBV field is also set by device support. It is the actual read back value obtained from the hardware itself or from the associated device driver. The ORBV field is used to decide if monitors should be triggered for RBV at the same time monitors are triggered for changes in VAL. &lt;br /&gt;
&lt;br /&gt;
The LALM field holds the value of the last occurrence of the change of state alarm. It is used to implement the change of state alarm, and thus only has meaning if COSV is MINOR or MAJOR.&lt;br /&gt;
&lt;br /&gt;
The MLST is used by the &amp;lt;CODE&amp;gt;process&amp;lt;/CODE&amp;gt; record support routine to determine if archive and value change monitors are invoked. They are if MLST is not equal to VAL.&lt;br /&gt;
&lt;br /&gt;
The WPDT field is a private field for honoring seconds to hold HIGH.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ORAW&amp;lt;TD&amp;gt;Old Raw Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MASK&amp;lt;TD&amp;gt;Hardware Mask&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;compute&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RBV&amp;lt;TD&amp;gt;Readback Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ORBV&amp;lt;TD&amp;gt;Old Readback Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;TD&amp;gt;Last Alarmed Value&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;TD&amp;gt;Last Monitored Value&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RPVT&amp;lt;TD&amp;gt;Record Private&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;WDPT&amp;lt;TD&amp;gt;Watchdog Pointer&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following fields are used to operate the binary output in the simulation mode.  See [[RRM 3-14 Common#Fields Common to Many Record Types|Fields Common to Many Record Types]] for more information on these fields.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIOL&amp;lt;TD&amp;gt;Simulation Value Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVAL&amp;lt;TD&amp;gt;Simulation Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIML&amp;lt;TD&amp;gt;Simulation Mode Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMM&amp;lt;TD&amp;gt;Simulation Mode&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMS&amp;lt;TD&amp;gt;Simulation Mode Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
This routine initializes SIMM if SIML is a constant or creates a channel access link if SIML is PV_LINK. If SIOL is PV_LINK a channel access link is created .&lt;br /&gt;
&lt;br /&gt;
This routine next checks to see that device support is available. The routine next checks to see if the device support write routine is defined.&lt;br /&gt;
&lt;br /&gt;
If either device support or the device support write routine does not exist, an error message is issued and processing is terminated.&lt;br /&gt;
&lt;br /&gt;
If DOL is a constant, then VAL is initialized to 1 if its value is nonzero or initialized to 0 if DOL is zero, and UDF is set to FALSE.&lt;br /&gt;
&lt;br /&gt;
If device support includes init_record, it is called. VAL is set using RVAL, and UDF is set to FALSE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_enum_str ====&lt;br /&gt;
&lt;br /&gt;
Retrieves ASCII string corresponding to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_enum_strs ====&lt;br /&gt;
&lt;br /&gt;
Retrieves ASCII strings for ZNAM and ONAM.&lt;br /&gt;
&lt;br /&gt;
==== put_enum_str ====&lt;br /&gt;
&lt;br /&gt;
Checks if string matches ZNAM or ONAM, and if it does, sets VAL.&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# Check to see that the appropriate device support module exists. If it doesn't, an error message is issued and processing is terminated with the PACT field still set to TRUE. This ensures that processes will no longer be called for this record. Thus error storms will not occur.&lt;br /&gt;
# If PACT is FALSE&lt;br /&gt;
#* if DOL is DB_LINK and OMSL is CLOSED_LOOP&lt;br /&gt;
#** get value from DOL&lt;br /&gt;
#** check for link alarm&lt;br /&gt;
#** force VAL to be 0 or 1&lt;br /&gt;
#** if MASK is defined&lt;br /&gt;
#*** if VAL is 0 set RVAL = 0&lt;br /&gt;
#** else set RVAL = MASK&lt;br /&gt;
# Check alarms: This routine checks to see if the new VAL causes the alarm status and severity to change. If so, NSEV, NSTA and LALM are set.&lt;br /&gt;
# Check severity and write the new value. See [[RRM 3-14 Common#Invalid Alarm Output Action|Invalid Alarm Output Action]] for more information on how INVALID alarms affect output.&lt;br /&gt;
# If PACT has been changed to TRUE, the device support write output routine has started but has not completed writing the new value. In this case, the processing routine merely returns, leaving PACT TRUE.&lt;br /&gt;
# Check WAIT. If VAL is 1 and WAIT is greater than 0, process again with a VAL=0 after WAIT seconds.&lt;br /&gt;
# Check to see if monitors should be invoked.&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* Archive and value change monitors are invoked if MLST is not equal to VAL.&lt;br /&gt;
#* Monitors for RVAL and for RBV are checked whenever other monitors are invoked.&lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
Each binary output record must have an associated set of device support routines. The primary responsibility of the device support routines is to write a new value whenever write_bo is called. The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PACT&amp;lt;TD&amp;gt;Processing Active&amp;lt;TD rowspan=4&amp;gt;See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for an explanation of these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DPVT&amp;lt;TD&amp;gt;Device Private&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSEV&amp;lt;TD&amp;gt;New Alarm Severity&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSTA&amp;lt;TD&amp;gt;New Alarm Status&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;This field is only of interest to device support routines that do not use MASK and RVAL.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;TD&amp;gt;Output Link&amp;lt;TD&amp;gt;This field is used by the device support routines to locate its output.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RVAL&amp;lt;TD&amp;gt;Raw Data Value&amp;lt;TD&amp;gt;If MASK is defined then record support sets RVAL=(0,MASK) if VAL is (0, not zero).&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MASK&amp;lt;TD&amp;gt;Hardware mask.&amp;lt;TD&amp;gt;The device support module must set this field. Not that if VAL is 1, then record processing sets RVAL = MASK.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RBV&amp;lt;TD&amp;gt;Read Back Value&amp;lt;TD&amp;gt;This is the actual read back value obtained from the hardware itself or from the associated device driver.  It is the responsibility of the device support routine to give this field a value.&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== report ====&lt;br /&gt;
&lt;br /&gt;
 report(FILE fp, paddr)&lt;br /&gt;
&lt;br /&gt;
Not currently used.&lt;br /&gt;
&lt;br /&gt;
==== init ====&lt;br /&gt;
&lt;br /&gt;
 init()&lt;br /&gt;
&lt;br /&gt;
This routine is called once during IOC initialization.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is optional. If provided, it is called by the record support init_record routine. It should determine MASK if it is needed.&lt;br /&gt;
&lt;br /&gt;
==== get_ioint_info ====&lt;br /&gt;
&lt;br /&gt;
 get_ioint_info(int cmd,struct dbCommon *precord,IOSCANPVT *ppvt)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the ioEventScan system each time the record is added or deleted from an I/O event scan list. cmd has the value (0,1) if the record is being (added to, deleted from) an I/O event list. It must be provided for any device type that can use the ioEvent scanner.&lt;br /&gt;
&lt;br /&gt;
==== write_bo ====&lt;br /&gt;
&lt;br /&gt;
 write_bo(precord)&lt;br /&gt;
&lt;br /&gt;
This routine must output an new value. It returns the following values:&lt;br /&gt;
&lt;br /&gt;
* 0: Success.&lt;br /&gt;
* other: Error.&lt;br /&gt;
&lt;br /&gt;
=== Device Support For Soft Records ===&lt;br /&gt;
&lt;br /&gt;
Two soft device support modules &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;Raw Soft Channel&amp;lt;/CODE&amp;gt; are provided for output records not related to actual hardware devices. The OUT link type must be either a CONSTANT, DB_LINK, or CA_LINK.&lt;br /&gt;
&lt;br /&gt;
==== Soft Channel ====&lt;br /&gt;
&lt;br /&gt;
This module writes the current value of VAL.&lt;br /&gt;
&lt;br /&gt;
If the OUT link type is PV_LINK, then dbCaAddInlink is called by init_record. init_record always returns a value of 2, which means that no conversion will ever be attempted. write_bo calls recGblPutLinkValue to write the current value of VAL. See [[RRM 3-14 Common#Soft Output|Soft Output]] for details.&lt;br /&gt;
&lt;br /&gt;
==== Raw Soft Channel ====&lt;br /&gt;
&lt;br /&gt;
This module is like the previous except that it writes the current value of RVAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Binary_Input&amp;diff=1892</id>
		<title>RRM 3-14 Binary Input</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Binary_Input&amp;diff=1892"/>
		<updated>2008-04-18T19:06:35Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= bi - Binary Input =&lt;br /&gt;
&lt;br /&gt;
The normal use for this record type is to obtain a binary value of 0 or 1. Most device support modules obtain values from hardware and place the value in RVAL. For these devices record processing sets VAL = (0,1) if RVAL is (0, not 0). Devices support modules may optionally read a value directly into VAL.&lt;br /&gt;
&lt;br /&gt;
Soft device modules are provided to obtain input via database or channel access links or via dbPutField or dbPutLink requests. Two soft device support modules are provided: &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;Raw Soft Channel&amp;lt;/CODE&amp;gt;. The first allows VAL to be an arbitrary unsigned short integer. The second reads the value into RVAL just like normal hardware modules.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The binary input's fields fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read and convert parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
* run-time parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The binary input record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Note that I/O event scanning is only supported for those card types that interrupt.&lt;br /&gt;
&lt;br /&gt;
=== Read and Convert Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read and convert fields determine from where the binary input gets its input from and how to convert the raw signal to engineering units. The INP field contains the address from where device support retrieves the value. If the binary input record gets its value from hardware, the address of the card must be entered in he INP field, and the name of the device support module must be entered in the DTYP field. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on the format of hardware addresses. Be aware that the format differs between types of cards. You can see a list of the device support modules currently supported at the user's local site by using the &amp;lt;CODE&amp;gt;dbst&amp;lt;/CODE&amp;gt; utility (R3.13).&lt;br /&gt;
&lt;br /&gt;
For records that specify the &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; or &amp;lt;CODE&amp;gt;Raw Soft Channel&amp;lt;/CODE&amp;gt; device support routines, the INP field can be a channel or database access link, or a constant. If a constant, VAL can be changed directly by dbPuts. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on the format of database and channel access addresses. Also, see [[#Device Support for Soft Records|Device Support for Soft Records]] in this chapter for more information on soft device support.&lt;br /&gt;
&lt;br /&gt;
If the record gets its value from hardware or uses the &amp;lt;CODE&amp;gt;Raw Soft Channel&amp;lt;/CODE&amp;gt; device support, the device support routines place the value into the RVAL field which is then converted using the process described in the next section.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INP&amp;lt;TD&amp;gt;Input Link&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ZNAM&amp;lt;TD&amp;gt;Zero Name&amp;lt;TD&amp;gt;STRING [20]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ONAM&amp;lt;TD&amp;gt;One Name&amp;lt;TD&amp;gt;STRING [20]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RVAL&amp;lt;TD&amp;gt;Raw Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;ENUM&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conversion Fields ====&lt;br /&gt;
&lt;br /&gt;
The VAL field is set equal to (0, 1) if the RVAL field is (0, not 0), unless the device support module reads a value directly into VAL or the &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support is used. The value can also be fetched as one of the strings specified in the ZNAM or ONAM fields. The ZNAM field has the string that corresponds to the 0 state, so when the value is fetched as this string, &amp;lt;CODE&amp;gt;put_enum_str&amp;lt;/CODE&amp;gt; will return a 0 will. The ONAM field holds the string that corresponds to the 1 state, so when the value is fetched as this string, &amp;lt;CODE&amp;gt;put_enum_str&amp;lt;/CODE&amp;gt; returns a 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ZNAM&amp;lt;TD&amp;gt;ASCII string defining state zero&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ONAM&amp;lt;TD&amp;gt;ASCII string defining state one&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. The &amp;lt;CODE&amp;gt;get_enum_str&amp;lt;/CODE&amp;gt; record support routine can retrieve the state string corresponding to VAL's state. So if the value is 1, &amp;lt;CODE&amp;gt;get_enum_str&amp;lt;/CODE&amp;gt; will return the string in the ONAM field; and if 0, &amp;lt;CODE&amp;gt;get_enum_str&amp;lt;/CODE&amp;gt; will return the ZNAM string.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Miscellaneous Fields|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ZNAM&amp;lt;TD&amp;gt;Zero Name&amp;lt;TD&amp;gt;STRING [20]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ONAM&amp;lt;TD&amp;gt;One Name&amp;lt;TD&amp;gt;STRING [20]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine if the binary input is in alarm condition and to determine the severity of that condition. The possible alarm conditions for binary inputs are the SCAN, READ state alarms, and change of state alarm. The SCAN and READ alarms are called by the device support routines.&lt;br /&gt;
&lt;br /&gt;
The user can choose the severity for each state in the ZSV and OSV. The possible values for these fields are NO ALARM, MINOR, and MAJOR. The ZSV holds the severity for the zero state; OSV, for the one state. COSV causes an alarm whenever the state changes between 0 and 1 and the severity is configured as MINOR or MAJOR.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 Concepts#Alarm Specification|Alarm Specification]] for a complete explanation of discrete alarm states. [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ZSV&amp;lt;TD&amp;gt;Zero Severity&amp;lt;TD&amp;gt;GBLCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OSV&amp;lt;TD&amp;gt;One Severity&amp;lt;TD&amp;gt;GBLCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;COSV&amp;lt;TD&amp;gt;Change of State Severity&amp;lt;TD&amp;gt;GBLCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters and Simulation Mode Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the binary input. They are not configured using a database configuration tool.&lt;br /&gt;
&lt;br /&gt;
ORAW is used to determine if monitors should be triggered for RVAL at the same time they are triggered for VAL.&lt;br /&gt;
&lt;br /&gt;
MASK is given a value by the device support routines. This value is used to manipulate the record's value, but is only the concern of the hardware device support routines.&lt;br /&gt;
&lt;br /&gt;
The LALM field holds the value of the last occurrence of the change of state alarm. It is used to implement the change of state alarm, and thus only has meaning if COSV is MINOR or MAJOR.&lt;br /&gt;
&lt;br /&gt;
The MLST is used by the &amp;lt;CODE&amp;gt;process&amp;lt;/CODE&amp;gt; record support routine to determine if archive and value change monitors are invoked. They are if MLST is not equal to VAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ORAW&amp;lt;TD&amp;gt;Old Raw Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MASK&amp;lt;TD&amp;gt;Hardware mask&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;compute&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;TD&amp;gt;Last Alarmed value&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;TD&amp;gt;Last Monitored Value&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following fields are used to operate the binary input in the simulation mode. See [[RRM 3-14 Common#Simulation Mode|Fields Common to Many Record Types]] for more information on these fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIOL&amp;lt;TD&amp;gt;Simulation Value Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVAL&amp;lt;TD&amp;gt;Simulation Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIML&amp;lt;TD&amp;gt;Simulation Mode Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMM&amp;lt;TD&amp;gt;Simulation Mode&amp;lt;TD&amp;gt;GBLCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMS&amp;lt;TD&amp;gt;Simulation Mode Alarm Severity&amp;lt;TD&amp;gt;GBLCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
This routine initializes SIMM with the value of SIML if SIML type is CONSTANT link or creates a channel access link if SIML type is PV_LINK. SVAL is likewise initialized if SIOL is CONSTANT or PV_LINK.&lt;br /&gt;
&lt;br /&gt;
This routine next checks to see that device support is available and a device support read routine is defined. If either does not exist, an error message is issued and processing is terminated.&lt;br /&gt;
&lt;br /&gt;
If device support includes init_record, it is called.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_enum_str ====&lt;br /&gt;
&lt;br /&gt;
Retrieves ASCII string corresponding to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_enum_strs ====&lt;br /&gt;
&lt;br /&gt;
Retrieves ASCII strings for ZNAM and ONAM.&lt;br /&gt;
&lt;br /&gt;
==== put_enum_str ====&lt;br /&gt;
&lt;br /&gt;
Checks if string matches ZNAM or ONAM, and if it does, sets VAL.&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# Check to see that the appropriate device support module exists. If it doesn't, an error message is issued and processing is terminated with the PACT field still set to TRUE. This ensures that processes will no longer be called for this record. Thus error storms will not occur.&lt;br /&gt;
# readValue is called. See [[RRM 3-14 Common#Input Records|Input Records]] for details.&lt;br /&gt;
# If PACT has been changed to TRUE, the device support read routine has started but has not completed reading a new input value. In this case, the processing routine merely returns, leaving PACT TRUE.&lt;br /&gt;
# Convert&amp;lt;pre&amp;gt;&lt;br /&gt;
    status=read_bi&lt;br /&gt;
    PACT = TRUE&lt;br /&gt;
    TIME = tslocaltime&lt;br /&gt;
    if status is 0, then set VAL=(0,1) if RVAL is (0, not 0) and UDF = False&lt;br /&gt;
    if status is 2, set status = 0&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Check alarms: This routine checks to see if the new VAL causes the alarm status and severity to change. If so, NSEV and NSTA and LALM are set. Note that if VAL is greater than 1, no checking is performed.&lt;br /&gt;
# Check to see if monitors should be invoked:&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* Archive and value change monitors are invoked if MLST is not equal to VAL.&lt;br /&gt;
#* Monitors for RVAL are checked whenever other monitors are invoked.&lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
Each binary input record must have an associated set of device support routines. The primary responsibility of the device support routines is to obtain a new raw input value whenever read_bi is called. The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PACT&amp;lt;TD&amp;gt;Processing Active&amp;lt;TD rowspan=5&amp;gt;See [[RRM 3-14 dbCommon|Fields Common to All Record Types]] for an explanation of these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DPVT&amp;lt;TD&amp;gt;Device Private&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;UDF&amp;lt;TD&amp;gt;VAL Undefined&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSEV&amp;lt;TD&amp;gt;New Alarm Severity&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSTA&amp;lt;TD&amp;gt;New Alarm Status&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;This field is set by a device support routines only if it doesn't want record support to set it.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INP&amp;lt;TD&amp;gt;Input Link&amp;lt;TD&amp;gt;This field is used by the device support routines to locate its input.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RVAL&amp;lt;TD&amp;gt;Raw Value&amp;lt;TD&amp;gt;It is the responsibility of the device support routine to give this field a value.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MASK&amp;lt;TD&amp;gt;Hardware mask.&amp;lt;TD&amp;gt;The device support routine must give this field a value if it needs to use it.&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== report ====&lt;br /&gt;
&lt;br /&gt;
 report(FILE fp, paddr)&lt;br /&gt;
&lt;br /&gt;
Not currently used.&lt;br /&gt;
&lt;br /&gt;
==== init ====&lt;br /&gt;
&lt;br /&gt;
 init()&lt;br /&gt;
&lt;br /&gt;
This routine is called once during IOC initialization.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is optional. If provided, it is called by the record support init_record routine.&lt;br /&gt;
&lt;br /&gt;
==== get_ioint_info ====&lt;br /&gt;
&lt;br /&gt;
 get_ioint_info(int cmd,struct dbCommon *precord,IOSCANPVT *ppvt)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the ioEventScan system each time the record is added or deleted from an I/O event scan list. cmd has the value (0,1) if the record is being (added to, deleted from) an I/O event list. It must be provided for any device type that can use the ioEvent scanner.&lt;br /&gt;
&lt;br /&gt;
==== read_bi ====&lt;br /&gt;
&lt;br /&gt;
 read_bi(precord)&lt;br /&gt;
&lt;br /&gt;
This routine must provide a new input value. It returns the following values:&lt;br /&gt;
&lt;br /&gt;
: 0: Success. A new raw value is placed in RVAL. The record support module forces VAL to be (0,1) if RVAL is (0, not 0).&lt;br /&gt;
&lt;br /&gt;
: 2: Success, but don't modify VAL.&lt;br /&gt;
&lt;br /&gt;
: other: Error.&lt;br /&gt;
&lt;br /&gt;
=== Device Support for Soft Records ===&lt;br /&gt;
&lt;br /&gt;
Two soft device support modules Soft Channel and Raw Soft Channel are provided for input records not related to actual hardware devices. The INP link type must be either CONSTANT, DB_LINK, or CA_LINK.&lt;br /&gt;
&lt;br /&gt;
==== Soft Channel ====&lt;br /&gt;
&lt;br /&gt;
read_bi always returns a value of 2, which means that no conversion is performed.&lt;br /&gt;
&lt;br /&gt;
If the INP link type is constant, then the constant value is stored into VAL by init_record, and UDF is set to FALSE. VAL can be changed via dbPut requests. If the INP link type is PV_LINK, then dbCaAddInlink is called by init_record.&lt;br /&gt;
&lt;br /&gt;
read_bi calls recGblGetLinkValue to read the current value of VAL. See [[RRM 3-14 Common#Soft Input|Soft Input]] for details.&lt;br /&gt;
&lt;br /&gt;
If the return status of recGblGetLinkValue is zero, then read_bi sets UDF to FALSE. The status of recGblGetLinkValue is returned.&lt;br /&gt;
&lt;br /&gt;
==== Raw Soft Channel ====&lt;br /&gt;
&lt;br /&gt;
This module is like the previous except that values are read into RVAL.&lt;br /&gt;
&lt;br /&gt;
read_bi returns a value of 0. Thus the record processing routine will force VAL to be 0 or 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Archive&amp;diff=2873</id>
		<title>RRM 3-14 Archive</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Archive&amp;diff=2873"/>
		<updated>2008-04-18T19:05:01Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= The Archive Record =&lt;br /&gt;
&lt;br /&gt;
The Archive record was developed to provide a way to store the values of a PV for use by an EPICS archiving client. A client that archives the states of one or more PVs typically uses Channel Access to establish monitors on a channel, or the client retrieves a PV's values directly using get requests, the client usually running on a different host than the host which is running the database. In the case that the network fails or the client or client's host crashes, then the Archive record provides a way to store values for the PV being archived within the IOC. In addition, the Archive record stores the time stamp for the value as well as the status and severity of the PV. The Archive record can then &amp;quot;flush&amp;quot; the stored values and time stamps out to the client the next time the record processes.&lt;br /&gt;
&lt;br /&gt;
Each time the Archive record processes, it reads a value from the address specified by its input link (the INP field) and decides whether or not to store it in an array. Whether the Archive record stores the value depends on the configuration of the STIM, AVAR, RVAR, and PCAB fields. If the record decides to archive the value, the value will be written into the CVAL field, and then stored in an array of data structures, each structure having members for the value, time stamp, and status and severity. The value of the sample is also stored in another array. The seconds and nanoseconds parts of the time stamp for the value are also stored in separate arrays. Writing directly to the CVAL field will cause the record to process. The size of the arrays used by the Archive record is determined by the value of the NVAL field, which should be configured beforehand.&lt;br /&gt;
&lt;br /&gt;
Each time the record is processed, it will determine if monitors should be posted for the Archive records arrays. That is, it will decide if the array of values and the time arrays should be flushed to the client. The Archive record flushes the arrays when the record is full, half-full, and when the number of seconds since the last flush exceeds the number of seconds specified in the FTIM field. FTIM should be configured before run-time.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The record's fields fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* archive and monitor parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* run-time and simulation mode parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Archive record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used.&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The INP field determines where the Archive record gets its input. It can be a database or channel access link, or a constant. Each time the record is processed, it reads the value from the specified address and writes it into the RVAL field. If constant, the RVAL field is initialized with the constant and can be changed via &amp;lt;CODE&amp;gt;dbPuts&amp;lt;/CODE&amp;gt;. The Archive record does not support device input.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on specifying links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RVAL&amp;lt;TD&amp;gt;Raw Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INP&amp;lt;TD&amp;gt;Input Link&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Archive and Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These configurable parameters are the core of the archive record and basically determine how it operates at run-time. The STIM, AVAR, RVAR, and PCAB fields determine whether or not the record will archive the value read into the RVAL field. If the time since the last value archived is greater than the number of seconds specified in the STIM field, the value read into RVAL will be archived. Otherwise, the record will then use the PCAB, and RVAR or AVAR fields to determine whether or not to save the value. The PCAB field is a menu-type field that has seven choices:&lt;br /&gt;
&lt;br /&gt;
* absolute&lt;br /&gt;
* relative&lt;br /&gt;
* abs &amp;amp;&amp;amp; rel&lt;br /&gt;
* abs || rel&lt;br /&gt;
* on change&lt;br /&gt;
* allways&lt;br /&gt;
* never&lt;br /&gt;
&lt;br /&gt;
If the PCAB field specifies &amp;lt;CODE&amp;gt;absolute&amp;lt;/CODE&amp;gt;, when the record reads in a value to RVAL it will archive the value only if the difference between RVAL and the last value archived is greater than the value specified in the AVAR field. The difference between the RVAL and the last archived value is calculated as an absolute value. If the PCAB field specifies &amp;lt;CODE&amp;gt;relative&amp;lt;/CODE&amp;gt;, the record will archive the value in RVAL only if the difference between RVAL and the last archived value is greater than ''n''% of the last value archived, where ''n'' is the value specified in the RVAR field. The difference between RVAL and the last archived value is calculated as an absolute value. Thus, if PCAB specifies &amp;lt;CODE&amp;gt;relative&amp;lt;/CODE&amp;gt; and the RVAR specifies 10%, and if the last archived value was 100.0, then if the current value is less than 90 or greater than 110, then that means the value has changed by more than 10% and the value will be archived.&lt;br /&gt;
&lt;br /&gt;
If the PCAB field specifies &amp;lt;CODE&amp;gt;abs &amp;amp;&amp;amp; rel&amp;lt;/CODE&amp;gt;, then the record will archive the value in RVAL only if both the above absolute and relative conditions are true. If the PCAB field specifies &amp;lt;CODE&amp;gt;abs || rel&amp;lt;/CODE&amp;gt;, then the value will be archived if either condition holds true. If &amp;lt;CODE&amp;gt;on change&amp;lt;/CODE&amp;gt; is specified, then the record will archive the value if it has changed from the last value archived; if &amp;lt;CODE&amp;gt;allways&amp;lt;/CODE&amp;gt;, the record will archive the value in RVAL every time the record processes; and if &amp;lt;CODE&amp;gt;never&amp;lt;/CODE&amp;gt;, the record will never archive the value.&lt;br /&gt;
&lt;br /&gt;
If a value is to be archived, it is written into the CVAL field.&lt;br /&gt;
&lt;br /&gt;
When the archive record archives a value, it archives the value, a time stamp for the value, as well as the status and severity of the PV's value. This information is collectively called a sample. The record keeps track of each sample with a data structure. An array of these data structures is allocated when the record is initialized. The size of this array is configured by the developer/user in the NVAL field. It's the responsibility of the configurer to make sure NVAL specifies an array of the appropriate size. In addition to an array to hold the samples, three more arrays are allocated of size NVAL: the first holds the value part of each sample; the second holds the time of each sample, where the time is the number of seconds past the epoch of the sample; the third holds the nanoseconds part of the sample's time stamp. Although these arrays are not directly accessible at run-time through read or write operations, the record posts the latter three arrays using monitors.&lt;br /&gt;
&lt;br /&gt;
The record posts the above three arrays--an array with the sample's values, an array with the seconds part of the sample's time stamp, and an array with the nanoseconds part of the time stamp--when the difference between the current time and the last time the values were posted exceeds the number of seconds specified in the FTIM field. In addition, the arrays are posted when the arrays are full and half-full. Of course, these conditions are only checked when the record processes&lt;br /&gt;
&lt;br /&gt;
The MASK field changes the above algorithm somewhat. It was intended to enable a special digital reading of any input. It's an unsigned integer field which, if non-zero, changes the algorithm of the record in the following way. Firstly, if the MASK field is set to true, the following conversion is performed on RVAL: its value is typecast to an unsigned integer, RVAL being read as floating-point number. Then this integer is ANDed (&amp;amp;amp;) with the value in MASK. In deciding to archive this integer, if the interval specified in STIM has been exceeded, the value is archived, just as when MASK is zero. However, if STIM hasn't been exceed, if MASK is true, the PCAB field is ignored, and the record simply checks to see if the converted value is not equal to the last value archived. If it isn't, the value is archived. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STIM&amp;lt;TD&amp;gt;Save Time in Secnds&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;900&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PCAB&amp;lt;TD&amp;gt;Percent or Absolute&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;AVAR&amp;lt;TD&amp;gt;Absolute Difference&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RVAR&amp;lt;TD&amp;gt;Percent Difference&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CVAL&amp;lt;TD&amp;gt;Current Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NVAL&amp;lt;TD&amp;gt;Number of Values&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;100&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FTIM&amp;lt;TD&amp;gt;Flush Time in Sec&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;900&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MASK&amp;lt;TD&amp;gt;Bit Mask&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields are used to give meaning to the record's data for the operator's sake. The HOPR and LOPR fields indicate the upper and lower limits for the CVAL and LVAL fields. In addition, the HOPR and LOPR fields determine the control limits for these fields. The PREC field determines the displayed precision for the CVAL, AVAR, and LVAL fields. The EGU field indicates the engineering units for the VAL, CVAL, AVAR, and LVAL fields.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Miscellaneous Fields|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING[16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are all used for the record's internal processing or to access the record's data, except for the RES field which can be written to at run-time to reset the record. The ARCH, VALS, TIMS, and NSCS are all array fields of size NVAL. Their arrays contain the archived data. The ARCH field points to an array of data structures, each of which contains the value of the PV, the time stamp when the value was taken, and the status and severity of the PV when the value was taken. The VALS field points to an array containing only the value part of each sample; the TIMS field points to an array containing only the seconds part of the time stamp of each sample, while the NSCS field points to an array containing only the nanoseconds part of each sample. Each array is of the size specified in the NVAL field. None of these array fields are directly accessible at run-time. However, the VALS and TIMS arrays are accessible through the VAL and TIM fields.&lt;br /&gt;
&lt;br /&gt;
The FLSH field is an internal flag that indicates whether or not the VALS, TIMS, and NSCS fields are to be flushed when monitors are posted.&lt;br /&gt;
&lt;br /&gt;
When the user changes the RES field to a non-zero value at run-time, the NUSE and CCNT fields are set equal to zero. In addition, the TIMS and NSCS pointers are set to NULL. RES is then set back to zero.&lt;br /&gt;
&lt;br /&gt;
The LVAL field contains the last value archived. The LTIM field contains the time in seconds at which the last value was archived. The CCNT keeps track of the array index. When a sample is archived, it's values and time stamps are written into the CCNT index of the appropriate arrays. The NUSE field keeps track of the number of samples that have been archived, while the NUSB field keeps track of the number of samples that have been written into the current buffers/arrays. For example, if data for five samples has been written into the ARCH, VALS, TIMS, and NSCS fields, then NUSB will be five. The FTOF field is used as an offset when comparing the LTIM field with the current time. It will usually have the value of one.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ARCH&amp;lt;TD&amp;gt;Archive Array&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;NA&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VALS&amp;lt;TD&amp;gt;Values Array&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;NA&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TIMS&amp;lt;TD&amp;gt;Times Array Seconds&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;NA&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSCS&amp;lt;TD&amp;gt;Times Array Nanoseconds&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;NA&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Array Value&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;NA&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TIM&amp;lt;TD&amp;gt;Array Times Seconds&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;NA&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSC&amp;lt;TD&amp;gt;Array Times Nanoseconds&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;NA&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLSH&amp;lt;TD&amp;gt;Flush Flag&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RES&amp;lt;TD&amp;gt;Reset&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LVAL&amp;lt;TD&amp;gt;Last Value Stored&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LTIM&amp;lt;TD&amp;gt;Last Time Monitored&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CCNT&amp;lt;TD&amp;gt;Current Buffer Counter&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NUSE&amp;lt;TD&amp;gt;Number Used&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NUSB&amp;lt;TD&amp;gt;Number Used in Buffer&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FTOF&amp;lt;TD&amp;gt;Flush Time Offset&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Analog_Output&amp;diff=1607</id>
		<title>RRM 3-14 Analog Output</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Analog_Output&amp;diff=1607"/>
		<updated>2008-04-18T19:04:17Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ao - Analog Output =&lt;br /&gt;
&lt;br /&gt;
The normal use for this record type is to output values to digital-analog converters. It is used for all analog outputs to hardware. It can also be used to write floating point values to other records via database or channel access links. How the user configures the output link determines if the record sends its value to a hardware device, a channel access link, or a database link. The desired output can be controlled by either an operator or a state program, or it can be fetched from another record.&lt;br /&gt;
&lt;br /&gt;
The record supports alarm limits, conversion from/to engineering units, and graphics and control limits.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The analog output's fields fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* desired output parameters&lt;br /&gt;
* convert and write parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
* monitor parameters&lt;br /&gt;
* run-time parameters.&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The analog output record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Note that I/O event scanning is only supported for those card types that interrupt.&lt;br /&gt;
&lt;br /&gt;
=== Desired Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The analog output record must specify where the desired output to be written should originate. The desired output should be in engineering units. The first field that determines where the desired output originates is the output mode select field (OMSL), which can has two choices--closed_loop or supervisory. If supervisory is specified, the value in the VAL field can be set externally via dbPuts at run-time. If closed_loop is specified, the VAL field's value is obtained from the address specified in the desired output location field (DOL), which can be either a database link or a channel access link. To achieve continuous control, a database link to a control algorithm record should be entered in the DOL field.&lt;br /&gt;
&lt;br /&gt;
When VAL is obtained from DOL, the OIF field decides whether the value obtained from DOL is an increment to be added to the current VAL or if the value obtained from DOL is the actual value. The OIF field has two choices, Incremental or Full. The OIF and OMSL fields, in addition to being configurable, can also be changed during run-time. (OIF is not used when OMSL is set to SUPERVISORY.)&lt;br /&gt;
&lt;br /&gt;
The VAL field's value is forced to be within the limits specified in the fields DRVH and DRVL, which are configured by the designer:&lt;br /&gt;
&lt;br /&gt;
 DRVL&amp;lt;=VAL&amp;lt;=DRVH&lt;br /&gt;
&lt;br /&gt;
Note: If nothing is entered for DRVH and DRVL, the output value will never change.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The VAL field is then adjusted by the OROC field's value if the OROC field is not zero. The OROC field determines the maximum change in value that occurs each time the record is processed. The value adjusted by OROC is then used by OVAL. If the address contained in the output link (see next section) is a channel access or database link and if Soft Channel device support is specified, the value in OVAL is sent to the address in the OUT field. Otherwise, a conversion process is performed. The next section on convert and write parameters explains how this value is converted before being written.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on specifying links. [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains the effect of database linkage on scanning.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OMSL&amp;lt;TD&amp;gt;Output Mode Select&amp;lt;TD&amp;gt;GBLCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL&amp;lt;TD&amp;gt;Desired Output Location (an Input Link)&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OIF&amp;lt;TD&amp;gt;Out Full or Incremental&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DRVH&amp;lt;TD&amp;gt;Drive High&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DRVL&amp;lt;TD&amp;gt;Drive Low&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OROC&amp;lt;TD&amp;gt;Maximum Output Rate of Change&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OVAL&amp;lt;TD&amp;gt;Output Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Convert and Write Parameters ===&lt;br /&gt;
&lt;br /&gt;
For analog output records that do not use the Soft Channel device support routine, the specified conversions (if any) are performed on the OVAL field and the resulting value in the RVAL field is sent to the address contained in the output link after it is adjusted by the values in the AOFF and ASLO fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;TD&amp;gt;Output Link&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LINR&amp;lt;TD&amp;gt;Type of Conversion&amp;lt;TD&amp;gt;CVTCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RVAL&amp;lt;TD&amp;gt;Raw Value&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ROFF&amp;lt;TD&amp;gt;Raw Value Offset&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGUF&amp;lt;TD&amp;gt;Engineering Units Full&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGUL&amp;lt;TD&amp;gt;Engineering Units Low&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;AOFF&amp;lt;TD&amp;gt;Adjustment Offset&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ASLO&amp;lt;TD&amp;gt;Adjustment Slope&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ESLO&amp;lt;TD&amp;gt;Slope for Linear Conversions&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EOFF&amp;lt;TD&amp;gt;Offset for Linear Conversions&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conversion Related Fields and the Conversion Process ====&lt;br /&gt;
&lt;br /&gt;
Except for analog outputs that use Soft Channel device support, the LINR field determines if a conversion is performed and which conversion algorithm is used to convert OVAL to RVAL. The LINR field can specify LINEAR for linear conversions, NO CONVERSION for no conversions at all, or the name of a breakpoint table such as typeKdegC for breakpoint conversions.&lt;br /&gt;
&lt;br /&gt;
Note that the ESLO, EOFF, EGUF, and EGUL fields are only used for linear conversions. Also note that none of these fields have any significance for records that use the Soft Channel device support module.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGUF&amp;lt;TD rowspan=2&amp;gt;The user must calculate these fields when configuring the database. They are used to calculate the value ESLO, and are thus only significant for records that use linear conversions. See [[RRM 3-14 Concepts#Conversion Specification|Conversion Specification]] for more information on how to calculate these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGUL&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;AOFF&amp;lt;TD rowspan=2&amp;gt;These fields are adjustment parameters for the raw output values. They are applied to the raw output value after conversion from engineering units.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ASLO&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ESLO&amp;lt;TD rowspan=2&amp;gt;Computed by device support using EGUF and EGUL. Used if LINR specifies LINEAR.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EOFF&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ROFF&amp;lt;TD&amp;gt;Deprecated. New device supports should not set this to anything other than 0. It was used to offset raw value. For backwards compatibility, it is still added to the raw value (RVAL) when value is converted.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Conversion proceeds as follows:&lt;br /&gt;
&lt;br /&gt;
: 1. If LINR==LINEAR, then X = (OVAL - EOFF) / ESLO, else if LINR==NO_CONVERSION, then X = OVAL, else X is obtained via breakpoint table.&lt;br /&gt;
&lt;br /&gt;
: 2. X = X * ASLO + AOFF&lt;br /&gt;
&lt;br /&gt;
: 3. RVAL = round(X) - ROFF&lt;br /&gt;
&lt;br /&gt;
Since RVAL is now defined, the last step is to set UDF to FALSE.&lt;br /&gt;
&lt;br /&gt;
To see how the Raw Soft Channel device support routine uses these fields, see [[#Device Support For Soft Records|Device Support For Soft Records]] in this chapter for more information.&lt;br /&gt;
&lt;br /&gt;
==== Output Specification ====&lt;br /&gt;
&lt;br /&gt;
The analog output record sends its desired output to the address in the OUT field. For analog outputs that write their values to devices, the OUT field must specify the address of the I/O card. In addition, the DTYP field must contain the name of the device support module. Be aware that the address format differs according to the I/O bus used. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on the format of hardware addresses. The user can see a list of the device support modules currently supported at the user's local site by using the dbst utility in R3.13.&lt;br /&gt;
&lt;br /&gt;
For soft records the output link can be a database link, a channel access link, or a constant value. If the link is a constant, no output is sent. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on the format of database and channel access addresses.&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. They display the value and other parameters of the analog output either textually or graphically.&lt;br /&gt;
&lt;br /&gt;
EGU is a string of up to 16 characters describing the units that the analog output measures. It is retrieved by the get_units record support routine.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields set the upper and lower display limits for the VAL, OVAL, PVAL, HIHI, HIGH, LOW, and LOLO fields. Both the get_graphic_double and get_control_double record support routines retrieve these fields. If these values are defined, they must be in the range: DRVL&amp;lt;=LOPR&amp;lt;=HOPR&amp;lt;=DRVH.&lt;br /&gt;
&lt;br /&gt;
The PREC field determines the floating point precision with which to display VAL, OVAL and PVAL. It is used whenever the get_precision record support routine is called.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Miscellaneous Fields|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for analog outputs are the SCAN, READ, INVALID and limit alarms. The SCAN, READ, and INVALID alarms are called by the record or device support routines.&lt;br /&gt;
&lt;br /&gt;
The limit alarms are configured by the user in the HIHI, LOLO, HIGH, and LOW fields, which must be floating-point values. For each of these fields, there is a corresponding severity field which can be either NO_ALARM, MINOR, or MAJOR.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 Concepts#Alarm Specification|Alarm Specification]] for a complete explanation of alarms and these fields. See [[RRM 3-14 Common#Invalid Alarm Output Action|Invalid Alarm Output Action]] for more information on the IVOA and IVOV fields. [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;TD&amp;gt;Hihi Alarm Severity&amp;lt;TD&amp;gt;GBLCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;TD&amp;gt;High Alarm Severity&amp;lt;TD&amp;gt;GBLCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;TD&amp;gt;Low Alarm Severity&amp;lt;TD&amp;gt;GBLCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;TD&amp;gt;Lolo Alarm Severity&amp;lt;TD&amp;gt;GBLCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOA&amp;lt;TD&amp;gt;Invalid Alarm Output Action&amp;lt;TD&amp;gt;GBLCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOV&amp;lt;TD&amp;gt;Invalid Alarm Output Value, in eng. units&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to specify deadbands for monitors on the VAL field. The monitors are sent when the value field exceeds the last monitored field by the specified deadband. If these fields have a value of zero, everytime the value changes, a monitor will be triggered; if they have a value of -1, everytime the record is processed, monitors are triggered. ADEL is the deadband for archive monitors, and MDEL the deadband for all other types of monitors. See [[RRM 3-14 Concepts#Monitor Specification|Monitor Specification]] for a complete explanation of monitors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-Time Parameters and Simulation Mode Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the analog output. They are not configurable. They represent the current state of the record. The record support routines use some of them for more efficient processing.&lt;br /&gt;
&lt;br /&gt;
The ORAW field is used to decide if monitors should be triggered for RVAL when monitors are triggered for VAL. The RBV field is the actual read back value obtained from the hardware itself or from the associated device driver. It is the responsibility of the device support routine to give this field a value.&lt;br /&gt;
&lt;br /&gt;
ORBV is used to decide if monitors should be triggered for RBV at the same time monitors are triggered for changes in VAL.&lt;br /&gt;
&lt;br /&gt;
The LALM, MLST, and ALST fields are used to implement the hysteresis factors for monitor callbacks.&lt;br /&gt;
&lt;br /&gt;
The INIT field is used to initialize the LBRK field and for smoothing.&lt;br /&gt;
&lt;br /&gt;
The PBRK field contains a pointer to the current breakpoint table (if any), and LBRK contains a pointer to the last breakpoint table used.&lt;br /&gt;
&lt;br /&gt;
The OMOD field indicates whether OVAL differs from VAL. It will be different if VAL or OVAL have changed since the last time the record was processed, or if VAL has been adjusted by OROC during the current processing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ORAW&amp;lt;TD&amp;gt;Old Raw Value&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RBV&amp;lt;TD&amp;gt;Read Back Value&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ORBV&amp;lt;TD&amp;gt;Old read back value&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;TD&amp;gt;Last Alarm Monitor Trigger Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;TD&amp;gt;Last Archiver Monitor Trigger Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;TD&amp;gt;Last Value Change Monitor Trigger Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INIT&amp;lt;TD&amp;gt;Initialize&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PBRK&amp;lt;TD&amp;gt;Address of Breakpoint Table&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;4&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LBRK&amp;lt;TD&amp;gt;Last Breakpoint&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PVAL&amp;lt;TD&amp;gt;Previous Data Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OMOD&amp;lt;TD&amp;gt;OVAL modified?&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following fields are used to operate the analog output in the simulation mode. See [[RRM 3-14 Common#Simulation Mode 2|Fields Common to Many Record Types]] for more information on these fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIOL&amp;lt;TD&amp;gt;Simulation Value Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVAL&amp;lt;TD&amp;gt;Simulation Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIML&amp;lt;TD&amp;gt;Simulation Mode Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMM&amp;lt;TD&amp;gt;Simulation Mode&amp;lt;TD&amp;gt;GBLCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMS&amp;lt;TD&amp;gt;Simulation Mode Alarm Severity&amp;lt;TD&amp;gt;GBLCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
The following are the record support routines that would be of interest to an application developer. Other routines are the get_units, get_precision, get_graphic_double, and get_control_double routines.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
This routine initializes SIMM if SIML is a constant or creates a channel access link if SIML is PV_LINK. If SIOL is PV_LINK a channel access link is created.&lt;br /&gt;
&lt;br /&gt;
This routine next checks to see that device support is available. If DOL is a constant, then VAL is initialized with its value and UDF is set to FALSE.&lt;br /&gt;
&lt;br /&gt;
The routine next checks to see if the device support write routine is defined. If either device support or the device support write routine does not exist, an error message is issued and processing is terminated.&lt;br /&gt;
&lt;br /&gt;
For compatibility with old device supports that don't know EOFF, if both EOFF and ESLO have their default value, EOFF is set to EGUL.&lt;br /&gt;
&lt;br /&gt;
If device support includes init_record, it is called.&lt;br /&gt;
&lt;br /&gt;
INIT is set TRUE. This causes PBRK, LBRK, and smoothing to be re-initialized. If &amp;quot;backwards&amp;quot; linear conversion is requested, then VAL is computed from RVAL using the algorithm:&lt;br /&gt;
&lt;br /&gt;
 VAL = ((RVAL+ROFF) * ASLO + AOFF) * ESLO + EOFF&lt;br /&gt;
&lt;br /&gt;
and UDF is set to FALSE.&lt;br /&gt;
&lt;br /&gt;
For breakpoint conversion, a call is made to cvtEngToRawBpt and UDF is then set to FALSE. PVAL is set to VAL.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
The only special processing for analog output records is SPC_LINCONV which is invoked whenever either of the fields LINR, EGUF, EGUL or ROFF is changed If the device support routine special_linconv exists it is called.&lt;br /&gt;
&lt;br /&gt;
INIT is set TRUE. This causes PBRK, LBRK, and smoothing to be re-initialized.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
 upper_alarm_limit = HIHI&lt;br /&gt;
 upper_warning_limit = HIGH&lt;br /&gt;
 lower_warning_limit = LOW&lt;br /&gt;
 lower_alarm_limit = LOLO&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# Check to see that the appropriate device support module exists. If it doesn't, an error message is issued and processing is terminated with the PACT field set to TRUE. This ensures that processes will no longer be called for this record. Thus error storms will not occur.&lt;br /&gt;
# Check PACT: If PACT is FALSE call fetch_values and convert which perform the following steps:&lt;br /&gt;
#* fetch_values:&lt;br /&gt;
#** if DOL is DB_LINK and OMSL is CLOSED_LOOP then get value from DOL&lt;br /&gt;
#** if OIF is INCREMENTAL then set value = value + VAL else value = VAL&lt;br /&gt;
#* convert:&lt;br /&gt;
#** If Drive limits are defined force value to be within limits&lt;br /&gt;
#** Set VAL equal to value&lt;br /&gt;
#** Set UDF to FALSE.&lt;br /&gt;
#** If OVAL is undefined set it equal to value&lt;br /&gt;
#** If OROC is defined and not 0 make |value-OVAL| &amp;lt;=OROC&lt;br /&gt;
#** Set OVAL equal to value&lt;br /&gt;
#** Compute RVAL from OVAL. using linear or break point table conversion. For linear conversions the algorithm is RVAL = (OVAL-EOFF)/ESLO.&lt;br /&gt;
#** For break point table conversion a call is made to cvtEngToRawBpt.&lt;br /&gt;
#** After that, for all conversion types AOFF, ASLO, and ROFF are calculated in, using the formula RVAL = (RVAL -AOFF) / ASLO - ROFF.&lt;br /&gt;
# Check alarms: This routine checks to see if the new VAL causes the alarm status and severity to change. If so, NSEV, NSTA and y are set. It also honors the alarm hysteresis factor (HYST). Thus the value must change by at least HYST before the alarm status and severity is reduced.&lt;br /&gt;
# Check severity and write the new value. See [[RRM 3-14 Common#Invalid Alarm Output Action|Invalid Alarm Output Action]] for details on how invalid alarms affect output records.&lt;br /&gt;
# If PACT has been changed to TRUE, the device support write output routine has started but has not completed writing the new value. In this case, the processing routine merely returns, leaving PACT TRUE.&lt;br /&gt;
# Check to see if monitors should be invoked:&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* Archive and value change monitors are invoked if ADEL and MDEL conditions are met.&lt;br /&gt;
#* Monitors for RVAL and for RBV are checked whenever other monitors are invoked.&lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT and INIT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
Each analog output record must have an associated set of device support routines. The primary responsibility of the device support routines is to output a new value whenever write_ao is called. The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PACT&amp;lt;TD&amp;gt;Processing Active&amp;lt;TD rowspan=4&amp;gt;See [[RRM 3-14 dbCommon|Fields Common to All Record Types]] for an explanation of these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DPVT&amp;lt;TD&amp;gt;Device Private&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSEV&amp;lt;TD&amp;gt;New Alarm Severity&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSTA&amp;lt;TD&amp;gt;New Alarm Status&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;TD&amp;gt;Output Link&amp;lt;TD&amp;gt;This field is used by the device support routines to locate its output.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGUF&amp;lt;TD&amp;gt;Engineering Units Full&amp;lt;TD rowspan=2&amp;gt;These fields are used to calculate ESLO. Note that these fields correspond to the high and low hardware limits.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGUL&amp;lt;TD&amp;gt;Engineering Unit Low&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ESLO&amp;lt;TD&amp;gt;Slope&amp;lt;TD rowspan=2&amp;gt;These fields are used  for linear conversions from raw to engineering units. The device support routines must calculate these fields unless they obtain values already in engineering units.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EOFF&amp;lt;TD&amp;gt;Offset&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RVAL&amp;lt;TD&amp;gt;Raw Value&amp;lt;TD&amp;gt;This is the value to write to OUT.&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Device Support routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== init ====&lt;br /&gt;
&lt;br /&gt;
 init()&lt;br /&gt;
&lt;br /&gt;
This routine is called once during IOC initialization.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is optional. If provided, it is called by the record support init_record routine. It returns a zero for success or a 2 for success, don't convert. To support linear conversion, EOFF and ESLO should be set to their proper values (see special_linconv below).&lt;br /&gt;
&lt;br /&gt;
==== get_ioint_info ====&lt;br /&gt;
&lt;br /&gt;
 get_ioint_info(int cmd,struct dbCommon *precord,IOSCANPVT *ppvt)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the ioEventScan system each time the record is added or deleted from an I/O event scan list. cmd has the value (0,1) if the record is being (added to, deleted from) an I/O event list. It must be provided for any device type that can use the ioEvent scanner.&lt;br /&gt;
&lt;br /&gt;
==== write_ao ====&lt;br /&gt;
&lt;br /&gt;
 write_ao(precord)&lt;br /&gt;
&lt;br /&gt;
This routine must output a new value. Asynchronous device support routines will return with PACT set to TRUE. If PACT is TRUE, the process routine will just return and not continue processing. When the asynchronous routine completes, it can call process which will again call write_ao. When finished, write_ao should set PACT to FALSE and return one the following values:&lt;br /&gt;
&lt;br /&gt;
: 0: Success.&lt;br /&gt;
: other: Error.&lt;br /&gt;
&lt;br /&gt;
==== special_linconv ====&lt;br /&gt;
&lt;br /&gt;
 special_linconv(precord,after)&lt;br /&gt;
&lt;br /&gt;
This routine is called whenever either of the fields LINR, EGUF, EGUL or ROFF is modified. To support linear conversion, EOFF and ESLO must be set accordingly.&lt;br /&gt;
&lt;br /&gt;
A useful formula for calculating EOFF and ESLO is this one:&lt;br /&gt;
&lt;br /&gt;
 EOFF = (RAWF * EGUL - RAWL * EGUF) / (RAWF - RAWL)&lt;br /&gt;
 ESLO = (EGUF - EGUL) / (RAWF - RAWL)&lt;br /&gt;
&lt;br /&gt;
Here, RAWL and RAWF are the lowest resp. highest possible raw value. For instance, a 16 bit bipolar DAC might have RAWL=-0x7fff, RAWF=0x7fff.&lt;br /&gt;
&lt;br /&gt;
=== Device Support For Soft Records ===&lt;br /&gt;
&lt;br /&gt;
Two soft device support modules Soft Channel and Raw Soft Channel are provided for output records not related to actual hardware devices. The OUT link type must be either a CONSTANT, DB_LINK, or CA_LINK.&lt;br /&gt;
&lt;br /&gt;
==== Soft Channel ====&lt;br /&gt;
&lt;br /&gt;
This module writes the current value of OVAL.&lt;br /&gt;
&lt;br /&gt;
If the OUT link type is PV_LINK, then dbCaAddInlink is called by init_record. init_record always returns a value of 2, which means that no conversion will ever be attempted.&lt;br /&gt;
&lt;br /&gt;
write_ao calls recGblPutLinkValue to write the current value of VAL. See [[RRM 3-14 Common#Soft Output|Soft Output]] for details.&lt;br /&gt;
&lt;br /&gt;
==== Raw Soft Channel ====&lt;br /&gt;
&lt;br /&gt;
This module is like the previous except that it writes the current value of RVAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Analog_Input&amp;diff=1604</id>
		<title>RRM 3-14 Analog Input</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Analog_Input&amp;diff=1604"/>
		<updated>2008-04-18T19:02:47Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= ai - Analog Input =&lt;br /&gt;
&lt;br /&gt;
The normal use for this record type is to obtain an analog value from hardware and then convert it to engineering units. Most device support modules obtain values from hardware. The record supports alarm limits, conversion to engineering units, smoothing, and graphics and control limits.&lt;br /&gt;
&lt;br /&gt;
Two soft device modules &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;Raw Soft Channel&amp;lt;/CODE&amp;gt; are provided to obtain input via database or channel access links or via dbPutField or dbPutLink requests. The first module reads values directly into VAL. The second reads values into RVAL. These values are then converted just like raw values obtained from hardware device support modules. If soft device support with a constant INP link is chosen, then the VAL field can be modified via dbPuts.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields fall into the following groups of parameters:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read and convert parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
* monitor parameters&lt;br /&gt;
* run-time parameters&lt;br /&gt;
&lt;br /&gt;
=== Scanning Parameters ===&lt;br /&gt;
&lt;br /&gt;
The analog input record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Note that I/O event scanning is only supported for those card types that interrupt.&lt;br /&gt;
&lt;br /&gt;
=== Read and Convert Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters determine where the record gets its input and how it converts the raw signal to engineering units. For records that obtain input from devices or that use the Raw Soft Channel device support, the device support routines will return the value of this device into the RVAL field. Unless the LINR conversion field specifies NO CONVERSION, the proper conversion algorithm will be performed and the resulting value will be placed in the VAL field.&lt;br /&gt;
&lt;br /&gt;
A further explanation of these fields follows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INP&amp;lt;TD&amp;gt;Input Link&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LINR&amp;lt;TD&amp;gt;Type of Conversion&amp;lt;TD&amp;gt;CVTCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RVAL&amp;lt;TD&amp;gt;Raw Value&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ROFF&amp;lt;TD&amp;gt;Raw Value Offset&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGUF&amp;lt;TD&amp;gt;Engineering Units Full&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGUL&amp;lt;TD&amp;gt;Engineering Units Low&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;AOFF&amp;lt;TD&amp;gt;Adjustment Offset&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ASLO&amp;lt;TD&amp;gt;Adjustment Slope&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ESLO&amp;lt;TD&amp;gt;Slope for Linear Conversions&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EOFF&amp;lt;TD&amp;gt;Offset for Linear Conversions&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SMOO&amp;lt;TD&amp;gt;Smoothing Factor&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Input Specification ====&lt;br /&gt;
&lt;br /&gt;
As stated in the introduction to this chapter, what is entered in the INP field of the analog input record determines its run-time behavior. For an analog record that obtains its value from hardware, the address of the I/O card must appear in the INP field, and the name of the device support module must appear in the device type field (DTYP). See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on the format of hardware addresses. Be aware that the format differs between types of cards. You can see a list of the device support modules currently supported at the user's local site by using the dbst utility in R3.13.&lt;br /&gt;
&lt;br /&gt;
The INP field can also specify a constant value, a channel access link, or a database link. When configured with a constant value, the record's VAL field is initialized with the value given to the field and the VAL field can be changed using dbPuts. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on database and channel access links.&lt;br /&gt;
&lt;br /&gt;
When INP is a constant, a database link, or a channel access link either one of two soft device support modules, Raw Soft Channel or Soft Channel, must be specified in DTYP field. See [[#Device Support For Soft Records|Device Support For Soft Records]] in this chapter for more on how these device support modules work.&lt;br /&gt;
&lt;br /&gt;
==== Conversion Related Fields ====&lt;br /&gt;
&lt;br /&gt;
The LINR field determines if a conversion is performed and which conversion algorithm is used to convert the raw value (RVAL). No conversions are performed if the Soft Channel device support module is used. For other records that use other device support modules, the LINR field determines what adjustments or conversions are made on the raw value. The LINR field specifies either LINEAR, NO CONVERSION, or the name of a breakpoint table, such as typeKdegC. LINEAR specifies a linear conversion; NO CONVERSION, no conversion at all; and a breakpoint table, a breakpoint conversion. Note that the EGUF, EGUL, EOFF, and ESLO fields are not used when a breakpoint table or NO CONVERSION is specified.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGUF&amp;lt;TD rowspan=2&amp;gt;The user must calculate these fields when configuring the database. They are used to calculate the EOFF and ESLO, and are thus only significant for records that use linear conversions. See [[RRM 3-14 Concepts#Conversion Specification|Conversion Specification]] for more information on how to calculate these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGUL&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;AOFF&amp;lt;TD rowspan=2&amp;gt;These fields are adjustment parameters for the raw output values. They are applied to the raw output value after conversion from engineering units.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ASLO&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ESLO&amp;lt;TD rowspan=2&amp;gt;Computed by device support using EGUF and EGUL. Used if LINR specifies LINEAR.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EOFF&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ROFF&amp;lt;TD&amp;gt;Deprecated. New device supports should not set this to anything other than 0. It was used to offset raw value. For backwards compatibility, it is still added to the raw value (RVAL) when value is converted.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SMOO&amp;lt;TD&amp;gt;A value between 1 and 0 specified by the user, with 0 meaning no smoothing and 1 meaning ultimate smoothing (in fact, the data value will never change). See [[RRM 3-14 Concepts#Conversion Specification|Conversion Specification]] for more information on what this field does. It is used for all records but &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; records.&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The record processing routine performs the following algorithm for all records except those that use the Soft Channel device support routine. Be aware that step 3 is performed only when the record specifies LINEAR:&lt;br /&gt;
&lt;br /&gt;
: 1. Val= RVAL + ROFF&lt;br /&gt;
&lt;br /&gt;
: 2. Val = Val * ASLO + AOFF&lt;br /&gt;
&lt;br /&gt;
If the conversion algorithm is LINEAR, the raw value is converted via the equation:&lt;br /&gt;
&lt;br /&gt;
: 3. val = val * ESLO + EOFF&lt;br /&gt;
&lt;br /&gt;
If the conversion is via a breakpoint table, the new value is obtained.&lt;br /&gt;
&lt;br /&gt;
The next step is to apply the following smoothing algorithm:&lt;br /&gt;
&lt;br /&gt;
: 4. if SMOO is 0 or INIT is True, VAL = val&lt;br /&gt;
&lt;br /&gt;
: 5. else VAL = val * (1 - SMOO) + Previous_value * SMOO&lt;br /&gt;
&lt;br /&gt;
Since VAL is now defined, the last step is to set UDF to FALSE.&lt;br /&gt;
&lt;br /&gt;
For a complete explanation on conversion parameters, see [[RRM 3-14 Concepts#Conversion Specification|Conversion Specification]]. To see how Raw Soft Channel device support uses these parameters, see [[#Device Support For Soft Records|Device Support For Soft Records]] in this chapter.&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. They display the value and other parameters of the analog input either textually or graphically. EGU is a string of up to 16 characters describing the units that the analog input measures. It is retrieved by the get_units record support routine.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields set the upper and lower display limits for the VAL, HIHI, HIGH, LOW, and LOLO fields. Both the get_graphic_double and get_control_double record support routines retrieve these fields.&lt;br /&gt;
&lt;br /&gt;
The PREC field determines the floating point precision with which to display VAL. It is used whenever the get_precision record support routine is called.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Miscellaneous Fields|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm state for analog inputs are the SCAN, READ, and limit alarms. The SCAN and READ alarms are called by the record or device support routines.&lt;br /&gt;
&lt;br /&gt;
The limit alarms are configured by the user in the HIHI, LOLO, HIGH, and LOW fields using numerical values. For each of these fields, there is a corresponding severity field which can be either NO_ALARM, MINOR, or MAJOR. See [[RRM 3-14 Concepts#Alarm Specification|Alarm Specification]] for a complete explanation of alarms and these fields. [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;TD&amp;gt;Hihi Alarm Severity&amp;lt;TD&amp;gt;GBLCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;TD&amp;gt;Lolo Alarm Severity&amp;lt;TD&amp;gt;GBLCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;TD&amp;gt;High Alarm Severity&amp;lt;TD&amp;gt;GBLCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;TD&amp;gt;Low Alarm Severity&amp;lt;TD&amp;gt;GBLCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine when to send monitors placed on the VAL field. The monitors are sent when the value field exceeds the last monitored field by the appropriate deadband. If these fields have a value of zero, everytime the value changes, a monitor will be triggered; if they have a value of -1, everytime the record is scanned, monitors are triggered. The ADEL field is used by archive monitors and the MDEL field for all other types of monitors. See [[RRM 3-14 Concepts#Monitor Specification|Monitor Specification]] for a complete explanation of monitors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-Time Parameters and Simulation Mode Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the analog input. They are not configurable by the user, but many can be modified after initialization. They represent the current state of the analog input. Many of them are used to process the analog input more efficiently.&lt;br /&gt;
&lt;br /&gt;
The ORAW field is used to decide if monitors should be triggered for RVAL when monitors are triggered for VAL. The LALM, MLST, and ALST fields are used to implement the hysteresis factors for monitors on the VAL field.&lt;br /&gt;
&lt;br /&gt;
The PBRK field contains a pointer to the breakpoint table specified in the LINR field (if any). The LBRK field indicates the name of the last breakpoint table used (if any).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ORAW&amp;lt;TD&amp;gt;Old Raw Value&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;TD&amp;gt;Last Alarm Monitor Trigger Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;TD&amp;gt;Last Archiver Monitor Trigger Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;TD&amp;gt;Last Value Change Monitor Trigger Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INIT&amp;lt;TD&amp;gt;Initialize&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PBRK&amp;lt;TD&amp;gt;Address of Breakpoint Table&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;4&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LBRK&amp;lt;TD&amp;gt;Last Breakpoint&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following fields are used to operate the analog input in the simulation mode. See [[RRM 3-14 Common#Simulation Mode|Fields Common to Many Record Types]] for more information on these fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIOL&amp;lt;TD&amp;gt;Simulation Value Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVAL&amp;lt;TD&amp;gt;Simulation Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIML&amp;lt;TD&amp;gt;Simulation Mode Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMM&amp;lt;TD&amp;gt;Simulation Mode&amp;lt;TD&amp;gt;GBLCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMS&amp;lt;TD&amp;gt;Simulation Mode Alarm Severity&amp;lt;TD&amp;gt;GBLCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
The following are the record support routines that would be of interest to an application developer. Other routines are the get_units, get_precision, get_graphic_double, and get_control_double, all of which are used for the monitor parameters.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
This routine initializes SIMM with the value of SIML if SIML type is CONSTANT link or creates a channel access link if SIML type is PV_LINK. SVAL is likewise initialized if SIOL is CONSTANT or PV_LINK.&lt;br /&gt;
&lt;br /&gt;
This routine next checks to see that device support is available and a device support read_ai() routine is defined. If either does not exist, an error message is issued and processing is terminated.&lt;br /&gt;
&lt;br /&gt;
INIT is then set to TRUE.&lt;br /&gt;
&lt;br /&gt;
If device support includes init_record, it is called.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
The only special processing for analog input records is SPC_LINCONV. which is invoked whenever any of the fields LINR, EGUF, EGUL or ROFF is changed.&lt;br /&gt;
&lt;br /&gt;
If the device support routine special_linconv exists, it is called.&lt;br /&gt;
&lt;br /&gt;
INIT is set TRUE. This causes PBRK, LBRK, and smoothing to be re-initialized.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of the structure valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
 upper_alarm_limit = HIHI&lt;br /&gt;
 upper_warning_limit = HIGH&lt;br /&gt;
 lower_warning_limit = LOW&lt;br /&gt;
 lower_alarm_limit = LOLO&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# Check to see that the appropriate device support module exists. If it doesn't, an error message is issued and processing is terminated with the PACT field set to TRUE. This ensures that processes will no longer be called for this record. Thus error storms will not occur.&lt;br /&gt;
# readValue is called. See [[RRM 3-14 Common#Input Records|Input Records]] for details.&lt;br /&gt;
# If PACT has been changed to TRUE, the device support read routine has started but has not completed writing the new value. In this case, the processing routine merely returns, leaving PACT TRUE.&lt;br /&gt;
# PACT is then set to TRUE, TIME is set to tslocaltime and the return status value of readValue is checked. convert is called only if status is 0. If status is 2, then convert is not called, but status is reset to 0.&lt;br /&gt;
# Perform conversion if necessary: After conversions (if any), UDF is set to FALSE.&lt;br /&gt;
# Check alarms: This routine checks to see if the new VAL causes the alarm status and severity to change. If so, NSEV, NSTA and LALM are set. It also honors the alarm hysteresis factor (HYST). Thus the value must change by more than HYST before the alarm status and severity is lowered.&lt;br /&gt;
# Check to see if monitors should be invoked:&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* Archive and value change monitors are invoked if ADEL and MDEL conditions are met.&lt;br /&gt;
#* Monitors for RVAL are checked whenever other monitors are invoked.&lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT and INIT to FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
Each analog input record must have an associated set of device support routines. The primary responsibility of the device support routines is to obtain a new raw analog input value whenever read_ai is called. The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PACT&amp;lt;TD&amp;gt;Processing Active&amp;lt;TD rowspan=5&amp;gt;See [[RRM 3-14 dbCommon|Fields Common to All Record Types]] for an explanation of these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DPVT&amp;lt;TD&amp;gt;Device Private&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;UDF&amp;lt;TD&amp;gt;VAL Undefined&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSEV&amp;lt;TD&amp;gt;New Alarm Severity&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSTA&amp;lt;TD&amp;gt;New Alarm Status&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value&amp;lt;TD&amp;gt;This field is used by device support only if it obtains a value already converted to engineering units. See RVAL below.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INP&amp;lt;TD&amp;gt;Input Link&amp;lt;TD&amp;gt;This field is used by the device support routines to locate its input.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGUF&amp;lt;TD&amp;gt;Engineering Units Full&amp;lt;TD rowspan=2&amp;gt;These fields are used to calculate ESLO and EOFF. Note that these fields correspond to the high and low hardware limits.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGUL&amp;lt;TD&amp;gt;Engineering Unit Low&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ESLO&amp;lt;TD&amp;gt;Slope&amp;lt;TD rowspan=2&amp;gt;These fields are used  for linear conversions from raw to engineering units. The device support routines must calculate these fields unless they obtain values already in engineering units.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EOFF&amp;lt;TD&amp;gt;Offset&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RVAL&amp;lt;TD&amp;gt;Raw Value&amp;lt;TD&amp;gt;It is the responsibility of the device support routine to give this field a value. If the device support routine obtains a value already in engineering units, it should place the value in VAL and return a value of 2.&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Device Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== report ====&lt;br /&gt;
&lt;br /&gt;
 report (FILE fp, paddr)&lt;br /&gt;
&lt;br /&gt;
Not currently used.&lt;br /&gt;
&lt;br /&gt;
==== init ====&lt;br /&gt;
&lt;br /&gt;
 init()&lt;br /&gt;
&lt;br /&gt;
This routine is called once during IOC initialization.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record (precord)&lt;br /&gt;
&lt;br /&gt;
This routine is optional. If provided, it is called by the record support init_record routine.&lt;br /&gt;
&lt;br /&gt;
==== get_ioint_info ====&lt;br /&gt;
&lt;br /&gt;
 get_ioint_info (int cmd,struct dbCommon *precord,IOSCANPVT *ppvt)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the ioEventScan system each time the record is added or deleted from an I/O event scan list. cmd has the value (0,1) if the record is being (added to, deleted from) an I/O event list. It must be provided for any device type that can use the ioEvent scanner.&lt;br /&gt;
&lt;br /&gt;
==== read_ai ====&lt;br /&gt;
&lt;br /&gt;
 read_ai(precord)&lt;br /&gt;
&lt;br /&gt;
This routine must provide a new input value. Asynchronous device support routines will return with PACT set to TRUE. If PACT is TRUE, the process routine will just return and not continue processing. When the asynchronous routine completes, it can call process which will again call read_ai.&lt;br /&gt;
&lt;br /&gt;
Because PACT is still TRUE read_ai knows that this is a request to retrieve the data obtained by the previous call. When finished, read_ai should set PACT to FALSE and return one the following values:&lt;br /&gt;
&lt;br /&gt;
: 0: Success. A new raw value is placed in RVAL. convert will be called.&lt;br /&gt;
&lt;br /&gt;
: 2: Success, but don't call convert. This is useful if read_ai obtains a value already converted to engineering units or in the event a hardware failure is detected.&lt;br /&gt;
&lt;br /&gt;
: Other: Error.&lt;br /&gt;
&lt;br /&gt;
==== special_linconv ====&lt;br /&gt;
&lt;br /&gt;
 special_linconv(precord,after)&lt;br /&gt;
&lt;br /&gt;
This routine is called whenever any of the fields LINR, EGUF, EGUL or ROFF is modified. To support linear conversion, EOFF and ESLO must be set accordingly.&lt;br /&gt;
&lt;br /&gt;
A useful formula for calculating EOFF and ESLO is this one:&lt;br /&gt;
&lt;br /&gt;
 EOFF = (RAWF * EGUL - RAWL * EGUF) / (RAWF - RAWL)&lt;br /&gt;
 ESLO = (EGUF - EGUL) / (RAWF - RAWL)&lt;br /&gt;
&lt;br /&gt;
Here, RAWL and RAWF are the lowest resp. highest possible raw value. For instance, a 16 bit bipolar ADC might have RAWL=-0x7fff, RAWF=0x7fff.&lt;br /&gt;
&lt;br /&gt;
=== Device Support For Soft Records ===&lt;br /&gt;
&lt;br /&gt;
Two soft device support modules Soft Channel and Raw Soft Channel are provided for input records not related to actual hardware devices. The INP link type must be either CONSTANT, DB_LINK or CA_LINK.&lt;br /&gt;
&lt;br /&gt;
==== Soft Channel ====&lt;br /&gt;
&lt;br /&gt;
This module places a value directly in VAL. read_ai always returns a value of 2, which means that no conversion will ever be attempted.&lt;br /&gt;
&lt;br /&gt;
If the INP link type is constant, then the constant value is stored into VAL by init_record, and UDF is set to FALSE. If the INP link type is PV_LINK, then dbCaAddInlink is called by init_record.&lt;br /&gt;
&lt;br /&gt;
read_ai calls recGblGetLinkValue to read the current value of VAL. See [[RRM 3-14 Common#Soft Input|Soft Input]] for details.&lt;br /&gt;
&lt;br /&gt;
If the return status of recGblGetLinkValue is zero, then read_ai sets UDF to FALSE. The status of recGblGetLinkValue is returned.&lt;br /&gt;
&lt;br /&gt;
If soft support is chosen, the following fields become meaningless: LINR, EGUF, EGUL, EOFF, ESLO, ROFF, AOFF, ASLO, and SMOO. The read_ai routine always returns a value of 2 which means don't convert.&lt;br /&gt;
&lt;br /&gt;
==== Raw Soft Channel ====&lt;br /&gt;
&lt;br /&gt;
This module is like the previous except that it places its value in RVAL and read_ai returns a value of 0. Thus the record processing routine will convert the raw value in the normal way.&lt;br /&gt;
&lt;br /&gt;
If raw soft support is chosen, the fields EGUF and EGUL become meaningless. ESLO and EOFF always have their default values of 1 and 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Waveform&amp;diff=1547</id>
		<title>RRM 3-14 Waveform</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Waveform&amp;diff=1547"/>
		<updated>2008-04-18T18:51:15Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Waveform =&lt;br /&gt;
&lt;br /&gt;
The waveform record type is used to interface waveform digitizers. The record stores its data in arrays. The array can contain any of the supported data types.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The waveform's fields fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* run-time parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The waveform record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Note that I/O event scanning is only supported for those card types that interrupt.&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields are configurable by the user to specify how and from where the record reads its data. How the INP field is configured determines where the waveform gets its input. It can be a hardware address, a channel access or database link, or a constant. Only in records that use soft device support can the INP field be a channel access link, a database link, or a constant. Otherwise, the INP field must be a hardware address. See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on the format of hardware addresses and database links.&lt;br /&gt;
&lt;br /&gt;
The DTYP field must contain the name of the appropriate device support module. The user can see a list of the device support modules currently supported at the user's local site by using the &amp;lt;CODE&amp;gt;dbst&amp;lt;/CODE&amp;gt; utility (R3.13).&lt;br /&gt;
&lt;br /&gt;
The values retrieved from the input link are placed in an array referenced by VAL. (If the INP link is a constant, elements can be placed in the array via dbPuts.) NELM specifies the number of elements that the array will hold, while FTVL specifies the data type of the elements.&lt;br /&gt;
&lt;br /&gt;
The RARM field causes the device to re-arm when this field is set to 1. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INP&amp;lt;TD&amp;gt;Input Link &amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NELM&amp;lt;TD&amp;gt;Number of Elements in array &amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FTVL&amp;lt;TD&amp;gt; Field Type of Value&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RARM&amp;lt;TD&amp;gt; Rearm&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. They display the value and other parameters of the waveform either textually or graphically.&lt;br /&gt;
&lt;br /&gt;
EGU is a string of up to 16 characters describing the units that the waveform measures. It is retrieved by the &amp;lt;CODE&amp;gt;get_units&amp;lt;/CODE&amp;gt; record support routine.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields set the upper and lower display limits for array elements referenced by the VAL field. Both the &amp;lt;CODE&amp;gt;get_graphic_double&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;get_control_double&amp;lt;/CODE&amp;gt; record support routines retrieve these fields.&lt;br /&gt;
&lt;br /&gt;
The PREC field determines the floating point precision with which to display the array values. It is used whenever the &amp;lt;CODE&amp;gt;get_precision&amp;lt;/CODE&amp;gt; record support routine is called.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The waveform record has the alarm parameters common to all record types. [[RRM 3-13 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the waveform. They are not configured using a configuration tool. Only the VAL field is modifiable at run-time.&lt;br /&gt;
&lt;br /&gt;
VAL references the array where the waveform stores its data. The BPTR field holds the address of the array.&lt;br /&gt;
&lt;br /&gt;
The NORD field holds a counter of the number of elements that have been read into the array. It is reset to 0 when the device is rearmed. The BUSY field indicates if the device is armed but has not yet been digitized.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt; Value Field&amp;lt;TD&amp;gt;See FTVL&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BPTR&amp;lt;TD&amp;gt;Buffer Pointer &amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NORD &amp;lt;TD&amp;gt;Number of Elements Read &amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BUSY&amp;lt;TD&amp;gt;Busy&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following fields are used to operate the waveform in the simulation mode. See [[RRM 3-13 Common#Simulation Mode|Simulation Mode]] for more information on the simulation mode fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIOL&amp;lt;TD&amp;gt;Simulation Value Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIML&amp;lt;TD&amp;gt;Simulation Mode Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMM&amp;lt;TD&amp;gt;Simulation Mode&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMS&amp;lt;TD&amp;gt;Simulation Mode Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
Using NELM and FTVL space for the array is allocated. The array address is stored in the record.&lt;br /&gt;
&lt;br /&gt;
This routine initializes SIMM with the value of SIML if SIML type is CONSTANT link or creates a channel access link if SIML type is PV_LINK. VAL is likewise initialized if SIOL is CONSTANT or PV_LINK.&lt;br /&gt;
&lt;br /&gt;
This routine next checks to see that device support is available and a device support read routine is defined. If either does not exist, an error message is issued and processing is terminated&lt;br /&gt;
&lt;br /&gt;
If device support includes init_record, it is called.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to the array.&lt;br /&gt;
&lt;br /&gt;
==== cvt_dbaddr ====&lt;br /&gt;
&lt;br /&gt;
This is called by dbNameToAddr. It makes the dbAddr structure refer to the actual buffer holding the result.&lt;br /&gt;
&lt;br /&gt;
==== get_array_info ====&lt;br /&gt;
&lt;br /&gt;
Obtains values from the array referenced by VAL.&lt;br /&gt;
&lt;br /&gt;
==== put_array_info ====&lt;br /&gt;
&lt;br /&gt;
Writes values into the array referenced by VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_prec ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC if field is VAL field. Otherwise, calls &amp;lt;CODE&amp;gt;recGblGetPrec()&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field is VAL the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the field is VAL the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
 upper_disp_limit = HOPR&lt;br /&gt;
 lower_disp_limit = LOPR&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values&lt;br /&gt;
&lt;br /&gt;
 upper_ctrl_limit = HOPR&lt;br /&gt;
 lower_ctrl_limit = LOPR&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# Check to see that the appropriate device support module exists. If it doesn't, an error message is issued and processing is terminated with the PACT field still set to TRUE. This ensures that processes will no longer be called for this record. Thus error storms will not occur.&lt;br /&gt;
# Call device support read routine.&lt;br /&gt;
# If PACT has been changed to TRUE, the device support read routine has started but has not completed writing the new value. In this case, the processing routine merely returns, leaving PACT TRUE.&lt;br /&gt;
# Check to see if monitors should be invoked.&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* Archive and value change monitors are always invoked.&lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
Each waveform record must have an associated set of device support routines. The primary responsibility of the device support routines is to obtain a new array value whenever read_wf is called. The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PACT&amp;lt;TD&amp;gt;Processing Active&amp;lt;TD rowspan=4&amp;gt;See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for an explanation of these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DPVT&amp;lt;TD&amp;gt;Device Private&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSEV&amp;lt;TD&amp;gt;New Alarm Severity&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSTA&amp;lt;TD&amp;gt;New Alarm Status&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INP&amp;lt;TD&amp;gt;Input Link&amp;lt;TD&amp;gt;This field is used by the device support routines to locate its input.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RATE&amp;lt;TD&amp;gt;Sampling Rate&amp;lt;TD&amp;gt;Some device support modules may find this useful.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PTSS&amp;lt;TD&amp;gt;Pre-trigger Samples&amp;lt;TD&amp;gt;Some device support modules may find this useful.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NELM&amp;lt;TD&amp;gt;Number Of Elements In Array&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FTVL&amp;lt;TD&amp;gt;Field Type Of Value&amp;lt;TD&amp;gt;This is DBF_STRING, ... , DBF_ENUM. The device support routine should check that this is correctly defined.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RARM&amp;lt;TD&amp;gt;Rearm&amp;lt;TD&amp;gt;When set to 1, the device will be rearmed. The device   support routine should reset it to 0 when done.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BPTR&amp;lt;TD&amp;gt;Holds Address of Array&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NORD&amp;lt;TD&amp;gt;Number of  Elements Read&amp;lt;TD&amp;gt;Device support must set this value when it completes.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BUSY&amp;lt;TD&amp;gt;Is device busy?&amp;lt;TD&amp;gt;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== report ====&lt;br /&gt;
&lt;br /&gt;
 report(FILE fp, paddr)&lt;br /&gt;
&lt;br /&gt;
Not currently used.&lt;br /&gt;
&lt;br /&gt;
==== init ====&lt;br /&gt;
&lt;br /&gt;
 init()&lt;br /&gt;
&lt;br /&gt;
This routine is called once during IOC initialization.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is optional. If provided, it is called by the record support init_record routine.&lt;br /&gt;
&lt;br /&gt;
==== get_ioint_info ====&lt;br /&gt;
&lt;br /&gt;
 get_ioint_info(int cmd,struct dbCommon *precord,IOSCANPVT *ppvt)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the ioEventScan system each time the record is added or deleted from an I/O event scan list.  cmd has the value (0,1) if the record is being (added to, deleted from) an I/O event list. It must be provided for any device type that can use the ioEvent scanner.&lt;br /&gt;
&lt;br /&gt;
==== read_wf ====&lt;br /&gt;
&lt;br /&gt;
 read_wf(precord)&lt;br /&gt;
&lt;br /&gt;
This routine must provide a new input value. It returns the following values:&lt;br /&gt;
&lt;br /&gt;
* 0: Success.&lt;br /&gt;
* Other: Error.&lt;br /&gt;
&lt;br /&gt;
=== Device Support For Soft Records ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support module is provided to read values from other records and store them in arrays. If INP is a constant link, then read_wf does nothing. In this case, the record can be used to hold arrays written via dbPuts. If INP is a database or channel access link, the new array value is read from the link. NORD is set.&lt;br /&gt;
&lt;br /&gt;
This module places a value directly in VAL.&lt;br /&gt;
&lt;br /&gt;
If the INP link type is constant, then NORD is set to zero. If the INP link type is PV_LINK, then dbCaAddInlink is called by init_record.&lt;br /&gt;
&lt;br /&gt;
read_wf calls recGblGetLinkValue which performs the following steps:&lt;br /&gt;
&lt;br /&gt;
If the INP link type is CONSTANT recGblGetLinkValue does nothing.&lt;br /&gt;
&lt;br /&gt;
If the INP link type is DB_LINK, then dbGetLink is called to obtain a new input value. If dbGetLink returns an error, a LINK_ALARM with a severity of INVALID_ALARM is raised.&lt;br /&gt;
&lt;br /&gt;
If the INP link type is CA_LINK, then dbCaGetLink is called to obtain a new input value. If dbCaGetLink returns an error, a LINK_ALARM with a severity of INVALID_ALARM is raised.&lt;br /&gt;
&lt;br /&gt;
NORD is set to the number of values returned and read_wf returns.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Wait&amp;diff=1546</id>
		<title>RRM 3-14 Wait</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Wait&amp;diff=1546"/>
		<updated>2008-04-18T18:50:36Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Wait =&lt;br /&gt;
&lt;br /&gt;
: Ned D. Arnold&lt;br /&gt;
: Advanced Photon Source&lt;br /&gt;
: Argonne National Laboratory&lt;br /&gt;
&lt;br /&gt;
This chapter describes the capabilities and use of the Wait record. The Wait record was developed primarily to provide &amp;amp;quot;reassignable&amp;amp;quot; link fields that could be changed during run time. A unique library was developed to provide this feature. Since all EPICS standard link fields are &amp;amp;quot;reassignable&amp;amp;quot; in R3.13 and above, the Wait record and its associated library are somewhat obsolete. For new designs, it is recommended that the ''Calcout'' record be used, which provides the same function as the Wait record (plus more) while using the standard EPICS links.&lt;br /&gt;
&lt;br /&gt;
The Wait record is derived from the Calc record with the following additional features:&lt;br /&gt;
&lt;br /&gt;
* reassignable PV links&lt;br /&gt;
* an output link&lt;br /&gt;
* a desired output link&lt;br /&gt;
* an output event number to post&lt;br /&gt;
* and several options as to when it will execute the output link and event posting.&lt;br /&gt;
&lt;br /&gt;
The Wait record also has the capability to process as a result of an input changing (via CA monitors), and it can be used to do ''conditional'' processing within the database. Its name is derived from the original requirement that initiated its development -- &amp;quot;I want to wait until all the motors have stopped and then trigger the detector.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* expression-related parameters&lt;br /&gt;
* desired output parameters&lt;br /&gt;
* write parameters&lt;br /&gt;
* operator parameters&lt;br /&gt;
* monitor parameters&lt;br /&gt;
* run-time and simulation mode parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The wait record has the standard fields for specifying under what circumstances the record will be processed. In addition to the standard scan mechanisms available to all records (periodic, passive, event, etc.), the wait record can be specified to process as a result of one of its input values changing (using Channel Access monitors). This offers immediate response to an input change (rather than waiting for the next periodic scan) while minimizing record processing that is not required. The scan mechanism choice &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt; will enable this feature.  For the current EPICS release, an additional module, &amp;lt;CODE&amp;gt;caMonitor.o&amp;lt;/CODE&amp;gt;, must be compiled and loaded with the wait record support to provide this feature.&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;B&amp;gt;Note: Because of the event driven nature of this feature, it is quite easy to configure a database that results in an infinite loop which uses all available CPU time. If the wait record is set to process as a result of a channel changing and the processing of the wait record causes the channel to change again, an infinite loop will result. The symptom will be a loss of all channel access connections (lower priority tasks) even though the shell responds normally. Using the &amp;lt;CODE&amp;gt;spy&amp;lt;/CODE&amp;gt; vxWorks utility will confirm the predicament by showing 0% free CPU time.&amp;lt;/B&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how the rest of these fields are used. They are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]].&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
Like the Calc record, the read parameters for the Wait record consist of 12 input links--INAN, INBN, ... INLN. The fields can be database links or constants. If they are links, they must specify another record's field in the same IOC. If they are constants, the corresponding value field for the link (A-L) will be initialized with the constant's value and can be changed via dbPuts. The Wait record does not support direct links to hardware.&lt;br /&gt;
&lt;br /&gt;
Unlike the Calc record, these input links can be modified during run time. These are ASCII fields which have a special processing routine attached to them. When changed, the routine is called. The record will use the new link the next time the record is processed.&lt;br /&gt;
&lt;br /&gt;
A consequence of reassignable links is that one cannot force the processing of any specified records prior to retrieving the data from them (i.e. there is no .PP flag). This should be considered when designing a database using the Wait record.&lt;br /&gt;
&lt;br /&gt;
In this initial version, the ''reassignable'' links do not support channel access connections external to the IOC. Until this feature is added, the specified Process Variables must reside on the same IOC.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on specifying links and constants.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INAN&amp;lt;TD&amp;gt;Input Link A Name&amp;lt;TD&amp;gt;STRING[40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INBN&amp;lt;TD&amp;gt;Input Link B Name&amp;lt;TD&amp;gt;STRING[40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INCN&amp;lt;TD&amp;gt;Input Link C Name&amp;lt;TD&amp;gt;STRING[40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INDN&amp;lt;TD&amp;gt;Input Link D Name&amp;lt;TD&amp;gt;STRING[40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INEN&amp;lt;TD&amp;gt;Input Link E Name&amp;lt;TD&amp;gt;STRING[40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INFN&amp;lt;TD&amp;gt;Input Link F Name&amp;lt;TD&amp;gt;STRING[40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INGN&amp;lt;TD&amp;gt;Input Link G Name&amp;lt;TD&amp;gt;STRING[40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INHN&amp;lt;TD&amp;gt;Input Link H Name&amp;lt;TD&amp;gt;STRING[40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ININ&amp;lt;TD&amp;gt;Input Link I Name&amp;lt;TD&amp;gt;STRING[40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INJN&amp;lt;TD&amp;gt;Input Link J Name&amp;lt;TD&amp;gt;STRING[40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INKN&amp;lt;TD&amp;gt;Input Link K Name&amp;lt;TD&amp;gt;STRING[40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INLN&amp;lt;TD&amp;gt;Input Link L Name&amp;lt;TD&amp;gt;STRING[40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression-related Parameters ===&lt;br /&gt;
&lt;br /&gt;
The expression related fields of the Wait record are identical to that of the Calc record. The two main fields are the CALC and RPCL fields. The CALC field contains the infix expression which the record routine will use when it processes the record. The user enters an expression in this field. The resulting value of the expression is placed in the VAL field The write parameters of the record can write this value if configured to.&lt;br /&gt;
&lt;br /&gt;
The CALC field is actually converted to opcode and stored as a reverse polish expression, or postfix expression, in the RPCL field. It is this expression which is actually used to calculate VAL. CALC can be changed at run-time, and the special record routine calls a function to convert it to the postfix expression. One difference between the Calc record and the Wait record is that the Wait record contains a flag field (CLCV) that indicates if the expression is a valid one. It will be true (non-zero) if the expression is invalid, in which case an error message is generated.&lt;br /&gt;
&lt;br /&gt;
The reverse polish calculation is evaluated most efficiently during run-time. The range of expressions supported by the calculation record are separated into operands, algebraic operations, trigonometric operations, relational operations, logical operations, parentheses and commas, and the question mark operator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC&amp;lt;TD&amp;gt;Calculation&amp;lt;TD&amp;gt;DBF_STRING&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RPCL&amp;lt;TD&amp;gt;Reverse Polish&amp;lt;TD&amp;gt;DBF_NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Operands ====&lt;br /&gt;
&lt;br /&gt;
The expression can use the values retrieved from the INP''x'' links as operands, these values being stored in the A-L fields. The values to be used in the expression are simply referenced by the field letter. For instance, the value obtained from the INPA link is stored in field A and the value obtained from INPB is stored in field B. The field names can be included in the expression which will operate on their respective values, as in A+B. In addition, the RNDM unary function can be included as an operand to generate a random number between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;A&amp;lt;TD&amp;gt;Input Values A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B&amp;lt;TD&amp;gt;Input Values B&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;C&amp;lt;TD&amp;gt;Input Values C&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D&amp;lt;TD&amp;gt;Input Values D&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;E&amp;lt;TD&amp;gt;Input Values E&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;F&amp;lt;TD&amp;gt;Input Values E&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;G&amp;lt;TD&amp;gt;Input Values G&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;H&amp;lt;TD&amp;gt;Input Values H&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;I&amp;lt;TD&amp;gt;Input Values I&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;J&amp;lt;TD&amp;gt;Input Values J&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;K&amp;lt;TD&amp;gt;Input Values K&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;L&amp;lt;TD&amp;gt;Input Values L&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Algebraic Operators ====&lt;br /&gt;
&lt;br /&gt;
* ABS: Absolute value (unary)&lt;br /&gt;
* SQR: Square root (unary)&lt;br /&gt;
* MIN: Minimum (binary function)&lt;br /&gt;
* MAX: Maximum (binary function)&lt;br /&gt;
* CEIL: Ceiling (unary)&lt;br /&gt;
* FLOOR: Floor (unary)&lt;br /&gt;
* LOG: Log base 10 (unary)&lt;br /&gt;
* LOGE: Natural log (unary)&lt;br /&gt;
* EXP: Exponential function (unary)&lt;br /&gt;
* ^: Exponential (binary)&lt;br /&gt;
* ** : Exponential (binary)&lt;br /&gt;
* + : Addition (binary)&lt;br /&gt;
* - : Subtraction (binary)&lt;br /&gt;
* * : Multiplication (binary)&lt;br /&gt;
* / : Division (binary)&lt;br /&gt;
* % : Modulo (binary)&lt;br /&gt;
* NOT: Negate (unary)&lt;br /&gt;
&lt;br /&gt;
==== Trigonometric Operators ====&lt;br /&gt;
&lt;br /&gt;
* SIN: Sine&lt;br /&gt;
* SINH: Hyperbolic sine&lt;br /&gt;
* ASIN: Arc sine&lt;br /&gt;
* COS: Cosine&lt;br /&gt;
* COSH: Hyperbolic cosine&lt;br /&gt;
* ACOS: Arc cosine&lt;br /&gt;
* TAN: Tangent&lt;br /&gt;
* TANH: Hyperbolic tangent&lt;br /&gt;
* ATAN: Arc tangent&lt;br /&gt;
&lt;br /&gt;
==== Relational Operators ====&lt;br /&gt;
&lt;br /&gt;
* &amp;amp;gt;= : Greater than or equal to&lt;br /&gt;
* &amp;amp;gt; : Greater than&lt;br /&gt;
* &amp;amp;lt;= : Less than or equal to&lt;br /&gt;
* &amp;amp;lt;: Less than&lt;br /&gt;
* # : Not equal to&lt;br /&gt;
* = : Equal to&lt;br /&gt;
&lt;br /&gt;
==== Logical Operators ====&lt;br /&gt;
&lt;br /&gt;
* &amp;amp;amp;&amp;amp;amp; : And&lt;br /&gt;
* || : Or&lt;br /&gt;
* ! : Not&lt;br /&gt;
&lt;br /&gt;
==== Bitwise Operators ====&lt;br /&gt;
&lt;br /&gt;
* | : Bitwise Or&lt;br /&gt;
* &amp;amp;amp; : Bitwise And&lt;br /&gt;
* OR : Bitwise Or&lt;br /&gt;
* AND: Bitwise And&lt;br /&gt;
* XOR: Bitwise Exclusive Or&lt;br /&gt;
* ~ : One's Complement&lt;br /&gt;
* &amp;amp;lt;&amp;amp;lt; : Left shift&lt;br /&gt;
* &amp;amp;gt;&amp;amp;gt; : Right shift&lt;br /&gt;
&lt;br /&gt;
==== parentheses and Comma ====&lt;br /&gt;
&lt;br /&gt;
The open and close parentheses are supported. Nested parentheses are supported.&lt;br /&gt;
&lt;br /&gt;
The comma is supported when used to separate the arguments of a binary function.&lt;br /&gt;
&lt;br /&gt;
==== Conditional Expression ====&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;C&amp;quot; question mark operator is supported. The format is:&lt;br /&gt;
&lt;br /&gt;
 (condition)? True result : False result&lt;br /&gt;
&lt;br /&gt;
=== Expression Examples ===&lt;br /&gt;
&lt;br /&gt;
==== Algebraic ====&lt;br /&gt;
&lt;br /&gt;
 A + B + 10&lt;br /&gt;
&lt;br /&gt;
* Result is A + B&lt;br /&gt;
&lt;br /&gt;
==== Relational ====&lt;br /&gt;
&lt;br /&gt;
 (A + B) &amp;amp;lt; (C + D)&lt;br /&gt;
&lt;br /&gt;
* Result is 1 if (A+B) &amp;amp;lt; (C+D)&lt;br /&gt;
* Result is 0 if (A+B) &amp;amp;gt;= (C+D)&lt;br /&gt;
&lt;br /&gt;
==== Question Mark ====&lt;br /&gt;
&lt;br /&gt;
 (A+B)&amp;amp;lt;(C+D)?E:F+L+10&lt;br /&gt;
&lt;br /&gt;
* Result is E if (A+B) &amp;amp;lt; (C+D)&lt;br /&gt;
* Result is F+L+10 if (A+B) &amp;amp;gt;= (C+D)&lt;br /&gt;
&lt;br /&gt;
 (A+B)&amp;amp;lt;(C+D)?E&lt;br /&gt;
&lt;br /&gt;
* Result is E if (A+B) &amp;amp;lt; (C+D)&lt;br /&gt;
* Result is unchanged if (A+B) &amp;amp;gt;= (C+D)&lt;br /&gt;
&lt;br /&gt;
==== Logical ====&lt;br /&gt;
&lt;br /&gt;
 A&amp;amp;amp;B&lt;br /&gt;
&lt;br /&gt;
* Causes the following to occur:&lt;br /&gt;
** Convert A to integer&lt;br /&gt;
** Convert B to integer&lt;br /&gt;
** Bit-wise And A and B&lt;br /&gt;
** Convert result to floating point&lt;br /&gt;
&lt;br /&gt;
=== Desired Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
Using the choices in the Data Output field (DOPT) explained in the next section, the Wait record can be configured to write as its output the result of its calculation (the value in VAL) or it can be configured to write a desired output value, fetched from an input link. The desired output fields for the Wait record are similar to the desired output parameters of other output records.&lt;br /&gt;
&lt;br /&gt;
In the desired output location (DOLN) field, the user specifies a link from which the record will retrieve the value that it writes (if the DOPT field specifies DOLD). The value is retrieved and placed in the desired output location data field (DOLD). If DOLN specifies no link, a flag field indicates that the DOLN field is invalid. When the DOLN field is invalid, the value of DOLD can be set via dbPuts at run-time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOLN &amp;lt;TD&amp;gt;Desired Output Location&amp;lt;TD&amp;gt;STRING [40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOLD&amp;lt;TD&amp;gt;Desired Output Location Data &amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Write Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Wait record can write either the result of its calculation (VAL) or the value retrieved by the DOLN field. If the user specifies &amp;lt;CODE&amp;gt;Use VAL&amp;lt;/CODE&amp;gt; in the Data Option (DOPT) field, then the value in VAL will be written. If the user specifies &amp;lt;CODE&amp;gt;Use DOL&amp;lt;/CODE&amp;gt;, the value retrieved from the DOLN link and contained in the DOLD field will be written. The DOPT field can be changed during run-time.&lt;br /&gt;
&lt;br /&gt;
The Output Link Name (OUTN) specifies where the record is to write the output value.&lt;br /&gt;
&lt;br /&gt;
The Wait record does not have to write its output every time the record processes. This allows &amp;quot;downstream&amp;quot; processing of records to be done conditionally. The record has ''output execution'' options which can be specified in the OOPT field. These options are as follows.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Every Time&amp;lt;/CODE&amp;gt;: Outputs are executed every time the record processes.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;On Change&amp;lt;/CODE&amp;gt;: Outputs are executed if the result of the calculation (VAL) is different than the previous time the record was processed.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;When Zero&amp;lt;/CODE&amp;gt;: Outputs are executed if the result of the calculation is zero.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;When Non-zero&amp;lt;/CODE&amp;gt;: Outputs are executed if the result of the calculation is not zero.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Transition To Zero&amp;lt;/CODE&amp;gt;: Outputs are executed if the result of the calculation is zero and the previous value was not zero.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Transition To Non-zero&amp;lt;/CODE&amp;gt;: Outputs are executed if the result of the calculation is not zero and the previous value was zero.&lt;br /&gt;
The Wait record can also post an event. If a non-zero value is entered into the OEVT (Output Event) field, the record will &amp;quot;post an event&amp;quot; (using the entered number as the event number) whenever the output link is executed. This is a way of initiating several other records to process as a result of a calculation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OOPT&amp;lt;TD&amp;gt;Output Option&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTN &amp;lt;TD&amp;gt;Output Link Name &amp;lt;TD&amp;gt;STRING [40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOPT&amp;lt;TD&amp;gt;Data Option&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OEVT&amp;lt;TD&amp;gt; Output Event &amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. They display the value and other parameters of the Wait record either textually or graphically.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields set the upper and lower display limits for the VAL field. The &amp;lt;CODE&amp;gt;get_graphic_double&amp;lt;/CODE&amp;gt; retrieves these fields.&lt;br /&gt;
&lt;br /&gt;
The PREC field determines the floating point precision with which to display VAL. It is used whenever the &amp;lt;CODE&amp;gt;get_precision&amp;lt;/CODE&amp;gt; record support routine is called.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;TD&amp;gt;Low Operating Range &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The wait record has the alarm parameters common to all record types. [[RRM 3-13 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are delta values that implement a deadband on the value-change monitors for the VAL field. Monitors are sent when the value field exceeds the last monitored field (MLST, for instance) by the appropriate delta. If these fields have a value of zero, everytime the value changes, a monitor will be triggered; if they have a value of -1, everytime the record is processed, monitors are triggered. The ADEL field is used for archive monitors and the MDEL field for all other types of monitors. See [[RRM 3-13 Concepts#Monitor Specification|Monitor Specification]] for a complete explanation of monitors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the Wait record. They are not configurable. They represent the current state of the record. The record support routines use some of them to process the record or to implement monitors.&lt;br /&gt;
&lt;br /&gt;
The OVAL field is used to implement monitors on the VAL field. If VAL differs from OVAL (taking into account the deadband) then monitors for VAL are triggered.&lt;br /&gt;
&lt;br /&gt;
The LA-LL fields are used to implement monitors for the A-L field, the fields which hold the values retrieved from the input links. They hold the values retrieved from INPA-INPL the last time the record was processed. For instance, when A, the current value retrieved from INPA, does not equal LA, the last value retrieved, then monitors for A are triggered.&lt;br /&gt;
&lt;br /&gt;
The DOLV and CLCV are flag fields. The DOLV flag is used to indicate if the process variable specified in the Desired Output Location (DOLN) field is a valid name. If it is not, the desired output value is not retrieved from DOLN. The CLCV flag is used to indicate if the Wait record's CALC expression is a mathematically valid one.&lt;br /&gt;
&lt;br /&gt;
The CBST field contains a pointer to a record private structure. It is not of concern to the user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CBST&amp;lt;TD&amp;gt;Callback Structure&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OVAL&amp;lt;TD&amp;gt;Old Value &amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOLA &amp;lt;TD&amp;gt;Desired Output Location Address&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOLV&amp;lt;TD&amp;gt;Desired Output Location Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;TD&amp;gt;Archive Last Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;TD&amp;gt;Monitor Last Value &amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CLCV &amp;lt;TD&amp;gt;Calculation String Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LA&amp;lt;TD&amp;gt;Previous Input&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LB&amp;lt;TD&amp;gt;Previous Input&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LC&amp;lt;TD&amp;gt;Previous Input&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LD&amp;lt;TD&amp;gt;Previous Input&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LE&amp;lt;TD&amp;gt;Previous Input&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LF&amp;lt;TD&amp;gt;Previous Input&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LG&amp;lt;TD&amp;gt;Previous Input&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LH&amp;lt;TD&amp;gt;Previous Input&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LI&amp;lt;TD&amp;gt;Previous Input&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LJ&amp;lt;TD&amp;gt;Previous Input&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LK&amp;lt;TD&amp;gt;Previous Input&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;TD&amp;gt;Previous Input&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Transform&amp;diff=1545</id>
		<title>RRM 3-14 Transform</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Transform&amp;diff=1545"/>
		<updated>2008-04-18T18:49:28Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Transform Record =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Transform record combines features of the Calcout and Seq records, with&lt;br /&gt;
16 sets of the following fields:&lt;br /&gt;
&lt;br /&gt;
* input link&lt;br /&gt;
* input-link status&lt;br /&gt;
* value (from input link or from calc expression)&lt;br /&gt;
* calc expression&lt;br /&gt;
* calc-expression status&lt;br /&gt;
* output link&lt;br /&gt;
* output-link status&lt;br /&gt;
* comment&lt;br /&gt;
&lt;br /&gt;
For concreteness, here is the first set of fields:&lt;br /&gt;
&lt;br /&gt;
     INPA - link from which value for A will be read&lt;br /&gt;
     IAV  - status of INPA&lt;br /&gt;
     A    - value&lt;br /&gt;
     CLCA - expression whose value might be written to A&lt;br /&gt;
     CAV  - validity of expression CLCA&lt;br /&gt;
     OUTA - link to which A will be written&lt;br /&gt;
     OAV  - status of OUTA&lt;br /&gt;
     CMTA - comment (description)&lt;br /&gt;
&lt;br /&gt;
The value fields A-P are &amp;quot;process-passive&amp;quot;, which means that writing to one of them from&lt;br /&gt;
a CA client, or via a &amp;quot;CA&amp;quot; link, will cause the record to process, if its scan state is &amp;quot;Passive&amp;quot;.&lt;br /&gt;
If the input link associated with a value field is not blank and is not an initialization constant, then&lt;br /&gt;
writes to that value field are not permitted.&lt;br /&gt;
&lt;br /&gt;
An expression is evaluated only if the associated value field has not been modified (either by a &amp;lt;i&amp;gt;put&amp;lt;/i&amp;gt; from&lt;br /&gt;
some external agent, or as the result of input-link execution) since the last time the record processed.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
The Transform record was originally intended to perform the sequences of conditional calculations required to implement bidirectional coordinate transformations. &lt;br /&gt;
&lt;br /&gt;
Example: You have defined two records containing values we'll call &amp;quot;L&amp;quot; and &amp;quot;R&amp;quot; (the left and right edges of a slit, say). Sometimes the user wants to control L and R individually, and sometimes he wants to control a combination of L and R--say (L-R) and (L+R)/2, the width and center of the slit system. You can implement a bidirectional coordinate transformation with the following expressions (where position values are assumed to increase as we go from left to right): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border = &amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;field&amp;lt;th&amp;gt;expression&amp;lt;th&amp;gt;comment  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;A  &amp;lt;td&amp;gt;C-D/2  &amp;lt;td&amp;gt;position of left edge of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;B  &amp;lt;td&amp;gt;C+D/2  &amp;lt;td&amp;gt;position of right edge of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;C  &amp;lt;td&amp;gt;(A+B)/2  &amp;lt;td&amp;gt;position of center of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;D  &amp;lt;td&amp;gt;B-A  &amp;lt;td&amp;gt;width of slit  &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, if a user command moves the left side of the slit (A changes) and causes the record to process, A will not be recalculated because it's value is new, the right side of the slit will remain still (B is unnecessarily recalculated from old values of C and D), the position of the slit center (C) will change as expected, and the slit width (D) will change as expected. Thus, all four fields will contain consistent information about the two degrees of freedom controlled by the record, and effectively we have two actual devices and two virtual devices. &lt;br /&gt;
&lt;br /&gt;
We don't care which two fields (out of A..D) correspond to actual motion-control devices, and two channel-access clients that make different assumptions about how a slit should be implemented can control this slit without modification. With an additional, similar transform record driven from the readback fields of the actual motion-control devices, we can calculate readback values for the virtual devices as well. &lt;br /&gt;
&lt;br /&gt;
We could have accomplished nearly the same effect with six CALC records and some FANOUTs, but two of the drive fields (A,B,C,D) would always be inconsistent with their readbacks. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into these categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* expression parameters&lt;br /&gt;
* output parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Transform record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the Transform record supports no direct interfaces to hardware, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the Transform record consist of 16 input links INPA, INPB, ... INPP. The fields can be database links, channel access links, or constants. If they are links, they must specify another record's field. If they are constants, associated value fields will be initialized with the constants. These fields cannot be hardware addresses. In addition, the Transform record contains the IAV, IBV, . . . IPV fields which indicate the states of the link fields, for example, whether or not the specified PV was found and a link to it established. See [[#Operator Display Parameters|Operator Display Parameters]] for an explanation of these fields.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPP&amp;lt;TD&amp;gt;Input Link P&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
Like the Calcout record, the Transform record has fields in which the developer or user can enter an infix&lt;br /&gt;
expression to be evaluated when the record is processed.  There are, in fact, 16 such fields, each of which&lt;br /&gt;
is a member of its own (&amp;lt;i&amp;gt;inputlink&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;outputlink&amp;lt;/i&amp;gt;) group.  For&lt;br /&gt;
each group, if &amp;lt;i&amp;gt;inputlink&amp;lt;/i&amp;gt; is not blank and is not simply a constant initializer, then &amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt; may be evaluated when&lt;br /&gt;
the record processes, and the result will be placed in &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Transform-record expressions are very similar to Calcout-record expression described elsewhere in this&lt;br /&gt;
manual.  Instead of the standard EPICS calc engine (which does not permit an expression&lt;br /&gt;
to reference more than 12 input fields), Transform-record expressions are handled by the sCalcout (string calculation and output) record's engine.  The differences, between these engines, that matter for&lt;br /&gt;
transform-record expressions are the following:&lt;br /&gt;
&lt;br /&gt;
* The constants S2R (arc-seconds-to-radians) and R2S are supported.&lt;br /&gt;
* &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;The functions MIN() and MAX() may have more than two arguments.  (EPICS 3.14-compatible version only.)&amp;lt;/font&amp;gt;&lt;br /&gt;
* &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;The binary operators '&amp;gt;&amp;amp;' (larger of the operands) and '&amp;lt;&amp;amp;' (smaller) are supported.  (EPICS 3.14-compatible version only.)&amp;lt;/font&amp;gt;&lt;br /&gt;
* The binary operator '!=' (not equal) is a permitted alternatives '#'.&lt;br /&gt;
* The unary operator '@' selects an input field by number.  (E.g., '@0' means 'A'.  If 'B' has the value 3, '@b' means 'D'.)&lt;br /&gt;
* The values of the variables A...P used in expressions may be the results of previously evaluated expressions.&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Transform record has 16 output links, executed in order from OUTA to OUTP.  Unlike the Calcout record,&lt;br /&gt;
these links are not conditional; they execute every time the record processes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTA&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTB&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTP&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. Some are also meant to represent the status of the record at run-time.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is supplied by the user and which describes the values being operated upon.  This field is not very useful, because it's unlikely to pertain to all 16 value fields.&lt;br /&gt;
&lt;br /&gt;
The IAV-IPV fields indicate the states of the links INPA-INPP. These fields can have three possible values:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV NC&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link hasn't been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV OK&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link has been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Local PV&amp;lt;/CODE&amp;gt; -- the PV was found on this IOC.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Constant&amp;lt;/CODE&amp;gt; -- the corresponding link field is a constant.&lt;br /&gt;
&lt;br /&gt;
The OAV-OPV fields indicate the states of the OUTA-OUTP links. They have the same possible values as the IAV-ILV fields.&lt;br /&gt;
&lt;br /&gt;
The CAV-CPV fields indicate the validity of the expressions in the CLCA-CLCP fields, respectively. If an expression is invalid, its status field is set to one.&lt;br /&gt;
&lt;br /&gt;
The IVLA field specifies how the record should behave if any of its input links references a record that is in alarm.  There are two possibilities:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Ignore Error&amp;quot; - Use whatever value was gotten from the link, and proceed as if there had not been any error indication.&lt;br /&gt;
* &amp;quot;Do Nothing&amp;quot; - Stop after all input values have been retrieved: do not evaluate expressions, and do not execute output or forward links.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IAV&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IBV&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IPV&amp;lt;TD&amp;gt;Link Status of INPP&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OAV&amp;lt;TD&amp;gt;Link Status of OUTA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OBV&amp;lt;TD&amp;gt;Link Status of OUTB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OPV&amp;lt;TD&amp;gt;Link Status of OUTP&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CAV&amp;lt;TD&amp;gt;CLCA Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CBV&amp;lt;TD&amp;gt;CLCB Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CPV&amp;lt;TD&amp;gt;CLCP Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
The Transform record has no record-type-specific alarm fields.&lt;br /&gt;
See [[RRM 3-13 dbCommon#Alarm Fields|Alarm Fields]] for the list of alarm fields common to all record types.&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant.&lt;br /&gt;
&lt;br /&gt;
A routine sCalcPostfix is called to convert the infix expression in CLCA-CLCV to postfix notation. The results are stored in RPCA-RPCP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if any of the fields A-P, CLCA-CLCP, INPA-INPP, OUTA-OUTP are changed.  For expressions fields, special() calls sCalcPostfix.  For value fields, special() keeps track of which fields have changed, because expressions will not be evaluated for fields that have been written to.  For link fields, special() starts the process of checking link status.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
==== process() ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch values from all valid input links.&lt;br /&gt;
# For each value field &amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt;, in order from A to P: if the value has not been written to since the last time the record processed, call sCalcPerform(), which evaluates the expression specified in CLC&amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt; and stores the result in &amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt;.&lt;br /&gt;
# Post all fields the record has changed.&lt;br /&gt;
# Execute all valid output links, in order from OUTA to OUTP.&lt;br /&gt;
# Execute the forward link, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
The Transform record is not included with EPICS base.  An EPICS 3.13-compatible version of this record is available as part of the [http://www.aps.anl.gov/aod/bcda/synApps/std/std.html std] module, which is part of the [http://www.aps.anl.gov/aod/bcda/synApps synApps] package of EPICS-based synchrotron-beamline software.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 7 JUNE 2006&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Transform&amp;diff=1509</id>
		<title>RRM 3-14 Transform</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Transform&amp;diff=1509"/>
		<updated>2008-04-18T18:48:48Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Transform Record =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Transform record combines features of the Calcout and Seq records, with&lt;br /&gt;
16 sets of the following fields:&lt;br /&gt;
&lt;br /&gt;
* input link&lt;br /&gt;
* input-link status&lt;br /&gt;
* value (from input link or from calc expression)&lt;br /&gt;
* calc expression&lt;br /&gt;
* calc-expression status&lt;br /&gt;
* output link&lt;br /&gt;
* output-link status&lt;br /&gt;
* comment&lt;br /&gt;
&lt;br /&gt;
For concreteness, here is the first set of fields:&lt;br /&gt;
&lt;br /&gt;
     INPA - link from which value for A will be read&lt;br /&gt;
     IAV  - status of INPA&lt;br /&gt;
     A    - value&lt;br /&gt;
     CLCA - expression whose value might be written to A&lt;br /&gt;
     CAV  - validity of expression CLCA&lt;br /&gt;
     OUTA - link to which A will be written&lt;br /&gt;
     OAV  - status of OUTA&lt;br /&gt;
     CMTA - comment (description)&lt;br /&gt;
&lt;br /&gt;
The value fields A-P are &amp;quot;process-passive&amp;quot;, which means that writing to one of them from&lt;br /&gt;
a CA client, or via a &amp;quot;CA&amp;quot; link, will cause the record to process, if its scan state is &amp;quot;Passive&amp;quot;.&lt;br /&gt;
If the input link associated with a value field is not blank and is not an initialization constant, then&lt;br /&gt;
writes to that value field are not permitted.&lt;br /&gt;
&lt;br /&gt;
An expression is evaluated only if the associated value field has not been modified (either by a &amp;lt;i&amp;gt;put&amp;lt;/i&amp;gt; from&lt;br /&gt;
some external agent, or as the result of input-link execution) since the last time the record processed.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
The Transform record was originally intended to perform the sequences of conditional calculations required to implement bidirectional coordinate transformations. &lt;br /&gt;
&lt;br /&gt;
Example: You have defined two records containing values we'll call &amp;quot;L&amp;quot; and &amp;quot;R&amp;quot; (the left and right edges of a slit, say). Sometimes the user wants to control L and R individually, and sometimes he wants to control a combination of L and R--say (L-R) and (L+R)/2, the width and center of the slit system. You can implement a bidirectional coordinate transformation with the following expressions (where position values are assumed to increase as we go from left to right): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border = &amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;field&amp;lt;th&amp;gt;expression&amp;lt;th&amp;gt;comment  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;A  &amp;lt;td&amp;gt;C-D/2  &amp;lt;td&amp;gt;position of left edge of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;B  &amp;lt;td&amp;gt;C+D/2  &amp;lt;td&amp;gt;position of right edge of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;C  &amp;lt;td&amp;gt;(A+B)/2  &amp;lt;td&amp;gt;position of center of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;D  &amp;lt;td&amp;gt;B-A  &amp;lt;td&amp;gt;width of slit  &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, if a user command moves the left side of the slit (A changes) and causes the record to process, A will not be recalculated because it's value is new, the right side of the slit will remain still (B is unnecessarily recalculated from old values of C and D), the position of the slit center (C) will change as expected, and the slit width (D) will change as expected. Thus, all four fields will contain consistent information about the two degrees of freedom controlled by the record, and effectively we have two actual devices and two virtual devices. &lt;br /&gt;
&lt;br /&gt;
We don't care which two fields (out of A..D) correspond to actual motion-control devices, and two channel-access clients that make different assumptions about how a slit should be implemented can control this slit without modification. With an additional, similar transform record driven from the readback fields of the actual motion-control devices, we can calculate readback values for the virtual devices as well. &lt;br /&gt;
&lt;br /&gt;
We could have accomplished nearly the same effect with six CALC records and some FANOUTs, but two of the drive fields (A,B,C,D) would always be inconsistent with their readbacks. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into these categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* expression parameters&lt;br /&gt;
* output parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Transform record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the Transform record supports no direct interfaces to hardware, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the Transform record consist of 16 input links INPA, INPB, ... INPP. The fields can be database links, channel access links, or constants. If they are links, they must specify another record's field. If they are constants, associated value fields will be initialized with the constants. These fields cannot be hardware addresses. In addition, the Transform record contains the IAV, IBV, . . . IPV fields which indicate the states of the link fields, for example, whether or not the specified PV was found and a link to it established. See [[#Operator Display Parameters|Operator Display Parameters]] for an explanation of these fields.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPP&amp;lt;TD&amp;gt;Input Link P&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
Like the Calcout record, the Transform record has fields in which the developer or user can enter an infix&lt;br /&gt;
expression to be evaluated when the record is processed.  There are, in fact, 16 such fields, each of which&lt;br /&gt;
is a member of its own (&amp;lt;i&amp;gt;inputlink&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;outputlink&amp;lt;/i&amp;gt;) group.  For&lt;br /&gt;
each group, if &amp;lt;i&amp;gt;inputlink&amp;lt;/i&amp;gt; is not blank and is not simply a constant initializer, then &amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt; may be evaluated when&lt;br /&gt;
the record processes, and the result will be placed in &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Transform-record expressions are very similar to Calcout-record expression described elsewhere in this&lt;br /&gt;
manual.  Instead of the standard EPICS calc engine (which does not permit an expression&lt;br /&gt;
to reference more than 12 input fields), Transform-record expressions are handled by the sCalcout (string calculation and output) record's engine.  The differences, between these engines, that matter for&lt;br /&gt;
transform-record expressions are the following:&lt;br /&gt;
&lt;br /&gt;
* The constants S2R (arc-seconds-to-radians) and R2S are supported.&lt;br /&gt;
* &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;The functions MIN() and MAX() may have more than two arguments.  (EPICS 3.14-compatible version only.)&amp;lt;/font&amp;gt;&lt;br /&gt;
* &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;The binary operators '&amp;gt;&amp;amp;' (larger of the operands) and '&amp;lt;&amp;amp;' (smaller) are supported.  (EPICS 3.14-compatible version only.)&amp;lt;/font&amp;gt;&lt;br /&gt;
* The binary operator '!=' (not equal) is a permitted alternatives '#'.&lt;br /&gt;
* The unary operator '@' selects an input field by number.  (E.g., '@0' means 'A'.  If 'B' has the value 3, '@b' means 'D'.)&lt;br /&gt;
* The values of the variables A...P used in expressions may be the results of previously evaluated expressions.&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Transform record has 16 output links, executed in order from OUTA to OUTP.  Unlike the Calcout record,&lt;br /&gt;
these links are not conditional; they execute every time the record processes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTA&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTB&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTP&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. Some are also meant to represent the status of the record at run-time.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is supplied by the user and which describes the values being operated upon.  This field is not very useful, because it's unlikely to pertain to all 16 value fields.&lt;br /&gt;
&lt;br /&gt;
The IAV-IPV fields indicate the states of the links INPA-INPP. These fields can have three possible values:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV NC&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link hasn't been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV OK&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link has been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Local PV&amp;lt;/CODE&amp;gt; -- the PV was found on this IOC.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Constant&amp;lt;/CODE&amp;gt; -- the corresponding link field is a constant.&lt;br /&gt;
&lt;br /&gt;
The OAV-OPV fields indicate the states of the OUTA-OUTP links. They have the same possible values as the IAV-ILV fields.&lt;br /&gt;
&lt;br /&gt;
The CAV-CPV fields indicate the validity of the expressions in the CLCA-CLCP fields, respectively. If an expression is invalid, its status field is set to one.&lt;br /&gt;
&lt;br /&gt;
The IVLA field specifies how the record should behave if any of its input links references a record that is in alarm.  There are two possibilities:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Ignore Error&amp;quot; - Use whatever value was gotten from the link, and proceed as if there had not been any error indication.&lt;br /&gt;
* &amp;quot;Do Nothing&amp;quot; - Stop after all input values have been retrieved: do not evaluate expressions, and do not execute output or forward links.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IAV&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IBV&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IPV&amp;lt;TD&amp;gt;Link Status of INPP&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OAV&amp;lt;TD&amp;gt;Link Status of OUTA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OBV&amp;lt;TD&amp;gt;Link Status of OUTB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OPV&amp;lt;TD&amp;gt;Link Status of OUTP&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CAV&amp;lt;TD&amp;gt;CLCA Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CBV&amp;lt;TD&amp;gt;CLCB Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CPV&amp;lt;TD&amp;gt;CLCP Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
The Transform record has no record-type-specific alarm fields.&lt;br /&gt;
See [[RRM 3-13 dbCommon#Alarm Fields|Alarm Fields]] for the list of alarm fields common to all record types.&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant.&lt;br /&gt;
&lt;br /&gt;
A routine sCalcPostfix is called to convert the infix expression in CLCA-CLCV to postfix notation. The results are stored in RPCA-RPCP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if any of the fields A-P, CLCA-CLCP, INPA-INPP, OUTA-OUTP are changed.  For expressions fields, special() calls sCalcPostfix.  For value fields, special() keeps track of which fields have changed, because expressions will not be evaluated for fields that have been written to.  For link fields, special() starts the process of checking link status.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
==== process() ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch values from all valid input links.&lt;br /&gt;
# For each value field &amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt;, in order from A to P: if the value has not been written to since the last time the record processed, call sCalcPerform(), which evaluates the expression specified in CLC&amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt; and stores the result in &amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt;.&lt;br /&gt;
# Post all fields the record has changed.&lt;br /&gt;
# Execute all valid output links, in order from OUTA to OUTP.&lt;br /&gt;
# Execute the forward link, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
The Transform record is not included with EPICS base.  An EPICS 3.13-compatible version of this record is available as part of the [http://www.aps.anl.gov/aod/bcda/synApps/std/std.html std] module, which is part of the [http://www.aps.anl.gov/aod/bcda/synApps synApps] package of EPICS-based synchrotron-beamline software.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 7 JUNE 2006&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Timer&amp;diff=1544</id>
		<title>RRM 3-14 Timer</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Timer&amp;diff=1544"/>
		<updated>2008-04-18T18:48:09Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Timer =&lt;br /&gt;
&lt;br /&gt;
The timer record is provided as a means for configuring timing outputs. These records will drive an output that may be used to latch data into analog inputs or waveform digitizers.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields for the timer record fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* setup parameters&lt;br /&gt;
* write and convert parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* event generation parameters&lt;br /&gt;
* run-time parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The timer record has the standard fields for specifying under what circumstances it will be processed. In addition, the VAL field is provided in the timer record to force record processing when written to. The other fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Note that I/O event scanning is only supported for those card types that interrupt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field &amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Setup Parameters ===&lt;br /&gt;
&lt;br /&gt;
The timer record has fields needed to initialize a motor. The trigger source (TRSC) field is usually configured to come in from an external signal. This is configured in the record by setting TSRC to &amp;lt;CODE&amp;gt;external&amp;lt;/CODE&amp;gt;, the only other choice being &amp;lt;CODE&amp;gt;internal&amp;lt;/CODE&amp;gt;. The pre-trigger state field (PSRC) is the state of the timing channel when it is not fired. The timing channel usually goes high when the timing pulse is present. In such a case the pre-trigger state is low.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TSRC&amp;lt;TD&amp;gt;Clock Source &amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PTST &amp;lt;TD&amp;gt;Pre-Trigger State &amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Write and Convert Parameters ===&lt;br /&gt;
&lt;br /&gt;
The delays and outputs are specified in the time units (TIMU), which has four choices based on seconds: &amp;lt;CODE&amp;gt;Milliseconds&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Microseconds&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Nanoseconds&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;and Picoseconds&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
There are delays and pulse widths for five timing pulses per channel. The pulse width for each should be specified in the OPW1-OPW5 fields, in the units chosen in the TIMU field. The delay width for each trigger is specified in the DUT1-DUT5 fields. The delay width is the time in between pulses. These fields are converted to seconds by the run-time code before being used.&lt;br /&gt;
&lt;br /&gt;
The value of the trigger delay field (TRDL) fetched from the trigger origin (TORG) field is added to the delay for each of these five signals. The TORG and TRDL work like the desired output parameters of other output records. TORG can be a channel access or database link, or a constant. If TORG is a constant, TRDL is initialized to the constant value and can be changed at run-time via dbPuts. Using the TORG field one can set up timing chains which are relative to other timing signals. See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
The desired output is sent to the address contained in the output link (OUT). The DTYP field must contain the name of a valid device support module. The user can see a list of the device support modules currently supported at the user's local site by using the &amp;lt;CODE&amp;gt;dbst&amp;lt;/CODE&amp;gt; utility (R3.13).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TORG&amp;lt;TD&amp;gt;Trigger Delay Origin (input link)&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TRDL&amp;lt;TD&amp;gt;Trigger Delay &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TIMU &amp;lt;TD&amp;gt;Timer Units&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT &amp;lt;TD&amp;gt;Output Link&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DUT1&amp;lt;TD&amp;gt;Delay Width for trigger 1&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OPW1&amp;lt;TD&amp;gt;Pulse width for Trigger 1&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DUT2&amp;lt;TD&amp;gt;Delay Width for Trigger 2&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OPW2&amp;lt;TD&amp;gt;Pulse Width for Trigger 2&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DUT3&amp;lt;TD&amp;gt;Delay Width for Trigger 3&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OPW3&amp;lt;TD&amp;gt;Pulse Width for Trigger 3&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DUT4&amp;lt;TD&amp;gt;Delay Width for Trigger 4&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OPW4&amp;lt;TD&amp;gt;Pulse Width for Trigger 4&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DUT5&amp;lt;TD&amp;gt;Delay Width for Trigger 5&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OPW5&amp;lt;TD&amp;gt;Pulse Width for Trigger 5&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
The PDLY field displays the delay from source to input, which is the time is takes for the timing signal to get from its output to the trigger. It is not used by the run-time code, but characterizes the timing signals for the operator's knowledge.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PDLY&amp;lt;TD&amp;gt;Delay Source to Input&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The timer record has the alarm parameters common to all record types. [[RRM 3-13 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
=== Event Generation Parameters ===&lt;br /&gt;
&lt;br /&gt;
The timing event (TEVT) field is used to generate internal events for processing records on an event. It should be an integer representing an event number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TEVT&amp;lt;TD&amp;gt;Event Number To Be Posted On Trigger. &amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the timing channel. They are not configured using a configuration tool. They represent the current state of the timing channel.&lt;br /&gt;
&lt;br /&gt;
The T1DL-T5DL and T1WD-T5WD fields are where the record stores the user-configured delay widths and pulse widths for the five triggers (DUT1-DUT5 and OPW1-OPW5) after it has converted them to seconds.&lt;br /&gt;
&lt;br /&gt;
The T1TD-T5TD and T1LD-T5LD fields hold the trailing and leading trigger delays for each trigger. These fields are calculated by the record as follows:&lt;br /&gt;
&lt;br /&gt;
 T''n''LD = DUT''n'' + TRDL&lt;br /&gt;
 T''n''TD = T''n''LD + OPW''n''&lt;br /&gt;
&lt;br /&gt;
where ''n'' represents the trigger number.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T1DL&amp;lt;TD&amp;gt;Delay Width for Trigger 1&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T1WD&amp;lt;TD&amp;gt;Pulse Width for Trigger 1&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T2DL&amp;lt;TD&amp;gt;Delay Width for Trigger 2&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T2WD&amp;lt;TD&amp;gt;Pulse Width for Trigger 2&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T3DL&amp;lt;TD&amp;gt;Delay Width for Trigger 3&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T3WD&amp;lt;TD&amp;gt;Pulse Width for Trigger 3&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T4DL&amp;lt;TD&amp;gt;Delay Width or Trigger 4&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T4WD&amp;lt;TD&amp;gt;Pulse Width for Trigger 4&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T5DL&amp;lt;TD&amp;gt;Delay width for Trigger 5&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T5WD&amp;lt;TD&amp;gt;Pulse Width for Trigger 5&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T1TD&amp;lt;TD&amp;gt;Trigger 1 Trailing Delay&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T1LD&amp;lt;TD&amp;gt;Trigger 1 Leading Delay&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T2TD&amp;lt;TD&amp;gt;Trigger 2 Trailing Delay &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T2LD&amp;lt;TD&amp;gt;Trigger 2 Leading Delay&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T3TD&amp;lt;TD&amp;gt;Trigger 3 Trailing Delay&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T3LD&amp;lt;TD&amp;gt;Trigger 3 Leading Delay&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T4TD&amp;lt;TD&amp;gt;Trigger 4 Trailing Delay&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T4LD&amp;lt;TD&amp;gt;Trigger 4 Leading Delay&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T5TD&amp;lt;TD&amp;gt;Trigger 5 Trailing Delay&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;T5LD&amp;lt;TD&amp;gt;Trigger 5 Leading Delay&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;TDIS&amp;lt;TD&amp;gt;Timing Pulse Disable&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MAIN&amp;lt;TD&amp;gt;Maintain on Reboot &amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RDT1&amp;lt;TD&amp;gt;Reboot Delay of 1 &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RDW1&amp;lt;TD&amp;gt;Reboot Width of 1 &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Subroutine&amp;diff=1543</id>
		<title>RRM 3-14 Subroutine</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Subroutine&amp;diff=1543"/>
		<updated>2008-04-18T18:47:38Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= sub - Subroutine =&lt;br /&gt;
&lt;br /&gt;
The subroutine record is used to call a C initialization routine and a recurring scan routine. There is no device support for this record. &lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields fall into several categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* subroutine connection parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
* monitor parameters&lt;br /&gt;
* run-time parameters.&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The subroutine record has the standard fields for specifying under what circumstances it will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used.&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The subroutine record has twelve input links (INPA-INPL), each of which has a corresponding value field (A-L). These fields are used to retrieve and store values that can be passed to the subroutine that the record calls.&lt;br /&gt;
&lt;br /&gt;
The input links can be either channel access or database links, or constants. When constants, the corresponding value field for the link is initialized with the constant value and the field's value can be changed at run-time via dbPuts. Otherwise, the values for (A-F) are fetched from the input links when the record is processed. See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on specifying links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPC&amp;lt;TD&amp;gt;Input C&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPD&amp;lt;TD&amp;gt;Input D&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPE&amp;lt;TD&amp;gt;Input E&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPF&amp;lt;TD&amp;gt;Input F&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPG&amp;lt;TD&amp;gt;Input G&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPH&amp;lt;TD&amp;gt;Input H&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPI&amp;lt;TD&amp;gt;Input F&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPJ&amp;lt;TD&amp;gt;Input H&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPK&amp;lt;TD&amp;gt;Input K&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPL&amp;lt;TD&amp;gt;Input L&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;A&amp;lt;TD&amp;gt;Value for A&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B&amp;lt;TD&amp;gt;B Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;C&amp;lt;TD&amp;gt;C Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;D&amp;lt;TD&amp;gt;D Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;E&amp;lt;TD&amp;gt;E Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;F&amp;lt;TD&amp;gt;F Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;G&amp;lt;TD&amp;gt;G Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;H&amp;lt;TD&amp;gt;H Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;I&amp;lt;TD&amp;gt;I Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;J&amp;lt;TD&amp;gt;J Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;K&amp;lt;TD&amp;gt;K Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;L&amp;lt;TD&amp;gt;L Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes/No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Subroutine Connection ===&lt;br /&gt;
&lt;br /&gt;
These fields are used to connect to the C subroutine. The name of the subroutine should be entered in the SNAM field. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INAM&amp;lt;TD&amp;gt;Initialization Name &amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SNAM&amp;lt;TD&amp;gt;Subroutine Name&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. They display the value and other parameters of the subroutine either textually or graphically.&lt;br /&gt;
&lt;br /&gt;
EGU is a string of up to 16 characters that could describe any units used by the subroutine record. It is retrieved by the &amp;lt;CODE&amp;gt;get_units&amp;lt;/CODE&amp;gt; record support routine.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields set the upper and lower display limits for the VAL, A-L, LA-LL, HIHI, LOLO, LOW, and HIGH fields. Both the &amp;lt;CODE&amp;gt;get_graphic_double&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;get_control_double&amp;lt;/CODE&amp;gt; record support routines retrieve these fields.&lt;br /&gt;
&lt;br /&gt;
The PREC field determines the floating point precision with which to display VAL. It is used whenever the &amp;lt;CODE&amp;gt;get_precision&amp;lt;/CODE&amp;gt; record support routine is called.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for subroutine records are the SCAN, READ, limit alarms, and an alarm that can be triggered if the subroutine returns a negative value. The SCAN and READ alarms are called by the record or device support routines. The limit alarms are configured by the user in the HIHI, LOLO, HIGH, and LOW fields using numerical values. They apply to the VAL field. For each of these fields, there is a corresponding severity field which can be either NO_ALARM, MINOR, or MAJOR.&lt;br /&gt;
&lt;br /&gt;
The BRSV field is where the user can set the alarm severity in case the subroutine returns a negative value. See [[RRM 3-13 Concepts#Alarm Specification|Alarm Specification]] for a complete explanation of alarms and these fields. [[RRM 3-13 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;TD&amp;gt;Hihi Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;TD&amp;gt;High Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;TD&amp;gt;Low Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;TD&amp;gt;Lolo Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BRSV&amp;lt;TD&amp;gt;Severity for a subroutine return value less than 0.&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine when to send monitors placed on the VAL field. The appropriate monitors are invoked when VAL differs from the values in the ALST and MLST run-time fields, i.e., when the value of VAL changes by more than the deadband specified in these fields. The ADEL and MDEL fields specify a minimum delta which the change must surpass before the value-change monitors are invoked. If these fields have a value of zero, everytime the value changes, a monitor will be triggered; if they have a value of -1, everytime the record is processed, monitors are triggered. The ADEL field is used by archive monitors and the MDEL field for all other types of monitors. See [[RRM 3-13 Concepts#Monitor Specification|Monitor Specification]] for a complete explanation of monitors and deadbands.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the subroutine record. They are not configured using a database configuration tool. They represent the current state of the record. Many of them are used by the record processing routines or the monitors.&lt;br /&gt;
&lt;br /&gt;
VAL should be set by the subroutine. SADR holds the subroutine address and is set by the record processing routine. STYP, the subroutine symbol type, is also set by the record processing routine.&lt;br /&gt;
&lt;br /&gt;
The rest of these fields--LALM, ALST, MLST, and the LA-LL fields--are used to implement the monitors. For example, when LA is not equal to A, the value-change monitors are called for that field.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SADR&amp;lt;TD&amp;gt;Subroutine Address &amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STYP&amp;lt;TD&amp;gt;Subroutine Symbol Type&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;TD&amp;gt;Last Alarm Monitor Trigger Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;TD&amp;gt;Last Archiver Monitor Trigger Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;TD&amp;gt;Last Value Change Monitor Trigger Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LA&amp;lt;TD&amp;gt;Last A Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LB&amp;lt;TD&amp;gt;Last B Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LC&amp;lt;TD&amp;gt;Last C Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LD&amp;lt;TD&amp;gt;Last D Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LE&amp;lt;TD&amp;gt;Last E Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LF&amp;lt;TD&amp;gt;Last F Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LG&amp;lt;TD&amp;gt;Last G Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LH&amp;lt;TD&amp;gt;Last H Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LI&amp;lt;TD&amp;gt;Last I Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LJ&amp;lt;TD&amp;gt;Last J Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LK&amp;lt;TD&amp;gt;Last K Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;TD&amp;gt;Last L Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant value. For each input link that is of type PV_LINK, a channel access link is created.&lt;br /&gt;
&lt;br /&gt;
If an initialization subroutine is defined, it is located and called.&lt;br /&gt;
&lt;br /&gt;
The processing subroutine is located and its address and type stored in SADR and STYP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC when VAL is the field being referenced. Otherwise, calls &amp;lt;CODE&amp;gt;recGblGetPrec()&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field is VAL, A-L, LA-LL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the field is VAL, A-L, LA-LL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
 upper_alarm_limit = HIHI&lt;br /&gt;
 upper_warning_limit = HIGH&lt;br /&gt;
 lower_warning_limit = LOW&lt;br /&gt;
 lower_alarm_limit = LOLO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# If PACT is FALSE then fetch all arguments.&lt;br /&gt;
# Call the subroutine and check return value.&lt;br /&gt;
#* Call subroutine&lt;br /&gt;
#* Set PACT TRUE&lt;br /&gt;
#* If return value is 1, return&lt;br /&gt;
# Check alarms. This routine checks to see if the new VAL causes the alarm status and severity to change. If so, NSEV, NSTA and LALM are set. It also honors the alarm hysteresis factor (HYST). Thus the value must change by more than HYST before the alarm status and severity is lowered.&lt;br /&gt;
# Check to see if monitors should be invoked.&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* Archive and value change monitors are invoked if ADEL and MDEL conditions are met.&lt;br /&gt;
#* Monitors for A-L are invoked if value has changed.&lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
=== Example Synchronous Subroutine ===&lt;br /&gt;
&lt;br /&gt;
This is an example subroutine that merely increments VAL each time process is called.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;amp;lt;vxWorks.h&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;types.h&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;stdioLib.h&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;dbDefs.h&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;subRecord.h&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;dbCommon.h&amp;amp;gt;&lt;br /&gt;
 #include &amp;amp;lt;recSup.h&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 long subInit(struct subRecord *psub)&lt;br /&gt;
 {&lt;br /&gt;
     printf(&amp;amp;quot;subInit was called\n&amp;amp;quot;);&lt;br /&gt;
     return(0);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 long subProcess(struct subRecord *psub)&lt;br /&gt;
 {&lt;br /&gt;
     psub-&amp;amp;gt;val++;&lt;br /&gt;
     return(0);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Example Asynchronous Subroutine ===&lt;br /&gt;
&lt;br /&gt;
This example shows an asynchronous subroutine. It uses (actually misuses) fields A and B. Field A is taken as the number of seconds until asynchronous completion. Field B is a flag to decide if messages should be printed. Lets assume A &amp;amp;gt; 0 and B = 1. The following sequence of actions will occcur:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# subProcess is called with pact FALSE. It performs the following steps.&lt;br /&gt;
#* Computes, from A, the number of ticks until asynchronous completion should occur.&lt;br /&gt;
#* Prints a message stating that it is requesting an asynchronous callback.&lt;br /&gt;
#* Calls the vxWorks watchdog start routine.&lt;br /&gt;
#* Sets pact TRUE and returns a value of 0. This tells record support to complete without checking alarms, monitors, or the forward link.&lt;br /&gt;
# When the time expires, the system wide callback task calls myCallback. myCallback locks the record, calls process, and unlocks the record.&lt;br /&gt;
# Process again calls subProcess, but now pact is TRUE. Thus the following is done:&lt;br /&gt;
#* VAL is incremented.&lt;br /&gt;
#* A completion message is printed.&lt;br /&gt;
#* subProcess returns 0. The record processing routine will complete record processing.&lt;br /&gt;
&lt;br /&gt;
 #include   &amp;amp;lt;vxWorks.h&amp;amp;gt;&lt;br /&gt;
 #include   &amp;amp;lt;types.h&amp;amp;gt;&lt;br /&gt;
 #include   &amp;amp;lt;stdioLib.h&amp;amp;gt;&lt;br /&gt;
 #include   &amp;amp;lt;wdLib.h&amp;amp;gt;&lt;br /&gt;
 #include   &amp;amp;lt;callback.h&amp;amp;gt;&lt;br /&gt;
 #include   &amp;amp;lt;dbDefs.h&amp;amp;gt;&lt;br /&gt;
 #include   &amp;amp;lt;dbAccess.h&amp;amp;gt;&lt;br /&gt;
 #include   &amp;amp;lt;subRecord.h&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 /* control block for callback*/&lt;br /&gt;
 struct callback {&lt;br /&gt;
     CALLBACK   callback;&lt;br /&gt;
     struct dbCommon *precord;&lt;br /&gt;
     WDOG_ID wd_id;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 void myCallback(struct callback *pcallback)&lt;br /&gt;
 {&lt;br /&gt;
     struct dbCommon *precord=pcallback-&amp;amp;gt;precord;&lt;br /&gt;
     struct rset  *prset=(struct rset *)(precord-&amp;amp;gt;rset);&lt;br /&gt;
     dbScanLock(precord);&lt;br /&gt;
     (*prset-&amp;amp;gt;process)(precord);&lt;br /&gt;
     dbScanUnlock(precord);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 long subInit(struct subRecord *psub)&lt;br /&gt;
 {&lt;br /&gt;
     struct callback *pcallback;&lt;br /&gt;
     pcallback = (struct callback *)(calloc(1,sizeof(struct callback)));&lt;br /&gt;
     psub-&amp;amp;gt;dpvt = (void *)pcallback;&lt;br /&gt;
     callbackSetCallback(myCallback,pcallback);&lt;br /&gt;
     pcallback-&amp;amp;gt;precord = (struct dbCommon *)psub;&lt;br /&gt;
     pcallback-&amp;amp;gt;wd_id = wdCreate();&lt;br /&gt;
     printf(&amp;amp;quot;subInit was called\n&amp;amp;quot;);&lt;br /&gt;
     return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 long subProcess(struct subRecord *psub)&lt;br /&gt;
 {&lt;br /&gt;
     struct callback *pcallback=(struct callback *)(psub-&amp;amp;gt;dpvt);&lt;br /&gt;
     /* sub.inp must be a CONSTANT*/&lt;br /&gt;
     if (psub-&amp;amp;gt;pact) {&lt;br /&gt;
         psub-&amp;amp;gt;val++;&lt;br /&gt;
         if (psub-&amp;amp;gt;b)&lt;br /&gt;
         printf(&amp;amp;quot;%s subProcess Completed\n&amp;amp;quot;, psub-&amp;amp;gt;name);&lt;br /&gt;
         return 0;&lt;br /&gt;
     } else {&lt;br /&gt;
         int wait_time = (long)(psub-&amp;amp;gt;a * vxTicksPerSecond);&lt;br /&gt;
         if (wait_time &amp;amp;lt;= 0){&lt;br /&gt;
             if (psub-&amp;amp;gt;b)&lt;br /&gt;
                 printf(&amp;amp;quot;%s subProcess sync processing\n&amp;amp;quot;, psub-&amp;amp;gt;name);&lt;br /&gt;
             psub-&amp;amp;gt;pact = TRUE;&lt;br /&gt;
             return 0;&lt;br /&gt;
         }&lt;br /&gt;
         if (psub-&amp;amp;gt;b){&lt;br /&gt;
             callbackSetPriority(psub-&amp;amp;gt;prio, pcallback);&lt;br /&gt;
             printf(&amp;amp;quot;%s Starting async processing\n&amp;amp;quot;, psub-&amp;amp;gt;name);&lt;br /&gt;
             wdStart(pcallback-&amp;amp;gt;wd_id, wait_time, callbackRequest, (int)pcallback);&lt;br /&gt;
             return 1;&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
     return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_SubArray&amp;diff=1542</id>
		<title>RRM 3-14 SubArray</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_SubArray&amp;diff=1542"/>
		<updated>2008-04-18T18:47:07Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= subArray =&lt;br /&gt;
&lt;br /&gt;
The normal use for the subArray record type is to obtain sub-arrays from waveform records. Setting either the number of elements (NELM) or index (INDX) fields causes the record to be processed anew so that applications in which the length and position of a sub-array in a waveform record vary dynamically can be implemented using standard EPICS operator interface tools.&lt;br /&gt;
&lt;br /&gt;
The first element of the sub-array, that at location INDX in the referenced waveform record, can be displayed as a scalar, or the entire subarray (of length NELM) can be displayed in the same way as a waveform record. If there are fewer than NELM elements in the referenced waveform after the INDX, only the number of elements actually available are returned, and the number of elements read field (NORD) is set to reflect this. This record type does not support writing new values into waveform records.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The subArray's fields fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* array parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* run-time parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The subArray record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used.&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The subArray's input link (INP) should be configured to reference the Waveform record. It should specify the VAL field of a Waveform record. The INP field can be a channel access link, in addition to a database link. See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on specifying links.&lt;br /&gt;
&lt;br /&gt;
In addition, the DTYP field must specify a device support module. Currently, the only device support module is &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INP&amp;lt;TD&amp;gt;Input Link&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Array Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters determine the number of array elements (the array length) and the data type of those elements. The Field Type of Value (FTVL) field determines the data type of the array.&lt;br /&gt;
&lt;br /&gt;
The user specifies the maximum number of elements allowed in the subarray in the MALM field. Generally, the number should be equal to the number of elements of the Waveform array (found in the Waveform's NELM field). The MALM field is used to allocate memory. The subArray's Number of Elements (NELM) field is where the user specifies the actual number of elements that the subArray will contain. It should of course be no greater than MALM; if it is, the record processing routine sets it equal to MALM.&lt;br /&gt;
&lt;br /&gt;
The INDX field determines the offset of the subArray record's array in relation to the Waveform's. For instance, if INDX is 2, then the subArray will read NELM elements starting with the third element of the Waveform's array. Thus, it equals the index number of the Waveform's array.&lt;br /&gt;
&lt;br /&gt;
The actual sub-array is referenced by the VAL field.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FTVL&amp;lt;TD&amp;gt;Field Type of Value&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;(See FTVL)&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MALM&amp;lt;TD&amp;gt;Maximum Number of Elements In Sub-array&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NELM&amp;lt;TD&amp;gt;Number of Elements In Sub-array&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INDX&amp;lt;TD&amp;gt;Index Into Referenced Array &amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. They display the value and other parameters of the subarray record either textually or graphically.&lt;br /&gt;
&lt;br /&gt;
EGU is a string of up to 16 characters describing the engineering units (if any) of the values which the subArray holds. It is retrieved by the &amp;lt;CODE&amp;gt;get_units&amp;lt;/CODE&amp;gt; record support routine.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields set the upper and lower display limits for the sub-array elements. Both the &amp;lt;CODE&amp;gt;get_graphic_double&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;get_control_double&amp;lt;/CODE&amp;gt; record support routines retrieve these fields.&lt;br /&gt;
&lt;br /&gt;
The PREC field determines the floating point precision with which to display VAL. It is used whenever the &amp;lt;CODE&amp;gt;get_precision&amp;lt;/CODE&amp;gt; record support routine is called.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The subarray record has the alarm parameters common to all record types. [[RRM 3-13 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields are not configurable by the user. They are used for the record's internal processing or to represent the current state of the record.&lt;br /&gt;
&lt;br /&gt;
The NORD field holds a counter of the number of elements read into the array. It can be less than NELM even after the array is full if NELM exceeds the number of existing elements in the referenced array, i.e., the Waveform's array.&lt;br /&gt;
&lt;br /&gt;
BPTR contains a pointer to the record's array.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NORD   &amp;lt;TD&amp;gt;Number of Elements Read&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BPTR&amp;lt;TD&amp;gt;Buffer Pointer&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
Using MALM and FTVL, space for the array is allocated. The array address is stored in BPTR. This routine checks to see that device support is available and a device support read routine is defined. If either does not exist, an error message is issued and processing is terminated. If device support includes init_record, it is called.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to the sub-array.&lt;br /&gt;
&lt;br /&gt;
==== cvt_dbaddr ====&lt;br /&gt;
&lt;br /&gt;
This is called by dbNameToAddr. It makes the dbAddr structure refer to the actual buffer holding the result.&lt;br /&gt;
&lt;br /&gt;
==== get_array_info ====&lt;br /&gt;
&lt;br /&gt;
Retrieves NELM.&lt;br /&gt;
&lt;br /&gt;
==== put_array_info ====&lt;br /&gt;
&lt;br /&gt;
Sets NORD.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
For the elements in the array, this routine routines HOPR and LOPR. For the INDX field, this routine returns MALM - 1 and 0. For NELM, it returns MALM and 1. For other fields, it calls &amp;lt;CODE&amp;gt;recGblGetGraphicDouble()&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
For array elements, this routine retrieves HOPR and LOPR. Otherwise, &amp;lt;CODE&amp;gt;recGblGetControlDouble()&amp;lt;/CODE&amp;gt; is called.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_prec ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# Check to see that the appropriate device support module exists. If it doesn't, an error message is issued and processing is terminated with the PACT field still set to TRUE. This ensures that processes will no longer be called for this record. Thus error storms will not occur.&lt;br /&gt;
# Sanity check NELM and INDX. If NELM is greater than MALM it is set to MALM. If INDX is greater than or equal to MALM it is set to MALM-1.&lt;br /&gt;
# Call device support read routine. This routine is expected to place the desired sub-array at the beginning of the buffer and set NORD to the number of elements of the sub-array that were read.&lt;br /&gt;
# If PACT has been changed to TRUE, the device support read routine has started but has not completed writing the new value. In this case, the processing routine merely returns, leaving PACT TRUE. Otherwise, process sets PACT TRUE at this time. This asynchronous processing logic is not currently used but has been left in place.&lt;br /&gt;
# Check to see if monitors should be invoked. &lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* Archive and value change monitors are always invoked.&lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PACT&amp;lt;TD&amp;gt;Processing Active&amp;lt;TD rowspan=5&amp;gt;See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for an explanation of these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DPVT&amp;lt;TD&amp;gt;Device Private&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;UDF&amp;lt;TD&amp;gt;VAL Undefined&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSEV&amp;lt;TD&amp;gt;New Alarm Severity&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSTA&amp;lt;TD&amp;gt;New Alarm Status&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INP&amp;lt;TD&amp;gt;Input Link&amp;lt;TD&amp;gt;This field is used by the device support routines to locate its input.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FTVL&amp;lt;TD&amp;gt;Field Type of Value&amp;lt;TD&amp;gt;This is DBF_STRING, ... ,DBF_ENUM. The device support routine should check that this is correctly defined.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MALM&amp;lt;TD&amp;gt;Maximum Number Of Elements in Sub-array&amp;lt;TD&amp;gt;Number of elements that will fit in the array the record allocates. Device support must never return more elements than this.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NELM&amp;lt;TD&amp;gt;Number Sub-array Elements&amp;lt;TD&amp;gt;Number of elements in desired sub-array.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INDX&amp;lt;TD&amp;gt;Index Into Referenced Array&amp;lt;TD&amp;gt;Index of beginning of desired sub-array in source array.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BPTR&amp;lt;TD&amp;gt;Buffer Pointer&amp;lt;TD&amp;gt;Address of array device support must copy the source array into.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NORD&amp;lt;TD&amp;gt;Number Of Elements Read&amp;lt;TD&amp;gt;Device support must set this value when it completes. &lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== report ====&lt;br /&gt;
&lt;br /&gt;
 report(FILE fp, paddr)&lt;br /&gt;
&lt;br /&gt;
not currently used.&lt;br /&gt;
&lt;br /&gt;
==== init ====&lt;br /&gt;
&lt;br /&gt;
 init()&lt;br /&gt;
&lt;br /&gt;
Not currently used.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the record support init_record routine.&lt;br /&gt;
&lt;br /&gt;
==== read_sa ====&lt;br /&gt;
&lt;br /&gt;
 read_sa(precord)&lt;br /&gt;
&lt;br /&gt;
Enough of the source waveform is read into BPTR, from the beginning of the source, to include the requested sub-array. The sub-array is then copied to the beginning of the buffer. NORD is set to indicate how many elements of the sub-array were acquired.&lt;br /&gt;
&lt;br /&gt;
=== Device Support For Soft Records ===&lt;br /&gt;
&lt;br /&gt;
Only the device support module &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; is currently provided. The INP link type must be either DB_LINK or CA_LINK.&lt;br /&gt;
&lt;br /&gt;
==== Soft Channel ====&lt;br /&gt;
&lt;br /&gt;
INP is expected to point to a waveform record.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_String_Output&amp;diff=1541</id>
		<title>RRM 3-14 String Output</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_String_Output&amp;diff=1541"/>
		<updated>2008-04-18T18:46:35Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= stringout -- String Output =&lt;br /&gt;
&lt;br /&gt;
The stringout record is used to write an arbitrary ASCII string of up to 40 characters to other records or software variables.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* desired output parameters&lt;br /&gt;
* write parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* run-time parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The string output record has the standard fields for specifying under what circumstances it will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used.&lt;br /&gt;
&lt;br /&gt;
=== Desired Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The string output record must specify from where it gets its desired output string. The first field that determines where the desired output originates is the output mode select (OSML) field, which can have two possible value: &amp;lt;CODE&amp;gt;closed_loop&amp;lt;/CODE&amp;gt; or &amp;lt;CODE&amp;gt;supervisory&amp;lt;/CODE&amp;gt;. If &amp;lt;CODE&amp;gt;supervisory&amp;lt;/CODE&amp;gt; is specified, DOL is ignored, the current value of VAL is written, and the VAL can be changed externally via dbPuts at run-time. If &amp;lt;CODE&amp;gt;closed_loop&amp;lt;/CODE&amp;gt; is specified, the VAL field's value is obtained from the address specified in the desired output location field (DOL) which can be either a database link or a channel access link.&lt;br /&gt;
&lt;br /&gt;
DOL can also be a constant in addition to a link, in which case VAL is initialized to the constant value. Note that if DOL is a constant, OMSL cannot be &amp;lt;CODE&amp;gt;closed_loop.&amp;lt;/CODE&amp;gt; See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on specifying links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt; Value Field &amp;lt;TD&amp;gt;STRING [40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL &amp;lt;TD&amp;gt;Desired Output Location (Input Link) &amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OMSL&amp;lt;TD&amp;gt;Output Mode Select &amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Write Parameters ===&lt;br /&gt;
&lt;br /&gt;
The output link specified in the OUT field specifies where the string output record is to write its string. The link can be a database or channel access link. If the OUT field is a constant, no output will be written. See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on specifying links.&lt;br /&gt;
&lt;br /&gt;
In addition, the appropriate device support module must be entered into the DTYP field. All string output records must specify a device support module. The user can see a list of the device support modules currently supported at the user's local site by using the &amp;lt;CODE&amp;gt;dbst&amp;lt;/CODE&amp;gt; utility (R3.13).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;TD&amp;gt;Output Link &amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. These fields are used to display the value and other parameters of the string output either textually or graphically.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for the string output record are the SCAN, READ, and INVALID alarms. The severity of the first two is always MAJOR and not configurable.&lt;br /&gt;
&lt;br /&gt;
The IVOA field specifies an action to take when the INVALID alarm is triggered. There are three possible actions: &amp;lt;CODE&amp;gt;Continue normally&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Don't drive outputs&amp;lt;/CODE&amp;gt;, and &amp;lt;CODE&amp;gt;Set output to IVOV&amp;lt;/CODE&amp;gt;. When &amp;lt;CODE&amp;gt;Set output to IVOV&amp;lt;/CODE&amp;gt;, the value contained in the IVOV field is written to the output link during an alarm condition. See [[RRM 3-13 Common#Invalid Alarm Output Action|Invalid Alarm Output Action]] for more information on the IVOA and IVOV fields. [[RRM 3-13 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOA&amp;lt;TD&amp;gt;Invalid Alarm Output Action&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOV&amp;lt;TD&amp;gt;Invalid Alarm Output Value, in eng. units&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time and Simulation Mode Parameters ===&lt;br /&gt;
&lt;br /&gt;
The old value field (OVAL) of the string input is used to implement value change monitors for VAL. If VAL is not equal to OVAL, then monitors are triggered.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OVAL&amp;lt;TD&amp;gt;Output Value&amp;lt;TD&amp;gt;STRING [40]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following fields are used to operate the string output in the simulation mode. See [[RRM 3-13 Common#Simulation Mode|Simulation Mode]] for more information on these fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIOL&amp;lt;TD&amp;gt;Simulation Value Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVAL&amp;lt;TD&amp;gt;Simulation Value&amp;lt;TD&amp;gt;STRING [40]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIML&amp;lt;TD&amp;gt;Simulation Mode Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMM&amp;lt;TD&amp;gt;Simulation Mode&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMS&amp;lt;TD&amp;gt;Simulation Mode Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Three record support routines are provided: init_record, process, and get_value.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
This routine initializes SIMM if SIML is a constant or creates a channel access link if SIML is PV_LINK. If SIOL is PV_LINK a channel access link is created.&lt;br /&gt;
&lt;br /&gt;
This routine next checks to see that device support is available. The routine next checks to see if the device support write routine is defined. If either device support or the device support write routine does not exist, an error message is issued and processing is terminated.&lt;br /&gt;
&lt;br /&gt;
If DOL is a constant, then the type double constant, if non-zero, is converted to a string and stored into VAL and UDF is set to FALSE. If DOL type is a PV_LINK then dbCaAddInlink is called to create a channel access link.&lt;br /&gt;
&lt;br /&gt;
If device support includes init_record, it is called.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# Check to see that the appropriate device support module exists. If it doesn't, an error message is issued and processing is terminated with the PACT field still set to TRUE. This ensures that processes will no longer be called for this record. Thus error storms will not occur.&lt;br /&gt;
# If PACT is FALSE and OMSL is CLOSED_LOOP, recGblGetLinkValue is called to read the current value of VAL. See [[RRM 3-13 Common#Soft Output|Soft Output]]. If the return status of recGblGetLinkValue is zero then UDF is set to FALSE.&lt;br /&gt;
# Check severity and write the new value. See [[RRM 3-13 Common#Simulation Mode|Simulation Mode]] and [[RRM 3-13 Common#Invalid Alarm Output Action|Invalid Alarm Output Action]] for details on how the simulation mode and the INVALID alarm conditions affect output.&lt;br /&gt;
# If PACT has been changed to TRUE, the device support write output routine has started but has not completed writing the new value. In this case, the processing routine merely returns, leaving PACT TRUE.&lt;br /&gt;
# Check to see if monitors should be invoked.&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* Archive and value change monitors are invoked if OVAL is not equal to VAL. &lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
Each stringout output record must have an associated set of device support routines. The primary responsibility of the device support routines is to write a new value whenever write_stringout is called. The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PACT&amp;lt;TD&amp;gt;Processing Active Field&amp;lt;TD rowspan=4&amp;gt;See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for an explanation of these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DPVT&amp;lt;TD&amp;gt;Device Private&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSEV&amp;lt;TD&amp;gt;New Alarm Severity&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSTA&amp;lt;TD&amp;gt;New Alarm Status&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value&amp;lt;TD&amp;gt;This is the field written by the device support routines.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;TD&amp;gt;Output Link&amp;lt;TD&amp;gt;This field is used by the device support routines to locate its output.&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== report ====&lt;br /&gt;
&lt;br /&gt;
 report(FILE fp, paddr)&lt;br /&gt;
&lt;br /&gt;
Not currently used.&lt;br /&gt;
&lt;br /&gt;
==== init ====&lt;br /&gt;
&lt;br /&gt;
 init()&lt;br /&gt;
&lt;br /&gt;
This routine is called once during IOC initialization.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is optional. If provided, it is called by the record support init_record routine.&lt;br /&gt;
&lt;br /&gt;
==== get_ioint_info ====&lt;br /&gt;
&lt;br /&gt;
 get_ioint_info(int cmd,struct dbCommon *precord,IOSCANPVT *ppvt)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the ioEventScan system each time the record is added or deleted from an I/O event scan list. cmd has the value (0,1) if the record is being (added to, deleted from) an I/O event list. It must be provided for any device type that can use the ioEvent scanner.&lt;br /&gt;
&lt;br /&gt;
==== write_stringout ====&lt;br /&gt;
&lt;br /&gt;
 write_stringout(precord)&lt;br /&gt;
&lt;br /&gt;
This routine must output a new value. It returns the following values:&lt;br /&gt;
&lt;br /&gt;
* 0:   Success.&lt;br /&gt;
* Other:   Error. &lt;br /&gt;
&lt;br /&gt;
=== Device Support for Soft Records ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support module writes the current value of VAL.&lt;br /&gt;
&lt;br /&gt;
If the OUT link type is PV_LINK, then dbCaAddInlink is called by init_record.&lt;br /&gt;
&lt;br /&gt;
write_so calls recGblPutLinkValue to write the current value of VAL. See [[RRM 3-13 Common#Soft Output|Soft Output]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_String_Input&amp;diff=1540</id>
		<title>RRM 3-14 String Input</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_String_Input&amp;diff=1540"/>
		<updated>2008-04-18T18:46:01Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= stringin - String Input =&lt;br /&gt;
&lt;br /&gt;
The string input record retrieves an arbitrary ASCII string of up to 40 characters. Several device support routines are available, all of which are soft device support for retrieving values from other records or other software components.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields fall into the following categories.&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* run-time and simulation mode parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The string input record has the standard fields for specifying under what circumstances it will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used.&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The INP field determines where the string input record gets its string. It can be a database or channel access link, or a constant. If constant, the VAL field is initialized with the constant and can be changed via dbPuts. Otherwise, the string is read from the specified location each time the record is processed and placed in the VAL field. The maximum number of characters that the string in VAL can be is 40. In addition, the appropriate device support module must be entered into the DTYP field.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on specifying links. The user can see a list of the device support modules currently supported at the user's local site by using the &amp;lt;CODE&amp;gt;dbst&amp;lt;/CODE&amp;gt; utility (R3.13).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value&amp;lt;TD&amp;gt;STRING [40]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INP&amp;lt;TD&amp;gt;Input Link&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The string input record has the alarm parameters common to all record types. [[RRM 3-13 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
=== Run-time and Simulation Mode Parameters ===&lt;br /&gt;
&lt;br /&gt;
The old value field (OVAL) of the string input is used to implement value change monitors for VAL. If VAL is not equal to OVAL, then monitors are triggered.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OVAL&amp;lt;TD&amp;gt;Output Value&amp;lt;TD&amp;gt;STRING&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following fields are used to operate the string input in the simulation mode. See [[RRM 3-13 Common#Simulation Mode|Simulation Mode]] for more information on simulation mode fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIOL&amp;lt;TD&amp;gt;Simulation Value Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVAL&amp;lt;TD&amp;gt;Simulation Value&amp;lt;TD&amp;gt;STRING [40]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIML&amp;lt;TD&amp;gt;Simulation Mode Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMM&amp;lt;TD&amp;gt;Simulation Mode&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMS&amp;lt;TD&amp;gt;Simulation Mode Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Three record support routines are provided: init_record, process, and get_value.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
This routine initializes SIMM with the value of SIML if SIML type is CONSTANT link or creates a channel access link if SIML type is PV_LINK. SVAL is likewise initialized if SIOL is CONSTANT or PV_LINK.&lt;br /&gt;
&lt;br /&gt;
This routine next checks to see that device support is available and a record support read routine is defined. If either does not exist, an error message is issued and processing is terminated.&lt;br /&gt;
&lt;br /&gt;
If device support includes init_record, it is called.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# Check to see that the appropriate device support module exists. If it doesn't, an error message is issued and processing is terminated with the PACT field still set to TRUE. This ensures that processes will no longer be called for this record. Thus error storms will not occur.&lt;br /&gt;
# readValue is called. See [[RRM 3-13 Common#Simulation Mode|Simulation Mode]] for more information on simulation mode fields and how they affect input.&lt;br /&gt;
# If PACT has been changed to TRUE, the device support read routine has started but has not completed reading a new input value. In this case, the processing routine merely returns, leaving PACT TRUE.&lt;br /&gt;
# TIME is set to tslocaltime&lt;br /&gt;
# Check to see if monitors should be invoked.&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* Archive and value change monitors are invoked if OVAL is not equal to VAL. &lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
Each stringin input record must have an associated set of device support routines. The primary responsibility of the device support routines is to obtain a new ASCII string value whenever read_stringin is called. The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PACT&amp;lt;TD&amp;gt;Processing Active&amp;lt;TD rowspan=3&amp;gt;See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for an explanation of these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DPVT&amp;lt;TD&amp;gt;Device Private&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;UDF&amp;lt;TD&amp;gt;VAL Undefined&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value&amp;lt;TD&amp;gt;This field is set by the device support routines.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INP&amp;lt;TD&amp;gt;Input Link.&amp;lt;TD&amp;gt;This field is used by the device support routines to locate its input.&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== report ====&lt;br /&gt;
&lt;br /&gt;
 report(FILE fp, paddr)&lt;br /&gt;
&lt;br /&gt;
Not currently used.&lt;br /&gt;
&lt;br /&gt;
==== init ====&lt;br /&gt;
&lt;br /&gt;
 init()&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is optional. If provided, it is called by the record support init_record routine.&lt;br /&gt;
&lt;br /&gt;
==== get_ioint_info ====&lt;br /&gt;
&lt;br /&gt;
 get_ioint_info(int cmd,struct dbCommon *precord,IOSCANPVT *ppvt)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the ioEventScan system each time the record is added or deleted from an I/O event scan list. cmd has the value (0,1) if the record is being (added to, deleted from) an I/O event list. It must be provided for any device type that can use the ioEvent scanner.&lt;br /&gt;
&lt;br /&gt;
==== read_stringin ====&lt;br /&gt;
&lt;br /&gt;
 read_stringin(precord)&lt;br /&gt;
&lt;br /&gt;
This routine must provide a new input value. It returns the following values:&lt;br /&gt;
&lt;br /&gt;
* 0: Success. A new ASCII string is stored into VAL.&lt;br /&gt;
* Other: Error.&lt;br /&gt;
&lt;br /&gt;
=== Device Support For Soft Records ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; module places a value directly in VAL.&lt;br /&gt;
&lt;br /&gt;
If the INP link type is constant, the double constant, if non-zero, is converted to a string and stored into VAL by init_record, and UDF is set to FALSE. If the INP link type is PV_LINK, then dbCaAddInlink is called by init_record.&lt;br /&gt;
&lt;br /&gt;
read_stringin calls recGblGetLinkValue to read the current value of VAL. See [[RRM 3-13 Common#Soft Input|Soft Input]].&lt;br /&gt;
&lt;br /&gt;
If the return status of recGblGetLinkValue is zero, then read_stringin sets UDF to FALSE. The status of recGblGetLinkValue is returned.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Stepper_Motor&amp;diff=1539</id>
		<title>RRM 3-14 Stepper Motor</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Stepper_Motor&amp;diff=1539"/>
		<updated>2008-04-18T18:45:24Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= steppermotor - Stepper Motor =&lt;br /&gt;
&lt;br /&gt;
The stepper motor record controls and monitors stepper motors. The stepper motor can be controlled in either ''position'' mode or ''velocity'' mode. Position mode moves a device to a position. Velocity mode causes the motor to revolve continuously.&lt;br /&gt;
&lt;br /&gt;
The record is set up assuming that the same stepper motor will not be used in both velocity and position mode. The fields for the stepper motor record fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* setup parameters&lt;br /&gt;
* desired output parameters&lt;br /&gt;
* output and readback parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
* monitor parameters&lt;br /&gt;
run-time parameters.&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The stepper motor record has the standard fields for specifying under what circumstances the record will be processed. A motor record that is scanned periodically or on event will compare its actual position to the desired position and will attempt to achieve its position. It will only make a certain number of attempts; the number of attempts is specified in the retry (RTRY) field. A passive motor will not go through the retry logic.&lt;br /&gt;
&lt;br /&gt;
These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Note that I/O event scanning is only supported for those card types that interrupt.&lt;br /&gt;
&lt;br /&gt;
=== Setup Parameters ===&lt;br /&gt;
&lt;br /&gt;
The set-up parameters determine how the stepper motor is initialized and how it operates at run-time.&lt;br /&gt;
&lt;br /&gt;
The MODE field has two choices: &amp;lt;CODE&amp;gt;Velocity&amp;lt;/CODE&amp;gt; or &amp;lt;CODE&amp;gt;Position&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The VELO field determines the velocity that the stepper motor will run at when in the velocity mode. In position mode, it determines the pulses per second to move when it moves to a new position.&lt;br /&gt;
&lt;br /&gt;
The ACCL field determines the acceleration of the motor by specifying a number of seconds. In velocity mode, the stepper motor will accelerate at the rate needed to reach the operating velocity in the number of seconds specified in ACCL. In positional mode, ACCL determines the seconds the stepper motor will take to reach the specified velocity, and the number of seconds it will take to come to a stop at the new position.&lt;br /&gt;
&lt;br /&gt;
The MRES field specifies the number of pulses per revolution for the stepper motor, while ERES specifies the encoder pulses per revolution.&lt;br /&gt;
&lt;br /&gt;
The DIST field's value determines the distance which the stepper motor moves for each pulse in engineering units.&lt;br /&gt;
&lt;br /&gt;
The RTRY field specifies the number of attempts the record will make to reach the desired position each time it's processed, and the RDBD field specifies a deadband for this processing. Thus, when the motor is moving in a positive direction, no retries will be attempted unless the readback value is greater than VAL added to the value in the RDBD field. If the motor is moving in the negative direction, no retries will be attempted unless the readback value is less than VAL added to the value in the RDBD field:&lt;br /&gt;
&lt;br /&gt;
; if direction positive and RBV &amp;amp;gt; (VAL + RDBD)&lt;br /&gt;
: attempt to correct position &amp;lt;EM&amp;gt;RTRY&amp;lt;/EM&amp;gt; times&lt;br /&gt;
; if direction negative and RBV &amp;amp;lt; (VAL + RDBD)&lt;br /&gt;
: attempt to correct position &amp;lt;EM&amp;gt;RTRY&amp;lt;/EM&amp;gt; times&lt;br /&gt;
&lt;br /&gt;
The initialization algorithm (IALG) field has three algorithms to choose from: &amp;lt;CODE&amp;gt;No Initialization&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Move to the Positive Limit&amp;lt;/CODE&amp;gt;,&amp;lt;CODE&amp;gt; &amp;lt;/CODE&amp;gt;and&amp;lt;CODE&amp;gt; Move to the Negative Limit&amp;lt;/CODE&amp;gt;. The IVAL field determines the value of VAL at initialization; i.e., VAL is initialized to the value in IVAL when IALG is either Move to Positive or Move to Negative.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ACCL&amp;lt;TD&amp;gt; Seconds to Reach Velocity&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VELO&amp;lt;TD&amp;gt; Velocity in Pulses per Second&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DIST&amp;lt;TD&amp;gt; Distance in Engineering Units of 1 Pulse&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVAL&amp;lt;TD&amp;gt; Initial Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MODE&amp;lt;TD&amp;gt; Mode--Position/Velocity&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IALG&amp;lt;TD&amp;gt;Initialization Algorithm&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RTRY&amp;lt;TD&amp;gt;Number Of Retries Before Failure&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RDBD&amp;lt;TD&amp;gt;Retry Deadband&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MRES&amp;lt;TD&amp;gt;Motor Pulses per Revolution&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ERES&amp;lt;TD&amp;gt;Encoder Pulses per Revolution&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Desired Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The stepper motor record specifies where the desired output originates in the DOL field. The desired output needs to be in engineering units. If the output is controlled by the operator or a sequence program, nothing should be entered in the DOL field.&lt;br /&gt;
&lt;br /&gt;
The desired output link (DOL) and operation mode select (OMSL) fields work as they do for output records. If OMSL is &amp;lt;CODE&amp;gt;closed_loop&amp;lt;/CODE&amp;gt;, the desired output (VAL) is fetched from the DOL link, which can be a database or channel access link. If &amp;lt;CODE&amp;gt;supervisory&amp;lt;/CODE&amp;gt;, VAL can be changed via dbPuts. DOL can be a constant, in which case VAL is initialized to the constant. If DOL is a constant, OMSL cannot specify &amp;lt;CODE&amp;gt;closed_loop&amp;lt;/CODE&amp;gt;. See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on specifying links.&lt;br /&gt;
&lt;br /&gt;
VAL indicates the position of the stepper motor in position mode; in velocity mode, it indicates the current velocity. When the desired output is retrieved and placed in VAL, it is forced to be within the drive limits configured in the DRVH and DRVL fields. The DRVH and DRVL fields must be given values by the user. Note: If nothing is entered in the DRVH and DRVL fields, the motor will not move. The &amp;lt;CODE&amp;gt;get_control_double()&amp;lt;/CODE&amp;gt; record support routine returns the values in these fields when it is called.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL&amp;lt;TD&amp;gt;Desired Output Location (Input Link)&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OMSL&amp;lt;TD&amp;gt;Output Mode Select &amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Output and Readback Parameters ===&lt;br /&gt;
&lt;br /&gt;
In the OUT output link field, the user must enter the address of the I/O card of the device, and in the DTYP field, the user must enter the name of the appropriate stepper motor device support module. Be aware that the address format differs according to the I/O bus used. See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on hardware addresses. The user can see a list of the device support modules currently supported at the user's local site by using the &amp;lt;CODE&amp;gt;dbst&amp;lt;/CODE&amp;gt; utility in R3.13.&lt;br /&gt;
&lt;br /&gt;
The RDBL field can contain the address of an encoder or an external device, such as an LDVT, or it can specify the motor position field (MPOS) or the encoder position field (EPOS) in the same record. In the case of an external readback, the value would be read through an analog input record and linked to this record through this field. The value retrieved from this field is placed into the RBV field. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;TD&amp;gt;Output Link&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RDBL&amp;lt;TD&amp;gt;Read Back Location (an input link)&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RBV&amp;lt;TD&amp;gt;Read Back Value &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. These fields are used to display the value and other parameters of the stepper motor either textually or graphically.&lt;br /&gt;
&lt;br /&gt;
EGU is a string of up to 16 characters describing the engineering units of VAL. It is retrieved by the &amp;lt;CODE&amp;gt;get_units&amp;lt;/CODE&amp;gt; record support routine.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields set the upper and lower display limits for the VAL, HIHI, HIGH, LOW, LOLO, MPOS, EPOS, RBV, and LVAL fields. Only the &amp;lt;CODE&amp;gt;get_graphic_double&amp;lt;/CODE&amp;gt; record support routine retrieves these fields. If these values are defined, they must be in the range: DRVL&amp;amp;lt;=LOPR&amp;amp;lt;=HOPR&amp;amp;lt;=DRVH.&lt;br /&gt;
&lt;br /&gt;
The PREC field determines the floating point precision with which to display the VAL and LVAL fields. It is used whenever the &amp;lt;CODE&amp;gt;get_precision&amp;lt;/CODE&amp;gt; record support routine is called.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for stepper motor records are the SCAN, READ, and limit alarms. The SCAN and READ alarms are called by the record or device support routines and are always of MAJOR severity.&lt;br /&gt;
&lt;br /&gt;
The limit alarms are configured by the user in the HIHI, LOLO, HIGH, and LOW fields using numerical values. The conditions apply to the VAL and RBV fields of the stepper motor record. For each of these fields, there is a corresponding severity field which can specify either NO ALARM, MINOR, or MAJOR. The user can specify a deadband around these limits in the HYST or hysteresis field. See [[RRM 3-13 Concepts#Alarm Specification|Alarm Specification]] for a complete explanation of analog alarms and these fields. [[RRM 3-13 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;TD&amp;gt;Hihi Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;TD&amp;gt;High Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;TD&amp;gt;Low Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;TD&amp;gt;Lolo Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine when to send monitors placed on the VAL field. The monitors are sent when the value field exceeds the last monitored field by the appropriate delta. If these fields have a value of zero, everytime the value changes, a monitor will be triggered; if they have a value of -1, everytime the record is processed, monitors are triggered.  The ADEL field is used by archive monitors and the MDEL field for all other types of monitors. See [[RRM 3-13 Concepts#Monitor Specification|Monitor Specification]] for a complete explanation of monitors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields are not configurable by the user before run-time, but most of them can be modified after initialization.&lt;br /&gt;
&lt;br /&gt;
The STHM field will set the current position of the motor to its home or zero position when this field is set to 1 via a dbPut. Its value is automatically reset to 0 after the command is accepted.&lt;br /&gt;
&lt;br /&gt;
Setting the STOP field to 1 will cause the motor to stop moving. Its value is also reset to 0 after the command is accepted.&lt;br /&gt;
&lt;br /&gt;
The DMOV field is a flag which indicates if the motor is done moving and all retries are complete. It is significant only while the record is in POSITION mode. It will be 1 if TRUE and 0 if FALSE.&lt;br /&gt;
&lt;br /&gt;
The RVAL field contains the value which is actually written to output after it is forced in the drive limits.&lt;br /&gt;
&lt;br /&gt;
The RBV and RRBV fields contain the value retrieved from the readback location link (RDBL).&lt;br /&gt;
&lt;br /&gt;
The MOVN field indicates whether the motor is currently moving. It will contain a 1 if moving or a 0 if not moving. The DIR field indicates which direction the record is moving--a 0 means clockwise and a 1 means counter clockwise.&lt;br /&gt;
&lt;br /&gt;
The CW and CCW fields contain the values for the clockwise and counterclockwise limit switches, respectively. The MCW and MCCW fields will be 1 if the limit has been reached or 0 if not.&lt;br /&gt;
&lt;br /&gt;
The CVEL field indicates whether the motor is at constant velocity. If so, the value of this field is 1.&lt;br /&gt;
&lt;br /&gt;
The RCNT field will indicate the current number of retries that have been attempted.&lt;br /&gt;
&lt;br /&gt;
The POSM field will contain a 1 if the motor is moving in a positive direction and a 0 if otherwise.&lt;br /&gt;
&lt;br /&gt;
The MISS field holds the error after the first attempt has been made to change the stepper motor's position, the error being the difference between VAL and RBV, the readback value. If monitors are present, the value is posted.&lt;br /&gt;
&lt;br /&gt;
The EPOS field holds the value obtained from encoder readback. The MPOS holds the readback value of the motor positions.&lt;br /&gt;
&lt;br /&gt;
The MLST and ALST fields are used to implement monitors on the VAL field. If the difference between one of these fields and the VAL field exceeds the appropriate deadband (MDEL, for instance) monitors are triggered.&lt;br /&gt;
&lt;br /&gt;
The LVEL, LACC, and LVAL fields contain the last values set for the VELO, ACCL, and VAL fields respectively. They are used to determine when the velocity and acceleration should be recalculated.&lt;br /&gt;
&lt;br /&gt;
The CMOD or current mode fields indicates which mode, position or velocity, the record is using. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STHM&amp;lt;TD&amp;gt;Set Home&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STOP&amp;lt;TD&amp;gt;Stop&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DMOV&amp;lt;TD&amp;gt;Done Moving to Value&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RVAL&amp;lt;TD&amp;gt; Raw Data Value &amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RRBV&amp;lt;TD&amp;gt;Raw Read Back Value&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INIT&amp;lt;TD&amp;gt;Initialize&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MOVN &amp;lt;TD&amp;gt;Moving Status&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DIR&amp;lt;TD&amp;gt;Current Direction&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MCW&amp;lt;TD&amp;gt;Motor Clockwise Limit Switch Value&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MCCW&amp;lt;TD&amp;gt;Motor Counter Clockwise Limit Switch Value&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CW &amp;lt;TD&amp;gt;Clockwise Limit&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CCW&amp;lt;TD&amp;gt;Counter Clockwise Limit&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CVEL&amp;lt;TD&amp;gt;Constant Velocity&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RCNT&amp;lt;TD&amp;gt;Current Retry Count&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;POSM&amp;lt;TD&amp;gt; Positive Motion&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MISS&amp;lt;TD&amp;gt;First Attempt Error &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EPOS &amp;lt;TD&amp;gt;Encoder Read Back Position &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MPOS&amp;lt;TD&amp;gt; Motor Position &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;TD&amp;gt;Archive Last Value &amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;TD&amp;gt;Monitor Last Value&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LVEL&amp;lt;TD&amp;gt;Last Velocity Set&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LACC&amp;lt;TD&amp;gt;Last Acceleration Set&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LVAL&amp;lt;TD&amp;gt; Last Value &amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CMOD&amp;lt;TD&amp;gt;Current Mode &amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
This routine checks to see that device support is available.   The routine next checks to see if the device support &amp;lt;CODE&amp;gt;sm_command&amp;lt;/CODE&amp;gt; routine is defined. If either device support or the device support write routine does not exist, an error message is issued and processing is terminated.&lt;br /&gt;
&lt;br /&gt;
If device support includes &amp;lt;CODE&amp;gt;init_record&amp;lt;/CODE&amp;gt;, it is called.&lt;br /&gt;
&lt;br /&gt;
If DOL is a constant, then VAL is initialized with its value and UDF is set to FALSE. If DOL is a PV_LINK then a channel access link is created.&lt;br /&gt;
&lt;br /&gt;
init_sm is then called.&lt;br /&gt;
&lt;br /&gt;
==== init_sm ====&lt;br /&gt;
&lt;br /&gt;
The init_sm routine initializes the stepper motor according to its configuration.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field is VAL, LVAL, MPOS, RBV, EPOS, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR, else if the field has upper and lower limits defined they will be used, else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the field is VAL, LVAL, MPOS, RBV, EPOS, HIHI, HIGH, LOW, or LOLO, the limits are set to DRVH and DRVL. Else if the field has upper and lower limits defined they will be used; else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
 upper_alarm_limit = HIHI&lt;br /&gt;
 upper_warning_limit = HIGH&lt;br /&gt;
 lower_warning_limit = LOW&lt;br /&gt;
 lower_alarm_limit = LOLO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Description not available.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
At the present time, device support is intimately connected to record support. The compumotor 1830 and the OMS 6 axis controllers are supported.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_State&amp;diff=1538</id>
		<title>RRM 3-14 State</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_State&amp;diff=1538"/>
		<updated>2008-04-18T18:44:49Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= State =&lt;br /&gt;
&lt;br /&gt;
The state record is a means for a state program to communicate with the operator interface. Its only function is to provide a place in the database through which the state program can inform the operator interface of its state by storing an arbitrary ASCII string in its VAL field.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The state record fields fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* other parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The state record has the standard fields for specifying under what circumstances it will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The state record has the alarm parameters common to all record types.  [[RRM 3-13 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the application code to convey the state of the program to the operator interface. The VAL field holds the string retrieved from the state program. The OVAL is used to implement monitors for the VAL field. When the string in OVAL differs from the one in VAL, monitors are triggered. They represent the current state of the sequence program. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;STRING [20]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OVAL&amp;lt;TD&amp;gt;Old Value&amp;lt;TD&amp;gt;STRING [20]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TD&amp;gt;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Two record support routines are provided:&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
process triggers monitors on VAL when it changes and scans the forward link if necessary.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
get_value fills in struct valueDes so that it refers to VAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Sequence&amp;diff=1537</id>
		<title>RRM 3-14 Sequence</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Sequence&amp;diff=1537"/>
		<updated>2008-04-18T18:44:17Z</updated>

		<summary type="html">&lt;p&gt;KazimierzGofron: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= seq - Sequence =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Sequence record is used to trigger the processing of up to ten other records and send values to those records. It is similar to the fanout record, except that it will fetch an input value and write an output value instead of simply processing a collection of forward links. It can also specify one of several selection algorithms that determine which values to write. It has no associated device support.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* desired output parameters&lt;br /&gt;
* output parameters&lt;br /&gt;
* selection algorithm parameters&lt;br /&gt;
* delay parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* run-time parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The sequence record has the standard fields for specifying under what circumstances it will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used.&lt;br /&gt;
&lt;br /&gt;
=== Desired Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields determine where the record retrieves the values it is to write to other records. All of these values are not necessarily used, depending on the selection algorithm.&lt;br /&gt;
&lt;br /&gt;
The sequence record can retrieve up to 10 values from 10 locations. The user specifies the locations in the Desired Output Link fields (DOL1-DOLA), which can be either constants, database links, or channel access links. If a Desired Output Link is a constant, the corresponding value field for that link is initialized to the constant value and ''cannot'' be changed via dbputs. Otherwise, if the Desired Output Link is a database or channel access link, a value is fetched from the link each time the record is processed (provided that the output link is part of the record's selection algorithm). See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
The value fetched from the Desired Output Links are stored in the corresponding Desired Output Value fields (DO1-DOA). These fields can be initialized to a constant value, but they cannot be changed via dbPuts.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL1&amp;lt;TD&amp;gt;Desired Output Link 1&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL2&amp;lt;TD&amp;gt;Desired Output Link 2&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL3&amp;lt;TD&amp;gt;Desired Output Link 3&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL4&amp;lt;TD&amp;gt;Desired Output Link 4&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL5&amp;lt;TD&amp;gt;Desired Output Link 5&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL6&amp;lt;TD&amp;gt;Desired Output Link 6&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL7&amp;lt;TD&amp;gt;Desired Output Link 71&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL8&amp;lt;TD&amp;gt;Desired Output Link 8&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL9&amp;lt;TD&amp;gt;Desired Output Link 9&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOLA&amp;lt;TD&amp;gt;Desired Output Link 10&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DO1&amp;lt;TD&amp;gt;Desired Output Value, Link 1&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DO2&amp;lt;TD&amp;gt;Desired Output Value, Link 2&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DO3&amp;lt;TD&amp;gt;Desired Output Value, Link 3&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DO4&amp;lt;TD&amp;gt;Desired Output Value, Link 4&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DO5&amp;lt;TD&amp;gt;Desired Output Value, Link 5&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DO6&amp;lt;TD&amp;gt;Desired Output Value, Link 6&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DO7&amp;lt;TD&amp;gt;Desired Output Value, Link 7&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DO8&amp;lt;TD&amp;gt;Desired Output Value, Link 8&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DO9&amp;lt;TD&amp;gt;Desired Output Value, Link 9&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOA&amp;lt;TD&amp;gt;Desired Output Value, Link 10 &amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
When the record is processed, the desired output values are retrieved for the links in the record's selection algorithm and are written to the corresponding output link (LNK1-LNKA). These output links can be database links or channel access links; they cannot be device addresses. There are ten output links, one for each desired output link. Only those that are defined are used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LNK1&amp;lt;TD&amp;gt;Output link 1&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LNK2&amp;lt;TD&amp;gt;Output link 2&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LNK3&amp;lt;TD&amp;gt;Output link 3&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LNK4&amp;lt;TD&amp;gt;Output link 4&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LNK5&amp;lt;TD&amp;gt;Output link 5&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LNK6&amp;lt;TD&amp;gt;Output link 6&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LNK7&amp;lt;TD&amp;gt;Output link 7&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LNK8&amp;lt;TD&amp;gt;Output link 8&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LNK9&amp;lt;TD&amp;gt;Output link 9&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LNKA&amp;lt;TD&amp;gt;Output link 1&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Selection Algorithm Parameters ===&lt;br /&gt;
&lt;br /&gt;
When the sequence record is processed, it uses a selection algorithm similar to that of the selection record to decide which links to process.The select mechanism field (SELM) has four algorithms to choose from: &amp;lt;CODE&amp;gt;All&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Specified&amp;lt;/CODE&amp;gt; or &amp;lt;CODE&amp;gt;Mask&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;All&amp;lt;/CODE&amp;gt; algorithm causes the record to process each input and output link each time the record is processed, in order from 1 to 10. So when SELM is &amp;lt;CODE&amp;gt;All&amp;lt;/CODE&amp;gt;, the desired output value from DOL1 will fetched and sent to LNK1, then the desired output value from DOL2 will be fetched and sent to the location in LNK2, and so on until the last input and output link DOA and LNKA. (Note that undefined links are not used.) If DOL''x'' is a constant, the current value field is simply used and the desired output link is ignored. The SELN field is not used when &amp;lt;CODE&amp;gt;All&amp;lt;/CODE&amp;gt; is the algorithm.&lt;br /&gt;
&lt;br /&gt;
When the &amp;lt;CODE&amp;gt;Specified&amp;lt;/CODE&amp;gt; algorithm is chosen, each time the record is processed it gets the integer value in the Link Selection (SELN) field and uses that as the index of the link to process. For instance, if SELN is 4, the desired output value from DO4 will be retrieved and sent to LNK4. If DOL''x'' is a constant, DO''x'' is simply used without the value being fetched from the input link.&lt;br /&gt;
&lt;br /&gt;
When &amp;lt;CODE&amp;gt;Mask&amp;lt;/CODE&amp;gt; is chosen, the record uses the individual bits of the SELN field to determine the links to process. When bit 0 of SELN is set, the value from DO1 will be written to the location in LNK1; when bit 1 is set, the valud from DO2 will be written to the location in LNK2 etc. Thus for example if SELN is 3, the record will retrieve the values from DO1 and DO2 and write them to the locations in LNK1 and LNK2, respectively. If SELN is 63, DO1...DO6 will be written to LNK1...LNK6.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SELM&amp;lt;TD&amp;gt;Select Mechanism&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SELN &amp;lt;TD&amp;gt;Link Selection &amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SELL&amp;lt;TD&amp;gt;Link Selection Location &amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Delay Parameters ===&lt;br /&gt;
&lt;br /&gt;
The delay parameters consist of 10 fields, one for each I/O link discussed above. These fields can be configured to cause the record to delay processing the link. For instance, if the user gives the DLY1 field a value of 3.0, each time the record is processed at run-time, the record will delay processing the DOL1, DOV1, and LNK1 fields for three seconds. That is, the desired output value will not be fetched and written to the output link until three seconds have lapsed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLY1&amp;lt;TD&amp;gt;Delay time&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLY2&amp;lt;TD&amp;gt;Delay time&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLY3&amp;lt;TD&amp;gt;Delay time&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLY4&amp;lt;TD&amp;gt;Delay time&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLY5&amp;lt;TD&amp;gt;Delay time&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLY6&amp;lt;TD&amp;gt;Delay time&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLY7&amp;lt;TD&amp;gt;Delay time&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLY8&amp;lt;TD&amp;gt;Delay time&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLY9&amp;lt;TD&amp;gt;Delay time&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLYA&amp;lt;TD&amp;gt;Delay time&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. The Precision field (PREC) determines the decimal precision for the VAL field when it is displayed. It is used when the &amp;lt;CODE&amp;gt;get_precision&amp;lt;/CODE&amp;gt; record routine is called.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC &amp;lt;TD&amp;gt;Display Precision &amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The sequence record has the alarm parameters common to all record types.  [[RRM 3-13 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# First, PACT is set to TRUE, and the link selection is fetched. Depending on the selection mechanism, the link selection output links are processed in order from LNK1 to LNKA. When LNK''n'' is processed, the corresponding DLY''n'' value is used to generate a delay via watchdog timer. &lt;br /&gt;
# After DLY''n'' seconds have expired, the input value is fetched from DO''n'' (if DOL''n'' is constant) or DOL''n'' (if DOL''n'' is a database link or channel access link) and written to LNK''n''. &lt;br /&gt;
# When all links are completed, an asynchronous completion call back to dbProcess is made (see the Application Developer's Guide for more information on asynchronous processing.) &lt;br /&gt;
# Then UDF is set to FALSE. &lt;br /&gt;
# Monitors are checked.&lt;br /&gt;
# The forward link is scanned, PACT is set FALSE, and the process routine returns.&lt;br /&gt;
&lt;br /&gt;
For the delay mechanism to operate properly, the record is processed asynchronously. The only time the record will not be processed asynchronously is when there are no non-NULL output links selected (i.e. when it has nothing to do.) The processing of the links is done via callback tasks at the priority set in the PRIO field in dbCommon (see the Application Developer's Guide for more information on call&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>KazimierzGofron</name></author>
	</entry>
</feed>