Quality Flags
Mapping
Mapping means the projection of bits to WinCC OA Userbits.
-
None: maps no quality to user bits
-
Server specific bits: map only the server specific bits to the user bits 1-32.
-
Standard bits: map only the OPC default bits to the user bits.
Depending of the combination all quality bits are used, or only quality and substatus, or only substatus, or only limits. QQSSSSLL is mapped starting at QQ respectively SSSS respectively LL:
Quality, Substatus and Limits: map all 8 bits to the userbits. QQ is set to the user bits 1+2, SSSS to 3-6, LL to 7,8
Quality und Substatus: map only QQSSSS, starting at user bit X. That means, QQ is set to X, X+1. SSSS to X+2-X+5
Substatus: maps only SSSS, starting at user bit X
Limits: map only LL to user bits X, X+1
Examples
The bits for "Good, local override" sets X, X+1 (Good), X+3, X+4 (Local override). That means for userbit 2:
x | x | x | x |
"Engineering units exceeded" sets X+1, X+3. For userbit:
x | x |
Low Limited e.g. sets only userbit X+1
x |
These flags represent the quality state for a item's data value. This is intended to be similar to but slightly simpler than the Fieldbus Data Quality Specification (section 4.4.1 in the H1 Final Specifications). This design makes it fairly easy for both servers and client applications to determine how much functionality they want to implement.
The low 8 bits of the Quality flags are currently defined in the form of three bit fields; Quality, Substatus and Limit status. The 8 Quality bits are arranged as follows:
QQSSSSLL
The high 8 bits of the Quality Word are available for vendor specific use. If these bits are used, the standard OPC Quality bits must still be set as accurately as possible to indicate what assumptions the client can make about the returned data. In addition it is the responsibility of any client interpreting vendor specific quality information to insure that the server providing it uses the same 'rules' as the client. The details of such a negotiation are not specified in this standard although a QueryInterface call to the server for a vendor specific interface such as IMyQualityDefinitions is a possible approach.
Details of the OPC standard quality bits follow:
The Quality BitField
Bit Value | Define | Description | |
---|---|---|---|
0 | 00SSSSLL | Bad | Value is not useful for reasons indicated by the Substatus. |
1 | 01SSSSLL | Uncertain | The quality of the value is uncertain for reasons indicated by the Substatus |
2 | 10SSSSLL | N/A | Not used by OPC |
3 | 11SSSSLL | Good | The Quality of the value is Good. |
Comment:
A server which supports no quality information must return 3 (Good). It is also acceptable for a server to simply return Bad or Good (0x00 or 0xC0) and to always return 0 for Substatus and limit.
It is recommended that clients at least check the Quality Bit field of all results (even if they do not check the substatus or limit fields).
Even when a 'BAD' value is indicated, the contents of the value field must still be a well defined VARIANT even though it does not contain an accurate value. This is to simplify error handling in client applications. For example, clients are always expected to call VariantClear() on the results of a Synchronous Read. Similarly the IAdviseSink needs to be able to interpret and 'unpack' the Value and Data included in the Stream even if that data is BAD.
If the server has no known value to return then some reasonable default should be returned such as a NULL string or a 0 numeric value.
The Substatus BitField
The layout of this field depends on the value of the Quality Field.
Substatus for BAD Quality:
SSSS | Bit Value | Define | Description |
---|---|---|---|
0 | 000000LL | Non-specific | The value is bad but no specific reason is known. |
1 | 000001LL | Configuration Error | There is some server-specific problem with the configuration. For example the item is question has been deleted from the configuration. |
2 | 000010LL | Not Connected | The input is required to be logically connected to something but is not. This quality may reflect that no value is available at this time, for reasons like the value may have not been provided by the data source. |
3 | 000011LL | Device Failure | A device failure has been detected |
4 | 000100LL | Sensor Failure | A sensor failure had been detected (the 'Limits' field can provide additional diagnostic information in some situations.) |
5 | 000101LL | Last Known Value | Communications have failed. However, the last known value is available. Note that the 'age' of the value may be determined from the TIMESTAMP in the OPCITEMSTATE. |
6 | 000110LL | Comm Failure | Communications have failed. There is no last known value available. |
7 | 000111LL | Out of Service | The block is off scan or otherwise locked This quality is also used when the active state of the item or the group containing the item is Inactive. |
8-15 | - | N/A | Not used by OPC |
Comment
Servers which do not support Substatus should return 0. Note that an 'old' value may be returned with the Quality set to BAD (0) and the Substatus set to 5. This is for consistency with the Fieldbus Specification. This is the only case in which a client may assume that a 'BAD' value is still usable by the application.
Substatus for UNCERTAIN Quality:
SSSS | Bit Value | Define | Description |
---|---|---|---|
0 | 010000LL | Non-specific | There is no specific reason why the value is uncertain. |
1 | 010001LL | Last Usable Value | Whatever was writing this value has stopped doing so. The returned value should be regarded as 'stale'. Note that this differs from a BAD value with Substatus 5 (Last Known Value). That status is associated specifically with a detectable communications error on a 'fetched' value. This error is associated with the failure of some external source to 'put' something into the value within an acceptable period of time. Note that the 'age' of the value can be determined from the TIMESTAMP in OPCITEMSTATE. |
2-3 | - | N/A | Not used by OPC |
4 | 010100LL | Sensor Not Accurate | Either the value has 'pegged' at one of the sensor limits (in which case the limit field should be set to 1 or 2) or the sensor is otherwise known to be out of calibration via some form of internal diagnostics (in which case the limit field should be 0). |
5 | 010101LL | Engineering Units Exceeded | The returned value is outside the limits defined for this parameter. Note that in this case (per the Fieldbus Specification) the 'Limits' field indicates which limit has been exceeded but does NOT necessarily imply that the value cannot move farther out of range. |
6 | 010110LL | Sub-Normal | The value is derived from multiple sources and has less than the required number of Good sources. |
7-15 | - | N/A | Not used by OPC |
Comment
Servers which do not support Substatus should return 0.
Substatus for GOOD Quality:
SSSS | Bit Value | Define | Description |
---|---|---|---|
0 | 110000LL | Non-specific | The value is good. There are no special conditions |
1-5 | - | N/A | Not used by OPC |
6 | 110110LL | Local Override | The value has been Overridden. Typically this is means the input has been disconnected and a manually entered value has been 'forced'. |
7-15 | - | N/A | Not used by OPC |
Comment
Servers which do not support Substatus should return 0.
The Limit BitField
The Limit Field is valid regardless of the Quality and Substatus. In some cases such as Sensor Failure it can provide useful diagnostic information.
LL: | Bit Value | Define | Description |
---|---|---|---|
0 | QQSSSS00 | Not Limited | The value is free to move up or down. |
1 | QQSSSS01 | Low Limited | The value has 'pegged' at some lower limit. |
2 | QQSSSS10 | High Limited | The value has 'pegged' at some high limit. |
3 | QQSSSS11 | Constant | The value is a constant and cannot move. |
Comment
Servers which do not support Limit should return 0.
Symbolic Equates are defined for values and masks for these Bit fields in the "QUALITY" section of the OPC header files.