[Next]
[Previous]
[Top]
[Contents]
[Index]
EPICS Record Reference Manual
Chapter 11: compress - Compression
1. Introduction
The data compression record is used to collect and compress data from
arrays. When the INP field references a data array field, it immediately
compresses the entire array into an element of an array using one of
several algorithms, overwriting the previous element. If the INP field
obtains its value from a scalar-value field, the compression record will
collect a new sample each time the record is processed and add it to
the compressed data array as a circular buffer.
The INP link can also specify a constant; however, if this is the case,
the compression algorithms are ignored, and the record support routines
merely return after checking the FLNK field.
The data compression fields fall into the following categories:
- scan parameters
- read parameters
- operator display parameters
- run-time parameters
2. Scanning Parameters
The compression 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. Since the compression record supports no direct interfaces to
hardware, its SCAN field cannot specify I/O Intr
.
3. Read Parameters and Algorithm Parameters
These fields determine what channel to read and how to compress the
data. The user specifies the algorithm to be used in the ALG field.
There are five possible algorithms which can be specified as follows:
Circular Buffer
Average
N to 1 Low Value
N to 1 High Value
N to 1 Average
These algorithms are explained in one of the sections below.
The RES field can be accessed at run time to cause the algorithm to
reset itself.
Field | Summary | Type | DCT | Initial | Access | Modify | Rec
Proc Monitor | PP |
---|
RES | Reset | SHORT | No | 0 | Yes | Yes | No | No |
ALG | Algorithm | RECCHOICE | Yes | 0 | Yes | No | No | No |
NSAM | Number in Sample | ULONG | Yes | 1 | Yes | No | No | No |
N | Number | ULONG | Yes | 1 | Yes | No | No | No |
ILIL | Initial Low Interest Value | FLOAT | Yes | 0 | Yes | Yes | No | No |
IHIL | Initial High Interest Value | FLOAT | Yes | 0 | Yes | Yes | No | No |
3.1. Input Specification
The input specification should be a database or channel access link.
Though INP can be a constant, the data compression algorithms are
supported only when INP is a database link. See Address
Specification, Chapter 1, 2, for information on specifying
links.
3.2. Algorithms and Related Fields
As stated above, the ALG field specifies which algorithm to be
performed on the data. The rest of the fields--NSAM, N, ILIL, IHIL, and
OFF--are used in the compressions, though N is not used in the Circular
Buffer
algorithm and ILIL, IHIL, and OFF are used neither in the
Circular Buffer
algorithm nor in the Average
algorithm.
The Circular Buffer
algorithm keeps a circular buffer of
length NSAM. Each time the record is processed, it gets the data
referenced by INP and puts it into the circular buffer referenced by
VAL. Note that when INP refers to a scalar, VAL is just a time ordered
circular buffer of values obtained from INP.
Average
takes an average of all the elements of the array
obtained from INP; that is, the entire array referenced by INP is
retrieved, and the average of the elements is placed in the next element
of the circular buffer. The retrieved array is truncated to be of
length NSAM. N successive arrays are averaged and placed in the circular
buffer. Thus, VAL[0] holds the average of the first sampling of INP,
VAL[1] holds the average of the next sampling of INP, and so on. The
following sums up the equation:
If N to 1 Low Value
, N to 1 High Value
, or N
to 1 Average
are chosen, then VAL is a circular buffer of NSAM
samples. The actual algorithm depends on whether INP references a scalar
or an array. If INP refers to a scalar, then N successive time ordered
samples of INP are taken. After the Nth sample is obtained a new value,
determined by the algorithm (LOW, HIGH, or AVE), is written to the
circular buffer referenced by VAL. If LOW, the lowest value is written;
if HIGH, the highest value of all the samples is written; and if AVE,
the average of all the samples are written.
If INP refers to an array, then the following applies:
- N to 1 Low Value
- Compress N to 1 samples, keeping
the lowest value
- N to 1 High Value
- Compress N to 1
samples, keeping the highest value
- N to 1 Average
- Compress N to 1 samples,
taking the average
The compression record keeps (NSAM) data samples.
The N field determines the number of fields to compress into 1.
Thus, if NSAM was 3, and N was also equal to 3, then the algorithms
would work as in the following diagram.
OFF number of samples are ignored at the beginning of the array being
compressed. IHIL and ILIL are used as initial value filters when
compressing arrays; that is, the compression does not begin until a
value is found that is either greater than IHIL or less than ILIL
RES resets the algorithm before the maximum number of samples are
reached.
4. Operator Display Parameters
These parameters are used to present meaningful data to the operator.
They display the value and other parameters of the record either
textually or graphically.
The HOPR and LOPR fields only specify the range for VAL, HIHI, HIGH,
LOLO and LOW fields.
PREC controls the floating-point precision whenever get_precision
is called, and the field being referenced is the VAL field (i.e., one
of the values contained in the circular buffer).
The EGU field should be given a string that describes the value of VAL,
but is used whenever the get_units
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.
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 |
5. Alarm Parameters
The compression record has the alarm parameters common to all record
types. Alarm
Fields, Chapter 2, 3, lists other fields related to a alarms
that are common to all record types.
6. Run-time Parameters.
These parameters are used by the run-time code for processing the data
compression algorithm. They are not configurable by the user, though
some are accessible at run-time. They can represent the current state of
the waveform or of the record whose field is referenced by the INP
field.
NUSE holds the number of elements currently stored in VAL.
BPTR is a pointer that refers to the buffer referenced by VAL.
The SPTR field pointer to an array that is used for array averages.
WPTR is used by the dbGetlinks routines.
Field | Summary | Type | DCT | Initial | Access | Modify | Rec
Proc Monitor | PP |
---|
NUSE | Number Used | ULONG | No | 0 | Yes | No | No | No |
BPTR | Buffer Pointer | NOACCESS | No | 0 | No | No | No | |
SPTR | Summing Buffer Pointer | NOACCESS | No | 0 | No | No | No | |
WPTR | Work Buffer Pointer | NOACCESS | No | 0 | No | No | No | |
CVB | Compress Value Buffer | DOUBLE | No | 0 | Yes | No | No | No |
INX | Current Index of Circular Buffer | ULONG | No | 0 | Yes | No | No | No |
7. Record Support Routines
init_record
Space for all necessary arrays is allocated. The addresses are stored in
the appropriate fields in the record.
process
See next section.
special
This routine is called when RSET is set. It performs a reset.
get_value
Fills in the values of struct valueDes so that they refer to VAL.
cvt_dbaddr
This is called by dbNameToAddr. It makes the dbAddr structure refer to
the actual buffer holding the result.
get_array_info
Obtains values from the circular buffer referenced by VAL.
put_array_info
Writes values into the circular buffer referenced by 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, 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, 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.
8. Record Processing
Routine process implements the following algorithm:
- 1. If INP is not a database link, check monitors and the
forward link and return.
- 2. Get the current data referenced by INP.
- 3. Perform the appropriate algorithm:
- 1. Average: Read N successive instances of INP and
perform an element by element average. Until N instances have been
obtained it just return without checking monitors or the forward link.
When N instances have been obtained complete the algorithm, store the
result in the VAL array, check monitors and the forward link, and
return.
- 2. Circular Buffer: Write the values obtained
from INP into the VAL array as a circular buffer, check monitors and the
forward link, and return.
- 3. N to 1 xxx and INP refers to a scalar: Obtain
N successive values from INP and apply the NTO1xxx algorithm to these
values. Until N values are obtained monitors and forward links are not
checked. When N successive values have been obtained, complete the
algorithm, check monitors and the forward link, and return.
- 4. N to 1 xxx and INP refers to an array: The
ILIL and IHIL are honored if ILIL < IHIL. The input array is divided
into subarrays of length N. The specified N to 1 xxx compression
algorithm is applied to each sub-array and the result stored in the
array referenced by VAL. The monitors and forward link are checked.
- 4. If success, set UDF to FALSE.
- 5. Check to see if monitors should be invoked:
- Alarm monitors are invoked if the alarm status or severity has
changed.
- NSEV and NSTA are reset to 0.
- 6. Scan forward link if necessary, set PACT FALSE, and
return.
-
1. - Introduction
-
-
2. - Scanning Parameters
-
-
3. - Read Parameters and Algorithm Parameters
-
- 3.1.
- Input Specification
-
- 3.2.
- Algorithms and Related Fields
-
-
4. - Operator Display Parameters
-
-
5. - Alarm Parameters
-
-
6. - Run-time Parameters.
-
-
7. - Record Support Routines
-
- init_record
-
- process
-
- special
-
- get_value
-
- cvt_dbaddr
-
- get_array_info
-
- put_array_info
-
- get_units
-
- get_precision
-
- get_graphic_double
-
- get_control_double
-
-
8. - Record Processing
-
EPICS Record Reference Manual - 19 MAY 1998
[Next]
[Previous]
[Top]
[Contents]
[Index]
Generated with Harlequin WebMaker