Table of Contents Previous Chapter Chapter 30: sel - Select

Chapter 30: sel - Select

1. Introduction

The sel record computes a value based on input obtained from up to 12 inputs. The selection algorithm can be one of the following: Specified, Highest, Lowest, Median. Each input can be a constant, a database link, or a channel access link.

2. Field Summary

--------------------------------------------------------------
Field  Type       DCT  Initial  Access  Modify  Rec Proc   PP   
                                                Monitor         
--------------------------------------------------------------
VAL    DOUBLE     No   0        Yes     No      Yes        No   
SELM   RECCHOICE  Yes  0        Yes     Yes     No         No   
SELN   USHORT     No   0        Yes     Yes     No         No   
PREC   SHORT      Yes  0        Yes     Yes     No         No   
NVL    INLINK     Yes  0        No      No      N/A        No   
INPA   INLINK     Yes  0        No      No      N/A        No   
INPB   INLINK     Yes  0        No      No      N/A        No   
INPC   INLINK     Yes  0        No      No      N/A        No   
INPD   INLINK     Yes  0        No      No      N/A        No   
INPE   INLINK     Yes  0        No      No      N/A        No   
INPF   INLINK     Yes  0        No      No      N/A        No   
INPG   INLINK     Yes  0        No      No      N/A        No   
INPH   INLINK     Yes  0        No      No      N/A        No   
INPI   INLINK     Yes  0        No      No      N/A        No   
INPJ   INLINK     Yes  0        No      No      N/A        No   
INPK   INLINK     Yes  0        No      No      N/A        No   
INPL   INLINK     Yes  0        No      No      N/A        No   
A      DOUBLE     No   0        Yes     Yes/No  Yes        Yes  
B      DOUBLE     No   0        Yes     Yes/No  Yes        Yes  
C      DOUBLE     No   0        Yes     Yes/No  Yes        Yes  
D      DOUBLE     No   0        Yes     Yes/No  Yes        Yes  
E      DOUBLE     No   0        Yes     Yes/No  Yes        Yes  
F      DOUBLE     No   0        Yes     Yes/No  Yes        Yes  
G      DOUBLE     No   0        Yes     Yes/No  Yes        Yes  
H      DOUBLE     No   0        Yes     Yes/No  Yes        Yes  
I      DOUBLE     No   0        Yes     Yes/No  Yes        Yes  
J      DOUBLE     No   0        Yes     Yes/No  Yes        Yes  
K      DOUBLE     No   0        Yes     Yes/No  Yes        Yes  
L      DOUBLE     No   0        Yes     Yes/No  Yes        Yes  
LA     DOUBLE     No   0        Yes     No      No         No   
LB     DOUBLE     No   0        Yes     No      No         No   
LC     DOUBLE     No   0        Yes     No      No         No   
LD     DOUBLE     No   0        Yes     No      No         No   
LE     DOUBLE     No   0        Yes     No      No         No   
LF     DOUBLE     No   0        Yes     No      No         No   
LG     DOUBLE     No   0        Yes     No      No         No   
LH     DOUBLE     No   0        Yes     No      No         No   
LI     DOUBLE     No   0        Yes     No      No         No   
LJ     DOUBLE     No   0        Yes     No      No         No   
LK     DOUBLE     No   0        Yes     No      No         No   
LL     DOUBLE     No   0        Yes     No      No         No   
EGU    STRING     Yes  Null     Yes     Yes     No         No   
HOPR   FLOAT      Yes  0        Yes     Yes     No         No   
LOPR   FLOAT      Yes  0        Yes     Yes     No         No   
HIHI   FLOAT      Yes  0        Yes     Yes     No         Yes  
LOLO   FLOAT      Yes  0        Yes     Yes     No         Yes  
HIGH   FLOAT      Yes  0        Yes     Yes     No         Yes  
LOW    FLOAT      Yes  0        Yes     Yes     No         Yes  
HHSV   GBLCHOICE  Yes  0        Yes     Yes     No         Yes  
LLSV   GBLCHOICE  Yes  0        Yes     Yes     No         Yes  
HSV    GBLCHOICE  Yes  0        Yes     Yes     No         Yes  
LSV    GBLCHOICE  Yes  0        Yes     Yes     No         Yes  
HYST   DOUBLE     Yes  0        Yes     Yes     No         No   
ADEL   DOUBLE     Yes  0        Yes     Yes     No         No   
MDEL   DOUBLE     Yes  0        Yes     Yes     No         No   
LALM   DOUBLE     No   0        Yes     No      No         No   
ALST   DOUBLE     No   0        Yes     No      No         No   
MLST   DOUBLE     No   0        Yes     No      No         No   
--------------------------------------------------------------

3. Field Descriptions

---------------------------------------------------------------------------------------------------
Name           Summary                Description                                                    
---------------------------------------------------------------------------------------------------
VAL            Value Field            This field is the computed value, determined as a result of    
                                      record processing.                                             
SELM           Select Mechanism       SELECTED:   Use SELN as index (0 to 15)                        
                                      SELECT_HIGH:   Select highest                                  
                                      SELECT_LOW:   Select lowest                                    
                                      SELECT_MEDIAN:   Select median value.                          
                                                                                                     
                                                                                                     
                                                                                                     
SELN           Select Number          Index of selected input. If SELM=SELECTED, then this is        
                                      the index (0 to 15) of the input to select.                    
PREC           Display Precision      Precision with which to display VAL.  This field is used by    
                                      record support to supply a value when get_precision            
                                      is called.                                                     
NVL            Index Value            IF NVL is a constant, SELN is set to the constant value.  If   
               Location, an input     NVL is a database or channel access link then SELN is          
               link                   read from NVL.                                                 
INPA,...,INPL  Input A, Input B, ...  The input links.  Each may be a constant, a database link,     
                                      or a channel access link. Any link not defined is ignored.     
                                      NOTE:  In order to implement SELM it is necessary to           
                                      recognize missing values.  The value 1e30 was selected         
                                      to represent MISSING.  If a link is a constant with value 0    
                                      (zero, the default) then at record initialization time the     
                                      corresponding A, ... L field is set equal to MISSING.          
A,...,L        A, B, ...              The input values  If the corresponding INP field is a          
                                      constant, this field is initialized with the constant value    
                                      but can be changed via dbPuts.                                 
LA,...,LL      Last A, Last B, ...    Previous input values  These fields are used to decide         
                                      when to trigger monitors on A,...,L.                           
EGU            Engineering Units      ASCII string describing Engineering units.  This field is      
                                      used by record support to supply a units description string    
                                      when get_units is called.                                      
HOPR           High Operating         These fields determine the upper and lower display limits      
               Range                  for graphics displays and the upper and lower control          
                                      limits for control displays. The fields are used by record     
                                      support to honor calls to get_graphic_double or                
                                      get_control_double.                                            
LOPR           Low Operating                                                                         
               Range                                                                                 
HIHI           Hihi Alarm Limit       These fields specify the alarm limits and severities.          
HIGH           High Alarm Limit                                                                      
LOW            Low Alarm Limit                                                                       
LOLO           Lolo Alarm Limit                                                                      
HHSV           Severity for a Hihi                                                                   
               Alarm                                                                                 
HSV            Severity for a High                                                                   
               Alarm                                                                                 
LSV            Severity for a Low                                                                    
               Alarm                                                                                 
LLSV           Severity for a Lolo                                                                   
               Alarm                                                                                 
HYST           Alarm Deadband         These parameters specify hysteresis factors for triggering     
                                      monitor callbacks, i.e. monitors specified by calls to         
                                      caAddEvent or dbAddEvent. A monitor will not be                
                                      triggered until VAL changes by more than the specified         
                                      amount.                                                        
ADEL           Archive Deadband                                                                      
MDEL           Monitor, i.e. value                                                                   
               change, Deadband                                                                      
LALM           Last Alarmed Value     These fields are used to implement the hysteresis factors      
                                      for monitors.                                                  
ALST           Archive Last Value                                                                    
MLST           Monitor Last Value                                                                    
---------------------------------------------------------------------------------------------------

4. 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 1e30 if the constant has the value 0).

For each input link that is of type PV_LINK, a 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

5. Record Processing

Routine process implements the following algorithm:

  1. 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.
  2. 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.
  3. 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.
  4. Check to see if monitors should be invoked.
  5. Scan forward link if necessary, set PACT FALSE, and return.
 
Table of Contents Next Chapter