NB: This manual documents a 20+ year old version of EPICS, see here for the EPICS 7 Record Reference documentation.

[Next] [Previous] [Top] [Contents] [Index]

EPICS Record Reference Manual

Chapter 5: ao - Analog Output

1. Introduction

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.

The record supports alarm limits, conversion from/to engineering units, and graphics and control limits. The analog output fields fall into the following categories:

scan parameters

desired output parameters

convert and write parameters

operator display parameters

alarm parameters

monitor parameters

run-time parameters.

2. Scan Parameters

The analog output record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in Scan Fields, Chapter 2, 2. In addition, Scanning Specification, Chapter 1, 1, explains how these fields are used. Note that I/O event scanning is only supported for those card types that interrupt.

3. Desired Output Parameters

The analog output record must specify where the desired output to be written should originate. The desired output should be in engineering units. The first field that determines where the desired output originates is the output mode select field (OMSL), which can has two choices--closed_loop or supervisory. If supervisory is specified, the value in the VAL field can be set externally via dbPuts at run-time. If closed_loop is specified, the VAL field's value is obtained from the address specified in the desired output location field (DOL), which can be either a database link or a channel access link. To achieve continuous control, a database link to a control algorithm record should be entered in the DOL field.

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.)

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:

Note: If nothing is entered for DRVH and DRVL, the output value will never change.
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.

See Address Specification, Chapter 1, 2, for information on specifying links. Scanning Specification, Chapter 1, 1, explains the effect of database linkage on scanning.
FieldSummaryTypeDCTInitialAccessModifyRec Proc MonitorPP
OMSLOutput Mode SelectGBLCHOICEYes0YesYesNoNo
DOLDesired Output Location (an Input Link)INLINKYes0NoNoN/ANo
OIFOut Full or IncrementalRECCHOICEYes0YesYesNoNo
DRVHDrive HighFLOATYes0YesYesNoYes
DRVLDrive LowFLOATYes0YesYesNoYes
OROCMaximum Output Rate of ChangeFLOATYes0YesYesNoNo
OVALOutput ValueDOUBLENo0YesYesYesNo

4. Convert and Write Parameters

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.
FieldSummaryTypeDCTInitialAccessModifyRec Proc MonitorPP
LINRType of ConversionCVTCHOICEYes0YesYesNoYes
RVALRaw ValueLONGNo0YesYesYesYes
ROFFRaw Value OffsetLONGNo0YesYesNoYes
EGUFEngineering Units FullFLOATYes0YesYesNoYes
EGULEngineering Units LowFLOATYes0YesYesNoYes
AOFFAdjustment OffsetFLOATYes0YesYesNoYes
ASLOAdjustment SlopeFLOATYes1YesYesNoYes
ESLOSlope for Linear ConversionsDOUBLENo1YesNoNoNo

4.1. Conversion Related Fields and the Conversion Process

Except for analog outputs that use Soft Channel device support, the LINR field determines if a conversion is performed and which conversion algorithm is used to convert OVAL to RVAL. The LINR field can specify LINEAR for linear conversions, NO CONVERSION for no conversions at all, or the name of a breakpoint table such as typeKdegC for breakpoint conversions.

Note that the ESLO, 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.
ROFFComputed by device support routines. Used to offset raw value. Used by all records but Soft Channel records.
EGUFThe user must calculate these fields when configuring the database. They are used to calculate the value ESLO, and are thus only significant for records that use linear conversions. See Conversion Specification, Chapter 1, 3, for more information on how to calculate these fields.
AOFFThese fields are adjustment parameters for the raw output values. They are applied to the raw output value after conversion from engineering units.
ESLOComputed by device support using EGUF and EGUL. Used if LINR specifies LINEAR.

1. RVAL = (OVAL - EGUL) / ESLO + 0.5


If the conversion is via a breakpoint table, the new value is obtained.


Since RVAL is now defined, the last step is to set UDF to FALSE.

To see how the Raw Soft Channel device support routine uses these fields, see Section 11.3, Device Support For Soft Records, in this chapter for more information.

4.2. Output Specification

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 Address Specification, Chapter 1, 2, 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.

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 Address Specification, Chapter 1, 2, for information on the format of database and channel access addresses.

5. Operator Display Parameters

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.

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.

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<=LOPR<=HOPR<=DRVH.

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.

See Chapter 2, Fields Common to All Record Types, for more on the record name (NAME) and description (DESC) fields.
FieldSummaryTypeDCTInitialAccessModifyRec Proc MonitorPP
EGUEngineering UnitsSTRING [16]YesnullYesYesNoNo
HOPRHigh Operating RangeFLOATYes0YesYesNoNo
LOPRLow Operating RangeFLOATYes0YesYesNoNo
PRECDisplay PrecisionSHORTYes0YesYesNoNo
NAMERecord NameSTRING [29]Yes0YesNoNoNo
DESCDescriptionSTRING [29]YesNullYesYesNoNo

6. Alarm Parameters

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.

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.

See Alarm Specification, Chapter 1, 4, for a complete explanation of alarms and these fields. See Chapter 3.5, Invalid Alarm Output Action, for more information on the IVOA and IVOV fields. Alarm Fields, Chapter 2, 3, lists other fields related to a alarms that are common to all record types.
FieldSummaryTypeDCTInitialAccessModifyRec Proc MonitorPP
HIHIHihi Alarm LimitFLOATYes0YesYesNoYes
HIGHHigh Alarm LimitFLOATYes0YesYesNoYes
LOWLow Alarm LimitFLOATYes0YesYesNoYes
LOLOLolo Alarm LimitFLOATYes0YesYesNoYes
HHSVHihi Alarm SeverityGBLCHOICEYes0YesYesNoYes
HSVHigh Alarm SeverityGBLCHOICEYes0YesYesNoYes
LSVLow Alarm SeverityGBLCHOICEYes0YesYesNoYes
LLSVLolo Alarm SeverityGBLCHOICEYes0YesYesNoYes
HYSTAlarm DeadbandDOUBLEYes0YesYesNoNo
IVOAInvalid Alarm Output ActionGBLCHOICEYes0YesYesNoNo
IVOVInvalid Alarm Output Value, in eng. unitsDOUBLEYes0YesYesNoNo

7. Monitor Parameters

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 Monitor Specification, Chapter 1, 5, for a complete explanation of monitors.
FieldSummaryTypeDCTInitialAccessModifyRec Proc MonitorPP
ADELArchive DeadbandDOUBLEYes0YesYesNoNo
MDELMonitor, i.e. value change, DeadbandDOUBLEYes0YesYesNoNo

8. Run-Time Parameters and Simulation Mode Parameters

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.

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.

ORBV is used to decide if monitors should be triggered for RBV at the same time monitors are triggered for changes in VAL.

The LALM, MLST, and ALST fields are used to implement the hysteresis factors for monitor callbacks.

The INIT field is used to initialize the LBRK field and for smoothing.

The PBRK field contains a pointer to the current breakpoint table (if any), and LBRK contains a pointer to the last breakpoint table used.

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..
FieldSummaryTypeDCTInitialAccessModifyRec Proc MonitorPP
ORAWOld Raw ValueLONGNo0YesNoNoNo
RBVRead Back ValueLONGNo0YesNoYesNo
ORBVOld read back valueLONGNo0YesNoNoNo
LALMLast Alarm Monitor Trigger ValueDOUBLENo0YesNoNoNo
ALSTLast Archiver Monitor Trigger ValueDOUBLENo0YesNoNoNo
MLSTLast Value Change Monitor Trigger ValueDOUBLENo0YesNoNoNo
PBRKAddress of Breakpoint TableNOACCESSNo4NoNoNo 
LBRKLast BreakpointSHORTNo0YesNoNoNo
PVALPrevious Data ValueDOUBLENo0YesNoNoNo
OMODOVAL modified?LONGNoNullYesNoNoNo

The following fields are used to operate the analog output in the simulation mode. See Chapter 3, Fields Common to Many Record Types, for more information on these fields.
FieldSummaryTypeDCTInitialAccessModifyRec Proc MonitorPP
SIOLSimulation Value LocationINLINKYes0NoNoN/ANo
SVALSimulation ValueDOUBLENo0YesYesNoNo
SIMLSimulation Mode LocationINLINKYes0NoNoN/ANo
SIMMSimulation ModeGBLCHOICENo0YesYesNoNo
SIMSSimulation Mode Alarm SeverityGBLCHOICEYes0YesYesNoNo

9. Record Support Routines

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.


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.

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.

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.

If device support includes init_record, it is called.

INIT is set TRUE[. This causes PBRK, LBRK, and smoothing to be re-initialized If linear conversion is requested, then VAL is computed from RVAL using the algorithm:

and UDF is set to FALSE.

For breakpoint conversion, a call is made to cvtEngToRawBpt and UDF is then set to FALSE. PVAL is set to VAL.


See next section.


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.

INIT is set TRUE. This causes PBRK, LBRK, and smoothing to be re-initialized.


Fills in the values of struct valueDes so that they refer to VAL.


Sets the following values:

upper_alarm_limit = HIHI

upper_warning_limit = HIGH

lower_warning_limit = LOW

lower_alarm_limit = LOLO

10. Record Processing

Routine process implements the following algorithm:

1. 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.

2. Check PACT: If PACT is FALSE call fetch_values and convert which perform the following steps:

if DOL is DB_LINK and OMSL is CLOSED_LOOP get value   from DOL
if OIF is INCREMENTAL then set value = value + VAL else value = VAL
If Drive limits are defined force value to be within limits
Set VAL equal to value
If OVAL is undefined set it equal to value
If OROC is defined and not 0 make |value-OVAL| <=OROC
Set OVAL equal to value
Compute RVAL from OVAL. using linear or break point table
conversion. For linear conversions the algorithm is:
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 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.

4. Check severity and write the new value. See Invalid Alarm Output Action, Chapter 3, 3.5, for details on how invalid alarms affect output records.

5. 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.

6. Check to see if monitors should be invoked:

7. Scan forward link if necessary, set PACT and INIT FALSE, and return.

11. Device Support

11.1. Fields Of Interest To Device Support

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:
PACTProcessing ActiveSee Chapter 2, Fields Common to All Record Types for an explanation of these fields.
DPVTDevice Private
NSEVNew Alarm Severity
NSTANew Alarm Status
OUTOutput LinkThis field is used by the device support routines to locate its output.
EGUFEngineering Units FullThese fields are used to calculate ESLO. Note that these fields correspond to the high and low hardware limits.
EGULEngineering Unit Low
ESLOSlopeThese 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.
ROFF Raw Offset
RVAL Raw ValueThis is the value to write to OUT.

11.2. Device Support routines

Device support consists of the following routines:


This routine is called once during IOC initialization.


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.


  get_ioint_info(int cmd,struct dbCommon *precord,IOSCANPVT *ppvt)
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.


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:


This routine is called whenever either of the fields LINR, EGUF, EGUL or ROFF is modified.

11.3. Device Support For Soft Records

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.

Soft Channel

This module writes the current value of OVAL.

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_ao calls recGblPutLinkValue to write the current value of VAL. See Soft Output, Chapter 3, 3.2, for details.

Raw Soft Channel

This module is like the previous except that it writes the current value of RVAL.

1. - Introduction
2. - Scan Parameters
3. - Desired Output Parameters
4. - Convert and Write Parameters
4.1. - Conversion Related Fields and the Conversion Process
4.2. - Output Specification
5. - Operator Display Parameters
6. - Alarm Parameters
7. - Monitor Parameters
8. - Run-Time Parameters and Simulation Mode Parameters
9. - Record Support Routines
10. - Record Processing
11. - Device Support
11.1. - Fields Of Interest To Device Support
11.2. - Device Support routines
11.3. - Device Support For Soft Records
Soft Channel
Raw Soft Channel

EPICS Record Reference Manual - 19 MAY 1998
[Next] [Previous] [Top] [Contents] [Index]

Generated with Harlequin WebMaker