|
|
|
|
|
|
ANalog Alarm Block |
|
|
|
|
Analog Alarm TeXt |
|
|
|
|
Basic ConTroL |
|
|
|
|
Basic StaTuS |
|
|
|
|
Digital Alarm BLock |
|
|
|
|
Digital Alarm TeXt |
|
|
|
|
Extended STatuS (defunct) |
|
|
|
|
Extended information TeXT |
|
|
|
|
FaMiLY of devices (also PRSSDR) |
|
|
|
|
device mnemonic (NAME) |
|
|
|
|
ACNET source NODE |
|
|
|
|
READings from front-ends |
|
|
|
|
device SETting |
|
|
|
|
SIBLing devices |
|
|
|
|
device descriptive TEXT |
|
|
|
|
Event Message Code (Aeolus) |
|
|
|
|
Save/restore control info |
|
|
|
|
Virtual Machine Device Index |
|
|
|
SSDN as displayed by D80 | (0011/2233/4455/6677) | |
SSDN value | {11,00,33,22,55,44,77,66} | This is how the SSDN appears in database and how one must specify SSDN for D80's DB query. |
SSDN in little-endian representation | {11,00,33,22,55,44,77,66} | 1-byte integers unaffected by endianess. |
SSDN after byte swap in each 2-bytes | {00,11,22,33,44,55,66,77} | This is how SSDN appears on the network. |
|
|
|
|
Flags/status | 2-byte unsigned integer |
|
Value 1 | depends on block type |
|
Value 2 | depends on block type |
|
Tries needed | 1-byte unsigned integer |
|
Tries now | 1-byte unsigned integer |
|
Global event 1 | 1-byte unsigned integer |
|
Subfunction code | ? |
|
Subsystem-specific code | array of 6 1-byte unsigned integers. Note that for analog alarm blocks the 3rd bytes as seen in VAX memory is used to encode the type of the parameter being alarmed on. The encoding is as follows 0 - unknown/uninitialized, 1 - signed integer, 2 - unsigned integer, 3 - floating point. These types taken with the Q value completely specify the type of the parameter. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Bit 10 was originally part of the analog alarm block's K field. However, it was unused and was later used as a "Busted Bit" flag. And now the "Busted Bit" flag is unused.
The meaning of the flag bits common to both analog and digital alarm blocks are given below.
|
|
|
|
|
|
|
|
Event display | Display event |
|
Disabled | No | These bits are for Aeolus. |
|
Enabled | Yes | ||||
|
Event logging | Logging event |
|
Disabled | No | |
|
Enabled | Yes | ||||
|
Event | Monitor type |
|
Exception | Alarm | |
|
Event | Event | ||||
|
Analog/Digital | Block type |
|
Analog | Analog | |
|
Digital | Digital | ||||
|
Input data length (for values 1 and 2.) | Data length |
|
1 byte | 1 byte | This should match IDL specified in PDB conversion. |
|
2 byte | 2 byte | ||||
|
4 byte | 4 bytes | ||||
|
Invalid value | |||||
|
Abort inhibit | Abort bypassed |
|
Abort enabled | No | AB must be 1 also to cause abort |
|
Abort inhibited | Yes | ||||
|
Abort | Beam abort |
|
No abort on alarm | No | AI must be 0 also to cause abort |
|
Abort on alarm | Yes | ||||
|
Good | Alarm state |
|
Good | Normal | |
|
Bad | Alarm | ||||
|
Bypass | Alarm status |
|
Bypassed | Bypass | GB/HI/LO/now=0 |
|
Active | Active |
The bits indicated as being for Aeolus, should be ignored but preserved by the front-end. When a front-end echos an alarm block setting to SYBSET, the only flags which are updated in the database from the echoed flag values are AI and BP, all other flags are left unchanged by SYBSET. Also SYBSET echos settings to the database server CDBS but not ADBS, so alarm blocks in ADBS's accdb database are not correct. The size specified by the Q value of the alarm block should match the input data length specified by the PDB. However, there are a few hundred devices which have errors in their database information such that the alarm block and PDB do not agree. The Q field is needed in the alarm block because front-ends do not have access to the PDB and in some cases the front-end does not know how many bytes of the data are valid. An example of a case were a front-end does not know the size of the data occurs when an SSDN specifies a CAMAC CNAF. In such a case the front-end does not know whether the data size is 1 or 2 bytes. The meaning of value 1 and 2 depends on the block type. Tries needed is the number of consecutive samples which must be in a new condition, before the device is considered to have made a transition and Aeolus is notified. The tries needed applies to both good to bad and bad to good transitions. A tries needed count of 0 is not valid. A tries needed count of 1 indicates a transition is considered to be made on the first sample in a new condition. Tries now is used to count the number of samples in a new condition, when tries now equals tries needed the GB bit is updated and tries now is reset. The HI and LO bits are set immediately when a limit is crossed. Global event 1 indicates when the device is to be sampled. If it is zero the device is to be sampled at a frequency which is fixed by the front-end. If is non-zero the value is the TCLK event upon which the device is to be sampled. Not all front-ends honor requests to sample on TCLK events, e.g., current MOOC front-ends ignore the global event 1 field. The subfunction code is refered to as global event 2 in some places, becaues the original intent of this field was to indicate a second event upon which the device should also be sampled. However this was never implemented so this field was appropriated for other uses and renamed subfunction code, most of the alarm blocks in the database have a subfunction code of 0. However there are CAMAC and FRIG devices which have non-zero subfunction code alarm blocks. However, after looking at the CAMAC code, it appears that the subfunction code is unused. Especially, since the C-language structures which define the alarm block for the CAMAC front-ends use the term global event 2 and not subfunction code. The meaning of the subsystem-specific code depends on the front-end. In a general framework like MOOC both the subfunction code and the subsystem-specific code should probably go unused, or given a more useful meaning. Perhaps the subfunction code could be renamed and used to indicate the sampling frequency instead of having the frequency fixed by the front-end.
The postion of the flag bits present only in analog alarm blocks are given below.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
The meaning of the flag bits present only in analog alarm blocks are given below.
Bit mnemonic | Bit description | D67 description | Value | Meaning | D67 term | Comment |
---|---|---|---|---|---|---|
|
High | Reading high |
|
Not high | No | |
|
High | Yes | ||||
|
Low | Reading low |
|
Not low | No | |
|
Low | Yes | ||||
|
Limit type | Limits defined |
|
Nominal/Tolerance | Nom/Tol | |
|
Invalid value | Was Nom/%Tol | ||||
|
Minimum/Maximum | Min/Max | ||||
|
Invalid value |
The limit type determines the meaning of values 1 and values 2. The value stored in the K-field in the database is the way the limits should be displayed to the user. However, the front-end may actually require that the values be given as a different limit type. In such cases one can determine which type the front-end requires by first reading the alarm block from the front-end and checking the K-field. The values stored in the database and returned by the front-end use the limit type required by the front-end, not the limit type given in the database.
Nominal/Tolerance requires a linear conversion between raw and engineering units. Value 1, which is the nominal value, is the same type and represention as the device's raw reading. Value 2, which is the tolerance, is the same type and representation as the device's raw reading, except that it is unsigned if the type of the raw reading is signed but has an unsigned version. If no unsigned version exists then tolerance should have a non-negative value. If the PDB conversion changes the sign of its input, e.g., x' = -x, then something prior to the front-end must insure that the tolerance sent to the front-end is positive. The reading is considered bad, when its raw reading is outside the range [nominal-tolerance, nominal+tolerance]. Note that the front-end code must use the arithmetic and comparision operations appropriate for the values' types, and must use only the number of least-significant bytes indicated by the Q-field value. The HI/LO bits are set based on the raw values which for some PDB conversions means the HI/LO bits will not be set correctly for the engineering unit values.
In theory, value 1 is the raw minimum and value 2 is the raw maximum, however some software does not insure this. The reason this is somewhat tricky is because a PDB conversion like x' = -x, will cause the minimum and maximum to be swapped between raw and engineering units and one must know the type of the raw reading to determine whether the minimum is less than the maximum. Both values are have the same type and representation as the device's raw reading. The reading is considered bad, when its raw reading is outside the range [minimum,maximum]. Note that the front-end must use the comparision operation appropriate for the values' types, and must use only the number of least-significant bytes indicated by the Q-field value. The HI/LO bits are set based on the raw values which for some PDB conversions means the HI/LO bits will not be set correctly for the engineering unit values.
Conceptually, the procedure for determining if a given attribute is true from the network representation of basic status is as follows:
Conceptually, the procedure for converting a setting from network representation to engineering-units in VAX floating-point representation is:
Conceptually, the procedure for converting a setting from engineering-units
in VAX floating-point representation to network representation is: