<?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=LewisMuir</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=LewisMuir"/>
	<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=Special:Contributions/LewisMuir"/>
	<updated>2026-06-03T22:48:23Z</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_Calcout&amp;diff=3723</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=3723"/>
		<updated>2013-11-22T17:01:40Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Output Parameters */ Note OCAL field as PP Yes and OVAL as PP No&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 infix expressions that can be used are very similar to the C expression syntax, but with some additions and subtle differences in operator meaning and precedence. The string may contain a series of expressions separated by a semi-colon character ';' any one of which may actually provide the calculation result; however all of the other expressions included must assign their result to a variable. All alphabetic elements described below are case independent, so upper and lower case letters may be used and mixed in the variable and function names as desired. Spaces may be used anywhere within an expression except between the characters that make up a single expression element.&lt;br /&gt;
&lt;br /&gt;
The range of expressions supported by the calculation record are separated into literals, constants, operands, algebraic operators, trigonometric operators, relational operators, logical operators, the assignment operator, parentheses and commas, and the question mark or '?:' operator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
'''NOTE:''' A complete up-to-date description of the calculation expression can be found in the '''Application Developer's Guide''', chapter libCom / calc / Infix Expression Syntax (19.2.1 for EPICS 3.14.11).&lt;br /&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;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;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;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;&lt;br /&gt;
&lt;br /&gt;
==== Literals ====&lt;br /&gt;
&lt;br /&gt;
* Standard double precision floating point numbers&lt;br /&gt;
* Inf: Infinity&lt;br /&gt;
* Nan: Not a Number&lt;br /&gt;
&lt;br /&gt;
==== Constants ====&lt;br /&gt;
&lt;br /&gt;
* PI: returns the mathematical constant &amp;lt;tt&amp;gt;&amp;amp;pi;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* D2R: evaluates to &amp;lt;tt&amp;gt;&amp;amp;pi;&amp;lt;/tt&amp;gt;/180 which, when used as a multiplier, converts an angle from degrees to radians&lt;br /&gt;
* R2D: evaluates to 180/&amp;lt;tt&amp;gt;&amp;amp;pi;&amp;lt;/tt&amp;gt; which as a multiplier converts an angle from radians to degrees&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;
The keyword &amp;lt;tt&amp;gt;VAL&amp;lt;/tt&amp;gt; returns the current contents of the expression's result field, i.e. the VAL field for the CALC expression and the OVAL field for the OCAL expression. (These fields can be written to by a CA put, so it might ''not'' be the result from last time the expression was evaluated).&lt;br /&gt;
&lt;br /&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;
==== Algebraic Operators ====&lt;br /&gt;
&lt;br /&gt;
* ABS: Absolute value (unary)&lt;br /&gt;
* SQR: Square root (unary)&lt;br /&gt;
* MIN: Minimum (any number of args)&lt;br /&gt;
* MAX: Maximum (any number of args)&lt;br /&gt;
* FINITE: returns non-zero if none of the arguments are NaN or Inf (any number of args)&lt;br /&gt;
* ISNAN: returns non-zero if any of the arguments is NaN or Inf (any number of args)&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;
==== Assignment Operator ====&lt;br /&gt;
&lt;br /&gt;
* := : assigns a value (right hand side) to a variable (i.e. field)&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;
==== 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;
=== 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 + 10&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;
==== 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 system dependent.&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;Yes&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&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;IVOA&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;IVOV&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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;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;
== 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>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Calcout&amp;diff=3722</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=3722"/>
		<updated>2013-11-22T16:58:58Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Expression */ Note CALC field as PP Yes&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 infix expressions that can be used are very similar to the C expression syntax, but with some additions and subtle differences in operator meaning and precedence. The string may contain a series of expressions separated by a semi-colon character ';' any one of which may actually provide the calculation result; however all of the other expressions included must assign their result to a variable. All alphabetic elements described below are case independent, so upper and lower case letters may be used and mixed in the variable and function names as desired. Spaces may be used anywhere within an expression except between the characters that make up a single expression element.&lt;br /&gt;
&lt;br /&gt;
The range of expressions supported by the calculation record are separated into literals, constants, operands, algebraic operators, trigonometric operators, relational operators, logical operators, the assignment operator, parentheses and commas, and the question mark or '?:' operator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
'''NOTE:''' A complete up-to-date description of the calculation expression can be found in the '''Application Developer's Guide''', chapter libCom / calc / Infix Expression Syntax (19.2.1 for EPICS 3.14.11).&lt;br /&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;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;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;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;&lt;br /&gt;
&lt;br /&gt;
==== Literals ====&lt;br /&gt;
&lt;br /&gt;
* Standard double precision floating point numbers&lt;br /&gt;
* Inf: Infinity&lt;br /&gt;
* Nan: Not a Number&lt;br /&gt;
&lt;br /&gt;
==== Constants ====&lt;br /&gt;
&lt;br /&gt;
* PI: returns the mathematical constant &amp;lt;tt&amp;gt;&amp;amp;pi;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* D2R: evaluates to &amp;lt;tt&amp;gt;&amp;amp;pi;&amp;lt;/tt&amp;gt;/180 which, when used as a multiplier, converts an angle from degrees to radians&lt;br /&gt;
* R2D: evaluates to 180/&amp;lt;tt&amp;gt;&amp;amp;pi;&amp;lt;/tt&amp;gt; which as a multiplier converts an angle from radians to degrees&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;
The keyword &amp;lt;tt&amp;gt;VAL&amp;lt;/tt&amp;gt; returns the current contents of the expression's result field, i.e. the VAL field for the CALC expression and the OVAL field for the OCAL expression. (These fields can be written to by a CA put, so it might ''not'' be the result from last time the expression was evaluated).&lt;br /&gt;
&lt;br /&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;
==== Algebraic Operators ====&lt;br /&gt;
&lt;br /&gt;
* ABS: Absolute value (unary)&lt;br /&gt;
* SQR: Square root (unary)&lt;br /&gt;
* MIN: Minimum (any number of args)&lt;br /&gt;
* MAX: Maximum (any number of args)&lt;br /&gt;
* FINITE: returns non-zero if none of the arguments are NaN or Inf (any number of args)&lt;br /&gt;
* ISNAN: returns non-zero if any of the arguments is NaN or Inf (any number of args)&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;
==== Assignment Operator ====&lt;br /&gt;
&lt;br /&gt;
* := : assigns a value (right hand side) to a variable (i.e. field)&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;
==== 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;
=== 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 + 10&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;
==== 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 system dependent.&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;IVOA&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;IVOV&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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;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;
== 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>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Long_Output&amp;diff=3704</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=3704"/>
		<updated>2012-10-30T20:27:04Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Desired Output Parameters */ Improve wording about DOL constant&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 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;
A third type of value for the DOL field is a constant in which case, when the record is initialized, the VAL field will be initialized with this constant value.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&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;
=== 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;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;
== 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>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Long_Output&amp;diff=3703</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=3703"/>
		<updated>2012-10-30T20:18:36Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Desired Output Parameters */ Remove claim that OMSL cannot be closed_loop with a constant in DOL&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 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 also be configured as a constant so that when the record is initialized, the VAL field will be initialized with this constant value.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&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;
=== 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;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;
== 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>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Long_Output&amp;diff=3702</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=3702"/>
		<updated>2012-10-30T20:15:06Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Desired Output Parameters */ Remove fanout reference&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 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;
=== 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;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;
== 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>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Binary_Output&amp;diff=3701</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=3701"/>
		<updated>2012-10-30T20:00:17Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Alarm Parameters */ Improve description of IVOA field&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 (OMSL) 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 a database link, a channel access link, or a constant. 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#menuOmsl|menuOmsl]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&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 writes its output. 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;
=== 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#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;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#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;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#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;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#menuIvoa|menuIvoa]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;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;
=== 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;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#menuSimm|menuSimm]]&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#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&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;
== 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;
* 0: Success. RVAL modified (VAL will be set accordingly)&lt;br /&gt;
* 2: Success. VAL modified&lt;br /&gt;
* other: Error.&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>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Binary_Output&amp;diff=3700</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=3700"/>
		<updated>2012-10-30T19:56:18Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Desired Output Parameters */ DOL field can be a constant&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 (OMSL) 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 a database link, a channel access link, or a constant. 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#menuOmsl|menuOmsl]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&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 writes its output. 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;
=== 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#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;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#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;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#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;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#menuIvoa|menuIvoa]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;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;
=== 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;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#menuSimm|menuSimm]]&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#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&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;
== 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;
* 0: Success. RVAL modified (VAL will be set accordingly)&lt;br /&gt;
* 2: Success. VAL modified&lt;br /&gt;
* other: Error.&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>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Calcout&amp;diff=3699</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=3699"/>
		<updated>2012-10-19T15:59:04Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Constants */ Fix pi character&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 infix expressions that can be used are very similar to the C expression syntax, but with some additions and subtle differences in operator meaning and precedence. The string may contain a series of expressions separated by a semi-colon character ';' any one of which may actually provide the calculation result; however all of the other expressions included must assign their result to a variable. All alphabetic elements described below are case independent, so upper and lower case letters may be used and mixed in the variable and function names as desired. Spaces may be used anywhere within an expression except between the characters that make up a single expression element.&lt;br /&gt;
&lt;br /&gt;
The range of expressions supported by the calculation record are separated into literals, constants, operands, algebraic operators, trigonometric operators, relational operators, logical operators, the assignment operator, parentheses and commas, and the question mark or '?:' operator.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----&lt;br /&gt;
'''NOTE:''' A complete up-to-date description of the calculation expression can be found in the '''Application Developer's Guide''', chapter libCom / calc / Infix Expression Syntax (19.2.1 for EPICS 3.14.11).&lt;br /&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;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;&lt;br /&gt;
&lt;br /&gt;
==== Literals ====&lt;br /&gt;
&lt;br /&gt;
* Standard double precision floating point numbers&lt;br /&gt;
* Inf: Infinity&lt;br /&gt;
* Nan: Not a Number&lt;br /&gt;
&lt;br /&gt;
==== Constants ====&lt;br /&gt;
&lt;br /&gt;
* PI: returns the mathematical constant &amp;lt;tt&amp;gt;&amp;amp;pi;&amp;lt;/tt&amp;gt;&lt;br /&gt;
* D2R: evaluates to &amp;lt;tt&amp;gt;&amp;amp;pi;&amp;lt;/tt&amp;gt;/180 which, when used as a multiplier, converts an angle from degrees to radians&lt;br /&gt;
* R2D: evaluates to 180/&amp;lt;tt&amp;gt;&amp;amp;pi;&amp;lt;/tt&amp;gt; which as a multiplier converts an angle from radians to degrees&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;
The keyword &amp;lt;tt&amp;gt;VAL&amp;lt;/tt&amp;gt; returns the current contents of the expression's result field, i.e. the VAL field for the CALC expression and the OVAL field for the OCAL expression. (These fields can be written to by a CA put, so it might ''not'' be the result from last time the expression was evaluated).&lt;br /&gt;
&lt;br /&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;
==== Algebraic Operators ====&lt;br /&gt;
&lt;br /&gt;
* ABS: Absolute value (unary)&lt;br /&gt;
* SQR: Square root (unary)&lt;br /&gt;
* MIN: Minimum (any number of args)&lt;br /&gt;
* MAX: Maximum (any number of args)&lt;br /&gt;
* FINITE: returns non-zero if none of the arguments are NaN or Inf (any number of args)&lt;br /&gt;
* ISNAN: returns non-zero if any of the arguments is NaN or Inf (any number of args)&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;
==== Assignment Operator ====&lt;br /&gt;
&lt;br /&gt;
* := : assigns a value (right hand side) to a variable (i.e. field)&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;
==== 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;
=== 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 + 10&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;
==== 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 system dependent.&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;IVOA&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;IVOV&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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;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;
== 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>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Analog_Output&amp;diff=3698</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=3698"/>
		<updated>2012-10-18T23:07:11Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Desired Output Parameters */ fix grammar&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 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;[[RRM 3-14 Menu Choices#menuOmsl|menuOmsl]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;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;[[RRM 3-14 Menu Choices#aoOIF|aoOIF]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;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;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;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;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;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;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;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;
=== 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;[[RRM 3-14 Menu Choices#menuConvert|menuConvert]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;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;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;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;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;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;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;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;DOUBLE&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;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;EOFF&amp;lt;TD&amp;gt;Offset for Linear Conversions&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;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 or SLOPE 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 for records that use LINEAR conversions. They are used to calculate the values for ESLO and EOFF. 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 when LINR specifies LINEAR.  These values must be supplied by the user when LINR specifies SLOPE. Used only when LINR specifies LINEAR or SLOPE.&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 or LINR==SLOPE, then X = (VAL - EOFF) / ESLO, else if LINR==NO_CONVERSION, then X = VAL, else X is obtained via breakpoint table.&lt;br /&gt;
&lt;br /&gt;
: 2. X = (X - AOFF) / ASLO&lt;br /&gt;
&lt;br /&gt;
: 3. RVAL = round(X) - ROFF&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;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;LOPR&amp;lt;TD&amp;gt;Low Operating Range&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;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;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;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;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;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;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;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;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;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#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;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#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;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#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;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#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;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#menuIvoa|menuIvoa]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;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;
=== 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;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#menuSimm|menuSimm]]&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#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;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;
== 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 or EGUL is modified. To support LINEAR conversion, EOFF and ESLO must be set accordingly. The record support sets EOFF to EGUL before calling this routine which is a common situation when RAWL is zero below.&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;/div&gt;</summary>
		<author><name>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Editing_Tasks&amp;diff=3697</id>
		<title>RRM 3-14 Editing Tasks</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Editing_Tasks&amp;diff=3697"/>
		<updated>2012-10-18T21:17:17Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Record Documentation/Distribution Anomalies */ Add missing &amp;quot;Async Soft Channel&amp;quot; device support documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== To Do List ==&lt;br /&gt;
&lt;br /&gt;
The purpose of this list is to bring the existing R3.14 Record Reference Manual up to match the current R3.14.9 implementation.&lt;br /&gt;
&lt;br /&gt;
* Read [[RRM 3-14 Concepts|Database Concepts]] and revise as necessary.&lt;br /&gt;
** Maybe replace the existing CapFast diagrams with VDCT equivalents.&lt;br /&gt;
* For [[RRM 3-14 dbCommon|Fields Common to All Record Types]] update the field tables and descriptions according to how dbCommon has changed.&lt;br /&gt;
* Check [[RRM 3-14 Common|Fields Common to Many Record Types]] for typical changes made across all record types.&lt;br /&gt;
* For each existing record chapter we need to update its for&lt;br /&gt;
** Changes to individual fields&lt;br /&gt;
** Changes made to the record processing description&lt;br /&gt;
** Fix shortcomings of the existing text, e.g.&lt;br /&gt;
*** Missing sections&lt;br /&gt;
*** Device support report() function prototypes&lt;br /&gt;
* For [[RRM 3-14 Menu Choices|Menu Choices]] check and update the list of menus and choices in each.&lt;br /&gt;
&lt;br /&gt;
=== Record Documentation/Distribution Anomalies ===&lt;br /&gt;
&lt;br /&gt;
These records have &amp;quot;Async Soft Channel&amp;quot; device support but do not document this:&lt;br /&gt;
&lt;br /&gt;
* Analog Output&lt;br /&gt;
* Binary Output&lt;br /&gt;
* Calculation Output&lt;br /&gt;
* Long Output&lt;br /&gt;
* Multi-Bit Binary Output&lt;br /&gt;
* Multi-Bit Binary Output Direct&lt;br /&gt;
* String Output&lt;br /&gt;
&lt;br /&gt;
These records are documented here but not present in any distribution of EPICS Base:&lt;br /&gt;
&lt;br /&gt;
* Archive&lt;br /&gt;
* CPID&lt;br /&gt;
&lt;br /&gt;
These records are not documented here, but are present in both the R3.13.10 and R3.14.x distributions:&lt;br /&gt;
&lt;br /&gt;
* Analog Array Input&lt;br /&gt;
* Analog Array Output&lt;br /&gt;
&lt;br /&gt;
These records are neither documented here nor present in any distribution of Base, but being commonly used they are candidates for possible inclusion in the documentation:&lt;br /&gt;
&lt;br /&gt;
* Enhanced PID&lt;br /&gt;
* genSub&lt;br /&gt;
* Motor&lt;br /&gt;
* Transform&lt;br /&gt;
* Table&lt;br /&gt;
* waveformAnalysis&lt;br /&gt;
* ... other ...&lt;br /&gt;
&lt;br /&gt;
Don't add pages for these obsolete records, which were present in the R3.13.10 distribution but removed in R3.14.x:&lt;br /&gt;
&lt;br /&gt;
* Event Generator Event&lt;br /&gt;
* Event Generator&lt;br /&gt;
* Event Receiver Event&lt;br /&gt;
* Event Receiver&lt;br /&gt;
* GSub (not Andy Foster's genSub)&lt;br /&gt;
* recDynLink&lt;br /&gt;
* recWaitCa&lt;/div&gt;</summary>
		<author><name>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14&amp;diff=3696</id>
		<title>RRM 3-14</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14&amp;diff=3696"/>
		<updated>2012-10-18T20:25:26Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* EPICS 3-14 Record Reference Manual */ Alphabetically order aai and aao record types&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;H2 style=&amp;quot;color:#C00000&amp;quot;&amp;gt;Help Needed!&amp;lt;/H2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This documentation has been revised since the older 3-13 version, but the software has been updated significantly since the docs were written so there may still be a number of inaccuracies here.  The [[RRM 3-14 Editing Tasks|Editing Tasks]] page gives some ideas on what else might need doing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EPICS 3-14 Record Reference Manual ==&lt;br /&gt;
&lt;br /&gt;
Philip Stanley, Janet Anderson, Marty Kraimer&lt;br /&gt;
&lt;br /&gt;
Wikified by Andrew Johnson and Kazimierz Gofron&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Copyright|Copyright]]&lt;br /&gt;
* [[RRM 3-14 Preface|Preface]]&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Concepts|Database Concepts]]&lt;br /&gt;
* [[RRM 3-14 dbCommon|Fields Common to All Record Types]]&lt;br /&gt;
* [[RRM 3-14 Common|Fields Common to Many Record Types]]&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Array Analog Input|aai - Array Analog Input]]&lt;br /&gt;
* [[RRM 3-14 Array Analog Output|aao - Array Analog Output]]&lt;br /&gt;
* [[RRM 3-14 Analog Input|ai - Analog Input]]&lt;br /&gt;
* [[RRM 3-14 Analog Output|ao - Analog Output]]&lt;br /&gt;
* [[RRM 3-14 Array Subroutine|aSub - Array Subroutine]]&lt;br /&gt;
* [[RRM 3-14 Binary Input|bi - Binary Input]]&lt;br /&gt;
* [[RRM 3-14 Binary Output|bo - Binary Output]]&lt;br /&gt;
* [[RRM 3-14 Calculation|calc - Calculation]]&lt;br /&gt;
* [[RRM 3-14 Calcout|calcout - Calculation Output]]&lt;br /&gt;
* [[RRM 3-14 Compression|compress - Compression]]&lt;br /&gt;
* [[RRM 3-14 Data Fanout|dfanout - Data Fanout]]&lt;br /&gt;
* [[RRM 3-14 Event|event - Event]]&lt;br /&gt;
* [[RRM 3-14 Fanout|fanout - Fanout]]&lt;br /&gt;
* [[RRM 3-14 Histogram|histogram - Histogram]]&lt;br /&gt;
* [[RRM 3-14 Long Input|longin - Long Input]]&lt;br /&gt;
* [[RRM 3-14 Long Output|longout - Long Output]]&lt;br /&gt;
* [[RRM 3-14 Multi-Bit Binary Input|mbbi - Multi-Bit Binary Input]]&lt;br /&gt;
* [[RRM 3-14 Multi-Bit Binary Input Direct|mbbiDirect - Multi-Bit Binary Input Direct]]&lt;br /&gt;
* [[RRM 3-14 Multi-Bit Binary Output|mbbo - Multi-Bit Binary Output]]&lt;br /&gt;
* [[RRM 3-14 Multi-Bit Binary Output Direct|mbboDirect - Multi-Bit Binary Output Direct]]&lt;br /&gt;
* [[RRM 3-14 Permissive|permissive - Permissive]]&lt;br /&gt;
* [[RRM 3-14 Select|sel - Select]]&lt;br /&gt;
* [[RRM 3-14 Sequence|seq - Sequence]]&lt;br /&gt;
* [[RRM 3-14 State|state - State]]&lt;br /&gt;
* [[RRM 3-14 String Input|stringin - String Input]]&lt;br /&gt;
* [[RRM 3-14 String Output|stringout - String Output]]&lt;br /&gt;
* [[RRM 3-14 SubArray|subArray - Sub-Array]]&lt;br /&gt;
* [[RRM 3-14 Subroutine|sub - Subroutine]]&lt;br /&gt;
* [[RRM 3-14 Waveform|waveform - Waveform]]&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Menu Choices|Appendix: Menu Choices]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Record Types Not in Base ===&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Archive|archive - Archive]]&lt;br /&gt;
* [[RRM 3-14 CPID Control|cpid - CPID Control]]&lt;br /&gt;
* [[RRM 3-14 PID Control|pid - PID Control]]&lt;br /&gt;
* [[RRM 3-14 Pulse Counter|pulseCounter - Pulse Counter]]&lt;br /&gt;
* [[RRM 3-14 Pulse Delay|pulseDelay - Pulse Delay]]&lt;br /&gt;
* [[RRM 3-14 Pulse Train|pulseTrain - Pulse Train]]&lt;br /&gt;
* [[RRM 3-14 Scan|scan - Scan]]&lt;br /&gt;
* [[RRM 3-14 Stepper Motor|steppermotor - Stepper Motor]]&lt;br /&gt;
* [[RRM 3-14 Timer|timer - Timer]]&lt;br /&gt;
* [[RRM 3-14 Wait|wait - Wait]]&lt;/div&gt;</summary>
		<author><name>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Analog_Output&amp;diff=3695</id>
		<title>RRM 3-14 Array Analog Output</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Analog_Output&amp;diff=3695"/>
		<updated>2012-10-18T20:17:59Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: Create stub page for aao record type&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;
= aao - Array Analog Output =&lt;br /&gt;
&lt;br /&gt;
This record type is currently undocumented.  Please help write it.&lt;/div&gt;</summary>
		<author><name>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Analog_Input&amp;diff=3694</id>
		<title>RRM 3-14 Array Analog Input</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Analog_Input&amp;diff=3694"/>
		<updated>2012-10-18T20:16:52Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: Create stub page for aai record type&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;
= aai - Array Analog Input =&lt;br /&gt;
&lt;br /&gt;
This record type is currently undocumented.  Please help write it.&lt;/div&gt;</summary>
		<author><name>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14&amp;diff=3693</id>
		<title>RRM 3-14</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14&amp;diff=3693"/>
		<updated>2012-10-18T20:09:55Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* EPICS 3-14 Record Reference Manual */ Add stubs for aai and aao record types&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;H2 style=&amp;quot;color:#C00000&amp;quot;&amp;gt;Help Needed!&amp;lt;/H2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This documentation has been revised since the older 3-13 version, but the software has been updated significantly since the docs were written so there may still be a number of inaccuracies here.  The [[RRM 3-14 Editing Tasks|Editing Tasks]] page gives some ideas on what else might need doing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EPICS 3-14 Record Reference Manual ==&lt;br /&gt;
&lt;br /&gt;
Philip Stanley, Janet Anderson, Marty Kraimer&lt;br /&gt;
&lt;br /&gt;
Wikified by Andrew Johnson and Kazimierz Gofron&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Copyright|Copyright]]&lt;br /&gt;
* [[RRM 3-14 Preface|Preface]]&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Concepts|Database Concepts]]&lt;br /&gt;
* [[RRM 3-14 dbCommon|Fields Common to All Record Types]]&lt;br /&gt;
* [[RRM 3-14 Common|Fields Common to Many Record Types]]&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Analog Input|ai - Analog Input]]&lt;br /&gt;
* [[RRM 3-14 Analog Output|ao - Analog Output]]&lt;br /&gt;
* [[RRM 3-14 Array Analog Input|aai - Array Analog Input]]&lt;br /&gt;
* [[RRM 3-14 Array Analog Output|aao - Array Analog Output]]&lt;br /&gt;
* [[RRM 3-14 Array Subroutine|aSub - Array Subroutine]]&lt;br /&gt;
* [[RRM 3-14 Binary Input|bi - Binary Input]]&lt;br /&gt;
* [[RRM 3-14 Binary Output|bo - Binary Output]]&lt;br /&gt;
* [[RRM 3-14 Calculation|calc - Calculation]]&lt;br /&gt;
* [[RRM 3-14 Calcout|calcout - Calculation Output]]&lt;br /&gt;
* [[RRM 3-14 Compression|compress - Compression]]&lt;br /&gt;
* [[RRM 3-14 Data Fanout|dfanout - Data Fanout]]&lt;br /&gt;
* [[RRM 3-14 Event|event - Event]]&lt;br /&gt;
* [[RRM 3-14 Fanout|fanout - Fanout]]&lt;br /&gt;
* [[RRM 3-14 Histogram|histogram - Histogram]]&lt;br /&gt;
* [[RRM 3-14 Long Input|longin - Long Input]]&lt;br /&gt;
* [[RRM 3-14 Long Output|longout - Long Output]]&lt;br /&gt;
* [[RRM 3-14 Multi-Bit Binary Input|mbbi - Multi-Bit Binary Input]]&lt;br /&gt;
* [[RRM 3-14 Multi-Bit Binary Input Direct|mbbiDirect - Multi-Bit Binary Input Direct]]&lt;br /&gt;
* [[RRM 3-14 Multi-Bit Binary Output|mbbo - Multi-Bit Binary Output]]&lt;br /&gt;
* [[RRM 3-14 Multi-Bit Binary Output Direct|mbboDirect - Multi-Bit Binary Output Direct]]&lt;br /&gt;
* [[RRM 3-14 Permissive|permissive - Permissive]]&lt;br /&gt;
* [[RRM 3-14 Select|sel - Select]]&lt;br /&gt;
* [[RRM 3-14 Sequence|seq - Sequence]]&lt;br /&gt;
* [[RRM 3-14 State|state - State]]&lt;br /&gt;
* [[RRM 3-14 String Input|stringin - String Input]]&lt;br /&gt;
* [[RRM 3-14 String Output|stringout - String Output]]&lt;br /&gt;
* [[RRM 3-14 SubArray|subArray - Sub-Array]]&lt;br /&gt;
* [[RRM 3-14 Subroutine|sub - Subroutine]]&lt;br /&gt;
* [[RRM 3-14 Waveform|waveform - Waveform]]&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Menu Choices|Appendix: Menu Choices]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Record Types Not in Base ===&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Archive|archive - Archive]]&lt;br /&gt;
* [[RRM 3-14 CPID Control|cpid - CPID Control]]&lt;br /&gt;
* [[RRM 3-14 PID Control|pid - PID Control]]&lt;br /&gt;
* [[RRM 3-14 Pulse Counter|pulseCounter - Pulse Counter]]&lt;br /&gt;
* [[RRM 3-14 Pulse Delay|pulseDelay - Pulse Delay]]&lt;br /&gt;
* [[RRM 3-14 Pulse Train|pulseTrain - Pulse Train]]&lt;br /&gt;
* [[RRM 3-14 Scan|scan - Scan]]&lt;br /&gt;
* [[RRM 3-14 Stepper Motor|steppermotor - Stepper Motor]]&lt;br /&gt;
* [[RRM 3-14 Timer|timer - Timer]]&lt;br /&gt;
* [[RRM 3-14 Wait|wait - Wait]]&lt;/div&gt;</summary>
		<author><name>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=3692</id>
		<title>RRM 3-14 Array Subroutine</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=3692"/>
		<updated>2012-10-18T19:48:02Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: Correct border attribute on tables&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;
= aSub - Array Subroutine =&lt;br /&gt;
&lt;br /&gt;
The aSub record is a variant of the 'sub' (subroutine) record with array or scalar &lt;br /&gt;
input and output fields, whose types are user specifiable at database-configure time, and associated input and output links.&lt;br /&gt;
&lt;br /&gt;
The routine to be called at process time can be changed dynamically after the database  has been loaded.&lt;br /&gt;
The name of the routine can either be fetched in over a link from another record or written directly into&lt;br /&gt;
the SNAM field. &lt;br /&gt;
&lt;br /&gt;
The user can configure the record to decide when events will be posted for the output fields. This can be:&lt;br /&gt;
Never, Always or just when any element of an array changes value. &lt;br /&gt;
&lt;br /&gt;
The VAL field holds the value returned from the routine called during record processing, which is a status value that controls whether the output links are used or not.&lt;br /&gt;
&lt;br /&gt;
== Field Summary ==&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Field&amp;lt;th&amp;gt;Type&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&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&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 &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&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 &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;MENU(IGNORE, READ)&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;IGNORE&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;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;MENU(NEVER, ON CHANGE, ALWAYS)&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;ALWAYS&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;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&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;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&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;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&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;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&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;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&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 &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;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;tr&amp;gt;&amp;lt;td&amp;gt;PREC&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;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;INPA&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;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPB&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;NA&amp;lt;td&amp;gt;No &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;INPU&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;NA&amp;lt;td&amp;gt;No&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;A&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;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;B&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;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &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;U&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;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &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;FTA&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&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;tr&amp;gt;&amp;lt;td&amp;gt;FTB&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&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;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;FTU&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&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;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;NOA&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 &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOB&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 &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;NOU&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 &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;NEA&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 &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEB&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 &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;NEU&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 &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;OUTA&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;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTB&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;NA&amp;lt;td&amp;gt;No &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;OUTU&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;NA&amp;lt;td&amp;gt;No &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;VALA&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;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALB&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;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &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;VALU&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;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &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;OVLA&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;tr&amp;gt;&amp;lt;td&amp;gt;OVLB&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;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;OVLU&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;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;FTVA&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&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;tr&amp;gt;&amp;lt;td&amp;gt;FTVB&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&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;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;FTVU&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&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;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;NOVA&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 &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVB&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 &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;NOVU&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 &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;NEVA&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 &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVB&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 &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;NEVU&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 &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Field Descriptions ==&lt;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 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;Value returned from process routine&amp;lt;td&amp;gt;This field holds the value returned from the user defined process routine, which must be zero for the output links OUTA...OUTU to be processed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;Old VAL&amp;lt;td&amp;gt;Previous VAL, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;Link Flag&amp;lt;td&amp;gt;Tells the record whether to read or ignore the SUBL link. If the value is READ, then the name of the subroutine to be called at process time is read from SUBL. If the value is IGNORE, the name of the subroutine is that currently held in SNAM. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;Event Flag&amp;lt;td&amp;gt;Tells the record when to post change events on the output fields VALA,...,VALU. If the value is NEVER, events are never posted. If the value is ALWAYS, events are posted everytime the record processes. If the value is ON CHANGE, events are posted when any element of an array changes value. This flag controls value, log (archive) and alarm change events.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;Subroutine Link&amp;lt;td&amp;gt;Where to get the subroutine name from. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;Initialisation Routine &amp;lt;td&amp;gt;This is the name of the initialisation routine to be called once, &lt;br /&gt;
at iocInit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;This is the name of the routine to be called when the record processes. Note, this can be overwritten by the SUBL link, if &lt;br /&gt;
LFLG is set to READ. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;Old process subroutine name. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;Subroutine Address &amp;lt;td&amp;gt;The address of the routine called at process time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;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;Specifies the Alarm severity. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;Display Precision &amp;lt;td&amp;gt;Specifies the number of decimal places with which to display the values of the fields VALA,...,VALU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA,..., INPU&amp;lt;td&amp;gt;Input Link A,..., Input Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The input links from where the values of A,...,U are fetched &lt;br /&gt;
during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A,...,U&amp;lt;td&amp;gt;Input Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The input fields which hold the scalar values or arrays fetched &lt;br /&gt;
in across the input links INPA,...,INPU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA,..., FTU&amp;lt;td&amp;gt;Field Type of A Field Type of U &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the input values. These can be any of the following:&lt;br /&gt;
&amp;quot;STRING&amp;quot;,&amp;quot;CHAR&amp;quot;,&amp;quot;UCHAR&amp;quot;,&amp;quot;SHORT&amp;quot;,&amp;quot;USHORT&amp;quot;,&amp;quot;LONG&amp;quot;,&amp;quot;ULONG&amp;quot;,&amp;quot;FLOAT&amp;quot;,&amp;quot;DOUBLE, &amp;quot;ENUM&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA..., NOU&amp;lt;td&amp;gt;Max elements in A,.. Max elements in U &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements of storage allocated for each input field. Default is 1 (scalar value). An array is specified by setting this field to greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA..., NEU&amp;lt;td&amp;gt;Number of elements in A,.. Number of elements in U &lt;br /&gt;
&amp;lt;td&amp;gt;The current number of elements stored in each input field. Field contains an array if this field is greater than 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA,..., OUTU&amp;lt;td&amp;gt;Output Link A,.. Output Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The output links on which the scalars or arrays located at VALA,...,VALU are placed during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA,.., VALU&amp;lt;td&amp;gt;Output Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The output fields which hold the scalar values or arrays &lt;br /&gt;
pushed out across the output links OUTA,...,OUTU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA,..., FTVU&amp;lt;td&amp;gt;Field Type of VALA Field Type of VALU &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the output values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA,.., OVLU&amp;lt;td&amp;gt;Previous Outputs &lt;br /&gt;
&amp;lt;td&amp;gt;The previous values of the outputs. These are used to decide &lt;br /&gt;
when to post events if EFLG is set to ON CHANGE. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA,..., NOVU&amp;lt;td&amp;gt;Max elements in VALA,.. Max elements in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements of storage allocated for each output field. Default is 1 (scalar value). An array is specified by setting this field to greater than 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA,..., NEVU&amp;lt;td&amp;gt;Number of elements in VALA,.. Number of elements in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The current number of elements stored in each output field. Field contains an array if this field is greater than 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support Routines ==&lt;br /&gt;
=== init_record ===&lt;br /&gt;
&lt;br /&gt;
This routine is called twice at iocInit. On the first call it does the&lt;br /&gt;
following: &lt;br /&gt;
&lt;br /&gt;
* Calloc sufficient space to hold the number of input scalars and/or arrays defined by the settings of the fields FTA-FTU and NOA-NOU.  Initialize fields NE* to the values of the associated NO* field values. &lt;br /&gt;
* Calloc sufficient space to hold the number of output scalars and/or arrays defined by  the settings of the fields FTVA-FTVU and NOVA-NOVU.  For the output fields, also calloc space to  hold the previous value of a field. This is required when the decision is made on  whether or not to post events. &lt;br /&gt;
&lt;br /&gt;
On the second call, it does the following: &lt;br /&gt;
&lt;br /&gt;
* Initializes SUBL if it is a constant link. &lt;br /&gt;
* Initializes each constant input link. &lt;br /&gt;
* If the field INAM is set, look-up the address of the routine and call it. &lt;br /&gt;
* If the field LFLG is set to IGNORE and SNAM is defined, look-up the address of the process routine.&lt;br /&gt;
&lt;br /&gt;
=== process ===&lt;br /&gt;
This routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
* If PACT is FALSE, perform normal processing&lt;br /&gt;
* If PACT is TRUE, perform asynchronous-completion processing&lt;br /&gt;
&lt;br /&gt;
Normal processing:&lt;br /&gt;
&lt;br /&gt;
* Set PACT to TRUE. &lt;br /&gt;
* If the field LFLG is set to READ, get the subroutine name from the SUBL link. If the name is not NULL and it is not the same as the previous subroutine name, lookup  the subroutine address. Set the old subroutine name, ONAM, equal to the current name, SNAM. &lt;br /&gt;
* Fetch the values from the input links.&lt;br /&gt;
* Set PACT to FALSE&lt;br /&gt;
* If all input-link fetches succeeded, call the routine specified by SNAM.&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* If the SNAM routine set PACT to TRUE, then return.  In this case, we presume the routine has arranged that process will be called at some later time for asynchronous completion.&lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* If VAL is zero, write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
Asynchronous-completion processing:&lt;br /&gt;
&lt;br /&gt;
* Call the routine specified by SNAM (again).&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* If VAL is zero, write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
=== get_precision ===&lt;br /&gt;
&lt;br /&gt;
Sets the display precision to the value of PREC for any of the output fields&lt;br /&gt;
VALA,...,  VALU. This routine could be called for any of these fields. &lt;br /&gt;
&lt;br /&gt;
=== cvt_dbaddr ===&lt;br /&gt;
&lt;br /&gt;
The purpose of this routine is to fill in the struct dbAddr for the field of the&lt;br /&gt;
record for  which it has been called. Typically, the number of elements in the&lt;br /&gt;
field, the field type  and the size of the field will be set in this routine.&lt;br /&gt;
For arrays, this record support routine  is essential. &lt;br /&gt;
&lt;br /&gt;
=== get_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine returns the current number of elements and the offset of the first&lt;br /&gt;
value for  an array. For this record, the offset field is always 0. &lt;br /&gt;
&lt;br /&gt;
=== put_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine is called after new values have been placed in an array. &lt;br /&gt;
&lt;br /&gt;
=== special ===&lt;br /&gt;
&lt;br /&gt;
This routine is called whenever the SNAM field changes. It is called twice, once&lt;br /&gt;
before  the change and once after. On the first call, the routine simply&lt;br /&gt;
returns. On the second  call, after SNAM has changed, it implements the&lt;br /&gt;
following algorithm: &lt;br /&gt;
&lt;br /&gt;
* If LFLG is set to IGNORE and SNAM is not NULL, then look-up the address of the  routine specified by SNAM. Set the SADR field equal to the subroutine address. &lt;br /&gt;
* Post change-of-value and log events for the SADR field, if this has changed.&lt;br /&gt;
&lt;br /&gt;
== Use of the aSub Record  ==&lt;br /&gt;
&lt;br /&gt;
The aSub record has input-value fields (A-U) and output-value fields (VALA-VALU), which are completely independent.  The input-value fields have associated input links (INPA-INPU), and the output-value fields have associated output links (OUTA-OUTU).  Both inputs and outputs have type fields (FTA-FTU, FTVA-FTVU, which default to 'DOUBLE') and number-of-element fields (NOA-NOU, NOVA-NOVU, which default to '1'). The output links OUTA-OUTU will only be processed if the subroutine returns a zero (OK) status value.&lt;br /&gt;
&lt;br /&gt;
=== Example database fragment ===&lt;br /&gt;
&lt;br /&gt;
To use the A field to read an array from some other record, then, you would need a database fragment that might look something like this:&lt;br /&gt;
&lt;br /&gt;
    record(aSub,&amp;quot;my_asub_record&amp;quot;) {&lt;br /&gt;
        field(SNAM,&amp;quot;my_asub_routine&amp;quot;)&lt;br /&gt;
        ...&lt;br /&gt;
        field(FTA, &amp;quot;LONG&amp;quot;)&lt;br /&gt;
        field(NOA, &amp;quot;100&amp;quot;)&lt;br /&gt;
        field(INPA, &amp;quot;myWaveform_1 NPP NMS&amp;quot;)&lt;br /&gt;
        ...&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
If you wanted some other record to be able to write to the A field, then you would delete the input link above.  If you wanted the A field to hold a scalar value, you would either delete the NOA specification, or specify it as &amp;quot;1&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
=== Example subroutine fragment ===&lt;br /&gt;
&lt;br /&gt;
The associated subroutine code that uses the A field might look like this:&lt;br /&gt;
&lt;br /&gt;
    static long my_asub_routine(aSubRecord *prec) {&lt;br /&gt;
        long i, *a;&lt;br /&gt;
        double sum=0;&lt;br /&gt;
        ...&lt;br /&gt;
        a = (long *)prec-&amp;gt;a;&lt;br /&gt;
        for (i=0; i&amp;lt;prec-&amp;gt;noa; i++) {&lt;br /&gt;
            sum += a[i];&lt;br /&gt;
        }&lt;br /&gt;
        ...&lt;br /&gt;
        return 0; /* process output links */&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
Note that the subroutine code must always handle the value fields (A-U, VALA-VALU) as arrays, even if they contain only a single element.&lt;br /&gt;
&lt;br /&gt;
=== Required export code ===&lt;br /&gt;
&lt;br /&gt;
Aside from your own code, you must export and register your subroutines so the record can locate them.  The simplest way is as follows:&lt;br /&gt;
&lt;br /&gt;
    #include &amp;lt;registryFunction.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;epicsExport.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    static long my_asub_routine(aSubRecord *prec) {&lt;br /&gt;
        ...&lt;br /&gt;
    }&lt;br /&gt;
    epicsRegisterFunction(my_asub_routine);&lt;br /&gt;
&lt;br /&gt;
=== Required database-definition code ===&lt;br /&gt;
&lt;br /&gt;
The .dbd file loaded by the ioc must then contain the following line, which tells the linker to include your object file in the IOC binary:&lt;br /&gt;
&lt;br /&gt;
    function(my_asub_routine)&lt;br /&gt;
&lt;br /&gt;
=== Device support, writing to hardware ===&lt;br /&gt;
&lt;br /&gt;
The aSub record does not call any device support routines.  If you want to write to hardware, you might use your output fields and links to write to some other record that can write to hardware.&lt;br /&gt;
&lt;br /&gt;
=== Dynamically Changing the User Routine called during Record Processing ===&lt;br /&gt;
&lt;br /&gt;
The aSub record allows the user to dynamically change which routine is called when the record processes. This can be done in two ways: &lt;br /&gt;
&lt;br /&gt;
* The LFLG field can be set to READ so that the name of the routine is read from the SUBL link. Thus, whatever is feeding this link can change the name of the routine before the aSub record is processed. In this case, the record looks in the symbol table for the symbol name whenever the name of routine fetched from the link changes. &lt;br /&gt;
* The LFLG field can be set to IGNORE. In this case, the routine called during record processing is that specified in the SNAM field. Under these conditions, the SNAM field can be changed by a Channel Access write to that field. During development when trying several versions of the routine, it is not necessary to reboot the IOC and reload the database. A new routine can be loaded with the vxWorks ld command, and Channel Access or the dbpf command used to put the name of the routine into the record's SNAM field. The record will look up the symbol name in the symbol table whenever the SNAM field gets modified. The same routine name can even be used as the vxWorks symbol lookup returns the latest version of the code to have been loaded.&lt;/div&gt;</summary>
		<author><name>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Subroutine&amp;diff=3691</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=3691"/>
		<updated>2012-10-18T19:38:14Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Subroutine Connection */ Change INAM and SNAM length to 40&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 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;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;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;
=== 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 [40]&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 [40]&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;
=== 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>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Permissive&amp;diff=3690</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=3690"/>
		<updated>2012-10-12T14:26:54Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Client-server Parameters */ remove unneeded &amp;quot;the&amp;quot;&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 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;
=== 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>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Binary_Input&amp;diff=2874</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=2874"/>
		<updated>2011-02-24T15:30:42Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Alarm Parameters */ &amp;quot;NO ALARM&amp;quot; should be &amp;quot;NO_ALARM&amp;quot;&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;
=== 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>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=How_to_check_out_EPICS_Base_with_Bazaar&amp;diff=2932</id>
		<title>How to check out EPICS Base with Bazaar</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=How_to_check_out_EPICS_Base_with_Bazaar&amp;diff=2932"/>
		<updated>2010-08-27T17:34:48Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Shelving Local Changes */ Fixed typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bazaar can support several different approaches; the one you should use depends on who you are and what you expect to do with the code-base.  It usually allows you to change your mind later though, so don't worry if you pick the wrong model to start with, you can modify your configuration as you need later on (although I'm not going to give instructions on how to do that here, read the Bazaar documentation).&lt;br /&gt;
&lt;br /&gt;
You must have Bazaar version 2.x installed; older versions do not support the same repository format. I am currently using version 2.0.3, but any release in the 2.x series should be fine.&lt;br /&gt;
&lt;br /&gt;
Bazaar has extensive built-in help text, just type 'bzr help &amp;lt;command&amp;gt;' for more information on &amp;lt;command&amp;gt; or 'bzr help topics' for a list of other help topics.  The complete documentation for the tool can be found online [http://doc.bazaar.canonical.com/bzr.2.0/en/ here].&lt;br /&gt;
&lt;br /&gt;
If you have problems connecting to launchpad and your network requires you to use an HTTP proxy server, make sure that you have both the http_proxy and https_proxy environment variables set appropriately.&lt;br /&gt;
&lt;br /&gt;
If you are behind a firewall and the 'lp:' shorthand does not work, try the following transport specification:&lt;br /&gt;
   bzr checkout bzr+ssh://&amp;lt;lp-user-name&amp;gt;@bazaar.launchpad.net/~epics-core/epics-base/3.14/&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Non-developers ==&lt;br /&gt;
&lt;br /&gt;
These options apply to EPICS users who do not expect to make changes to the source code themselves, but who want to be able to access the latest official development versions of the code or to look at how it has changed between different past revisions.&lt;br /&gt;
&lt;br /&gt;
=== Check out a working tree (CVS model, remote history) ===&lt;br /&gt;
&lt;br /&gt;
Use this option if you just want to a copy of the latest version of Base from the repository (for example to build and test) but don't expect to modify the code at all, or to look at its history much.  This approach is very similar to using CVS since you only download a copy of the particular revision you're interested in, but it require network connectivity for all activities that access the repository in any way.  An EPICS Base 3.14 working tree uses about 12MB of disk space at the time of writing.&lt;br /&gt;
&lt;br /&gt;
The following command will create a directory tree called base-3.14 containing the latest code that was checked in to the 3.14 branch of Base:&lt;br /&gt;
   bzr checkout --lightweight lp:epics-base/3.14 base-3.14&lt;br /&gt;
&lt;br /&gt;
The lp: path above specifies a branch to check out from the launchpad server.  The branch at lp:epics-base/3.14 is a branch containing all the development work for the R3.14 releases of Base.  There are similar branches for the older series, although we're not expecting anyone to check any of these out; they're provided for historical reasons.  The development on the branch called trunk will eventually become the 3.15 series.&lt;br /&gt;
&lt;br /&gt;
If you want to check out a specific tagged version, in this case we're requesting the R3.14.11 release, use this command instead:&lt;br /&gt;
   bzr checkout --lightweight -r tag:R3.14.11 lp:epics-base/3.14 base-3.14&lt;br /&gt;
&lt;br /&gt;
To update a lightweight working tree at a later date with the latest changes from the branch, use this command inside the tree:&lt;br /&gt;
   bzr update&lt;br /&gt;
&lt;br /&gt;
You can use the command 'bzr tags' from inside the working tree to list all the tags known on this branch.&lt;br /&gt;
&lt;br /&gt;
Unlike CVS, 'bzr update' cannot apply changes that move your tree to a different historical revision; for that you use the command below, in this case to move to the R3.14.10 release tag:&lt;br /&gt;
   bzr revert -r tag:R3.14.10&lt;br /&gt;
&lt;br /&gt;
If you made any local changes to the files in the working tree your changes will be retained through a 'bzr update' or 'bzr revert' operation.  Any local changes that overlap with changes from the repository will create a conflict and have to be resolved by hand, just as happens with CVS.&lt;br /&gt;
&lt;br /&gt;
If you find yourself using Bazaar commands inside the tree more than once or twice, you should probably check out a branch instead, which makes a local copy of the complete history of the branch and removes the need for network activity to access that history.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Check out a branch (local history) ===&lt;br /&gt;
&lt;br /&gt;
This option is similar to the previous one but also gives you a local copy of the complete history of the branch.  This speeds up all activities that need to examine the repository history, but since the local branch is still bound to the central repository at launchpad.net you can't commit any changes to it without write permission for the repository branch.  A 3.14 branch needs about 28MB of disk space at the time of writing.&lt;br /&gt;
&lt;br /&gt;
The following command will create a directory tree called base-3.14 containing the latest code and all of the history that was checked in to the 3.14 branch of Base:&lt;br /&gt;
   bzr checkout lp:epics-base/3.14 base-3.14&lt;br /&gt;
&lt;br /&gt;
The lp: path above specifies a branch to check out from the launchpad server.  The branch at lp:epics-base/3.14 is a branch containing all the development work for the R3.14 releases of Base.  There are similar branches for the older series, although we're not expecting anyone to check any of these out; they're provided for historical reasons.  The development on the branch called trunk will eventually become the 3.15 series.&lt;br /&gt;
&lt;br /&gt;
If you want to check out a particular tagged version, use this command instead:&lt;br /&gt;
   bzr checkout -r tag:R3.14.11 lp:~epics-core/epics-base/3.14 base-3.14.11&lt;br /&gt;
&lt;br /&gt;
Inside the working tree, Bazaar supports the expected commands 'bzr log' and 'bzr diff' to examine file history.  Use 'bzr help revisionspec' for information on specifying particular revisions to examine.&lt;br /&gt;
&lt;br /&gt;
To update your working tree with the latest changes from the parent branch at some later date, use this command inside the tree:&lt;br /&gt;
   bzr update&lt;br /&gt;
Note that if you're working in a regular branch and not a checkout, the command to use is&lt;br /&gt;
   bzr pull&lt;br /&gt;
and if you have committed changes to your branch that are not in the parent&lt;br /&gt;
   bzr merge&lt;br /&gt;
&lt;br /&gt;
Note that 'bzr pull' or 'bzr update' cannot move your tree to a different historical revision like in CVS, for that you use this command:&lt;br /&gt;
   bzr revert -r tag:R3.14.10&lt;br /&gt;
&lt;br /&gt;
You can use 'bzr tags' when inside the working tree to list all the tags known on this branch.&lt;br /&gt;
&lt;br /&gt;
If you made any local changes to the files in the working tree your changes will be retained through a 'bzr update' or 'bzr revert' operation.  Any local changes that overlap with changes from the repository will create a conflict and have to be resolved by hand, just as happens with CVS.&lt;br /&gt;
&lt;br /&gt;
If you want to keep some permanent local changes, consider unbinding your tree from the central repository branch, which converts it to a regular branch.  This will allow you to commit local changes into your local repository.  The 'bzr unbind' command does this, and can be undone again with 'bzr bind'.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Developers ==&lt;br /&gt;
&lt;br /&gt;
Developers usually want to be able to commit changes to a local repository while they're working on a new feature or bug-fix.  Once those changes are complete they will publish and propose them for review; once approved a member of the epics-core team will merge the new code into the appropriate central repository and it will appear in the next release of that development series.&lt;br /&gt;
&lt;br /&gt;
=== Repository Initialization ===&lt;br /&gt;
&lt;br /&gt;
Unless you are only going to work on one modification to epics-base, you should create a local repository, which will be used as the backing-store to hold the history of all your development work on EPICS Base, and will be shared by all your bazaar branches.  Doing this saves network bandwidth, as it avoids having to download the past history of changes to epics-base from Launchpad more than once.  This command will create an epics-base directory in your home directory, inside of which you will check out your branches (you can use a different name or location, but it should be a parent or grand-parent directory of where you'll create your task branches):&lt;br /&gt;
   bzr init-repo ~/epics-base&lt;br /&gt;
&lt;br /&gt;
=== Creating a Task Branch ===&lt;br /&gt;
&lt;br /&gt;
Bazaar encourages developers to create a separate branch for each separate feature or bug fix being developed, which would normally be created as a sibling to the mirror branch we checked out above.  While working on the fix you are free to commit changes whenever you like, which are recorded in your local repository:&lt;br /&gt;
   cd ~/epics-base&lt;br /&gt;
   bzr branch lp:epics-base fix-123&lt;br /&gt;
   cd fix-123&lt;br /&gt;
   # ''Hack...''&lt;br /&gt;
   bzr ci -m 'Hacked the frooz-bodger to stop it wibbling'&lt;br /&gt;
&lt;br /&gt;
If a particular commit fixes a bug that is registered on Launchpad, you can have Bazaar record that fact at the time like this:&lt;br /&gt;
   bzr ci --fixes=lp:123&lt;br /&gt;
&lt;br /&gt;
When you are sure that your branch fully implements the new feature or bug-fix that you've been working on and you want the core developers to take a look at it, you should publish it on launchpad and propose it for merging (see [[#Publishing a Branch]] below).&lt;br /&gt;
&lt;br /&gt;
=== Updates and Merging ===&lt;br /&gt;
&lt;br /&gt;
While you're working on your task branch, other developers' changes may be being merged into the central branch.  In most cases there will be little conflict between their work and yours, thus you should ''not'' normally merge changes from the central branch into yours before your branch has been proposed for merger.  Merging changes from the central branch before requesting the review adds those changes to your merge proposal, which makes the reviewers' task harder.  Minor conflicts are to be expected in the release notes, but these will be fixed by the core developer who merges your branch after it has been approved.&lt;br /&gt;
&lt;br /&gt;
==== Pulling Updates ====&lt;br /&gt;
&lt;br /&gt;
If you have not committed any changes to your fix-123 branch yet, you can pull all the central changes into your branch in a single command:&lt;br /&gt;
   cd fix-123&lt;br /&gt;
   bzr pull&lt;br /&gt;
   # ''Should report any conflicts''&lt;br /&gt;
&lt;br /&gt;
If you're not sure whether you've made any commits or not, you can ask Bazaar:&lt;br /&gt;
   cd fix-123&lt;br /&gt;
   bzr missing&lt;br /&gt;
   # ''Reports commit differences between trees''&lt;br /&gt;
&lt;br /&gt;
==== Merging Updates ====&lt;br /&gt;
&lt;br /&gt;
If a change does get merged to the central branch which significantly affects your work (and you have already made at least one commit to your branch), you should bring this to the attention of the core developers and ask them how to proceed.  If they tell you to merge in from the central branch, make sure you have no uncommitted changes (by either committing or shelving them), then:&lt;br /&gt;
   cd fix-123&lt;br /&gt;
   bzr merge&lt;br /&gt;
   # ''Fix any conflicts, then tell Bazaar like this:''&lt;br /&gt;
   bzr resolve ''file''&lt;br /&gt;
   # ''Finally commit the merge''&lt;br /&gt;
   bzr ci -m 'Merged with latest 3.14 changes'&lt;br /&gt;
&lt;br /&gt;
If Bazaar reports any conflicts from the 'bzr merge' command, you ''must'' resolve them with 'bzr resolve' before attempting to commit the result.  You will find a pristine copy of your version in ''file''.THIS, the other version in ''file''.OTHER and the common ancestor in ''file''.BASE, and collectively these should help you to see what's happening.  The command 'bzr remerge' might also be useful in some circumstances, it allows you to redo the merge using some other merge algorithms.  The .THIS, .OTHER and .BASE files will be deleted when you run the 'bzr resolve' command.&lt;br /&gt;
&lt;br /&gt;
If you decide that a merge was a mistake and want to undo it, the 'bzr revert' command will undo all uncommitted changes and restore your tree to the way it was after the last commit.&lt;br /&gt;
&lt;br /&gt;
==== Rebasing a Private Branch ====&lt;br /&gt;
&lt;br /&gt;
If it is suggested that you rebase your private branch rather than merging the changes from the central branch into it, you will need the rebase Bazaar plugin installed (also now called the rewrite plugin).  Use 'bzr plugins' to find out if it is already present or not.  If not, you can find it at [http://wiki.bazaar.canonical.com/Rewrite Rewrite Plugin].&lt;br /&gt;
&lt;br /&gt;
The 'bzr rebase' command is used like this:&lt;br /&gt;
   cd fix-123&lt;br /&gt;
   bzr rebase&lt;br /&gt;
   # ''Fix any conflicts, then tell Bazaar like this:''&lt;br /&gt;
   bzr resolve ''file''&lt;br /&gt;
   # ''Now continue the rebase:''&lt;br /&gt;
   bzr rebase-continue&lt;br /&gt;
   # ''Repeat resolve and rebase-continue commands until done''&lt;br /&gt;
&lt;br /&gt;
'''Never''' rebase a branch that you have published and which other people may be using as the basis for other development work.  Rebasing rewrites the history of your branch, and can result in major spaghetti problems unless you know what you're doing.  If in any doubt, make a copy of your branch first ('bzr branch fix-123 clone-123') and do the rebase operation on the copy while leaving the original untouched.  Test the rebased branch to make sure your new functionality still works before continuing development or publishing the result.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Shelving Local Changes ===&lt;br /&gt;
&lt;br /&gt;
If you have some local changes that you don't want to commit (say some CONFIG_SITE changes needed to build the code at your site) but you're about to use a command such as 'bzr merge' that doesn't work if there are uncommitted changes, you can use 'bzr shelve configure/CONFIG_SITE' to temporarily remove them, and 'bzr unshelve' later to bring them back.  The shelve command will show you each unsaved change in the named file(s) in turn and ask whether you want to shelve it or not (the '--all' option skips that part).  Read the 'bzr help shelve' output for more details.&lt;br /&gt;
&lt;br /&gt;
=== Publishing a Branch ===&lt;br /&gt;
&lt;br /&gt;
Anyone can publish branches of the epics-base project on Launchpad, where other people can find and use them.  You must have registered for an account at [https://launchpad.net/ Launchpad.net] first and uploaded your ssh public-key. Then:&lt;br /&gt;
   bzr launchpad-login ''userid''&lt;br /&gt;
   cd ~/epics-base/fix-123&lt;br /&gt;
   bzr push lp:~''user-id''/epics-base/fix-123&lt;br /&gt;
&lt;br /&gt;
== Core Developers ==&lt;br /&gt;
&lt;br /&gt;
In addition to developing your own features and fixes, if you are a member of the epics-core team you will be able to merge changes (either your own or someone else's) into the official branches in the central repository.  That task is simplified if you keep a checkout (mirror) of the relevant central branch, which you can also use to directly commit tiny changes to the repository.&lt;br /&gt;
&lt;br /&gt;
The model described here corresponds to the &amp;quot;decentralized with shared mainline&amp;quot; workflow given in the [http://doc.bazaar.canonical.com/bzr.2.1/en/user-guide/distributed_intro.html Bazaar User Guide].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Initial Checkout ===&lt;br /&gt;
&lt;br /&gt;
First initialize a local repository in a parent directory which will be used as the backing-store to hold the history of all your development work on EPICS Base.  Make sure you are logged into Launchpad, then checkout a mirror branch of Base inside your repository directory:&lt;br /&gt;
   bzr init-repo ~/epics-base&lt;br /&gt;
   bzr launchpad-login ''userid''&lt;br /&gt;
   cd ~/epics-base&lt;br /&gt;
   bzr checkout lp:epics-base/3.14 mirror-3.14&lt;br /&gt;
&lt;br /&gt;
This mirror branch should not be used directly for developing new code or major bug fixing, but can be used for making &amp;quot;obviously correct&amp;quot; changes to things like comments or string literals.  Major work should take place in a different tree usually called a ''feature'' or ''task branch''.&lt;br /&gt;
&lt;br /&gt;
The mirror branch allows you to merge tested sets of changes from your feature branches into the central repository, or to try out merging other branches while performing code reviews.  Remember that performing a commit in the mirror branch is only possible if you are an epics-core member, and will immediately push the change to the official branch on the Launchpad website.&lt;br /&gt;
&lt;br /&gt;
=== Creating a Task Branch ===&lt;br /&gt;
&lt;br /&gt;
Bazaar encourages developers to create a separate branch for each separate feature or bug fix being developed, which would normally be created as a sibling to the mirror branch we checked out above.  While working on the fix you are free to commit changes whenever you like, which are recorded in your local repository:&lt;br /&gt;
   cd ~/epics-base&lt;br /&gt;
   bzr branch mirror-3.14 fix-123&lt;br /&gt;
   cd fix-123&lt;br /&gt;
   # ''Hack...''&lt;br /&gt;
   bzr ci -m 'Hacked the frooz-bodger to stop it wibbling'&lt;br /&gt;
&lt;br /&gt;
If a particular commit fixes a bug that is registered on Launchpad, you should have Bazaar record that fact at the time like this:&lt;br /&gt;
   bzr ci --fixes=lp:123&lt;br /&gt;
&lt;br /&gt;
When you are sure that your branch fully implements the new feature or bug-fix that you've been working on and you want the other core developers to review it, you should publish it on launchpad and propose it for merging (see [[#Publishing a Branch]] below).&lt;br /&gt;
&lt;br /&gt;
=== Updating the Mirror ===&lt;br /&gt;
&lt;br /&gt;
Update your mirror branch frequently to fetch changes from the central repository.  Since you aren't using this checkout area for development there should never be any conflicts when you do this:&lt;br /&gt;
   cd ~/epics-base&lt;br /&gt;
   bzr update mirror-3.14&lt;br /&gt;
&lt;br /&gt;
=== Pulling Updates ===&lt;br /&gt;
&lt;br /&gt;
If you have not committed any changes to one or more of your feature branches, you can pull the changes from the update into those branches very easily, and Bazaar will merge them with your uncommitted edits.  After updating the mirror-3.14 tree as above, you just do this:&lt;br /&gt;
   cd fix-123&lt;br /&gt;
   bzr pull&lt;br /&gt;
   # ''Should report any conflicts''&lt;br /&gt;
&lt;br /&gt;
If you're not sure whether you've made any commits or not, you can ask Bazaar:&lt;br /&gt;
   cd fix-123&lt;br /&gt;
   bzr missing&lt;br /&gt;
   # ''Reports commit differences between trees''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Updates and Merging ===&lt;br /&gt;
&lt;br /&gt;
While you're working on your task branch, other developers' changes may be being merged into the central branch.  In most cases there will be little conflict between their work and yours, thus you should ''not'' normally merge changes from the central branch into yours before your branch has been proposed for merger.  Merging changes from the central branch before requesting the review adds those changes to your merge proposal, which makes the reviewers' task harder.  Minor conflicts are to be expected in the release notes, but they should only be fixed when you merge in your branch after it has been approved.&lt;br /&gt;
&lt;br /&gt;
==== Merging vs. Rebasing ====&lt;br /&gt;
&lt;br /&gt;
Rebasing a branch is a controversial issue in some communities, there are proponents and nay-sayers on whether it should be used or not.  Here are a couple of the discussions:&lt;br /&gt;
 * [http://softwareswirl.blogspot.com/2009/04/truce-in-merge-vs-rebase-war.html A truce in the merge vs. rebase war?]&lt;br /&gt;
 * [http://fourkitchens.com/blog/2009/04/20/alternatives-rebasing-bazaar Alternatives to rebasing in Bazaar]&lt;br /&gt;
&lt;br /&gt;
Ralph and Andrew are of the opinion that rebasing is an acceptable technique in private branches.&lt;br /&gt;
&lt;br /&gt;
===== Merging Updates =====&lt;br /&gt;
&lt;br /&gt;
If you decide to merge in the central branch changes into your work, the steps are:&lt;br /&gt;
   cd ~/epics-base/feature&lt;br /&gt;
   bzr merge&lt;br /&gt;
   # ''Fix any conflicts, then tell Bazaar like this:''&lt;br /&gt;
   bzr resolve ''file''&lt;br /&gt;
   # ''Finally commit the merge''&lt;br /&gt;
   bzr ci -m 'Merged changes from 3.14 branch'&lt;br /&gt;
&lt;br /&gt;
Note that you should either shelve (see below) or check in any uncommitted local modifications into the task branch before doing the above merge step, if you try to use 'bzr merge --force' instead you risk mixing up your changes with someone else's, which can be confusing and tricky to resolve.&lt;br /&gt;
&lt;br /&gt;
If Bazaar reports any conflicts from the 'bzr merge' command, you ''must'' resolve them with 'bzr resolve' before attempting to commit the result.  You will find a pristine copy of your version in ''file''.THIS, the other version in ''file''.OTHER and the common ancestor in ''file''.BASE, and collectively these should help you to see what's happening.  The command 'bzr remerge' might also be useful in some circumstances, it allows you to redo the merge using some other merge algorithms.  The .THIS, .OTHER and .BASE files will be deleted when you run the 'bzr resolve' command.&lt;br /&gt;
&lt;br /&gt;
If you decide that the merge was a mistake and want to undo it, the 'bzr revert' command will undo all uncommitted changes and restore your tree to the way it was after the last commit.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== Rebasing a Private Branch =====&lt;br /&gt;
&lt;br /&gt;
If it is suggested that you rebase your private branch rather than merging the changes from the central branch into it, you will need the rebase Bazaar plugin installed (also now called the rewrite plugin).  Use 'bzr plugins' to find out if it is already present or not.  If not, you can find it at [http://wiki.bazaar.canonical.com/Rewrite Rewrite Plugin].&lt;br /&gt;
&lt;br /&gt;
The 'bzr rebase' command is used like this:&lt;br /&gt;
   cd fix-123&lt;br /&gt;
   bzr rebase&lt;br /&gt;
   # ''Fix any conflicts, then tell Bazaar like this:''&lt;br /&gt;
   bzr resolve ''file''&lt;br /&gt;
   # ''Now continue the rebase:''&lt;br /&gt;
   bzr rebase-continue&lt;br /&gt;
   # ''Repeat resolve and rebase-continue commands until done''&lt;br /&gt;
&lt;br /&gt;
'''Never''' rebase a branch that you have published and which other people may be using as the basis for other development work.  Rebasing rewrites the history of your branch, and can result in major spaghetti problems unless you know what you're doing.  If in any doubt, make a copy of your branch first ('bzr branch fix-123 clone-123') and do the rebase operation on the copy while leaving the original untouched.  Test the rebased branch to make sure your new functionality still works before continuing development or publishing the result.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Merging Task or Feature Branches ===&lt;br /&gt;
&lt;br /&gt;
The ability to commit changes to the central repository is restricted to members of the epics-core team at [https://launchpad.net/ Launchpad.net], but Bazaar and Launchpad will still allow you to publish branches containing your own development even if you do not belong to that team; a core developer may subsequently merge and commit the changes from your branch into the official one.&lt;br /&gt;
&lt;br /&gt;
Note that you can undo a merge anytime before the final commit by using the 'bzr revert' command.&lt;br /&gt;
&lt;br /&gt;
==== Merging a Local Branch ====&lt;br /&gt;
&lt;br /&gt;
For epics-core members, a feature branch of your own that has been reviewed and approved is merged and committed to the central branch as follows:&lt;br /&gt;
   cd ~/epics-base/mirror-3.14&lt;br /&gt;
   bzr update&lt;br /&gt;
   bzr missing ../fix-123&lt;br /&gt;
   # ''Check that you're about to merge the right changes''&lt;br /&gt;
   bzr merge ../fix-123&lt;br /&gt;
   # ''Fix any conflicts, then tell Bazaar like this:''&lt;br /&gt;
   bzr resolve ''file''&lt;br /&gt;
   # ''Finally commit the merge''&lt;br /&gt;
   bzr ci -m 'Fixed bug #123'&lt;br /&gt;
&lt;br /&gt;
After you have merged and committed your changes from a feature branch into the central branch(es) at launchpad, you can delete the branch directory, you don't have to do anything special with Bazaar.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Merging a Launchpad Branch ====&lt;br /&gt;
&lt;br /&gt;
If you're merging someone else's branch which is published on Launchpad, you can use the lp:~user/epics-base/branch-name URL for their branch directly, it is not necessary to download or checkout a copy of a branch to merge it:&lt;br /&gt;
   cd ~/epics-base/mirror-3.14&lt;br /&gt;
   bzr update&lt;br /&gt;
   bzr missing lp:~mdavidsaver/epics-base/rec-init&lt;br /&gt;
   # ''Check that you're about to merge the right changes''&lt;br /&gt;
   bzr merge lp:~mdavidsaver/epics-base/rec-init&lt;br /&gt;
   # ''Fix any conflicts, then tell Bazaar like this:''&lt;br /&gt;
   bzr resolve ''file''&lt;br /&gt;
   # ''Finally commit the merge''&lt;br /&gt;
   bzr ci -m &amp;quot;Merged Michael Davidsaver's 'rec-init' branch.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Cherry-picking ===&lt;br /&gt;
&lt;br /&gt;
This is not recommended, discuss on core-talk before you use cherry-picking...&lt;br /&gt;
&lt;br /&gt;
To apply a bug-fix change to more than one series branch, say to both 3.14 and the main trunk, Bazaar's merge command allows you to cherry-pick commits from a different branch.  If it's just one check-in this is very easy, especially if it's the last commit you made to that source branch.  In that case, you would use these commands to merge those changes to the trunk:&lt;br /&gt;
   cd ~/epics-base/mirror-trunk&lt;br /&gt;
   bzr update&lt;br /&gt;
   bzr merge -c -1 ../fix-123&lt;br /&gt;
   # ''Fix any conflicts and tell bzr like this:''&lt;br /&gt;
   bzr resolve ''file''&lt;br /&gt;
   # ''Finally commit the merge''&lt;br /&gt;
   bzr ci -m 'Fixed bug #123'&lt;br /&gt;
The '-c -1' option to 'bzr merge' means &amp;quot;cherry-pick just the last commit&amp;quot;, '-c -2' would be the penultimate commit and so on.  You can use 'bzr log' in the feature branch to find a specific absolute revision number on that branch and use that instead of the negative numbers.  If there were several commits you can give 'bzr merge' a range using the option '-r 44..47' instead, but note that '-r 44' means &amp;quot;merge all changes up to and including revision 44.&amp;quot;  If you get it wrong, you can always use 'bzr revert' to undo.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Shelving Local Changes ===&lt;br /&gt;
&lt;br /&gt;
If you have some local changes that you don't want to commit, say some CONFIG_SITE changes needed to build the code at your site, you can use 'bzr shelve configure/CONFIG_SITE' to temporarily hide them before committing or merging, and 'bzr unshelve' later to bring them back.  The shelve command will show you each of the changes in the named file(s) in turn and ask whether you want to shelve it or not.  Read the 'bzr help shelve' output for more details.&lt;br /&gt;
&lt;br /&gt;
=== Publishing a Branch ===&lt;br /&gt;
&lt;br /&gt;
Anyone can publish branches of the epics-base project on Launchpad, where other people can find and use them.  You must have registered for an account at [https://launchpad.net/ Launchpad.net] first and uploaded your ssh public-key.  Then:&lt;br /&gt;
   bzr launchpad-login ''userid''&lt;br /&gt;
   cd ~/epics-base/fix-123&lt;br /&gt;
   bzr push lp:~''user-id''/epics-base/fix-123&lt;br /&gt;
&lt;br /&gt;
Members of the epics-core team can create shared branches that other team members can also commit to by using the group name as the user-id in the Bazaar target path:&lt;br /&gt;
   bzr push lp:~epics-core/epics-base/feature-xyz&lt;/div&gt;</summary>
		<author><name>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Data_Fanout&amp;diff=2880</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=2880"/>
		<updated>2010-03-06T03:57:44Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Desired Output Parameters */ Changed &amp;quot;closed loop&amp;quot; to &amp;quot;closed_loop&amp;quot;&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;
=== 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>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Calculation&amp;diff=1799</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=1799"/>
		<updated>2009-12-18T17:20:44Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Alarm Parameters */ Fixed typo.&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 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;
=== 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>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_String_Calcout&amp;diff=2895</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=2895"/>
		<updated>2009-05-19T17:48:57Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Output Parameters */ Fixed IVOA and IVOV mix-up&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;IVOA&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;IVOV&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>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Multi-Bit_Binary_Output&amp;diff=1743</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=1743"/>
		<updated>2009-05-19T16:28:12Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Alarm Parameters */ Changed &amp;quot;NO ALARM&amp;quot; to &amp;quot;NO_ALARM&amp;quot;&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;
=== 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>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Multi-Bit_Binary_Input&amp;diff=1889</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=1889"/>
		<updated>2009-05-19T16:26:53Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Alarm Parameters */ Changed &amp;quot;NO ALARM&amp;quot; to &amp;quot;NO_ALARM&amp;quot;&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;
=== 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>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Calcout&amp;diff=1740</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=1740"/>
		<updated>2009-04-24T19:17:50Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Run-time Parameters */ Fixed description for LB-LL&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 system dependent.&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;IVOA&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;IVOV&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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;No&amp;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 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;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;
== 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>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Binary_Output&amp;diff=1741</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=1741"/>
		<updated>2009-03-18T17:00:15Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Desired Output Parameters */ Fixed typo&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 (OMSL) 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#menuOmsl|menuOmsl]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&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 writes its output. 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;
=== 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#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;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#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;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#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;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#menuIvoa|menuIvoa]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;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;
=== 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#menuSimm|menuSimm]]&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#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&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;
== 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>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Binary_Output&amp;diff=1657</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=1657"/>
		<updated>2009-03-18T16:58:27Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Output Specification */ Corrected definition of OUT field&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#menuOmsl|menuOmsl]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&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 writes its output. 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;
=== 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#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;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#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;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#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;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#menuIvoa|menuIvoa]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;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;
=== 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#menuSimm|menuSimm]]&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#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&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;
== 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>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Binary_Output&amp;diff=1656</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=1656"/>
		<updated>2009-02-18T16:26:00Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Desired Output Parameters */ Fixed typo&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#menuOmsl|menuOmsl]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&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#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;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#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;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#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;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#menuIvoa|menuIvoa]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;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;
=== 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#menuSimm|menuSimm]]&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#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&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;
== 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>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=File:RRM_3-14_Compression-2.gif&amp;diff=2923</id>
		<title>File:RRM 3-14 Compression-2.gif</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=File:RRM_3-14_Compression-2.gif&amp;diff=2923"/>
		<updated>2009-02-13T19:51:10Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: RRM Compression Diagram 1.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;RRM Compression Diagram 1.&lt;/div&gt;</summary>
		<author><name>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=File:RRM_3-14_Compression-1.gif&amp;diff=2922</id>
		<title>File:RRM 3-14 Compression-1.gif</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=File:RRM_3-14_Compression-1.gif&amp;diff=2922"/>
		<updated>2009-02-13T19:50:43Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: RRM Compression Equation 1.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;RRM Compression Equation 1.&lt;/div&gt;</summary>
		<author><name>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Sequence&amp;diff=2898</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=2898"/>
		<updated>2009-01-06T23:09:47Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Output Parameters */ Fixed typo&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 7&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;
=== 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 10&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;
=== 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>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Sequence&amp;diff=1618</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=1618"/>
		<updated>2009-01-06T23:08:53Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Desired Output Parameters */ Fixed typo&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 7&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;
=== 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>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Subroutine&amp;diff=2904</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=2904"/>
		<updated>2008-09-24T16:22:46Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Read Parameters */ Corrected typos in summary of INPx fields&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 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;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;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;
=== 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>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=EPICS_FAQ&amp;diff=1592</id>
		<title>EPICS FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=EPICS_FAQ&amp;diff=1592"/>
		<updated>2008-08-28T21:32:35Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Hardware */ Added &amp;quot;Which target architecture should I use?&amp;quot; section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General ==&lt;br /&gt;
=== What is EPICS? ===&lt;br /&gt;
EPICS is a set of software tools and applications which provide a software infrastructure for use in building distributed control systems to operate devices such as Particle Accelerators, Large Experiments and major Telescopes. Such distributed control systems typically comprise tens or even hundreds of computers, networked together to allow communication between them and to provide control and feedback of the various parts of the device from a central control room, or even remotely over the internet.&lt;br /&gt;
&lt;br /&gt;
The term (EPICS) also refers to the collaboration of organizations that are involved in the software's development and use. It was originally written jointly by Los Alamos National Laboratory and Argonne National Laboratory, and is now used by many large scientific facilities throughout the world. Development now occurs cooperatively between these various groups, with much sharing of I/O device support and client applications.&lt;br /&gt;
&lt;br /&gt;
=== Who Uses EPICS? ===&lt;br /&gt;
&lt;br /&gt;
=== How Can I Learn More About EPICS? ===&lt;br /&gt;
Many of the sites listed above have tutorials, slides, or overviews of EPICS.  It is helpful to peruse several different sites to get a broad exposure of how the facilities use EPICS.&lt;br /&gt;
&lt;br /&gt;
The [http://www.aps.anl.gov/epics/docs/GSWE.php Getting Started With EPICS Lecture Series] presented and recorded at the Advance Photon Source in the Fall of 2004 is probably the most recent and exhaustive series of training presentations.  The lectures are available via synchronized streaming video and the Power Point slides are also available for downloading via the above link.&lt;br /&gt;
&lt;br /&gt;
=== Is There a Demo I Can Play With? ===&lt;br /&gt;
The most recent published demo application is the Virtual Linac, which is available [http://www.aps.anl.gov/epics/download/examples/index.php here].  Also look at the [http://www.lnl.infn.it/~epics/ LivEPICS CD images] for a bootable system that you can use without having to install anything on a PC.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== What Hardware Platforms Can Be Used With EPICS? ===&lt;br /&gt;
The ''Platforms Supported'' sections of [http://www.aps.anl.gov/epics/base/R3-13.php EPICS Base R3.13] and [http://www.aps.anl.gov/epics/base/R3-14/index.php EPICS Base R3.14] provide a list of currently supported host and IOC target platforms for the corresponding EPICS Base release.&lt;br /&gt;
&lt;br /&gt;
=== Can I Port EPICS to My ACME SuperFast CPU? ===&lt;br /&gt;
=== What I/O Devices Are Supported? ===&lt;br /&gt;
Lots.  Most available I/O support is listed in the [http://www.aps.anl.gov/epics/modules/manufacturer.php Supported Hardware Database] but for various reasons that list is never complete, so it's always worth sending a message to [mailto:tech-talk@aps.anl.gov tech-talk] if there's something that you think other sites may be using but don't see listed.&lt;br /&gt;
&lt;br /&gt;
=== Which target architecture should I use? ===&lt;br /&gt;
==== VxWorks ====&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Hardware&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Target Architecture&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Motorola&amp;amp;nbsp;MVME&amp;amp;#8209;162&amp;amp;#8209;532A&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;tt&amp;gt;vxWorks-68040&amp;lt;/tt&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Motorola MVME-2100&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;tt&amp;gt;vxWorks-ppc603&amp;lt;/tt&amp;gt; if has 32 MB of RAM or less; &amp;lt;tt&amp;gt;vxWorks-ppc603_long&amp;lt;/tt&amp;gt; if has more than 32 MB of RAM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Motorola MVME-2700&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;tt&amp;gt;vxWorks-ppc604&amp;lt;/tt&amp;gt; if has 32 MB of RAM or less; &amp;lt;tt&amp;gt;vxWorks-ppc604_long&amp;lt;/tt&amp;gt; if has more than 32 MB of RAM&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Motorola MVME-5100&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;tt&amp;gt;vxWorks-ppc604&amp;lt;/tt&amp;gt; if has 32 MB of RAM or less; &amp;lt;tt&amp;gt;vxWorks-ppc604_long&amp;lt;/tt&amp;gt; if has more than 32 MB of RAM&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;
== IOC Core Software ==&lt;br /&gt;
=== Where Can I Learn About IOC Core? ===&lt;br /&gt;
&lt;br /&gt;
=== What are the relationships between Records, Fields, PVs and Channels? ===&lt;br /&gt;
The IOC database manages Records. A Record has Fields, for example an analog input record &amp;quot;fred&amp;quot; has fields such as&lt;br /&gt;
* VAL (value)&lt;br /&gt;
* EGU (Engineering Units)&lt;br /&gt;
* TIME (Timestamp)&lt;br /&gt;
* HOPR (High Operator Range)&lt;br /&gt;
* LOPR (Low Operator Range)&lt;br /&gt;
* STAT (Alarm Status)&lt;br /&gt;
* SEVR (Alarm Severity)&lt;br /&gt;
* ...&lt;br /&gt;
You can use a database (.db) file or the dbgf and dbpf commands to get and set with the fields of a record.&lt;br /&gt;
&lt;br /&gt;
The Channel Access network protocol gives you access to Channels.  A Channel has Properties.  The Channel &amp;quot;fred&amp;quot; has properties such as&lt;br /&gt;
* value&lt;br /&gt;
* time stamp&lt;br /&gt;
* units&lt;br /&gt;
* upper control limit&lt;br /&gt;
* lower control limit&lt;br /&gt;
* status&lt;br /&gt;
* severity, ...&lt;br /&gt;
You use the DBR_... request types to read/write the properties of a channel.  Although these are called &amp;quot;database request types&amp;quot; DBR_..., they really should be called &amp;quot;channel&amp;quot; or &amp;quot;property&amp;quot; request types.&lt;br /&gt;
&lt;br /&gt;
How do Records map to Channels, and how do Fields of a Record map to the Properties of a Channel?  To really understand this, you have to use the force and read the source.  The result makes sense in the few but most common cases; it doesn't always make sense in many of the other possible cases.&lt;br /&gt;
&lt;br /&gt;
Our first example makes perfect sense: You have a channel &amp;quot;fred&amp;quot; for an AI record &amp;quot;fred&amp;quot;, and ask Channel Access for its value as a DBR_CTRL_DOUBLE.  Your channel will provide its properties in a dbr_ctrl_double structure, mapped to the following fields of the record:&lt;br /&gt;
: value = VAL&lt;br /&gt;
: status = STAT&lt;br /&gt;
: severity = SEVR&lt;br /&gt;
: precision = PREC&lt;br /&gt;
: units = EGU&lt;br /&gt;
: upper_ctrl_limit = HOPR&lt;br /&gt;
: lower_ctrl_limit = LOPR&lt;br /&gt;
: ...&lt;br /&gt;
You can also ask for a DBR_TIME_DOUBLE and get the&lt;br /&gt;
: value = VAL&lt;br /&gt;
: stamp = TIME&lt;br /&gt;
: ...&lt;br /&gt;
The time stamp is of course the time of the last value update, so it's the time stamp that belongs to the value.  This case makes perfect sense.&lt;br /&gt;
&lt;br /&gt;
The next good example is a channel &amp;quot;fred.SCAN&amp;quot;, which is of type ENUM and you can get the DBR_CTRL_ENUM properties:&lt;br /&gt;
: value = SCAN&lt;br /&gt;
: strs = { &amp;quot;Passive&amp;quot;, &amp;quot;Event&amp;quot;, ..., &amp;quot;.1 second&amp;quot; }&lt;br /&gt;
Good, that's the current value as well as corresponding enumeration strings.&lt;br /&gt;
But there's also&lt;br /&gt;
: status = STAT&lt;br /&gt;
: severity = SEVR&lt;br /&gt;
Those are status &amp;amp; severity of the &amp;quot;fred&amp;quot; record as a whole.  A &amp;quot;NO_ALARM&amp;quot;/&amp;quot;NO_ALARM&amp;quot; or &amp;quot;READ&amp;quot;/&amp;quot;INVALID&amp;quot; pair in there doesn't say anything&lt;br /&gt;
about the SCAN field, only about the &amp;quot;fred&amp;quot; record as a whole.&lt;br /&gt;
&lt;br /&gt;
Now attach a channel to &amp;quot;fred.HOPR&amp;quot; and read the DBR_TIME_DOUBLE:&lt;br /&gt;
: value = HOPR&lt;br /&gt;
: stamp = TIME&lt;br /&gt;
You get a time stamp that has nothing to do with the value. It's not the time when HOPR was last updated.&lt;br /&gt;
&lt;br /&gt;
Attach a channel to &amp;quot;fred.PREC&amp;quot; and read a DBR_CTRL_DOUBLE:&lt;br /&gt;
: value = PREC&lt;br /&gt;
: units = EGU&lt;br /&gt;
: status = STAT&lt;br /&gt;
: severity = SEVR&lt;br /&gt;
: lower_ctrl_limit=-32768&lt;br /&gt;
: upper_ctrl_limit=32767&lt;br /&gt;
The value and units are OK, but the status &amp;amp; severity are again really properties of the &amp;quot;fred&amp;quot; record as a whole, not of the PREC field which we were asking about.  The two control limits also give the range of the 16 bit number that the PREC field holds, even though most values in that range won't make any sense for this field.&lt;br /&gt;
&lt;br /&gt;
So if your channel name is simply a record name, the mapping of record fields to channel properties makes sense. In other cases, you have to look at the source code of the record to figure out what you'll get, and in many cases it's not what you might like.&lt;br /&gt;
&lt;br /&gt;
You also have to understand that Channel Access cannot introspect a record (i.e. iterate over all its fields).  There is no DBR_ALL_FIELDS type, only a fixed set of DBR_... requests which are hardcoded to get particular record fields or properties of a field by the record type's code.&lt;br /&gt;
&lt;br /&gt;
== Extensions/Tools ==&lt;br /&gt;
=== What Are EPICS Extensions? ===&lt;br /&gt;
&lt;br /&gt;
== The Collaboration ==&lt;br /&gt;
=== How Do I Join the Collaboration? ===&lt;br /&gt;
There is no formal membership criteria or process.  If you begin attending the semi-annual collaboration meetings, submit questions or respond with answers on the tech-talk list-server, or share your EPICS device support or applications with others, you will be warmly welcomed as a contributing member of the collaboration.&lt;br /&gt;
&lt;br /&gt;
=== What Are Some of the Collaboration Activities? ===&lt;br /&gt;
Questions, comments, solutions, and other dialogue are routinely exchanged on the EPICS mailing list [http://www.aps.anl.gov/epics/tech-talk/index.php tech-talk].  If a question is worded thoughtfully and with sufficient detail, it is not uncommon to receive an answer (or sometimes several answers) in a few hours.  The more precise the question, the more likely you will receive an expedient response.&lt;br /&gt;
&lt;br /&gt;
There are semi-annual EPICS Collaboration Meetings where people give short talks on recent accomplishments, advances, changes, etc.  This is a fertile ground for the exchange of ideas with respect to control systems.  Agendas and presentations from most past meetings can be found on the [http://www.aps.anl.gov/epics/meetings.php website meetings page].&lt;br /&gt;
&lt;br /&gt;
It is also not uncommon for individuals to visit other labs for short term assistance, training, or advice.  This is a very beneficial aspect of the collaboration.&lt;/div&gt;</summary>
		<author><name>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=EPICS_FAQ&amp;diff=1591</id>
		<title>EPICS FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=EPICS_FAQ&amp;diff=1591"/>
		<updated>2008-08-28T19:56:24Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* What Hardware Platforms Can Be Used With EPICS? */ Improved last sentence&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General ==&lt;br /&gt;
=== What is EPICS? ===&lt;br /&gt;
EPICS is a set of software tools and applications which provide a software infrastructure for use in building distributed control systems to operate devices such as Particle Accelerators, Large Experiments and major Telescopes. Such distributed control systems typically comprise tens or even hundreds of computers, networked together to allow communication between them and to provide control and feedback of the various parts of the device from a central control room, or even remotely over the internet.&lt;br /&gt;
&lt;br /&gt;
The term (EPICS) also refers to the collaboration of organizations that are involved in the software's development and use. It was originally written jointly by Los Alamos National Laboratory and Argonne National Laboratory, and is now used by many large scientific facilities throughout the world. Development now occurs cooperatively between these various groups, with much sharing of I/O device support and client applications.&lt;br /&gt;
&lt;br /&gt;
=== Who Uses EPICS? ===&lt;br /&gt;
&lt;br /&gt;
=== How Can I Learn More About EPICS? ===&lt;br /&gt;
Many of the sites listed above have tutorials, slides, or overviews of EPICS.  It is helpful to peruse several different sites to get a broad exposure of how the facilities use EPICS.&lt;br /&gt;
&lt;br /&gt;
The [http://www.aps.anl.gov/epics/docs/GSWE.php Getting Started With EPICS Lecture Series] presented and recorded at the Advance Photon Source in the Fall of 2004 is probably the most recent and exhaustive series of training presentations.  The lectures are available via synchronized streaming video and the Power Point slides are also available for downloading via the above link.&lt;br /&gt;
&lt;br /&gt;
=== Is There a Demo I Can Play With? ===&lt;br /&gt;
The most recent published demo application is the Virtual Linac, which is available [http://www.aps.anl.gov/epics/download/examples/index.php here].  Also look at the [http://www.lnl.infn.it/~epics/ LivEPICS CD images] for a bootable system that you can use without having to install anything on a PC.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== What Hardware Platforms Can Be Used With EPICS? ===&lt;br /&gt;
The ''Platforms Supported'' sections of [http://www.aps.anl.gov/epics/base/R3-13.php EPICS Base R3.13] and [http://www.aps.anl.gov/epics/base/R3-14/index.php EPICS Base R3.14] provide a list of currently supported host and IOC target platforms for the corresponding EPICS Base release.&lt;br /&gt;
&lt;br /&gt;
=== Can I Port EPICS to My ACME SuperFast CPU? ===&lt;br /&gt;
=== What I/O Devices Are Supported? ===&lt;br /&gt;
Lots.  Most available I/O support is listed in the [http://www.aps.anl.gov/epics/modules/manufacturer.php Supported Hardware Database] but for various reasons that list is never complete, so it's always worth sending a message to [mailto:tech-talk@aps.anl.gov tech-talk] if there's something that you think other sites may be using but don't see listed.&lt;br /&gt;
&lt;br /&gt;
== IOC Core Software ==&lt;br /&gt;
=== Where Can I Learn About IOC Core? ===&lt;br /&gt;
&lt;br /&gt;
=== What are the relationships between Records, Fields, PVs and Channels? ===&lt;br /&gt;
The IOC database manages Records. A Record has Fields, for example an analog input record &amp;quot;fred&amp;quot; has fields such as&lt;br /&gt;
* VAL (value)&lt;br /&gt;
* EGU (Engineering Units)&lt;br /&gt;
* TIME (Timestamp)&lt;br /&gt;
* HOPR (High Operator Range)&lt;br /&gt;
* LOPR (Low Operator Range)&lt;br /&gt;
* STAT (Alarm Status)&lt;br /&gt;
* SEVR (Alarm Severity)&lt;br /&gt;
* ...&lt;br /&gt;
You can use a database (.db) file or the dbgf and dbpf commands to get and set with the fields of a record.&lt;br /&gt;
&lt;br /&gt;
The Channel Access network protocol gives you access to Channels.  A Channel has Properties.  The Channel &amp;quot;fred&amp;quot; has properties such as&lt;br /&gt;
* value&lt;br /&gt;
* time stamp&lt;br /&gt;
* units&lt;br /&gt;
* upper control limit&lt;br /&gt;
* lower control limit&lt;br /&gt;
* status&lt;br /&gt;
* severity, ...&lt;br /&gt;
You use the DBR_... request types to read/write the properties of a channel.  Although these are called &amp;quot;database request types&amp;quot; DBR_..., they really should be called &amp;quot;channel&amp;quot; or &amp;quot;property&amp;quot; request types.&lt;br /&gt;
&lt;br /&gt;
How do Records map to Channels, and how do Fields of a Record map to the Properties of a Channel?  To really understand this, you have to use the force and read the source.  The result makes sense in the few but most common cases; it doesn't always make sense in many of the other possible cases.&lt;br /&gt;
&lt;br /&gt;
Our first example makes perfect sense: You have a channel &amp;quot;fred&amp;quot; for an AI record &amp;quot;fred&amp;quot;, and ask Channel Access for its value as a DBR_CTRL_DOUBLE.  Your channel will provide its properties in a dbr_ctrl_double structure, mapped to the following fields of the record:&lt;br /&gt;
: value = VAL&lt;br /&gt;
: status = STAT&lt;br /&gt;
: severity = SEVR&lt;br /&gt;
: precision = PREC&lt;br /&gt;
: units = EGU&lt;br /&gt;
: upper_ctrl_limit = HOPR&lt;br /&gt;
: lower_ctrl_limit = LOPR&lt;br /&gt;
: ...&lt;br /&gt;
You can also ask for a DBR_TIME_DOUBLE and get the&lt;br /&gt;
: value = VAL&lt;br /&gt;
: stamp = TIME&lt;br /&gt;
: ...&lt;br /&gt;
The time stamp is of course the time of the last value update, so it's the time stamp that belongs to the value.  This case makes perfect sense.&lt;br /&gt;
&lt;br /&gt;
The next good example is a channel &amp;quot;fred.SCAN&amp;quot;, which is of type ENUM and you can get the DBR_CTRL_ENUM properties:&lt;br /&gt;
: value = SCAN&lt;br /&gt;
: strs = { &amp;quot;Passive&amp;quot;, &amp;quot;Event&amp;quot;, ..., &amp;quot;.1 second&amp;quot; }&lt;br /&gt;
Good, that's the current value as well as corresponding enumeration strings.&lt;br /&gt;
But there's also&lt;br /&gt;
: status = STAT&lt;br /&gt;
: severity = SEVR&lt;br /&gt;
Those are status &amp;amp; severity of the &amp;quot;fred&amp;quot; record as a whole.  A &amp;quot;NO_ALARM&amp;quot;/&amp;quot;NO_ALARM&amp;quot; or &amp;quot;READ&amp;quot;/&amp;quot;INVALID&amp;quot; pair in there doesn't say anything&lt;br /&gt;
about the SCAN field, only about the &amp;quot;fred&amp;quot; record as a whole.&lt;br /&gt;
&lt;br /&gt;
Now attach a channel to &amp;quot;fred.HOPR&amp;quot; and read the DBR_TIME_DOUBLE:&lt;br /&gt;
: value = HOPR&lt;br /&gt;
: stamp = TIME&lt;br /&gt;
You get a time stamp that has nothing to do with the value. It's not the time when HOPR was last updated.&lt;br /&gt;
&lt;br /&gt;
Attach a channel to &amp;quot;fred.PREC&amp;quot; and read a DBR_CTRL_DOUBLE:&lt;br /&gt;
: value = PREC&lt;br /&gt;
: units = EGU&lt;br /&gt;
: status = STAT&lt;br /&gt;
: severity = SEVR&lt;br /&gt;
: lower_ctrl_limit=-32768&lt;br /&gt;
: upper_ctrl_limit=32767&lt;br /&gt;
The value and units are OK, but the status &amp;amp; severity are again really properties of the &amp;quot;fred&amp;quot; record as a whole, not of the PREC field which we were asking about.  The two control limits also give the range of the 16 bit number that the PREC field holds, even though most values in that range won't make any sense for this field.&lt;br /&gt;
&lt;br /&gt;
So if your channel name is simply a record name, the mapping of record fields to channel properties makes sense. In other cases, you have to look at the source code of the record to figure out what you'll get, and in many cases it's not what you might like.&lt;br /&gt;
&lt;br /&gt;
You also have to understand that Channel Access cannot introspect a record (i.e. iterate over all its fields).  There is no DBR_ALL_FIELDS type, only a fixed set of DBR_... requests which are hardcoded to get particular record fields or properties of a field by the record type's code.&lt;br /&gt;
&lt;br /&gt;
== Extensions/Tools ==&lt;br /&gt;
=== What Are EPICS Extensions? ===&lt;br /&gt;
&lt;br /&gt;
== The Collaboration ==&lt;br /&gt;
=== How Do I Join the Collaboration? ===&lt;br /&gt;
There is no formal membership criteria or process.  If you begin attending the semi-annual collaboration meetings, submit questions or respond with answers on the tech-talk list-server, or share your EPICS device support or applications with others, you will be warmly welcomed as a contributing member of the collaboration.&lt;br /&gt;
&lt;br /&gt;
=== What Are Some of the Collaboration Activities? ===&lt;br /&gt;
Questions, comments, solutions, and other dialogue are routinely exchanged on the EPICS mailing list [http://www.aps.anl.gov/epics/tech-talk/index.php tech-talk].  If a question is worded thoughtfully and with sufficient detail, it is not uncommon to receive an answer (or sometimes several answers) in a few hours.  The more precise the question, the more likely you will receive an expedient response.&lt;br /&gt;
&lt;br /&gt;
There are semi-annual EPICS Collaboration Meetings where people give short talks on recent accomplishments, advances, changes, etc.  This is a fertile ground for the exchange of ideas with respect to control systems.  Agendas and presentations from most past meetings can be found on the [http://www.aps.anl.gov/epics/meetings.php website meetings page].&lt;br /&gt;
&lt;br /&gt;
It is also not uncommon for individuals to visit other labs for short term assistance, training, or advice.  This is a very beneficial aspect of the collaboration.&lt;/div&gt;</summary>
		<author><name>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=EPICS_FAQ&amp;diff=1590</id>
		<title>EPICS FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=EPICS_FAQ&amp;diff=1590"/>
		<updated>2008-08-28T19:54:51Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* What Hardware Platforms Can Be Used With EPICS? */ Added pointer to EPICS base R3.13 and R3.14 web pages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General ==&lt;br /&gt;
=== What is EPICS? ===&lt;br /&gt;
EPICS is a set of software tools and applications which provide a software infrastructure for use in building distributed control systems to operate devices such as Particle Accelerators, Large Experiments and major Telescopes. Such distributed control systems typically comprise tens or even hundreds of computers, networked together to allow communication between them and to provide control and feedback of the various parts of the device from a central control room, or even remotely over the internet.&lt;br /&gt;
&lt;br /&gt;
The term (EPICS) also refers to the collaboration of organizations that are involved in the software's development and use. It was originally written jointly by Los Alamos National Laboratory and Argonne National Laboratory, and is now used by many large scientific facilities throughout the world. Development now occurs cooperatively between these various groups, with much sharing of I/O device support and client applications.&lt;br /&gt;
&lt;br /&gt;
=== Who Uses EPICS? ===&lt;br /&gt;
&lt;br /&gt;
=== How Can I Learn More About EPICS? ===&lt;br /&gt;
Many of the sites listed above have tutorials, slides, or overviews of EPICS.  It is helpful to peruse several different sites to get a broad exposure of how the facilities use EPICS.&lt;br /&gt;
&lt;br /&gt;
The [http://www.aps.anl.gov/epics/docs/GSWE.php Getting Started With EPICS Lecture Series] presented and recorded at the Advance Photon Source in the Fall of 2004 is probably the most recent and exhaustive series of training presentations.  The lectures are available via synchronized streaming video and the Power Point slides are also available for downloading via the above link.&lt;br /&gt;
&lt;br /&gt;
=== Is There a Demo I Can Play With? ===&lt;br /&gt;
The most recent published demo application is the Virtual Linac, which is available [http://www.aps.anl.gov/epics/download/examples/index.php here].  Also look at the [http://www.lnl.infn.it/~epics/ LivEPICS CD images] for a bootable system that you can use without having to install anything on a PC.&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
=== What Hardware Platforms Can Be Used With EPICS? ===&lt;br /&gt;
The ''Platforms Supported'' sections of [http://www.aps.anl.gov/epics/base/R3-13.php EPICS Base R3.13] and [http://www.aps.anl.gov/epics/base/R3-14/index.php EPICS Base R3.14] provide a list of currently supported host and IOC target platforms.&lt;br /&gt;
&lt;br /&gt;
=== Can I Port EPICS to My ACME SuperFast CPU? ===&lt;br /&gt;
=== What I/O Devices Are Supported? ===&lt;br /&gt;
Lots.  Most available I/O support is listed in the [http://www.aps.anl.gov/epics/modules/manufacturer.php Supported Hardware Database] but for various reasons that list is never complete, so it's always worth sending a message to [mailto:tech-talk@aps.anl.gov tech-talk] if there's something that you think other sites may be using but don't see listed.&lt;br /&gt;
&lt;br /&gt;
== IOC Core Software ==&lt;br /&gt;
=== Where Can I Learn About IOC Core? ===&lt;br /&gt;
&lt;br /&gt;
=== What are the relationships between Records, Fields, PVs and Channels? ===&lt;br /&gt;
The IOC database manages Records. A Record has Fields, for example an analog input record &amp;quot;fred&amp;quot; has fields such as&lt;br /&gt;
* VAL (value)&lt;br /&gt;
* EGU (Engineering Units)&lt;br /&gt;
* TIME (Timestamp)&lt;br /&gt;
* HOPR (High Operator Range)&lt;br /&gt;
* LOPR (Low Operator Range)&lt;br /&gt;
* STAT (Alarm Status)&lt;br /&gt;
* SEVR (Alarm Severity)&lt;br /&gt;
* ...&lt;br /&gt;
You can use a database (.db) file or the dbgf and dbpf commands to get and set with the fields of a record.&lt;br /&gt;
&lt;br /&gt;
The Channel Access network protocol gives you access to Channels.  A Channel has Properties.  The Channel &amp;quot;fred&amp;quot; has properties such as&lt;br /&gt;
* value&lt;br /&gt;
* time stamp&lt;br /&gt;
* units&lt;br /&gt;
* upper control limit&lt;br /&gt;
* lower control limit&lt;br /&gt;
* status&lt;br /&gt;
* severity, ...&lt;br /&gt;
You use the DBR_... request types to read/write the properties of a channel.  Although these are called &amp;quot;database request types&amp;quot; DBR_..., they really should be called &amp;quot;channel&amp;quot; or &amp;quot;property&amp;quot; request types.&lt;br /&gt;
&lt;br /&gt;
How do Records map to Channels, and how do Fields of a Record map to the Properties of a Channel?  To really understand this, you have to use the force and read the source.  The result makes sense in the few but most common cases; it doesn't always make sense in many of the other possible cases.&lt;br /&gt;
&lt;br /&gt;
Our first example makes perfect sense: You have a channel &amp;quot;fred&amp;quot; for an AI record &amp;quot;fred&amp;quot;, and ask Channel Access for its value as a DBR_CTRL_DOUBLE.  Your channel will provide its properties in a dbr_ctrl_double structure, mapped to the following fields of the record:&lt;br /&gt;
: value = VAL&lt;br /&gt;
: status = STAT&lt;br /&gt;
: severity = SEVR&lt;br /&gt;
: precision = PREC&lt;br /&gt;
: units = EGU&lt;br /&gt;
: upper_ctrl_limit = HOPR&lt;br /&gt;
: lower_ctrl_limit = LOPR&lt;br /&gt;
: ...&lt;br /&gt;
You can also ask for a DBR_TIME_DOUBLE and get the&lt;br /&gt;
: value = VAL&lt;br /&gt;
: stamp = TIME&lt;br /&gt;
: ...&lt;br /&gt;
The time stamp is of course the time of the last value update, so it's the time stamp that belongs to the value.  This case makes perfect sense.&lt;br /&gt;
&lt;br /&gt;
The next good example is a channel &amp;quot;fred.SCAN&amp;quot;, which is of type ENUM and you can get the DBR_CTRL_ENUM properties:&lt;br /&gt;
: value = SCAN&lt;br /&gt;
: strs = { &amp;quot;Passive&amp;quot;, &amp;quot;Event&amp;quot;, ..., &amp;quot;.1 second&amp;quot; }&lt;br /&gt;
Good, that's the current value as well as corresponding enumeration strings.&lt;br /&gt;
But there's also&lt;br /&gt;
: status = STAT&lt;br /&gt;
: severity = SEVR&lt;br /&gt;
Those are status &amp;amp; severity of the &amp;quot;fred&amp;quot; record as a whole.  A &amp;quot;NO_ALARM&amp;quot;/&amp;quot;NO_ALARM&amp;quot; or &amp;quot;READ&amp;quot;/&amp;quot;INVALID&amp;quot; pair in there doesn't say anything&lt;br /&gt;
about the SCAN field, only about the &amp;quot;fred&amp;quot; record as a whole.&lt;br /&gt;
&lt;br /&gt;
Now attach a channel to &amp;quot;fred.HOPR&amp;quot; and read the DBR_TIME_DOUBLE:&lt;br /&gt;
: value = HOPR&lt;br /&gt;
: stamp = TIME&lt;br /&gt;
You get a time stamp that has nothing to do with the value. It's not the time when HOPR was last updated.&lt;br /&gt;
&lt;br /&gt;
Attach a channel to &amp;quot;fred.PREC&amp;quot; and read a DBR_CTRL_DOUBLE:&lt;br /&gt;
: value = PREC&lt;br /&gt;
: units = EGU&lt;br /&gt;
: status = STAT&lt;br /&gt;
: severity = SEVR&lt;br /&gt;
: lower_ctrl_limit=-32768&lt;br /&gt;
: upper_ctrl_limit=32767&lt;br /&gt;
The value and units are OK, but the status &amp;amp; severity are again really properties of the &amp;quot;fred&amp;quot; record as a whole, not of the PREC field which we were asking about.  The two control limits also give the range of the 16 bit number that the PREC field holds, even though most values in that range won't make any sense for this field.&lt;br /&gt;
&lt;br /&gt;
So if your channel name is simply a record name, the mapping of record fields to channel properties makes sense. In other cases, you have to look at the source code of the record to figure out what you'll get, and in many cases it's not what you might like.&lt;br /&gt;
&lt;br /&gt;
You also have to understand that Channel Access cannot introspect a record (i.e. iterate over all its fields).  There is no DBR_ALL_FIELDS type, only a fixed set of DBR_... requests which are hardcoded to get particular record fields or properties of a field by the record type's code.&lt;br /&gt;
&lt;br /&gt;
== Extensions/Tools ==&lt;br /&gt;
=== What Are EPICS Extensions? ===&lt;br /&gt;
&lt;br /&gt;
== The Collaboration ==&lt;br /&gt;
=== How Do I Join the Collaboration? ===&lt;br /&gt;
There is no formal membership criteria or process.  If you begin attending the semi-annual collaboration meetings, submit questions or respond with answers on the tech-talk list-server, or share your EPICS device support or applications with others, you will be warmly welcomed as a contributing member of the collaboration.&lt;br /&gt;
&lt;br /&gt;
=== What Are Some of the Collaboration Activities? ===&lt;br /&gt;
Questions, comments, solutions, and other dialogue are routinely exchanged on the EPICS mailing list [http://www.aps.anl.gov/epics/tech-talk/index.php tech-talk].  If a question is worded thoughtfully and with sufficient detail, it is not uncommon to receive an answer (or sometimes several answers) in a few hours.  The more precise the question, the more likely you will receive an expedient response.&lt;br /&gt;
&lt;br /&gt;
There are semi-annual EPICS Collaboration Meetings where people give short talks on recent accomplishments, advances, changes, etc.  This is a fertile ground for the exchange of ideas with respect to control systems.  Agendas and presentations from most past meetings can be found on the [http://www.aps.anl.gov/epics/meetings.php website meetings page].&lt;br /&gt;
&lt;br /&gt;
It is also not uncommon for individuals to visit other labs for short term assistance, training, or advice.  This is a very beneficial aspect of the collaboration.&lt;/div&gt;</summary>
		<author><name>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Menu_Choices&amp;diff=1602</id>
		<title>RRM 3-14 Menu Choices</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Menu_Choices&amp;diff=1602"/>
		<updated>2008-08-26T14:41:43Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* GBLCHOICE and RECCHOICE Fields */ removed menuArrType; added menuSimm&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;
= Menu Choices =&lt;br /&gt;
&lt;br /&gt;
== GBLCHOICE and RECCHOICE Fields ==&lt;br /&gt;
&lt;br /&gt;
Some of the fields in EPICS records are of type GBLCHOICE or RECCHOICE, meaning that the value of the field must be one from a menu of specific choices. There are several different menus available and each GBLCHOICE or RECCHOICE field uses one. For instance, the simplest menu is called &amp;lt;CODE&amp;gt;menuYesNo&amp;lt;/CODE&amp;gt; and has two possible choices, NO and YES; no other values for a field that uses &amp;lt;CODE&amp;gt;menuYesNo&amp;lt;/CODE&amp;gt; are possible--0.5, MAYBE, and NO WAY are not possible choices for the field. In addition, when a menu field is configured to have a certain value, its value string must match exactly one of the possible choices in its menu, including its case. For instance, if a field's type is GBLCHOICE and its menu is &amp;lt;CODE&amp;gt;menuYesNo&amp;lt;/CODE&amp;gt;, the choices &amp;lt;CODE&amp;gt;yes&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;No&amp;lt;/CODE&amp;gt;, and &amp;lt;CODE&amp;gt;Yes&amp;lt;/CODE&amp;gt; are not valid choices: they don't match the case of NO or YES.&lt;br /&gt;
&lt;br /&gt;
There are several menus provided as part of the standard EPICS release. Here are their names:&lt;br /&gt;
&lt;br /&gt;
* seqSELM&lt;br /&gt;
* selSELM&lt;br /&gt;
* menuYesNo&lt;br /&gt;
* menuSimm&lt;br /&gt;
* menuScan&lt;br /&gt;
* menuPriority&lt;br /&gt;
* menuOmsl&lt;br /&gt;
* menuLinr&lt;br /&gt;
* menuIvoa&lt;br /&gt;
* menuFtype&lt;br /&gt;
* menuConvert&lt;br /&gt;
* menuCompress&lt;br /&gt;
* menuAlarmStat&lt;br /&gt;
* menuAlarmSevr&lt;br /&gt;
* fanoutSELM&lt;br /&gt;
* compressALG&lt;br /&gt;
* aoOIF&lt;br /&gt;
&lt;br /&gt;
A few of these menus are record-specific. For example, &amp;lt;CODE&amp;gt;aoOIF&amp;lt;/CODE&amp;gt; is used solely by the OIF field in the analog output record. Any field using one of these menus will be of type RECCHOICE. Most of the above menus, however, are used by many different fields in different records. These are of type GBLCHOICE. For example, the &amp;lt;CODE&amp;gt;menuAlarmSevr&amp;lt;/CODE&amp;gt; menu is used by the LLSV field in the analog input record as well as the COSV field in the binary input record, among others.&lt;br /&gt;
&lt;br /&gt;
The above menus and their choices are provided as part of the standard EPICS release; however, developers can add to, delete, or change the choices of each, as well as add new menu types. (See the ''Application Developer's Guide'' for your release for more information on how to add and change existing menus). Thus, the database designer should know that the available menus and their choices may vary from site to site. The designer must be familiar with the menu and menu choices for any fields he/she is configuring. This isn't a problem for most database designers because such tools as VDCT, GDCT, and Capfast allow the designer configuring the database to choose from the specified choices. Nonetheless, there are ways a designer can figure out the available choices for a particular menu and thus for a particular field without using a database configuration tool.&lt;br /&gt;
&lt;br /&gt;
=== Determining the Choices of a GBLCHOICE or RECCHOICE Field ===&lt;br /&gt;
&lt;br /&gt;
==== Peeking at the Database Definition Files ====&lt;br /&gt;
&lt;br /&gt;
The definition for a particular menu can be found by looking at the database definition or &amp;lt;CODE&amp;gt;.dbd&amp;lt;/CODE&amp;gt; file for that menu. For instance, the &amp;lt;CODE&amp;gt;menuAlarmSevr.dbd&amp;lt;/CODE&amp;gt; file contains the definition for the &amp;lt;CODE&amp;gt;menuAlarmSevr&amp;lt;/CODE&amp;gt; menu. In addition, you can see which menu a GBLCHOICE field uses by looking at the &amp;lt;CODE&amp;gt;dbCommonRecord.dbd&amp;lt;/CODE&amp;gt; file if the field is common to all record types or by looking at the file that defines that record type if the field is not command to all record types. For example, to see which menu the OIF field uses, one would have to look in the &amp;lt;CODE&amp;gt;aoRecord.dbd&amp;lt;/CODE&amp;gt; file which contains the definition for the analog output record, because OIF is particular to the analog output record and is not common to all other record types. RECCHOICE menus are defined in the definition file for the record type in which they are used, usually at the beginning. For example, the field OIF is of type RECCHOICE and uses the &amp;lt;CODE&amp;gt;aoOIF&amp;lt;/CODE&amp;gt; menu which is defined at the beginning of &amp;lt;CODE&amp;gt;aoRecord.dbd&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Standard Menu Definitions ===&lt;br /&gt;
&lt;br /&gt;
Here are the definitions for the menus available as part of the standard EPICS release. The designer should know that the definitions of these menus may be different at his/her site and these are provided merely as a convenience. It's recommended that you use the &amp;lt;CODE&amp;gt;dbst&amp;lt;/CODE&amp;gt; utility to view menu choices. Remember that the actual choices appear in quotes.&lt;br /&gt;
&lt;br /&gt;
==== seqSELM ====&lt;br /&gt;
&lt;br /&gt;
 choice(seqSELM_All,&amp;amp;quot;All&amp;amp;quot;)&lt;br /&gt;
 choice(seqSELM_Specified,&amp;amp;quot;Specified&amp;amp;quot;)&lt;br /&gt;
 choice(seqSELM_Mask,&amp;amp;quot;Mask&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== selSELM ====&lt;br /&gt;
&lt;br /&gt;
 choice(selSELM_Specified,&amp;amp;quot;Specified&amp;amp;quot;)&lt;br /&gt;
 choice(selSELM_High_Signal,&amp;amp;quot;High Signal&amp;amp;quot;)&lt;br /&gt;
 choice(selSELM_Low_Signal,&amp;amp;quot;Low Signal&amp;amp;quot;)&lt;br /&gt;
 choice(selSELM_Median_Signal,&amp;amp;quot;Median Signal&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== menuYesNo ====&lt;br /&gt;
&lt;br /&gt;
 choice(menuYesNoNO,&amp;amp;quot;NO&amp;amp;quot;)&lt;br /&gt;
 choice(menuYesNoYES,&amp;amp;quot;YES&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== menuSimm ====&lt;br /&gt;
&lt;br /&gt;
 choice(menuSimmNO,&amp;amp;quot;NO&amp;amp;quot;)&lt;br /&gt;
 choice(menuSimmYES,&amp;amp;quot;YES&amp;amp;quot;)&lt;br /&gt;
 choice(menuSimmRAW,&amp;amp;quot;RAW&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== menuScan ====&lt;br /&gt;
&lt;br /&gt;
 choice(menuScanPassive,&amp;amp;quot;Passive&amp;amp;quot;)&lt;br /&gt;
 choice(menuScanEvent,&amp;amp;quot;Event&amp;amp;quot;)&lt;br /&gt;
 choice(menuScanI_O_Intr,&amp;amp;quot;I/O Intr&amp;amp;quot;)&lt;br /&gt;
 choice(menuScan10_second,&amp;amp;quot;10 second&amp;amp;quot;)&lt;br /&gt;
 choice(menuScan5_second,&amp;amp;quot;5 second&amp;amp;quot;)&lt;br /&gt;
 choice(menuScan2_second,&amp;amp;quot;2 second&amp;amp;quot;)&lt;br /&gt;
 choice(menuScan1_second,&amp;amp;quot;1 second&amp;amp;quot;)&lt;br /&gt;
 choice(menuScan_5_second,&amp;amp;quot;.5 second&amp;amp;quot;)&lt;br /&gt;
 choice(menuScan_2_second,&amp;amp;quot;.2 second&amp;amp;quot;)&lt;br /&gt;
 choice(menuScan_1_second,&amp;amp;quot;.1 second&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== menuPriority ====&lt;br /&gt;
&lt;br /&gt;
 choice(menuPriorityLOW,&amp;amp;quot;LOW&amp;amp;quot;)&lt;br /&gt;
 choice(menuPriorityMEDIUM,&amp;amp;quot;MEDIUM&amp;amp;quot;)&lt;br /&gt;
 choice(menuPriorityHIGH,&amp;amp;quot;HIGH&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== menuOmsl ====&lt;br /&gt;
&lt;br /&gt;
 choice(menuOmslsupervisory,&amp;amp;quot;supervisory&amp;amp;quot;)&lt;br /&gt;
 choice(menuOmslclosed_loop,&amp;amp;quot;closed_loop&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== menuLinr ====&lt;br /&gt;
&lt;br /&gt;
 choice(menuLinrNO_CONVERSION,&amp;amp;quot;NO CONVERSION&amp;amp;quot;)&lt;br /&gt;
 choice(menuLinrLINEAR,&amp;amp;quot;LINEAR&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== menuIvoa ====&lt;br /&gt;
&lt;br /&gt;
 choice(menuIvoaContinue_normally,&amp;amp;quot;Continue normally&amp;amp;quot;)&lt;br /&gt;
 choice(menuIvoaDon_t_drive_outputs,&amp;amp;quot;Don't drive outputs&amp;amp;quot;)&lt;br /&gt;
 choice(menuIvoaSet_output_to_IVOV,&amp;amp;quot;Set output to IVOV&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== menuFtype ====&lt;br /&gt;
&lt;br /&gt;
 choice(menuFtypeSTRING,&amp;amp;quot;STRING&amp;amp;quot;)&lt;br /&gt;
 choice(menuFtypeCHAR,&amp;amp;quot;CHAR&amp;amp;quot;)&lt;br /&gt;
 choice(menuFtypeUCHAR,&amp;amp;quot;UCHAR&amp;amp;quot;)&lt;br /&gt;
 choice(menuFtypeSHORT,&amp;amp;quot;SHORT&amp;amp;quot;)&lt;br /&gt;
 choice(menuFtypeUSHORT,&amp;amp;quot;USHORT&amp;amp;quot;)&lt;br /&gt;
 choice(menuFtypeLONG,&amp;amp;quot;LONG&amp;amp;quot;)&lt;br /&gt;
 choice(menuFtypeULONG,&amp;amp;quot;ULONG&amp;amp;quot;)&lt;br /&gt;
 choice(menuFtypeFLOAT,&amp;amp;quot;FLOAT&amp;amp;quot;)&lt;br /&gt;
 choice(menuFtypeDOUBLE,&amp;amp;quot;DOUBLE&amp;amp;quot;)&lt;br /&gt;
 choice(menuFtypeENUM,&amp;amp;quot;ENUM&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== menuConvert ====&lt;br /&gt;
&lt;br /&gt;
 choice(menuConvertNO_CONVERSION,&amp;amp;quot;NO CONVERSION&amp;amp;quot;)&lt;br /&gt;
 choice(menuConvertLINEAR,&amp;amp;quot;LINEAR&amp;amp;quot;)&lt;br /&gt;
 choice(menuConverttypeKdegF,&amp;amp;quot;typeKdegF&amp;amp;quot;)&lt;br /&gt;
 choice(menuConverttypeKdegC,&amp;amp;quot;typeKdegC&amp;amp;quot;)&lt;br /&gt;
 choice(menuConverttypeJdegF,&amp;amp;quot;typeJdegF&amp;amp;quot;)&lt;br /&gt;
 choice(menuConverttypeJdegC,&amp;amp;quot;typeJdegC&amp;amp;quot;)&lt;br /&gt;
 choice(menuConverttypeEdegF,&amp;amp;quot;typeEdegF(ixe only)&amp;amp;quot;)&lt;br /&gt;
 choice(menuConverttypeEdegC,&amp;amp;quot;typeEdegC(ixe only)&amp;amp;quot;)&lt;br /&gt;
 choice(menuConverttypeTdegF,&amp;amp;quot;typeTdegF&amp;amp;quot;)&lt;br /&gt;
 choice(menuConverttypeTdegC,&amp;amp;quot;typeTdegC&amp;amp;quot;)&lt;br /&gt;
 choice(menuConverttypeRdegF,&amp;amp;quot;typeRdegF&amp;amp;quot;)&lt;br /&gt;
 choice(menuConverttypeRdegC,&amp;amp;quot;typeRdegC&amp;amp;quot;)&lt;br /&gt;
 choice(menuConverttypeSdegF,&amp;amp;quot;typeSdegF&amp;amp;quot;)&lt;br /&gt;
 choice(menuConverttypeSdegC,&amp;amp;quot;typeSdegC&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== menuCompress ====&lt;br /&gt;
&lt;br /&gt;
 choice(menuCompressN_to_1_First_Value,&amp;amp;quot;N to 1 First Value&amp;amp;quot;)&lt;br /&gt;
 choice(menuCompressN_to_1_Low_Value,&amp;amp;quot;N to 1 Low Value&amp;amp;quot;)&lt;br /&gt;
 choice(menuCompressN_to_1_High_Value,&amp;amp;quot;N to 1 High Value&amp;amp;quot;)&lt;br /&gt;
 choice(menuCompressN_to_1_Average,&amp;amp;quot;N to 1 Average&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== menuAlarmStat ====&lt;br /&gt;
&lt;br /&gt;
 choice(menuAlarmStat,&amp;amp;quot;NO_ALARM&amp;amp;quot;)&lt;br /&gt;
 choice(menuAlarmStatREAD,&amp;amp;quot;READ&amp;amp;quot;)&lt;br /&gt;
 choice(menuAlarmStatWRITE,&amp;amp;quot;WRITE&amp;amp;quot;)&lt;br /&gt;
 choice(menuAlarmStatHIHI,&amp;amp;quot;HIHI&amp;amp;quot;)&lt;br /&gt;
 choice(menuAlarmStatHIGH,&amp;amp;quot;HIGH&amp;amp;quot;)&lt;br /&gt;
 choice(menuAlarmStatLOLO,&amp;amp;quot;LOLO&amp;amp;quot;)&lt;br /&gt;
 choice(menuAlarmStatLOW,&amp;amp;quot;LOW&amp;amp;quot;)&lt;br /&gt;
 choice(menuAlarmStatSTATE,&amp;amp;quot;STATE&amp;amp;quot;)&lt;br /&gt;
 choice(menuAlarmStatCOS,&amp;amp;quot;COS&amp;amp;quot;)&lt;br /&gt;
 choice(menuAlarmStatCOMM,&amp;amp;quot;COMM&amp;amp;quot;)&lt;br /&gt;
 choice(menuAlarmStatTIMEOUT,&amp;amp;quot;TIMEOUT&amp;amp;quot;)&lt;br /&gt;
 choice(menuAlarmStatHWLIMIT,&amp;amp;quot;HWLIMIT&amp;amp;quot;)&lt;br /&gt;
 choice(menuAlarmStatCALC,&amp;amp;quot;CALC&amp;amp;quot;)&lt;br /&gt;
 choice(menuAlarmStatSCAN,&amp;amp;quot;SCAN&amp;amp;quot;)&lt;br /&gt;
 choice(menuAlarmStatLINK,&amp;amp;quot;LINK&amp;amp;quot;)&lt;br /&gt;
 choice(menuAlarmStatSOFT,&amp;amp;quot;SOFT&amp;amp;quot;)&lt;br /&gt;
 choice(menuAlarmStatBAD_SUB,&amp;amp;quot;BAD_SUB&amp;amp;quot;)&lt;br /&gt;
 choice(menuAlarmStatUDF,&amp;amp;quot;UDF&amp;amp;quot;)&lt;br /&gt;
 choice(menuAlarmStatDISABLE,&amp;amp;quot;DISABLE&amp;amp;quot;)&lt;br /&gt;
 choice(menuAlarmStatSIMM,&amp;amp;quot;SIMM&amp;amp;quot;)&lt;br /&gt;
 choice(menuAlarmStatREAD_ACCESS,&amp;amp;quot;READ_ACCESS&amp;amp;quot;)&lt;br /&gt;
 choice(menuAlarmStatWRITE_ACCESS,&amp;amp;quot;WRITE_ACCESS&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== menuAlarmSevr ====&lt;br /&gt;
&lt;br /&gt;
 choice(menuAlarmSevrNO_ALARM,&amp;amp;quot;NO_ALARM&amp;amp;quot;)&lt;br /&gt;
 choice(menuAlarmSevrMINOR,&amp;amp;quot;MINOR&amp;amp;quot;)&lt;br /&gt;
 choice(menuAlarmSevrMAJOR,&amp;amp;quot;MAJOR&amp;amp;quot;)&lt;br /&gt;
 choice(menuAlarmSevrINVALID,&amp;amp;quot;INVALID&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== fanoutSELM ====&lt;br /&gt;
&lt;br /&gt;
 choice(fanoutSELM_All,&amp;amp;quot;All&amp;amp;quot;)&lt;br /&gt;
 choice(fanoutSELM_Specified,&amp;amp;quot;Specified&amp;amp;quot;)&lt;br /&gt;
 choice(fanoutSELM_Mask,&amp;amp;quot;Mask&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== compressALG ====&lt;br /&gt;
&lt;br /&gt;
 choice(compressALG_N_to_1_Low_Value,&amp;amp;quot;N to 1 Low Value&amp;amp;quot;)&lt;br /&gt;
 choice(compressALG_N_to_1_High_Value,&amp;amp;quot;N to 1 High Value&amp;amp;quot;)&lt;br /&gt;
 choice(compressALG_N_to_1_Average,&amp;amp;quot;N to 1 Average&amp;amp;quot;)&lt;br /&gt;
 choice(compressALG_Average,&amp;amp;quot;Average&amp;amp;quot;)&lt;br /&gt;
 choice(compressALG_Circular_Buffer,&amp;amp;quot;Circular Buffer&amp;amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==== aoOIF ====&lt;br /&gt;
&lt;br /&gt;
 choice(aoOIF_Full,&amp;amp;quot;Full&amp;amp;quot;)&lt;br /&gt;
 choice(aoOIF_Incremental,&amp;amp;quot;Incremental&amp;amp;quot;)&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>LewisMuir</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Calcout&amp;diff=1641</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=1641"/>
		<updated>2008-05-07T17:27:45Z</updated>

		<summary type="html">&lt;p&gt;LewisMuir: /* Output Parameters */ Fixed IVOV and IVOA mix-up in field table.&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;IVOA&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;IVOV&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>LewisMuir</name></author>
	</entry>
</feed>