<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki-ext.aps.anl.gov/epics/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=TimSouthern</id>
	<title>EPICSWIKI - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-ext.aps.anl.gov/epics/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=TimSouthern"/>
	<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=Special:Contributions/TimSouthern"/>
	<updated>2026-06-04T10:05:38Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Histogram&amp;diff=3831</id>
		<title>RRM 3-14 Histogram</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Histogram&amp;diff=3831"/>
		<updated>2018-02-09T14:15:44Z</updated>

		<summary type="html">&lt;p&gt;TimSouthern: /* Setting up an IOC to use record type */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Histogram =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The histogram record is used to store frequency counts of a signal into an array of arbitrary length. The user can configure the range of the signal value that the array will store. Anything outside this range will be ignored.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* monitor parameters&lt;br /&gt;
* run-time and simulation mode parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Scanning Parameters ===&lt;br /&gt;
&lt;br /&gt;
The histogram record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The SVL is the input link where the record reads its value. It can be a constant, a database link, or a channel access link. If SVL is a database or channel access link, then SGNL is read from SVL. If SVL is a constant, then SGNL is initialized with the constant value but can be changed via dbPuts. The &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support module can be specified in the DTYP field. For a list of other device support modules currently supported at the user's local site, use the &amp;lt;CODE&amp;gt;dbst&amp;lt;/CODE&amp;gt; utility in R3.13.&lt;br /&gt;
&lt;br /&gt;
The ULIM and LLIM fields determine the usable range of signal values. Any value of SGNL below LLIM or above ULIM is outside the range and will not be stored in the array. In the NELM field the user must specify the array size, e.g., the number of array elements. Each element in the NELM field holds the counts for an interval of the range of signal counts, the range specified by ULIM and LLIM. These intervals are determined by dividing the range by NELM:&lt;br /&gt;
&lt;br /&gt;
 (ULIM - LLIM) / NELM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVL&amp;lt;TD&amp;gt;Signal Value Location (an input link)&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SGNL&amp;lt;TD&amp;gt;Signal Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NELM&amp;lt;TD&amp;gt;Number of elements in array&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ULIM&amp;lt;TD&amp;gt;Upper Signal Limit&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLIM&amp;lt;TD&amp;gt;Lower Signal Limit&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. These fields are used to display the value and other parameters of the histogram either textually or graphically. See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Histogram record has the alarm parameters common to all record types.  [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
The MDEL field implements the monitor count deadband. Only when MCNT is greater than the value given to MDEL are monitors triggered, MCNT being the number of counts since the last time the record was processed. If MDEL is -1, everytime the record is processed, a monitor is triggered regardless.&lt;br /&gt;
&lt;br /&gt;
If SDEL is greater than 0, it causes a callback routine to be called. The number specified in SDEL is the callback routines interval. The callback routine is called every SDEL seconds. The callback routine posts an event if MCNT is greater than 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;TD&amp;gt;Monitor Delta&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SDEL&amp;lt;TD&amp;gt;Monitor Seconds Deadband&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time and Simulation Mode Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the histogram. They are not configurable by the user prior to run-time. They represent the current state of the record. Many of them are used to process the histogram more efficiently.&lt;br /&gt;
&lt;br /&gt;
The BPTR field contains a pointer to the unsigned long array of frequency values. The VAL field references this array as well. However, the BPTR field is not accessible at run-time.&lt;br /&gt;
&lt;br /&gt;
The MCNT field keeps counts the number of signal counts since the last monitor was invoked.&lt;br /&gt;
&lt;br /&gt;
The WDOG field contains a pointer to the callback control structure and is of no interest to the user.&lt;br /&gt;
&lt;br /&gt;
The collections controls field (CMD) is a menu field with five choices: &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Clear&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Start&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt;, and &amp;lt;CODE&amp;gt;Setup&amp;lt;/CODE&amp;gt;. When &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt;, the record retrieves its values and adds them to the signal array. This command will first clear the signal counts which have already been read when it is first invoked. The &amp;lt;CODE&amp;gt;Clear&amp;lt;/CODE&amp;gt; command erases the signal counts, setting the elements in the array back to zero. Afterwards, the field is set back to &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt;. The &amp;lt;CODE&amp;gt;Start&amp;lt;/CODE&amp;gt; command simply causes the record to read signal values into the array. Unlike &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt;, it doesn't clear the array first. The &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt; command disables the reading of signal values into the array. The &amp;lt;CODE&amp;gt;Setup&amp;lt;/CODE&amp;gt; command waits until the &amp;lt;CODE&amp;gt;start&amp;lt;/CODE&amp;gt; or &amp;lt;CODE&amp;gt;read&amp;lt;/CODE&amp;gt; command has been issued to start counting.&lt;br /&gt;
&lt;br /&gt;
The CSTA or collections status field implements the CMD field choices by enabling or disabling the reading of values into the histogram array. While FALSE, no signals are added to the array. While TRUE, signals are read and added to the array. The field is initialized to TRUE. The &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt; command is the only command that sets CSTA to FALSE. On the other hand, the &amp;lt;CODE&amp;gt;Start&amp;lt;/CODE&amp;gt; command is the only command that sets it to TRUE. Thus, &amp;lt;CODE&amp;gt;Start&amp;lt;/CODE&amp;gt; must be invoked after each &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt; command in order to enable counting; invoking &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt; will not enable signal counting after &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt; has been invoked.&lt;br /&gt;
&lt;br /&gt;
A typical use of these fields would be to initialize the CMD field to &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt; (it is initialized to this command by default), to use the &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt; command to disable counting when necessary, after which the &amp;lt;CODE&amp;gt;Start&amp;lt;/CODE&amp;gt; command can be invoked to re-start the signal count.&lt;br /&gt;
&lt;br /&gt;
The WDTH field is a private field that holds the signal width of the array elements. For instance, if the LLIM was configured to be 4.0 and ULIM was configured to be 12.0 and the NELM was set to 4, then the WDTH for each array would be 2. Thus, it is (ULIM - LLIM) / NELM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BPTR&amp;lt;TD&amp;gt;Buffer Pointer&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;See BPTR&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MCNT&amp;lt;TD&amp;gt;Monitor Counts&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;WDOG&amp;lt;TD&amp;gt;Watchdog Callback&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CMD&amp;lt;TD&amp;gt;Collections Control&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CSTA&amp;lt;TD&amp;gt;Collections Status&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;WDTH&amp;lt;TD&amp;gt;Element Width&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following fields are used to operate the histogram record in simulation mode. See [[RRM 3-14 Common#Fields Common to Many Record Types|Fields Common to Many Record Types]] for more information on the simulation mode fields. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIOL&amp;lt;TD&amp;gt;Simulation Value Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVAL&amp;lt;TD&amp;gt;Simulation Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIML&amp;lt;TD&amp;gt;Simulation Mode Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMM&amp;lt;TD&amp;gt;Simulation Mode&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMS&amp;lt;TD&amp;gt;Simulation Mode Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
Using NELM, space for the unsigned long array is allocated and the width WDTH of the array is calculated.&lt;br /&gt;
&lt;br /&gt;
This routine initializes SIMM with the value of SIML if SIML type is CONSTANT link or creates a channel access link if SIML type is PV_LINK. SVAL is likewise initialized if SIOL is CONSTANT or PV_LINK.&lt;br /&gt;
&lt;br /&gt;
This routine next checks to see that device support and a device support read routine are available. If device support includes init_record, it is called.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
Special is invoked whenever the fields CMD, SGNL, ULIM, or LLIM are changed.&lt;br /&gt;
&lt;br /&gt;
If SGNL is changed, add_count is called.&lt;br /&gt;
&lt;br /&gt;
If ULIM or LLIM are changed, WDTH is recalculated and clear_histogram is called.&lt;br /&gt;
&lt;br /&gt;
If CMD is less or equal to 1, clear_histogram is called and CMD is reset to 0. If CMD is 2, CSTA is set to TRUE and CMD is reset to 0. If CMD is 3, CSTA is set to FALSE and CMD is reset to 0.&lt;br /&gt;
&lt;br /&gt;
clear_histogram zeros out the histogram array. add_count increments the frequency in the histogram array.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to the array.&lt;br /&gt;
&lt;br /&gt;
==== cvt_dbaddr ====&lt;br /&gt;
&lt;br /&gt;
This is called by dbNameToAddr. It makes the dbAddr structure refer to the actual buffer holding the array.&lt;br /&gt;
&lt;br /&gt;
==== get_array_info ====&lt;br /&gt;
&lt;br /&gt;
Obtains values from the array referenced by VAL.&lt;br /&gt;
&lt;br /&gt;
==== put_array_info ====&lt;br /&gt;
&lt;br /&gt;
Writes values into the array referenced by VAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# 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.&lt;br /&gt;
# readValue is called. See  [[RRM 3-14 Common#Input Records|Input Records]] for more information&lt;br /&gt;
# If PACT has been changed to TRUE, the device support read routine has started but has not completed writing the new value. In this case, the processing routine merely returns, leaving PACT TRUE.&lt;br /&gt;
# Add count to histogram array.&lt;br /&gt;
# 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 MDEL conditions are met. NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT and INIT to FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt; Summary &amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PACT &amp;lt;TD&amp;gt;Processing Active&amp;lt;TD rowspan=5&amp;gt;See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for an explanation of these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DPVT&amp;lt;TD&amp;gt;Device Private &amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;UDF&amp;lt;TD&amp;gt;VAL Undefined&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSEV&amp;lt;TD&amp;gt;New Alarm Severity&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSTA&amp;lt;TD&amp;gt;New Alarm Status &amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVL&amp;lt;TD&amp;gt;Signal Value&amp;lt;TD rowspan=2&amp;gt;The device support module retrieves a value from SGNL for SVL&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SGNL&amp;lt;TD&amp;gt;Signal Value Location&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the record support init_record routine. It makes sure that SGNL is a CONSTANT, PV_LINK, DB_LINK, or CA_LINK. It also retrieves a value for SVL from SGNL. If SGNL is none of the above, an error is generated.&lt;br /&gt;
&lt;br /&gt;
==== read_histogram ====&lt;br /&gt;
&lt;br /&gt;
 read_histogram(*precord)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the record support routines. It retrieves a value for SVL from SGNL.&lt;br /&gt;
&lt;br /&gt;
=== Device Support For Soft Records ===&lt;br /&gt;
&lt;br /&gt;
Only the device support module &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; is currently provided, though other device support modules may be provided at the user's site.&lt;br /&gt;
&lt;br /&gt;
==== Soft Channel ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support routine retrieves a value from SGNL. SGNL must be CONSTANT, PV_LINK, DB_LINK, or CA_LINK.&lt;br /&gt;
&lt;br /&gt;
==== Setting Up an IOC to use Record Type ====&lt;br /&gt;
&lt;br /&gt;
The histogram record type may not be fully included in EPICS base R3.14.x. The record is defined in &amp;lt;EPICSBASE&amp;gt;/src/rec, however it's not included&lt;br /&gt;
in &amp;lt;EPICSBASE&amp;gt;/src/misc/base.dbd.&lt;br /&gt;
&lt;br /&gt;
'''Possible errors:''' &lt;br /&gt;
# ''Record &amp;quot;TEST:Histo&amp;quot; is of unknown type &amp;quot;histogram&amp;quot; - Error at or before &amp;quot;)&amp;quot; ...''&lt;br /&gt;
#: - Missing the record type in base.dbd&lt;br /&gt;
# ''Missing device support entry table PV: TEST:Histo histogram: init_record''&lt;br /&gt;
#: - Missing device support for the record type&lt;br /&gt;
&lt;br /&gt;
'''How to install'''&lt;br /&gt;
&lt;br /&gt;
To be able to use this record type, one has to install the record's dbd in the application src directory.&lt;br /&gt;
# Add histogramRecord.dbd to src/Makefile &lt;br /&gt;
#: ie.  &amp;lt;App&amp;gt;_DBD += histogramRecord.dbd&lt;br /&gt;
# Create a dbd file with following contents saved in src folder. ie. Filename: histogramDeviceSupport.dbd&lt;br /&gt;
#: device(histogram,CONSTANT,devHistogramSoft,&amp;quot;Soft Channel&amp;quot;)&lt;br /&gt;
# Add above dbd to src/Makefile &lt;br /&gt;
#:ie. &amp;lt;App&amp;gt;_DBD += histogramDeviceSupport.dbd&lt;br /&gt;
# Type 'make' in src directory &lt;br /&gt;
Now, one can create db records using the histogram type in the IOC. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>TimSouthern</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Histogram&amp;diff=3830</id>
		<title>RRM 3-14 Histogram</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Histogram&amp;diff=3830"/>
		<updated>2018-02-09T14:14:25Z</updated>

		<summary type="html">&lt;p&gt;TimSouthern: /* Setting up an IOC to use record type */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Histogram =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The histogram record is used to store frequency counts of a signal into an array of arbitrary length. The user can configure the range of the signal value that the array will store. Anything outside this range will be ignored.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* monitor parameters&lt;br /&gt;
* run-time and simulation mode parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Scanning Parameters ===&lt;br /&gt;
&lt;br /&gt;
The histogram record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The SVL is the input link where the record reads its value. It can be a constant, a database link, or a channel access link. If SVL is a database or channel access link, then SGNL is read from SVL. If SVL is a constant, then SGNL is initialized with the constant value but can be changed via dbPuts. The &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support module can be specified in the DTYP field. For a list of other device support modules currently supported at the user's local site, use the &amp;lt;CODE&amp;gt;dbst&amp;lt;/CODE&amp;gt; utility in R3.13.&lt;br /&gt;
&lt;br /&gt;
The ULIM and LLIM fields determine the usable range of signal values. Any value of SGNL below LLIM or above ULIM is outside the range and will not be stored in the array. In the NELM field the user must specify the array size, e.g., the number of array elements. Each element in the NELM field holds the counts for an interval of the range of signal counts, the range specified by ULIM and LLIM. These intervals are determined by dividing the range by NELM:&lt;br /&gt;
&lt;br /&gt;
 (ULIM - LLIM) / NELM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVL&amp;lt;TD&amp;gt;Signal Value Location (an input link)&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SGNL&amp;lt;TD&amp;gt;Signal Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NELM&amp;lt;TD&amp;gt;Number of elements in array&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ULIM&amp;lt;TD&amp;gt;Upper Signal Limit&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLIM&amp;lt;TD&amp;gt;Lower Signal Limit&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. These fields are used to display the value and other parameters of the histogram either textually or graphically. See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Histogram record has the alarm parameters common to all record types.  [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
The MDEL field implements the monitor count deadband. Only when MCNT is greater than the value given to MDEL are monitors triggered, MCNT being the number of counts since the last time the record was processed. If MDEL is -1, everytime the record is processed, a monitor is triggered regardless.&lt;br /&gt;
&lt;br /&gt;
If SDEL is greater than 0, it causes a callback routine to be called. The number specified in SDEL is the callback routines interval. The callback routine is called every SDEL seconds. The callback routine posts an event if MCNT is greater than 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;TD&amp;gt;Monitor Delta&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SDEL&amp;lt;TD&amp;gt;Monitor Seconds Deadband&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time and Simulation Mode Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the histogram. They are not configurable by the user prior to run-time. They represent the current state of the record. Many of them are used to process the histogram more efficiently.&lt;br /&gt;
&lt;br /&gt;
The BPTR field contains a pointer to the unsigned long array of frequency values. The VAL field references this array as well. However, the BPTR field is not accessible at run-time.&lt;br /&gt;
&lt;br /&gt;
The MCNT field keeps counts the number of signal counts since the last monitor was invoked.&lt;br /&gt;
&lt;br /&gt;
The WDOG field contains a pointer to the callback control structure and is of no interest to the user.&lt;br /&gt;
&lt;br /&gt;
The collections controls field (CMD) is a menu field with five choices: &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Clear&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Start&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt;, and &amp;lt;CODE&amp;gt;Setup&amp;lt;/CODE&amp;gt;. When &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt;, the record retrieves its values and adds them to the signal array. This command will first clear the signal counts which have already been read when it is first invoked. The &amp;lt;CODE&amp;gt;Clear&amp;lt;/CODE&amp;gt; command erases the signal counts, setting the elements in the array back to zero. Afterwards, the field is set back to &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt;. The &amp;lt;CODE&amp;gt;Start&amp;lt;/CODE&amp;gt; command simply causes the record to read signal values into the array. Unlike &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt;, it doesn't clear the array first. The &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt; command disables the reading of signal values into the array. The &amp;lt;CODE&amp;gt;Setup&amp;lt;/CODE&amp;gt; command waits until the &amp;lt;CODE&amp;gt;start&amp;lt;/CODE&amp;gt; or &amp;lt;CODE&amp;gt;read&amp;lt;/CODE&amp;gt; command has been issued to start counting.&lt;br /&gt;
&lt;br /&gt;
The CSTA or collections status field implements the CMD field choices by enabling or disabling the reading of values into the histogram array. While FALSE, no signals are added to the array. While TRUE, signals are read and added to the array. The field is initialized to TRUE. The &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt; command is the only command that sets CSTA to FALSE. On the other hand, the &amp;lt;CODE&amp;gt;Start&amp;lt;/CODE&amp;gt; command is the only command that sets it to TRUE. Thus, &amp;lt;CODE&amp;gt;Start&amp;lt;/CODE&amp;gt; must be invoked after each &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt; command in order to enable counting; invoking &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt; will not enable signal counting after &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt; has been invoked.&lt;br /&gt;
&lt;br /&gt;
A typical use of these fields would be to initialize the CMD field to &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt; (it is initialized to this command by default), to use the &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt; command to disable counting when necessary, after which the &amp;lt;CODE&amp;gt;Start&amp;lt;/CODE&amp;gt; command can be invoked to re-start the signal count.&lt;br /&gt;
&lt;br /&gt;
The WDTH field is a private field that holds the signal width of the array elements. For instance, if the LLIM was configured to be 4.0 and ULIM was configured to be 12.0 and the NELM was set to 4, then the WDTH for each array would be 2. Thus, it is (ULIM - LLIM) / NELM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BPTR&amp;lt;TD&amp;gt;Buffer Pointer&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;See BPTR&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MCNT&amp;lt;TD&amp;gt;Monitor Counts&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;WDOG&amp;lt;TD&amp;gt;Watchdog Callback&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CMD&amp;lt;TD&amp;gt;Collections Control&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CSTA&amp;lt;TD&amp;gt;Collections Status&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;WDTH&amp;lt;TD&amp;gt;Element Width&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following fields are used to operate the histogram record in simulation mode. See [[RRM 3-14 Common#Fields Common to Many Record Types|Fields Common to Many Record Types]] for more information on the simulation mode fields. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIOL&amp;lt;TD&amp;gt;Simulation Value Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVAL&amp;lt;TD&amp;gt;Simulation Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIML&amp;lt;TD&amp;gt;Simulation Mode Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMM&amp;lt;TD&amp;gt;Simulation Mode&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMS&amp;lt;TD&amp;gt;Simulation Mode Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
Using NELM, space for the unsigned long array is allocated and the width WDTH of the array is calculated.&lt;br /&gt;
&lt;br /&gt;
This routine initializes SIMM with the value of SIML if SIML type is CONSTANT link or creates a channel access link if SIML type is PV_LINK. SVAL is likewise initialized if SIOL is CONSTANT or PV_LINK.&lt;br /&gt;
&lt;br /&gt;
This routine next checks to see that device support and a device support read routine are available. If device support includes init_record, it is called.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
Special is invoked whenever the fields CMD, SGNL, ULIM, or LLIM are changed.&lt;br /&gt;
&lt;br /&gt;
If SGNL is changed, add_count is called.&lt;br /&gt;
&lt;br /&gt;
If ULIM or LLIM are changed, WDTH is recalculated and clear_histogram is called.&lt;br /&gt;
&lt;br /&gt;
If CMD is less or equal to 1, clear_histogram is called and CMD is reset to 0. If CMD is 2, CSTA is set to TRUE and CMD is reset to 0. If CMD is 3, CSTA is set to FALSE and CMD is reset to 0.&lt;br /&gt;
&lt;br /&gt;
clear_histogram zeros out the histogram array. add_count increments the frequency in the histogram array.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to the array.&lt;br /&gt;
&lt;br /&gt;
==== cvt_dbaddr ====&lt;br /&gt;
&lt;br /&gt;
This is called by dbNameToAddr. It makes the dbAddr structure refer to the actual buffer holding the array.&lt;br /&gt;
&lt;br /&gt;
==== get_array_info ====&lt;br /&gt;
&lt;br /&gt;
Obtains values from the array referenced by VAL.&lt;br /&gt;
&lt;br /&gt;
==== put_array_info ====&lt;br /&gt;
&lt;br /&gt;
Writes values into the array referenced by VAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# 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.&lt;br /&gt;
# readValue is called. See  [[RRM 3-14 Common#Input Records|Input Records]] for more information&lt;br /&gt;
# If PACT has been changed to TRUE, the device support read routine has started but has not completed writing the new value. In this case, the processing routine merely returns, leaving PACT TRUE.&lt;br /&gt;
# Add count to histogram array.&lt;br /&gt;
# 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 MDEL conditions are met. NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT and INIT to FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt; Summary &amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PACT &amp;lt;TD&amp;gt;Processing Active&amp;lt;TD rowspan=5&amp;gt;See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for an explanation of these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DPVT&amp;lt;TD&amp;gt;Device Private &amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;UDF&amp;lt;TD&amp;gt;VAL Undefined&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSEV&amp;lt;TD&amp;gt;New Alarm Severity&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSTA&amp;lt;TD&amp;gt;New Alarm Status &amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVL&amp;lt;TD&amp;gt;Signal Value&amp;lt;TD rowspan=2&amp;gt;The device support module retrieves a value from SGNL for SVL&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SGNL&amp;lt;TD&amp;gt;Signal Value Location&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the record support init_record routine. It makes sure that SGNL is a CONSTANT, PV_LINK, DB_LINK, or CA_LINK. It also retrieves a value for SVL from SGNL. If SGNL is none of the above, an error is generated.&lt;br /&gt;
&lt;br /&gt;
==== read_histogram ====&lt;br /&gt;
&lt;br /&gt;
 read_histogram(*precord)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the record support routines. It retrieves a value for SVL from SGNL.&lt;br /&gt;
&lt;br /&gt;
=== Device Support For Soft Records ===&lt;br /&gt;
&lt;br /&gt;
Only the device support module &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; is currently provided, though other device support modules may be provided at the user's site.&lt;br /&gt;
&lt;br /&gt;
==== Soft Channel ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support routine retrieves a value from SGNL. SGNL must be CONSTANT, PV_LINK, DB_LINK, or CA_LINK.&lt;br /&gt;
&lt;br /&gt;
==== Setting up an IOC to use record type ====&lt;br /&gt;
&lt;br /&gt;
The histogram record type may not be fully included in EPICS base R3.14.x. The record is defined in &amp;lt;EPICSBASE&amp;gt;/src/rec, however it's not included&lt;br /&gt;
in &amp;lt;EPICSBASE&amp;gt;/src/misc/base.dbd.&lt;br /&gt;
&lt;br /&gt;
'''Possible errors:''' &lt;br /&gt;
# ''Record &amp;quot;TEST:Histo&amp;quot; is of unknown type &amp;quot;histogram&amp;quot; - Error at or before &amp;quot;)&amp;quot; ...''&lt;br /&gt;
#: - Missing the record type in base.dbd&lt;br /&gt;
# ''Missing device support entry table PV: TEST:Histo histogram: init_record''&lt;br /&gt;
#: - Missing device support for the record type&lt;br /&gt;
&lt;br /&gt;
'''How to install'''&lt;br /&gt;
&lt;br /&gt;
To be able to use this record type, one has to install the record's dbd in the application src directory.&lt;br /&gt;
# Add histogramRecord.dbd to src/Makefile &lt;br /&gt;
#: ie.  &amp;lt;App&amp;gt;_DBD += histogramRecord.dbd&lt;br /&gt;
# Create a dbd file with following contents saved in src folder. ie. Filename: histogramDeviceSupport.dbd&lt;br /&gt;
#: device(histogram,CONSTANT,devHistogramSoft,&amp;quot;Soft Channel&amp;quot;)&lt;br /&gt;
# Add above dbd to src/Makefile &lt;br /&gt;
#:ie. &amp;lt;App&amp;gt;_DBD += histogramDeviceSupport.dbd&lt;br /&gt;
# Type 'make' in src directory &lt;br /&gt;
Now, one can create db records using the histogram type in the IOC. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>TimSouthern</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Histogram&amp;diff=3829</id>
		<title>RRM 3-14 Histogram</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Histogram&amp;diff=3829"/>
		<updated>2018-02-08T17:31:49Z</updated>

		<summary type="html">&lt;p&gt;TimSouthern: /* Setting up an IOC to use record type */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Histogram =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The histogram record is used to store frequency counts of a signal into an array of arbitrary length. The user can configure the range of the signal value that the array will store. Anything outside this range will be ignored.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* monitor parameters&lt;br /&gt;
* run-time and simulation mode parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Scanning Parameters ===&lt;br /&gt;
&lt;br /&gt;
The histogram record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The SVL is the input link where the record reads its value. It can be a constant, a database link, or a channel access link. If SVL is a database or channel access link, then SGNL is read from SVL. If SVL is a constant, then SGNL is initialized with the constant value but can be changed via dbPuts. The &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support module can be specified in the DTYP field. For a list of other device support modules currently supported at the user's local site, use the &amp;lt;CODE&amp;gt;dbst&amp;lt;/CODE&amp;gt; utility in R3.13.&lt;br /&gt;
&lt;br /&gt;
The ULIM and LLIM fields determine the usable range of signal values. Any value of SGNL below LLIM or above ULIM is outside the range and will not be stored in the array. In the NELM field the user must specify the array size, e.g., the number of array elements. Each element in the NELM field holds the counts for an interval of the range of signal counts, the range specified by ULIM and LLIM. These intervals are determined by dividing the range by NELM:&lt;br /&gt;
&lt;br /&gt;
 (ULIM - LLIM) / NELM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVL&amp;lt;TD&amp;gt;Signal Value Location (an input link)&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SGNL&amp;lt;TD&amp;gt;Signal Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NELM&amp;lt;TD&amp;gt;Number of elements in array&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ULIM&amp;lt;TD&amp;gt;Upper Signal Limit&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLIM&amp;lt;TD&amp;gt;Lower Signal Limit&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. These fields are used to display the value and other parameters of the histogram either textually or graphically. See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Histogram record has the alarm parameters common to all record types.  [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
The MDEL field implements the monitor count deadband. Only when MCNT is greater than the value given to MDEL are monitors triggered, MCNT being the number of counts since the last time the record was processed. If MDEL is -1, everytime the record is processed, a monitor is triggered regardless.&lt;br /&gt;
&lt;br /&gt;
If SDEL is greater than 0, it causes a callback routine to be called. The number specified in SDEL is the callback routines interval. The callback routine is called every SDEL seconds. The callback routine posts an event if MCNT is greater than 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;TD&amp;gt;Monitor Delta&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SDEL&amp;lt;TD&amp;gt;Monitor Seconds Deadband&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time and Simulation Mode Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the histogram. They are not configurable by the user prior to run-time. They represent the current state of the record. Many of them are used to process the histogram more efficiently.&lt;br /&gt;
&lt;br /&gt;
The BPTR field contains a pointer to the unsigned long array of frequency values. The VAL field references this array as well. However, the BPTR field is not accessible at run-time.&lt;br /&gt;
&lt;br /&gt;
The MCNT field keeps counts the number of signal counts since the last monitor was invoked.&lt;br /&gt;
&lt;br /&gt;
The WDOG field contains a pointer to the callback control structure and is of no interest to the user.&lt;br /&gt;
&lt;br /&gt;
The collections controls field (CMD) is a menu field with five choices: &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Clear&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Start&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt;, and &amp;lt;CODE&amp;gt;Setup&amp;lt;/CODE&amp;gt;. When &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt;, the record retrieves its values and adds them to the signal array. This command will first clear the signal counts which have already been read when it is first invoked. The &amp;lt;CODE&amp;gt;Clear&amp;lt;/CODE&amp;gt; command erases the signal counts, setting the elements in the array back to zero. Afterwards, the field is set back to &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt;. The &amp;lt;CODE&amp;gt;Start&amp;lt;/CODE&amp;gt; command simply causes the record to read signal values into the array. Unlike &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt;, it doesn't clear the array first. The &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt; command disables the reading of signal values into the array. The &amp;lt;CODE&amp;gt;Setup&amp;lt;/CODE&amp;gt; command waits until the &amp;lt;CODE&amp;gt;start&amp;lt;/CODE&amp;gt; or &amp;lt;CODE&amp;gt;read&amp;lt;/CODE&amp;gt; command has been issued to start counting.&lt;br /&gt;
&lt;br /&gt;
The CSTA or collections status field implements the CMD field choices by enabling or disabling the reading of values into the histogram array. While FALSE, no signals are added to the array. While TRUE, signals are read and added to the array. The field is initialized to TRUE. The &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt; command is the only command that sets CSTA to FALSE. On the other hand, the &amp;lt;CODE&amp;gt;Start&amp;lt;/CODE&amp;gt; command is the only command that sets it to TRUE. Thus, &amp;lt;CODE&amp;gt;Start&amp;lt;/CODE&amp;gt; must be invoked after each &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt; command in order to enable counting; invoking &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt; will not enable signal counting after &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt; has been invoked.&lt;br /&gt;
&lt;br /&gt;
A typical use of these fields would be to initialize the CMD field to &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt; (it is initialized to this command by default), to use the &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt; command to disable counting when necessary, after which the &amp;lt;CODE&amp;gt;Start&amp;lt;/CODE&amp;gt; command can be invoked to re-start the signal count.&lt;br /&gt;
&lt;br /&gt;
The WDTH field is a private field that holds the signal width of the array elements. For instance, if the LLIM was configured to be 4.0 and ULIM was configured to be 12.0 and the NELM was set to 4, then the WDTH for each array would be 2. Thus, it is (ULIM - LLIM) / NELM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BPTR&amp;lt;TD&amp;gt;Buffer Pointer&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;See BPTR&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MCNT&amp;lt;TD&amp;gt;Monitor Counts&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;WDOG&amp;lt;TD&amp;gt;Watchdog Callback&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CMD&amp;lt;TD&amp;gt;Collections Control&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CSTA&amp;lt;TD&amp;gt;Collections Status&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;WDTH&amp;lt;TD&amp;gt;Element Width&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following fields are used to operate the histogram record in simulation mode. See [[RRM 3-14 Common#Fields Common to Many Record Types|Fields Common to Many Record Types]] for more information on the simulation mode fields. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIOL&amp;lt;TD&amp;gt;Simulation Value Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVAL&amp;lt;TD&amp;gt;Simulation Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIML&amp;lt;TD&amp;gt;Simulation Mode Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMM&amp;lt;TD&amp;gt;Simulation Mode&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMS&amp;lt;TD&amp;gt;Simulation Mode Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
Using NELM, space for the unsigned long array is allocated and the width WDTH of the array is calculated.&lt;br /&gt;
&lt;br /&gt;
This routine initializes SIMM with the value of SIML if SIML type is CONSTANT link or creates a channel access link if SIML type is PV_LINK. SVAL is likewise initialized if SIOL is CONSTANT or PV_LINK.&lt;br /&gt;
&lt;br /&gt;
This routine next checks to see that device support and a device support read routine are available. If device support includes init_record, it is called.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
Special is invoked whenever the fields CMD, SGNL, ULIM, or LLIM are changed.&lt;br /&gt;
&lt;br /&gt;
If SGNL is changed, add_count is called.&lt;br /&gt;
&lt;br /&gt;
If ULIM or LLIM are changed, WDTH is recalculated and clear_histogram is called.&lt;br /&gt;
&lt;br /&gt;
If CMD is less or equal to 1, clear_histogram is called and CMD is reset to 0. If CMD is 2, CSTA is set to TRUE and CMD is reset to 0. If CMD is 3, CSTA is set to FALSE and CMD is reset to 0.&lt;br /&gt;
&lt;br /&gt;
clear_histogram zeros out the histogram array. add_count increments the frequency in the histogram array.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to the array.&lt;br /&gt;
&lt;br /&gt;
==== cvt_dbaddr ====&lt;br /&gt;
&lt;br /&gt;
This is called by dbNameToAddr. It makes the dbAddr structure refer to the actual buffer holding the array.&lt;br /&gt;
&lt;br /&gt;
==== get_array_info ====&lt;br /&gt;
&lt;br /&gt;
Obtains values from the array referenced by VAL.&lt;br /&gt;
&lt;br /&gt;
==== put_array_info ====&lt;br /&gt;
&lt;br /&gt;
Writes values into the array referenced by VAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# 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.&lt;br /&gt;
# readValue is called. See  [[RRM 3-14 Common#Input Records|Input Records]] for more information&lt;br /&gt;
# If PACT has been changed to TRUE, the device support read routine has started but has not completed writing the new value. In this case, the processing routine merely returns, leaving PACT TRUE.&lt;br /&gt;
# Add count to histogram array.&lt;br /&gt;
# 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 MDEL conditions are met. NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT and INIT to FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt; Summary &amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PACT &amp;lt;TD&amp;gt;Processing Active&amp;lt;TD rowspan=5&amp;gt;See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for an explanation of these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DPVT&amp;lt;TD&amp;gt;Device Private &amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;UDF&amp;lt;TD&amp;gt;VAL Undefined&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSEV&amp;lt;TD&amp;gt;New Alarm Severity&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSTA&amp;lt;TD&amp;gt;New Alarm Status &amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVL&amp;lt;TD&amp;gt;Signal Value&amp;lt;TD rowspan=2&amp;gt;The device support module retrieves a value from SGNL for SVL&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SGNL&amp;lt;TD&amp;gt;Signal Value Location&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the record support init_record routine. It makes sure that SGNL is a CONSTANT, PV_LINK, DB_LINK, or CA_LINK. It also retrieves a value for SVL from SGNL. If SGNL is none of the above, an error is generated.&lt;br /&gt;
&lt;br /&gt;
==== read_histogram ====&lt;br /&gt;
&lt;br /&gt;
 read_histogram(*precord)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the record support routines. It retrieves a value for SVL from SGNL.&lt;br /&gt;
&lt;br /&gt;
=== Device Support For Soft Records ===&lt;br /&gt;
&lt;br /&gt;
Only the device support module &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; is currently provided, though other device support modules may be provided at the user's site.&lt;br /&gt;
&lt;br /&gt;
==== Soft Channel ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support routine retrieves a value from SGNL. SGNL must be CONSTANT, PV_LINK, DB_LINK, or CA_LINK.&lt;br /&gt;
&lt;br /&gt;
==== Setting up an IOC to use record type ====&lt;br /&gt;
&lt;br /&gt;
The histogram record type is not fully included in EPICS base. To be able to use it, one has to install the record's dbd in the application src directory.&lt;br /&gt;
# Add histogramRecord.dbd to src/Makefile &lt;br /&gt;
#: ie.  &amp;lt;App&amp;gt;_DBD += histogramRecord.dbd&lt;br /&gt;
# Create a dbd file with following contents saved in src folder. ie. Filename: histogramDeviceSupport.dbd&lt;br /&gt;
#: device(histogram,CONSTANT,devHistogramSoft,&amp;quot;Soft Channel&amp;quot;)&lt;br /&gt;
# Add above dbd to src/Makefile &lt;br /&gt;
#:ie. &amp;lt;App&amp;gt;_DBD += histogramDeviceSupport.dbd&lt;br /&gt;
# Type 'make' in src directory &lt;br /&gt;
Now, one can create db records using the histogram type in the IOC. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>TimSouthern</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Histogram&amp;diff=3828</id>
		<title>RRM 3-14 Histogram</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Histogram&amp;diff=3828"/>
		<updated>2018-02-08T17:12:46Z</updated>

		<summary type="html">&lt;p&gt;TimSouthern: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Histogram =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The histogram record is used to store frequency counts of a signal into an array of arbitrary length. The user can configure the range of the signal value that the array will store. Anything outside this range will be ignored.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* monitor parameters&lt;br /&gt;
* run-time and simulation mode parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Scanning Parameters ===&lt;br /&gt;
&lt;br /&gt;
The histogram record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The SVL is the input link where the record reads its value. It can be a constant, a database link, or a channel access link. If SVL is a database or channel access link, then SGNL is read from SVL. If SVL is a constant, then SGNL is initialized with the constant value but can be changed via dbPuts. The &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support module can be specified in the DTYP field. For a list of other device support modules currently supported at the user's local site, use the &amp;lt;CODE&amp;gt;dbst&amp;lt;/CODE&amp;gt; utility in R3.13.&lt;br /&gt;
&lt;br /&gt;
The ULIM and LLIM fields determine the usable range of signal values. Any value of SGNL below LLIM or above ULIM is outside the range and will not be stored in the array. In the NELM field the user must specify the array size, e.g., the number of array elements. Each element in the NELM field holds the counts for an interval of the range of signal counts, the range specified by ULIM and LLIM. These intervals are determined by dividing the range by NELM:&lt;br /&gt;
&lt;br /&gt;
 (ULIM - LLIM) / NELM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVL&amp;lt;TD&amp;gt;Signal Value Location (an input link)&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SGNL&amp;lt;TD&amp;gt;Signal Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NELM&amp;lt;TD&amp;gt;Number of elements in array&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ULIM&amp;lt;TD&amp;gt;Upper Signal Limit&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLIM&amp;lt;TD&amp;gt;Lower Signal Limit&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. These fields are used to display the value and other parameters of the histogram either textually or graphically. See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Histogram record has the alarm parameters common to all record types.  [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
The MDEL field implements the monitor count deadband. Only when MCNT is greater than the value given to MDEL are monitors triggered, MCNT being the number of counts since the last time the record was processed. If MDEL is -1, everytime the record is processed, a monitor is triggered regardless.&lt;br /&gt;
&lt;br /&gt;
If SDEL is greater than 0, it causes a callback routine to be called. The number specified in SDEL is the callback routines interval. The callback routine is called every SDEL seconds. The callback routine posts an event if MCNT is greater than 0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;TD&amp;gt;Monitor Delta&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SDEL&amp;lt;TD&amp;gt;Monitor Seconds Deadband&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time and Simulation Mode Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the histogram. They are not configurable by the user prior to run-time. They represent the current state of the record. Many of them are used to process the histogram more efficiently.&lt;br /&gt;
&lt;br /&gt;
The BPTR field contains a pointer to the unsigned long array of frequency values. The VAL field references this array as well. However, the BPTR field is not accessible at run-time.&lt;br /&gt;
&lt;br /&gt;
The MCNT field keeps counts the number of signal counts since the last monitor was invoked.&lt;br /&gt;
&lt;br /&gt;
The WDOG field contains a pointer to the callback control structure and is of no interest to the user.&lt;br /&gt;
&lt;br /&gt;
The collections controls field (CMD) is a menu field with five choices: &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Clear&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Start&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt;, and &amp;lt;CODE&amp;gt;Setup&amp;lt;/CODE&amp;gt;. When &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt;, the record retrieves its values and adds them to the signal array. This command will first clear the signal counts which have already been read when it is first invoked. The &amp;lt;CODE&amp;gt;Clear&amp;lt;/CODE&amp;gt; command erases the signal counts, setting the elements in the array back to zero. Afterwards, the field is set back to &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt;. The &amp;lt;CODE&amp;gt;Start&amp;lt;/CODE&amp;gt; command simply causes the record to read signal values into the array. Unlike &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt;, it doesn't clear the array first. The &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt; command disables the reading of signal values into the array. The &amp;lt;CODE&amp;gt;Setup&amp;lt;/CODE&amp;gt; command waits until the &amp;lt;CODE&amp;gt;start&amp;lt;/CODE&amp;gt; or &amp;lt;CODE&amp;gt;read&amp;lt;/CODE&amp;gt; command has been issued to start counting.&lt;br /&gt;
&lt;br /&gt;
The CSTA or collections status field implements the CMD field choices by enabling or disabling the reading of values into the histogram array. While FALSE, no signals are added to the array. While TRUE, signals are read and added to the array. The field is initialized to TRUE. The &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt; command is the only command that sets CSTA to FALSE. On the other hand, the &amp;lt;CODE&amp;gt;Start&amp;lt;/CODE&amp;gt; command is the only command that sets it to TRUE. Thus, &amp;lt;CODE&amp;gt;Start&amp;lt;/CODE&amp;gt; must be invoked after each &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt; command in order to enable counting; invoking &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt; will not enable signal counting after &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt; has been invoked.&lt;br /&gt;
&lt;br /&gt;
A typical use of these fields would be to initialize the CMD field to &amp;lt;CODE&amp;gt;Read&amp;lt;/CODE&amp;gt; (it is initialized to this command by default), to use the &amp;lt;CODE&amp;gt;Stop&amp;lt;/CODE&amp;gt; command to disable counting when necessary, after which the &amp;lt;CODE&amp;gt;Start&amp;lt;/CODE&amp;gt; command can be invoked to re-start the signal count.&lt;br /&gt;
&lt;br /&gt;
The WDTH field is a private field that holds the signal width of the array elements. For instance, if the LLIM was configured to be 4.0 and ULIM was configured to be 12.0 and the NELM was set to 4, then the WDTH for each array would be 2. Thus, it is (ULIM - LLIM) / NELM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BPTR&amp;lt;TD&amp;gt;Buffer Pointer&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;See BPTR&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MCNT&amp;lt;TD&amp;gt;Monitor Counts&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;WDOG&amp;lt;TD&amp;gt;Watchdog Callback&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CMD&amp;lt;TD&amp;gt;Collections Control&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|RECCHOICE]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CSTA&amp;lt;TD&amp;gt;Collections Status&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;WDTH&amp;lt;TD&amp;gt;Element Width&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following fields are used to operate the histogram record in simulation mode. See [[RRM 3-14 Common#Fields Common to Many Record Types|Fields Common to Many Record Types]] for more information on the simulation mode fields. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIOL&amp;lt;TD&amp;gt;Simulation Value Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVAL&amp;lt;TD&amp;gt;Simulation Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIML&amp;lt;TD&amp;gt;Simulation Mode Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMM&amp;lt;TD&amp;gt;Simulation Mode&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMS&amp;lt;TD&amp;gt;Simulation Mode Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
Using NELM, space for the unsigned long array is allocated and the width WDTH of the array is calculated.&lt;br /&gt;
&lt;br /&gt;
This routine initializes SIMM with the value of SIML if SIML type is CONSTANT link or creates a channel access link if SIML type is PV_LINK. SVAL is likewise initialized if SIOL is CONSTANT or PV_LINK.&lt;br /&gt;
&lt;br /&gt;
This routine next checks to see that device support and a device support read routine are available. If device support includes init_record, it is called.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
Special is invoked whenever the fields CMD, SGNL, ULIM, or LLIM are changed.&lt;br /&gt;
&lt;br /&gt;
If SGNL is changed, add_count is called.&lt;br /&gt;
&lt;br /&gt;
If ULIM or LLIM are changed, WDTH is recalculated and clear_histogram is called.&lt;br /&gt;
&lt;br /&gt;
If CMD is less or equal to 1, clear_histogram is called and CMD is reset to 0. If CMD is 2, CSTA is set to TRUE and CMD is reset to 0. If CMD is 3, CSTA is set to FALSE and CMD is reset to 0.&lt;br /&gt;
&lt;br /&gt;
clear_histogram zeros out the histogram array. add_count increments the frequency in the histogram array.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to the array.&lt;br /&gt;
&lt;br /&gt;
==== cvt_dbaddr ====&lt;br /&gt;
&lt;br /&gt;
This is called by dbNameToAddr. It makes the dbAddr structure refer to the actual buffer holding the array.&lt;br /&gt;
&lt;br /&gt;
==== get_array_info ====&lt;br /&gt;
&lt;br /&gt;
Obtains values from the array referenced by VAL.&lt;br /&gt;
&lt;br /&gt;
==== put_array_info ====&lt;br /&gt;
&lt;br /&gt;
Writes values into the array referenced by VAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# 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.&lt;br /&gt;
# readValue is called. See  [[RRM 3-14 Common#Input Records|Input Records]] for more information&lt;br /&gt;
# If PACT has been changed to TRUE, the device support read routine has started but has not completed writing the new value. In this case, the processing routine merely returns, leaving PACT TRUE.&lt;br /&gt;
# Add count to histogram array.&lt;br /&gt;
# 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 MDEL conditions are met. NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT and INIT to FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt; Summary &amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PACT &amp;lt;TD&amp;gt;Processing Active&amp;lt;TD rowspan=5&amp;gt;See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for an explanation of these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DPVT&amp;lt;TD&amp;gt;Device Private &amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;UDF&amp;lt;TD&amp;gt;VAL Undefined&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSEV&amp;lt;TD&amp;gt;New Alarm Severity&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSTA&amp;lt;TD&amp;gt;New Alarm Status &amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SVL&amp;lt;TD&amp;gt;Signal Value&amp;lt;TD rowspan=2&amp;gt;The device support module retrieves a value from SGNL for SVL&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SGNL&amp;lt;TD&amp;gt;Signal Value Location&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support Routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the record support init_record routine. It makes sure that SGNL is a CONSTANT, PV_LINK, DB_LINK, or CA_LINK. It also retrieves a value for SVL from SGNL. If SGNL is none of the above, an error is generated.&lt;br /&gt;
&lt;br /&gt;
==== read_histogram ====&lt;br /&gt;
&lt;br /&gt;
 read_histogram(*precord)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the record support routines. It retrieves a value for SVL from SGNL.&lt;br /&gt;
&lt;br /&gt;
=== Device Support For Soft Records ===&lt;br /&gt;
&lt;br /&gt;
Only the device support module &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; is currently provided, though other device support modules may be provided at the user's site.&lt;br /&gt;
&lt;br /&gt;
==== Soft Channel ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support routine retrieves a value from SGNL. SGNL must be CONSTANT, PV_LINK, DB_LINK, or CA_LINK.&lt;br /&gt;
&lt;br /&gt;
==== Setting up an IOC to use record type ====&lt;br /&gt;
&lt;br /&gt;
The histogram record type is not fully included in EPICS base. To be able to use it, one has to install the record's dbd in the application src directory.&lt;br /&gt;
1) Add histogramRecord.dbd to src/Makefile ie.  &amp;lt;App&amp;gt;_DBD += histogramRecord.dbd&lt;br /&gt;
2) Create a dbd file with following contents saved in src folder. ie. Filename: histogramDeviceSupport.dbd&lt;br /&gt;
device(histogram,CONSTANT,devHistogramSoft,&amp;quot;Soft Channel&amp;quot;)&lt;br /&gt;
3)Add above dbd to src/Makefile ie. &amp;lt;App&amp;gt;_DBD += histogramDeviceSupport.dbd&lt;br /&gt;
4)make&lt;br /&gt;
Now you can create DB record using the histogram as type. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>TimSouthern</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=Msg.db&amp;diff=3750</id>
		<title>Msg.db</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=Msg.db&amp;diff=3750"/>
		<updated>2014-07-24T14:30:19Z</updated>

		<summary type="html">&lt;p&gt;TimSouthern: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;amp;#35;&lt;br /&gt;
Below is a database that will generate 10 messages, each with an associated time stamp. This database is useful for capturing events such as when an alarm comes in with a brief description of the alarm. One could use the records to display a running log that is written as actions are completed. &lt;br /&gt;
&lt;br /&gt;
The pv &amp;lt;b&amp;gt;&amp;lt;i&amp;gt;$(S):info&amp;lt;/i&amp;gt;&amp;lt;/b&amp;gt; triggers the database to process. $(S):info FLNKs to the last message record. The last msg record gets the previous msg value then   &lt;br /&gt;
   &lt;br /&gt;
----&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#########################################################################&lt;br /&gt;
#Program: msg.db&lt;br /&gt;
#Purpose: Creates a set of 10 messages that can be displayed in edm.&lt;br /&gt;
#         &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#MACROS:&lt;br /&gt;
#  S    - application specific identifier &lt;br /&gt;
#  TIME - defines format to display time PVs. Uses formats defined by the&lt;br /&gt;
#         linux 'date' command. (ie. &amp;quot;@%x %T&amp;quot; displays &amp;quot;mm/dd/yy hh:mm:ss&amp;quot;)  &lt;br /&gt;
&lt;br /&gt;
#Author:  Tim Southern &amp;lt;southerntb@ornl.gov&amp;gt;&lt;br /&gt;
#Created: June 10, 2010&lt;br /&gt;
#Updated: Feb. 25, 2012 &lt;br /&gt;
#         - Changed reading a PV for time to reading system using soft &lt;br /&gt;
#           timestamp record type&lt;br /&gt;
########################################################################&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):info&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Info from seq&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;Message db intialized&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg10&amp;quot;)&lt;br /&gt;
    field(PINI, &amp;quot;YES&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg01&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time01&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):info&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time01&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(DTYP, &amp;quot;Soft Timestamp&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(TIME)&amp;quot;)    	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg02&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time02&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg01&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time02&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg01&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time01&amp;quot;)	  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg03&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time03&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg02&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time03&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg02&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time02&amp;quot;)	  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg04&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time04&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg03&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time04&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg03&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time03&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg05&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time05&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg04&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time05&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg04&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time04&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg06&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time06&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg05&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time06&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg05&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time05&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg07&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time07&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg06&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time07&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg06&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time06&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg08&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time08&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg07&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time08&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg07&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time07&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg09&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time09&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg08&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time09&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg08&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time08&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg10&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time10&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg09&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time10&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg09&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time09&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>TimSouthern</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=Msg.db&amp;diff=3749</id>
		<title>Msg.db</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=Msg.db&amp;diff=3749"/>
		<updated>2014-07-23T22:59:46Z</updated>

		<summary type="html">&lt;p&gt;TimSouthern: Created page with &amp;quot;&amp;amp;#35; Comments ---- &amp;lt;pre&amp;gt; ######################################################################### #Program: msg.db #Purpose: Creates a set of 10 messages that can be displayed ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;amp;#35;&lt;br /&gt;
Comments&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#########################################################################&lt;br /&gt;
#Program: msg.db&lt;br /&gt;
#Purpose: Creates a set of 10 messages that can be displayed in edm.&lt;br /&gt;
#         &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#MACROS:&lt;br /&gt;
#  S    - application specific identifier &lt;br /&gt;
#  TIME - defines format to display time PVs. Uses formats defined by the&lt;br /&gt;
#         linux 'date' command. (ie. &amp;quot;@%x %T&amp;quot; displays &amp;quot;mm/dd/yy hh:mm:ss&amp;quot;)  &lt;br /&gt;
&lt;br /&gt;
#Author:  Tim Southern &amp;lt;southerntb@ornl.gov&amp;gt;&lt;br /&gt;
#Created: June 10, 2010&lt;br /&gt;
#Updated: Feb. 25, 2012 &lt;br /&gt;
#         - Changed reading a PV for time to reading system using soft &lt;br /&gt;
#           timestamp record type&lt;br /&gt;
########################################################################&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):info&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Info from seq&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;Message db intialized&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg10&amp;quot;)&lt;br /&gt;
    field(PINI, &amp;quot;YES&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg01&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time01&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):info&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time01&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(DTYP, &amp;quot;Soft Timestamp&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(TIME)&amp;quot;)    	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg02&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time02&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg01&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time02&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg01&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time01&amp;quot;)	  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg03&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time03&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg02&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time03&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg02&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time02&amp;quot;)	  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg04&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time04&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg03&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time04&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg03&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time03&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg05&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time05&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg04&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time05&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg04&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time04&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg06&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time06&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg05&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time06&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg05&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time05&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg07&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time07&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg06&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time07&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg06&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time06&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg08&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time08&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg07&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time08&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg07&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time07&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg09&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time09&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg08&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time09&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg08&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time08&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg10&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time10&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg09&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time10&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg09&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time09&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>TimSouthern</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=Example_IOC_Databases&amp;diff=3748</id>
		<title>Example IOC Databases</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=Example_IOC_Databases&amp;diff=3748"/>
		<updated>2014-07-23T22:13:11Z</updated>

		<summary type="html">&lt;p&gt;TimSouthern: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is intended to provide pointers to example IOC databases that implement useful behavior.&lt;br /&gt;
&lt;br /&gt;
* [[msg.db]] - Creates a set of 10 messages that can be displayed in edm.&lt;br /&gt;
* [[Persistence.db]] - Simulates scope waveform persistence that can be displayed in edm.&lt;br /&gt;
* &amp;amp;#35;&lt;/div&gt;</summary>
		<author><name>TimSouthern</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=Example_IOC_Databases&amp;diff=3747</id>
		<title>Example IOC Databases</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=Example_IOC_Databases&amp;diff=3747"/>
		<updated>2014-07-23T22:01:54Z</updated>

		<summary type="html">&lt;p&gt;TimSouthern: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is intended to provide pointers to example IOC databases that implement useful behavior.&lt;br /&gt;
&lt;br /&gt;
* [[msg.db]] - Creates a set of 10 messages that can be displayed in edm.&lt;br /&gt;
* [[Persistence.db]] - Simulates scope waveform persistence that can be displayed in edm.&lt;br /&gt;
*&lt;/div&gt;</summary>
		<author><name>TimSouthern</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=Talk:Main_Page&amp;diff=3746</id>
		<title>Talk:Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=Talk:Main_Page&amp;diff=3746"/>
		<updated>2014-07-23T21:21:50Z</updated>

		<summary type="html">&lt;p&gt;TimSouthern: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Program: msg.db&amp;lt;br&amp;gt;&lt;br /&gt;
Purpose: Creates a set of 10 messages that can be displayed in edm.&amp;lt;br&amp;gt;&lt;br /&gt;
 MACROS:&amp;lt;br&amp;gt;&lt;br /&gt;
  S    - application specific identifier &lt;br /&gt;
  TIME - defines format to display time PVs. Uses formats defined by the&lt;br /&gt;
         linux 'date' command. (ie. &amp;quot;@%x %T&amp;quot; displays &amp;quot;mm/dd/yy hh:mm:ss&amp;quot;)  &lt;br /&gt;
&lt;br /&gt;
Author:  Tim Southern &amp;lt;southerntb@ornl.gov&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Created: June 10, 2010&amp;lt;br&amp;gt;&lt;br /&gt;
Updated: Feb. 25, 2012 &amp;lt;br&amp;gt;&lt;br /&gt;
         - Changed reading a PV for time to reading system using soft &lt;br /&gt;
           timestamp record type&lt;br /&gt;
----&lt;br /&gt;
record(stringin, &amp;quot;$(S):info&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Info from seq&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;Message db intialized&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg10&amp;quot;)&lt;br /&gt;
    field(PINI, &amp;quot;YES&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg01&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time01&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):info&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time01&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(DTYP, &amp;quot;Soft Timestamp&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(TIME)&amp;quot;)    	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg02&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time02&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg01&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time02&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg01&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time01&amp;quot;)	  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg03&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time03&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg02&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time03&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg02&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time02&amp;quot;)	  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg04&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time04&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg03&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time04&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg03&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time03&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg05&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time05&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg04&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time05&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg04&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time04&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg06&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time06&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg05&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time06&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg05&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time05&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg07&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time07&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg06&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time07&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg06&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time06&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg08&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time08&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg07&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time08&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg07&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time07&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg09&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time09&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg08&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time09&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg08&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time08&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg10&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time10&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg09&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time10&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg09&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time09&amp;quot;)	&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>TimSouthern</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=Talk:Main_Page&amp;diff=3745</id>
		<title>Talk:Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=Talk:Main_Page&amp;diff=3745"/>
		<updated>2014-07-23T21:03:53Z</updated>

		<summary type="html">&lt;p&gt;TimSouthern: Message db record example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#########################################################################&lt;br /&gt;
#Program: msg.db&lt;br /&gt;
#Purpose: Creates a set of 10 messages that can be displayed in edm.&lt;br /&gt;
#         &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#MACROS:&lt;br /&gt;
#  S    - application specific identifier &lt;br /&gt;
#  TIME - defines format to display time PVs. Uses formats defined by the&lt;br /&gt;
#         linux 'date' command. (ie. &amp;quot;@%x %T&amp;quot; displays &amp;quot;mm/dd/yy hh:mm:ss&amp;quot;)  &lt;br /&gt;
&lt;br /&gt;
#Author:  Tim Southern &amp;lt;southerntb@ornl.gov&amp;gt;&lt;br /&gt;
#Created: June 10, 2010&lt;br /&gt;
#Updated: Feb. 25, 2012 &lt;br /&gt;
#         - Changed reading a PV for time to reading system using soft &lt;br /&gt;
#           timestamp record type&lt;br /&gt;
########################################################################&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):info&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Info from seq&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;Message db intialized&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg10&amp;quot;)&lt;br /&gt;
    field(PINI, &amp;quot;YES&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg01&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time01&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):info&amp;quot;)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time01&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(DTYP, &amp;quot;Soft Timestamp&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(TIME)&amp;quot;)    	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg02&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time02&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg01&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time02&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg01&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time01&amp;quot;)	  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg03&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time03&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg02&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time03&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg02&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time02&amp;quot;)	  &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg04&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time04&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg03&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time04&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg03&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time03&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg05&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time05&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg04&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time05&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg04&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time04&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg06&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time06&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg05&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time06&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg05&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time05&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg07&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time07&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg06&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time07&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg06&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time06&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg08&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time08&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg07&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time08&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg07&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time07&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg09&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time09&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg08&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time09&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg08&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time08&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):msg10&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):time10&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):msg09&amp;quot;)	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
record(stringin, &amp;quot;$(S):time10&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
    field(DESC, &amp;quot;Message History&amp;quot;)&lt;br /&gt;
    field(VAL, &amp;quot;--------------------&amp;quot;)&lt;br /&gt;
    field(FLNK, &amp;quot;$(S):msg09&amp;quot;)&lt;br /&gt;
    field(INP, &amp;quot;$(S):time09&amp;quot;)	&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>TimSouthern</name></author>
	</entry>
</feed>