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