537 lines
16 KiB
Plaintext
537 lines
16 KiB
Plaintext
#*************************************************************************
|
|
# Copyright (c) 2007 UChicago Argonne LLC, as Operator of Argonne
|
|
# National Laboratory.
|
|
# Copyright (c) 2002 The Regents of the University of California, as
|
|
# Operator of Los Alamos National Laboratory.
|
|
# EPICS BASE is distributed subject to a Software License Agreement found
|
|
# in file LICENSE that is included with this distribution.
|
|
#*************************************************************************
|
|
|
|
=head3 Operator Display Parameters
|
|
|
|
The B<NAME> field contains the record name which must be unique within an
|
|
EPICS Channel Access name space. The name is supplied by the application
|
|
developer and is the means of identifying a specific record. The name has a
|
|
maximum length of 60 characters and should use only this limited set of
|
|
characters:
|
|
|
|
a-z A-Z 0-9 _ - : [ ] < > ;
|
|
|
|
The B<DESC> field may be set to provide a meaningful description of the
|
|
record's purpose. Maximum length is 40 characters.
|
|
|
|
=fields NAME, DESC
|
|
|
|
=cut
|
|
|
|
%#include "epicsTypes.h"
|
|
%#include "link.h"
|
|
field(NAME,DBF_STRING) {
|
|
prompt("Record Name")
|
|
special(SPC_NOMOD)
|
|
size(61)
|
|
}
|
|
field(DESC,DBF_STRING) {
|
|
prompt("Descriptor")
|
|
promptgroup("10 - Common")
|
|
size(41)
|
|
}
|
|
field(ASG,DBF_STRING) {
|
|
prompt("Access Security Group")
|
|
promptgroup("10 - Common")
|
|
special(SPC_AS)
|
|
size(29)
|
|
}
|
|
|
|
=head3 Scan Fields
|
|
|
|
These fields contain information related to how and when a record processes. A
|
|
few records have unique fields that also affect how they process. These
|
|
fields, if any, will be listed and explained in the section for each record.
|
|
|
|
The B<SCAN> field specifies the scanning period for periodic record scans or the
|
|
scan type for non-periodic record scans. The default set of values for SCAN can
|
|
be found in L<menuScan.dbd|menuScan>.
|
|
|
|
The choices provided by this menu are:
|
|
|
|
=over
|
|
|
|
=item *
|
|
|
|
C<Passive> for the record scan to be triggered by other records or Channel
|
|
Access
|
|
|
|
=item *
|
|
|
|
C<Event> for event-driven scan
|
|
|
|
=item *
|
|
|
|
C<I/O Intr> for interrupt-driven scan
|
|
|
|
=item *
|
|
|
|
A set of periodic scan intervals
|
|
|
|
=back
|
|
|
|
Additional periodic scan rates may be defined for individual IOCs by making a
|
|
local copy of menuScan.dbd and adding more choices as required. Scan rates
|
|
should normally be defined in order, with the fastest rates appearing first.
|
|
Scan periods may now be specified in seconds, minutes, hours or Hertz/Hz, and
|
|
plural time units will also be accepted (seconds are used if no unit is
|
|
mentioned in the choice string). For example the rates given below are all
|
|
valid:
|
|
|
|
1 hour
|
|
0.5 hours
|
|
15 minutes
|
|
3 seconds
|
|
1 second
|
|
2 Hertz
|
|
|
|
The B<PINI> field specifies record processing at initialization. If it is set
|
|
to YES during database configuration, the record is processed once at IOC
|
|
initialization (before the normal scan tasks are started).
|
|
|
|
The B<PHAS> field orders the records within a specific SCAN group. This is not
|
|
meaningful for passive records. All records of a specified phase are processed
|
|
before those with higher phase number. Whenever possible it is better to use
|
|
linked passive records to enforce the order of processing rather than a phase
|
|
number.
|
|
|
|
The B<EVNT> field specifies an event number. This event number is used if the
|
|
SCAN field is set to C<Event>. All records with scan type C<Event> and the
|
|
same EVNT value will be processed when a call to post_event for EVNT is made.
|
|
The call to post_event is: post_event(short event_number).
|
|
|
|
The B<PRIO> field specifies the scheduling priority for processing records
|
|
with SCAN=C<I/O Event> and asynchronous record completion tasks.
|
|
|
|
The B<DISV> field specifies a "disable value". Record processing is
|
|
immediately terminated if the value of this field is equal to the value of the
|
|
DISA field, i.e. the record is disabled. Note that field values of a record
|
|
can be changed by database put or Channel Access, even if a record is
|
|
disabled.
|
|
|
|
The B<DISA> field contains the value that is compared with DISV to determine
|
|
if the record is disabled. The value of the DISA field is obtained via SDIS if
|
|
SDIS is a database or channel access link. If SDIS is not a database or
|
|
channel access link, then DISA can be set via dbPutField or dbPutLink.
|
|
|
|
If the B<PROC> field of a record is written to, the record is processed.
|
|
|
|
The B<DISS> field defines the record's "disable severity". If this field is
|
|
not NO_ALARM and the record is disabled, the record will be put into alarm
|
|
with this severity and a status of DISABLE_ALARM.
|
|
|
|
The B<LSET> field contains the lock set to which this record belongs. All
|
|
records linked in any way via input, output, or forward database links belong
|
|
to the same lock set. Lock sets are determined at IOC initialization time, and
|
|
are updated whenever a database link is added, removed or altered.
|
|
|
|
The B<LCNT> field counts the number of times dbProcess finds the record active
|
|
during successive scans, i.e. PACT is TRUE. If dbProcess finds the record
|
|
active MAX_LOCK times (currently set to 10) it raises a SCAN_ALARM.
|
|
|
|
The B<PACT> field is TRUE while the record is being processed. For
|
|
asynchronous records PACT can be TRUE from the time record processing is
|
|
started until the asynchronous completion occurs. As long as PACT is TRUE,
|
|
dbProcess will not call the record processing routine. See Application
|
|
Developers Guide for details on usage of PACT.
|
|
|
|
The B<FLNK> field is a database link to another record (the "target" record).
|
|
Processing a record with a specified FLNK field will force processing of the
|
|
target record, provided the target record's SCAN field is set to C<Passive>.
|
|
|
|
The B<SPVT> field is for internal use by the scanning system.
|
|
|
|
=fields SCAN, PINI, PHAS, EVNT, PRIO, DISV, DISA, SDIS, PROC, DISS, LCNT, PACT, FLNK, SPVT
|
|
|
|
=cut
|
|
|
|
field(SCAN,DBF_MENU) {
|
|
prompt("Scan Mechanism")
|
|
promptgroup("20 - Scan")
|
|
special(SPC_SCAN)
|
|
interest(1)
|
|
menu(menuScan)
|
|
}
|
|
field(PINI,DBF_MENU) {
|
|
prompt("Process at iocInit")
|
|
promptgroup("20 - Scan")
|
|
interest(1)
|
|
menu(menuPini)
|
|
}
|
|
field(PHAS,DBF_SHORT) {
|
|
prompt("Scan Phase")
|
|
promptgroup("20 - Scan")
|
|
special(SPC_SCAN)
|
|
interest(1)
|
|
}
|
|
field(EVNT,DBF_STRING) {
|
|
prompt("Event Name")
|
|
promptgroup("20 - Scan")
|
|
special(SPC_SCAN)
|
|
size(40)
|
|
interest(1)
|
|
}
|
|
field(TSE,DBF_SHORT) {
|
|
prompt("Time Stamp Event")
|
|
promptgroup("20 - Scan")
|
|
interest(1)
|
|
}
|
|
field(TSEL,DBF_INLINK) {
|
|
prompt("Time Stamp Link")
|
|
promptgroup("20 - Scan")
|
|
interest(1)
|
|
}
|
|
field(DTYP,DBF_DEVICE) {
|
|
prompt("Device Type")
|
|
promptgroup("10 - Common")
|
|
interest(1)
|
|
}
|
|
field(DISV,DBF_SHORT) {
|
|
prompt("Disable Value")
|
|
promptgroup("20 - Scan")
|
|
initial("1")
|
|
}
|
|
field(DISA,DBF_SHORT) {
|
|
prompt("Disable")
|
|
}
|
|
field(SDIS,DBF_INLINK) {
|
|
prompt("Scanning Disable")
|
|
promptgroup("20 - Scan")
|
|
interest(1)
|
|
}
|
|
%#include "epicsMutex.h"
|
|
field(MLOK,DBF_NOACCESS) {
|
|
prompt("Monitor lock")
|
|
special(SPC_NOMOD)
|
|
interest(4)
|
|
extra("epicsMutexId mlok")
|
|
}
|
|
%#include "ellLib.h"
|
|
field(MLIS,DBF_NOACCESS) {
|
|
prompt("Monitor List")
|
|
special(SPC_NOMOD)
|
|
interest(4)
|
|
extra("ELLLIST mlis")
|
|
}
|
|
field(BKLNK,DBF_NOACCESS) {
|
|
prompt("Backwards link tracking")
|
|
special(SPC_NOMOD)
|
|
interest(4)
|
|
extra("ELLLIST bklnk")
|
|
}
|
|
field(DISP,DBF_UCHAR) {
|
|
prompt("Disable putField")
|
|
}
|
|
field(PROC,DBF_UCHAR) {
|
|
prompt("Force Processing")
|
|
pp(TRUE)
|
|
interest(3)
|
|
}
|
|
|
|
=head3 Alarm Fields
|
|
|
|
These fields indicate the status and severity of alarms, or else determine the
|
|
how and when alarms are triggered. Of course, many records have alarm-related
|
|
fields not common to all records. These fields are listed and explained in the
|
|
appropriate section on each record.
|
|
|
|
The B<STAT> field contains the current alarm status.
|
|
|
|
The B<SEVR> field contains the current alarm severity.
|
|
|
|
These two fields are seen outside database access. The B<NSTA> and B<NSEV>
|
|
fields are used by the database access, record support, and device support
|
|
routines to set new alarm status and severity values. Whenever any software
|
|
component discovers an alarm condition, it uses the following macro function:
|
|
recGblSetSevr(precord,new_status,new_severity) This ensures that the current
|
|
alarm severity is set equal to the highest outstanding alarm. The file alarm.h
|
|
defines all allowed alarm status and severity values.
|
|
|
|
The B<ACKS> field contains the highest unacknowledged alarm severity.
|
|
|
|
The B<ACKT> field specifies if it is necessary to acknowledge transient
|
|
alarms.
|
|
|
|
The B<UDF> indicates if the record's value is B<U>nB<D>eB<F>ined. Typically
|
|
this is caused by a failure in device support, the fact that the record has
|
|
never been processed, or that the VAL field currently contains a NaN (not a
|
|
number). UDF is initialized to TRUE at IOC initialization. Record and device
|
|
support routines which write to the VAL field are responsible for setting UDF.
|
|
|
|
=fields STAT, SEVR, NSTA, NSEV, ACKS, ACKT, UDF
|
|
|
|
=cut
|
|
|
|
field(STAT,DBF_MENU) {
|
|
prompt("Alarm Status")
|
|
special(SPC_NOMOD)
|
|
menu(menuAlarmStat)
|
|
initial("UDF")
|
|
}
|
|
field(SEVR,DBF_MENU) {
|
|
prompt("Alarm Severity")
|
|
special(SPC_NOMOD)
|
|
menu(menuAlarmSevr)
|
|
}
|
|
field(AMSG,DBF_STRING) {
|
|
prompt("Alarm Message")
|
|
special(SPC_NOMOD)
|
|
size(40)
|
|
}
|
|
field(NSTA,DBF_MENU) {
|
|
prompt("New Alarm Status")
|
|
special(SPC_NOMOD)
|
|
interest(2)
|
|
menu(menuAlarmStat)
|
|
}
|
|
field(NSEV,DBF_MENU) {
|
|
prompt("New Alarm Severity")
|
|
special(SPC_NOMOD)
|
|
interest(2)
|
|
menu(menuAlarmSevr)
|
|
}
|
|
field(NAMSG,DBF_STRING) {
|
|
prompt("New Alarm Message")
|
|
special(SPC_NOMOD)
|
|
size(40)
|
|
}
|
|
field(ACKS,DBF_MENU) {
|
|
prompt("Alarm Ack Severity")
|
|
special(SPC_NOMOD)
|
|
interest(2)
|
|
menu(menuAlarmSevr)
|
|
}
|
|
field(ACKT,DBF_MENU) {
|
|
prompt("Alarm Ack Transient")
|
|
promptgroup("70 - Alarm")
|
|
special(SPC_NOMOD)
|
|
interest(2)
|
|
menu(menuYesNo)
|
|
initial("YES")
|
|
}
|
|
field(DISS,DBF_MENU) {
|
|
prompt("Disable Alarm Sevrty")
|
|
promptgroup("70 - Alarm")
|
|
interest(1)
|
|
menu(menuAlarmSevr)
|
|
}
|
|
field(LCNT,DBF_UCHAR) {
|
|
prompt("Lock Count")
|
|
special(SPC_NOMOD)
|
|
interest(2)
|
|
}
|
|
field(PACT,DBF_UCHAR) {
|
|
prompt("Record active")
|
|
special(SPC_NOMOD)
|
|
interest(1)
|
|
}
|
|
field(PUTF,DBF_UCHAR) {
|
|
prompt("dbPutField process")
|
|
special(SPC_NOMOD)
|
|
interest(1)
|
|
}
|
|
field(RPRO,DBF_UCHAR) {
|
|
prompt("Reprocess ")
|
|
special(SPC_NOMOD)
|
|
interest(1)
|
|
}
|
|
field(ASP,DBF_NOACCESS) {
|
|
prompt("Access Security Pvt")
|
|
special(SPC_NOMOD)
|
|
interest(4)
|
|
extra("struct asgMember *asp")
|
|
}
|
|
field(PPN,DBF_NOACCESS) {
|
|
prompt("pprocessNotify")
|
|
special(SPC_NOMOD)
|
|
interest(4)
|
|
extra("struct processNotify *ppn")
|
|
}
|
|
field(PPNR,DBF_NOACCESS) {
|
|
prompt("pprocessNotifyRecord")
|
|
special(SPC_NOMOD)
|
|
interest(4)
|
|
extra("struct processNotifyRecord *ppnr")
|
|
}
|
|
field(SPVT,DBF_NOACCESS) {
|
|
prompt("Scan Private")
|
|
special(SPC_NOMOD)
|
|
interest(4)
|
|
extra("struct scan_element *spvt")
|
|
}
|
|
|
|
=head3 Device Fields
|
|
|
|
The B<RSET> field contains the address of the Record Support Entry Table. See
|
|
the Application Developers Guide for details on usage.
|
|
|
|
The B<DSET> field contains the address of Device Support Entry Table. The
|
|
value of this field is determined at IOC initialization time. Record support
|
|
routines use this field to locate their device support routines.
|
|
|
|
The B<DPVT> field is is for private use of the device support modules.
|
|
|
|
=fields RSET, DSET, DPVT
|
|
|
|
=cut
|
|
|
|
field(RSET,DBF_NOACCESS) {
|
|
prompt("Address of RSET")
|
|
special(SPC_NOMOD)
|
|
interest(4)
|
|
extra("struct typed_rset *rset")
|
|
}
|
|
%#include "devSup.h"
|
|
field(DSET,DBF_NOACCESS) {
|
|
prompt("DSET address")
|
|
special(SPC_NOMOD)
|
|
interest(4)
|
|
extra("unambiguous_dset *dset")
|
|
}
|
|
field(DPVT,DBF_NOACCESS) {
|
|
prompt("Device Private")
|
|
special(SPC_NOMOD)
|
|
interest(4)
|
|
extra("void *dpvt")
|
|
}
|
|
field(RDES,DBF_NOACCESS) {
|
|
prompt("Address of dbRecordType")
|
|
special(SPC_NOMOD)
|
|
interest(4)
|
|
extra("struct dbRecordType *rdes")
|
|
}
|
|
field(LSET,DBF_NOACCESS) {
|
|
prompt("Lock Set")
|
|
special(SPC_NOMOD)
|
|
interest(4)
|
|
extra("struct lockRecord *lset")
|
|
}
|
|
field(PRIO,DBF_MENU) {
|
|
prompt("Scheduling Priority")
|
|
promptgroup("20 - Scan")
|
|
special(SPC_SCAN)
|
|
interest(1)
|
|
menu(menuPriority)
|
|
}
|
|
|
|
=head3 Debugging Fields
|
|
|
|
The B<TPRO> field is used for trace processing. If this field is non-zero a
|
|
message is printed whenever this record is processed, and when any other
|
|
record in the same lock-set is processed by a database link from this record.
|
|
|
|
The B<BKPT> field indicates if there is a breakpoint set at this record. This
|
|
supports setting a debug breakpoint in the record processing. STEP through
|
|
database processing can be supported using this.
|
|
|
|
=fields TPRO, BKPT
|
|
|
|
|
|
=head3 Miscellaneous Fields
|
|
|
|
The B<ASG> field contains a character string value defining the access
|
|
security group for this record. If left empty, the record is placed in group
|
|
DEFAULT.
|
|
|
|
The B<ASP> field is a field for private use of the access security system.
|
|
|
|
The B<DISP> field controls dbPutFields to this record which are normally
|
|
issued by channel access. If the field is set to TRUE all dbPutFields
|
|
directed to this record are ignored except to the field DISP itself.
|
|
|
|
The B<DTYP> field specifies the device type for the record. Each record type
|
|
has its own set of device support routines which are specified in
|
|
devSup.ASCII. If a record type does not have any associated device support,
|
|
DTYP and DSET are meaningless.
|
|
|
|
The B<MLOK> field contains the monitor lock. The lock used by the monitor
|
|
routines when the monitor list is being used. The list is locked whenever
|
|
monitors are being scheduled, invoked, or when monitors are being added to or
|
|
removed from the list. This field is accessed only by the dbEvent routines.
|
|
|
|
The B<MLIS> field is the head of the list of monitors connected to this
|
|
record. Each record support module is responsible for triggering monitors for
|
|
any fields that change as a result of record processing. Monitors are present
|
|
if mlis count is greater than zero. The call to trigger monitors is:
|
|
db_post_event(precord,&data,mask), where "mask" is some combination of
|
|
DBE_ALARM, DBE_VALUE, and DBE_LOG.
|
|
|
|
The B<PPN> field contains the address of a putNotify callback.
|
|
|
|
The B<PPNR> field contains the next record for PutNotify.
|
|
|
|
The B<PUTF> field is set to TRUE if dbPutField caused the current record
|
|
processing.
|
|
|
|
The B<RDES> field contains the address of dbRecordType
|
|
|
|
The B<RPRO> field specifies a reprocessing of the record when current
|
|
processing completes.
|
|
|
|
The B<TIME> field contains the time when this record was last processed in
|
|
standard format.
|
|
|
|
The B<TSE> field indicates the mechanism to use to get the time stamp. '0' -
|
|
call get time as before '-1' - call the time stamp driver and use the best
|
|
source available. '-2' - the device support provides the time stamp from the
|
|
hardware. Values between 1-255 request the time of the last occurance of a
|
|
generalTime event.
|
|
|
|
The B<TSEL> field contains an input link for obtaining the time stamp. If this
|
|
link references the .TIME field of a record then the time stamp of the
|
|
referenced record becomes the time stamp for this record as well. In this
|
|
case, an internal flag is set and ".TIME" is then overwritten by ".VAL". If
|
|
any other field is referenced, the field value is read and stored in the .TSE
|
|
field which is then used to acquire a timestamp.
|
|
|
|
=fields ASG, ASP, DISP, DTYP, MLOK, MLIS, PPN, PPNR, PUTF, RDES, RPRO, TIME, TSE, TSEL
|
|
|
|
=cut
|
|
|
|
field(TPRO,DBF_UCHAR) {
|
|
prompt("Trace Processing")
|
|
}
|
|
field(BKPT,DBF_NOACCESS) {
|
|
prompt("Break Point")
|
|
special(SPC_NOMOD)
|
|
interest(1)
|
|
extra("epicsUInt8 bkpt")
|
|
}
|
|
field(UDF,DBF_UCHAR) {
|
|
prompt("Undefined")
|
|
promptgroup("10 - Common")
|
|
pp(TRUE)
|
|
interest(1)
|
|
initial("1")
|
|
}
|
|
field(UDFS,DBF_MENU) {
|
|
prompt("Undefined Alarm Sevrty")
|
|
promptgroup("70 - Alarm")
|
|
interest(1)
|
|
menu(menuAlarmSevr)
|
|
initial("INVALID")
|
|
}
|
|
%#include "epicsTime.h"
|
|
field(TIME,DBF_NOACCESS) {
|
|
prompt("Time")
|
|
special(SPC_NOMOD)
|
|
interest(2)
|
|
extra("epicsTimeStamp time")
|
|
}
|
|
field(UTAG,DBF_UINT64) {
|
|
prompt("Time Tag")
|
|
special(SPC_NOMOD)
|
|
interest(3)
|
|
}
|
|
field(FLNK,DBF_FWDLINK) {
|
|
prompt("Forward Process Link")
|
|
promptgroup("20 - Scan")
|
|
interest(1)
|
|
}
|