Mapping ICCP and OPC UA
This section describes how Oracle Utilities LEC Server exposes ICCP monitoring and control information using an OPC UA interface.
On this page:
ICCP Service Modeling
ICCP communication consists of the following data exchange patterns:
- Writes: The ICCP client writes to the ICCP server.
- Solicited Read: The server replies to a client request.
- Unsolicited Periodic Reporting: The server periodically sends data to the client.
- Unsolicited Exception Reporting: The server sends data that has changed within a period of time.
- Unsolicited Event Reporting: The server sends data based on client-defined criteria.
ICCP conformance blocks define groups for what and how to exchange data.
ICCP Block | Description |
---|---|
Block 1 |
Periodic System Data: Status points, analog points, quality flags, timestamp, change of value counter. ICCP transfers Block 1 data using Solicited Read as well as Unsolicited Periodic Reporting. |
Block 2 |
Extended Data Set Condition Monitoring: Status points, analog points, quality flags, time stamp, and change-of-value (COV) counter. ICCP exchanges Block 2 data using Solicited Read as well as Unsolicited Exception Reporting. |
Block 3 |
Not supported |
Block 4 |
Information Messages: ICCP exchanges simple text and binary files using Unsolicited Exception Reporting. |
Block 5 |
Device Control: Device control requests include on/off, trip/close, raise/lower as well as setting and clearing digital setpoints. Block 5 includes mechanisms for interlocked controls and select-before-operate methods. ICCP exchanges Block 5 data using Writes as well as Unsolicited Periodic and Exception Reporting. |
Block 6 |
Not supported |
Block 7 |
Event Reporting: ICCP provides Reporting completion status for a Block 5 device control. |
Block 8 |
Additional User Objects: ICCP provides scheduling, accounting, outage, and plant information. |
Block 9 |
Not supported |
Default ICCP Mapping Exposed by a Local OPC UA Server
For OPC UA, an ICCP folder is exposed under the root Objects folder on the LEC Server machine.
While ICCP is the default name for the root of ICCP data, this OPC UA folder name is the name of the configuration database file. Although only point values and change-of-value (COV) variables are shown above, you can configure variables for individual ICCP Quality tags by modifying the default batch file.
ICCP/OPC UA Mapping for Data from Each ICCP Conformance Block
This section shows how an LEC Server instance, acting as an LEC IFE, maps ICCP to OPC UA types for each ICCP conformance block. Blocks 1 and 2 include the PointTypes, which are REAL, STATE, and DISCRETE, as well as the Quality bits, Timestamp, and COV data. Block 4 includes ICCP data that is defined by the Message attribute, and Blocks 5 and 7 are defined by the ICCP Control and Report attributes, respectively.
Table 3 shows the OPC UA mappings for the data that is supported in each ICCP conformance block.
ICCP Block | ICCP Attribute | ICCP Attribute Values | Default OPC UA Type Mapping |
---|---|---|---|
Blocks 1 & 2 |
PointType (REAL,STATE,DISCRETE) |
|
|
Blocks 1 & 2 |
PointType= REAL |
PointRealValue |
Float is defined as a 32-bit floating-point number with an eight-bit exponent. |
Blocks 1 & 2 |
PointState= STATE |
PointStateValue |
Int32 is defined as a signed 32-bit integer. |
Blocks 1 & 2 |
PointState=DISCRETE |
PointDiscreteValue |
Int32 |
Blocks 1 & 2 |
Quality |
See the section called Quality Bits in LEC Configuration Manager for an explanation of the representation of quality bits. |
See the Mapping Quality Bit Values from ICCP to OPC UA Status Names and States for Block 1 Data table.
|
Blocks 1 & 2 |
Quality.Validity |
|
|
Blocks 1 & 2 |
Quality.CurrentSource |
|
|
Blocks 1 & 2 |
Quality.NormalValue |
|
|
Blocks 1 & 2 |
Quality.TimeStampQuality |
|
|
Blocks 1 & 2 |
Quality.State |
|
|
Blocks 1 & 2 |
TimeStamp |
32-bit integer representing Universal Time Coordinated (UTC) in seconds since midnight January 1, 1970 00:00:00 in Greenwich, England and optionally a 16-bit integer for the number of milliseconds elapsed within the current second |
ICCP time if available, if not, LEC Server’s host machine time Regardless of the source of the timestamp, LEC Server converts it into an OPC UA timestamp |
Blocks 1 & 2 |
COV |
16-bit unsigned integer that holds the change-of- value counter. |
COV is exposed as a two-item OPC UA array, where the first item is the usual point information, and the second item is a Uint16 COV. Uint16 is an unsigned 16-bit integer. |
Block 4 (not used as part of ICCP control) |
Message |
An octet string of 8 bits for binary data or characters. |
Four-element, comma-separated string-type variable, where the elements are respectively the InfoReference, the LocalReference, the MessageId, and the message buffer. |
Block 5 | Control |
See the OPC UA Control over ICCP Devices For information on tagging, see the Setting and Clearing Tags section. |
|
Block 7 |
Report |
See the OPC UA Control over ICCP Devices section. |
|
Block 8 |
Not supported |
Not supported | Not supported |
Quality Bits in LEC Configuration Manager
The easiest way to see the ICCP quality bits returned for ICCP Block 1 and 2 data is to use the Node Monitor in LEC Configuration Manager. The following image is an example of the information that you can read from Processor nodes within the Node Monitor.
In the preceding image, a Data_RealQ value has the floating point value 122.026 and a Quality byte of 00000000.
00 | 00 | 00 |
0 |
0 |
Good |
Valid |
Telemetered |
Normal Value |
Normal Timestamp |
In the preceding image, a Data_StateQ value has a Quality byte of 10000010.
10 | 00 | 00 |
1 |
0 |
On |
Valid |
Telemetered |
Abnormal Value |
Normal Timestamp |
State is shown in the first pair of bits if the bit string represents a State value.
Bits | 00 | 01 |
10 |
11 |
Meaning |
Between |
Off |
On |
Invalid |
Validity is shown in the second pair of bits.
Bits | 00 | 01 |
10 |
11 |
Meaning |
Good or Valid |
Held |
Suspect |
Bad or Invalid |
Current Source is shown the third pair of bits.
Bits | 00 | 01 |
10 |
11 |
Meaning |
Telemetered |
Calculated |
Entered |
Estimated |
Normal or Abnormal Value is shown in the next single bit.
Bits | 0 | 1 |
Meaning |
Telemetered |
Calculated |
Valid or Invalid Timestamp is shown in the last single bit.
Bits | 0 | 1 |
Meaning |
Telemetered |
Calculated |
Mapping Quality Bit Values from ICCP to OPC UA Status Names and States for Block 1 Data
LEC Server matches incoming ICCP Quality bit values to the outgoing OPC UA status name and OPC UA state value if the incoming value is a State PointType. These Quality flags are returned with the ICCP Real, Discrete, and State PointTypes. Table 5 shows the outgoing OPC UA status names and state values that map to the ICCP Quality flags, State, Validity, Normal Value, and TimeStampQuality.
No Problems |
||||||
ICCP State | ICCP Validity | ICCP CurrentSource | ICCP Normal Value | ICCP TimeStamp Quality | OPC UA Status Name | OPC UA State Value |
0, 1, 2, 3 |
0 |
0 |
0 |
0 or 1 |
Good |
Do not set state |
Normal Value Problem |
||||||
ICCP State | ICCP Validity | ICCP CurrentSource | ICCP Normal Value | ICCP TimeStamp Quality | OPC UA Status Name | OPC UA State Value |
0, 1, 2, 3 |
0 |
0 |
1 |
0 or 1 |
UncertainEngineerin gUnitsExceeded |
Do not set state |
Current Source Problems |
||||||
ICCP State | ICCP Validity | ICCP CurrentSource | ICCP Normal Value | ICCP TimeStamp Quality | OPC UA Status Name | OPC UA State Value |
0, 1, 2, 3 | 0 |
1 |
0 or 1 | 0 or 1 |
GoodEdited |
Do not set state |
0, 1, 2, 3 | 0 |
2 |
0 or 1 | 0 or 1 |
GoodLocalOverride |
Do not set state |
0, 1, 2, 3 | 0 |
3 |
0 or 1 | 0 or 1 |
GoodEdited |
Do not set state |
State Problems |
||||||
ICCP State | ICCP Validity | ICCP CurrentSource | ICCP Normal Value | ICCP TimeStamp Quality | OPC UA Status Name | OPC UA State Value |
0 |
0 |
0, 1, 2, or 3 | 0 or 1 | 0 or 1 |
Uncertain |
Do not set state |
3 |
0 |
0, 1, 2, or 3 | 0 or 1 | 0 or 1 |
UncertainEngineerin gUnitsExceeded |
Do not set state |
Validity Problems |
||||||
ICCP State | ICCP Validity | ICCP CurrentSource | ICCP Normal Value | ICCP TimeStamp Quality | OPC UA Status Name | OPC UA State Value |
0, 1, 2, 3 |
1 |
0, 1, 2, or 3 | 0 or 1 | 0 or 1 |
UncertainLastUsableValue |
Do not set state |
0, 1, 2, 3 |
2 |
0, 1, 2, or 3 | 0 or 1 | 0 or 1 |
Uncertain |
Do not set state |
0, 1, 2, 3 |
3 |
0, 1, 2, or 3 | 0 or 1 | 0 or 1 |
BadUnexpectedError |
Do not set state |
Transfer State Values |
||||||
ICCP State | ICCP Validity | ICCP CurrentSource | ICCP Normal Value | ICCP TimeStamp Quality | OPC UA Status Name | OPC UA State Value |
0 |
0 |
0, 1, 2, or 3 | 0 or 1 | 0 or 1 | Do not set state |
0 |
1 |
1 |
0, 1, 2, or 3 | 0 or 1 | 0 or 1 | Do not set state |
1 |
2 |
2 |
0, 1, 2, or 3 | 0 or 1 | 0 or 1 | Do not set state |
2 |
3 |
3 |
0, 1, 2, or 3 | 0 or 1 | 0 or 1 | Do not set state |
3 |
Mapping OPC UA Status Names and States to ICCP Quality Bit Values for Block 1 Data
LEC Server matches an incoming OPC status name and transfer state value to the outgoing ICCP Quality bit values and the State value if the incoming value is the State PointType. Table 5 shows the outgoing ICCP quality bit values, State, Validity, Normal Value, and TimeStampQuality that map to the incoming OPC status names and transfer state values.
No Problems |
|||||||
OPC UA Status Name | OPC UA State Value | State | Validity | Current Source | Normal Value | TimeStamp Quality | ICCP Description |
Good | 0, 1, 2, or 3 | Don’t set | 0 | 0 | 0 | 0 | ICCP_GoodQuality |
Current Source Problem |
|||||||
OPC UA Status Name | OPC UA State Value | State | Validity | Current Source | Normal Value | TimeStamp Quality | ICCP Description |
GoodEdited | 0, 1, 2, or 3 | Don’t set | 0 | 2 | 0 | 0 | ICCP_Entered |
GoodLocalOverride | 0, 1, 2, or 3 | Don’t set | 0 | 2 | 0 | 0 | ICCP_Entered |
Normal Value Problem |
|||||||
OPC UA Status Name | OPC UA State Value | State | Validity | Current Source | Normal Value | TimeStamp Quality | ICCP Description |
UncertainEngineering | 0, 1, 2, or 3 | Don’t set | 0 | 0 | 1 | 0 | ICCP_AbnormalValue |
Validity Problem |
|||||||
OPC UA Status Name | OPC UA State Value | State | Validity | Current Source | Normal Value | TimeStamp Quality | ICCP Description |
UncertainLastUsableValue | 0, 1, 2, or 3 | Don’t set | 1 | 0 | 0 | 0 | ICCP_Held |
Uncertain | 0, 1, 2, or 3 | Don’t set | 2 | 0 | 0 | 0 | ICCP_Suspect |
Bad | 0, 1, 2, or 3 | Don’t set | 3 | 0 | 0 | 0 | ICCP_NotValid |
BadUnexpectedError | 0, 1, 2, or 3 | Don’t set | 3 | 0 | 0 | 0 | ICCP_NotValid |
BadWaitingForInitial | 0, 1, 2, or 3 | Don’t set | Don’t set | Don’t set | Don’t set | Don’t set | Do not pass data |
Transfer State Values |
|||||||
OPC UA Status Name | OPC UA State Value | State | Validity | Current Source | Normal Value | TimeStamp Quality | ICCP Description |
Any incoming status | 0 | 0 | Don’t set | Don’t set | Don’t set | Don’t set | |
Any incoming status | 1 | 1 | Don’t set | Don’t set | Don’t set | Don’t set | |
Any incoming status | 2 | 2 | Don’t set | Don’t set | Don’t set | Don’t set | |
Any incoming status | 3 | 3 | Don’t set | Don’t set | Don’t set | Don’t set | |
Default Values |
|||||||
OPC UA Status Name | OPC UA State Value | State | Validity | Current Source | Normal Value | TimeStamp Quality | ICCP Description |
DEFAULT_GOOD | 0, 1, 2, or 3 | Don’t set | 0 | 0 | 0 | 0 | |
DEFAULT_UNCERTAIN | 0, 1, 2, or 3 | Don’t set | 2 | 0 | 0 | 0 | |
DEFAULT_BAD | 0, 1, 2, or 3 | Don’t set | 3 | 0 | 0 | 0 |
Mapping of ICCP Measurement Data Types to OPC UA Data Types for Block 1 Data
The following table shows how LEC Server maps ICCP (Block 1) measurement data types to equivalent OPC UA data types.
ICCP Data Type | Meaning | OPC UA Data Type Mapping |
---|---|---|
Data_State | Discrete 2-bit value | OPC UA UInt32 |
Data_StateQ | Discrete 2-bit value + 6 ICCP Quality bits | OPC UA UInt32 with ICCP Quality reflected in the OPC UA Status |
Data_StateQTimeTag | Discrete 2-bit value + ICCP Quality bits + Timestamp | OPC UA UInt32 with ICCP Quality reflected in the OPC UA Status |
Data_StateExtended | Discrete 2-bit value + ICCP Quality bits + COV | Two element OPC UA array type, where the first element is ICCP Quality, which is reflected in the OPC UA Status, and the second element is the Uint32 COV |
Data_StateTimeTagExtended | Discrete 2-bit value + ICCP Quality bits + Extended timestamp | OPC UA UInt32 with ICCP Quality reflected in the OPC UA Status |
Data_Discrete | Integer value 32-bit signed | OPC UA Int32 |
Data_DiscreteQ | Integer value 32-bit signed + ICCP Quality bits | OPC UA Int32 with ICCP Quality reflected in the OPC UA Status |
Data_DiscreteQTimeTag | Integer value 32-bit signed + ICCP Quality + Timestamp | OPC UA Int32 with ICCP Quality reflected in the OPC UA Status |
Data_DiscreteExtended | Integer value 32-bit signed + ICCP Quality bits + COV | Two element OPC UA array type, where the first element is ICCP Quality, and the second element is the Uint32 COV |
Data_DiscreteTimeTagExtended | Integer value 32-bit signed + ICCP Quality bits + Extended timestamp | OPC UA Int32 with ICCP Quality reflected in the OPC UA Status |
Data_Real | Float 32 | OPC UA Float |
Data_RealQ | Float 32 + ICCP Quality bits | OPC UA Float with ICCP Quality reflected in the OPC UA Status |
Data_RealQTimeTag | Float 32 + ICCP Quality bits + Timestamp | OPC UA Float with ICCP Quality reflected in the OPC UA Status |
Data_RealExtended | Float 32 + ICCP Quality bits + Current Source + COV | Two element OPC UA array type, where the first element is ICCP Quality, and the second element is the Uint32 COV |
Data_RealTimeTagExtended | Float 32 + ICCP Quality bits + Current Source + Extended timestamp | OPC UA Float with ICCP Quality reflected in OPC UA Status |
Mapping of ICCP Control and Tag Data Types to OPC Data Types for Block 5 Data
Table 7 shows how LEC Server maps ICCP (Block 5) command, setpoint, and tag data types to equivalent OPC UA data types.
Block 5 Controls and Tags | ICCP Data Type | OPC UA Data Type Mapping |
---|---|---|
Command | 16-bit integer | OPC UA Int32 |
Setpoint | 32-bit integer or Floating point | OPC UA Int32 OPC UA Float |
Tag | A data structure containing three strings for tag kind, armed, and comment. | A ByteString containing three comma-separated fields: tag kind, armed, and comment |
See the section of this document called Setting and Clearing Tags for more information on the specific tag fields.
Mapping between Returned ICCP Status Names and OPC UA Status Names for Block 5 Data
The mapping between ICCP status names and OPC UA status names allows the application’s OPC UA server to see device control results. ICCP controls (Block 5) have no quality bits, but when an ICCP client receives an OPC UA device control, the ICCP client returns an MMS status name and number.
LEC Server maps these MMS status names and numbers to a 32-bit integer (shown in hex) that represents an OPC UA status name. If there is no mapping for an MMS status name, LEC Server gives it the default OPC UA status name BadUnknownResponse. The following table shows the OPC UA number that represents each of the MMS status names and codes returned by ICCP.
32-bit Integer returned by LEC Server in hex | OPC UA Status Name for returned MMS Status NameC | MMS Status Name returned by ICCP | MMS Status Code returned by ICCP |
---|---|---|---|
0 | Good | SUCCESS | -1 |
0x803F0000 | BadObjectDeleted | INVALIDATED | 0 |
0x808B0000 | BadDeviceFailure | FAULT | 1 |
0x80040000 | BadResourceUnavailable | UNAVAILABLE | 2 |
0x801F0000 | BadUserAccessDenied | DENIED | 3 |
0x80340000 | BadNodeIdUnknown | UNDEFINED | 4 |
0x80640000 | BadSourceNodeIdInvalid | INVALID_ADDRESS | 5 |
0x80110000 | BadDataTypeIdUnknown | TYPE_UNSUPPORTED | 6 |
0x80740000 | BadTypeMismatch | TYPE_INCONSISTENT | 7 |
0x80620000 | BadNodeAttributesInvalid | ATTRIBUTE_INCONSISTENT | 8 |
0x803D0000 | BadNotSupported | ACCESS_UNSUPPORTED | 9 |
0x803E0000 | BadNotFound | NON_EXISTENT | 10 |
0x80850000 | BadRequestTimeout | TIMEOUT | 11 |
Mapping between OPC UA Status Codes and ICCP Access Results for Block 5 Data
The mapping between OPC status codes and ICCP access results allows the ICCP server to see device control results. LEC Server provides a mapping between each OPC UA status name and each MMS status name in the file StandardOpcToIccp.csv. You can change these mappings by editing this file that is in the directory C: or D:\ProgramData\LiveEnergyConnect\Config.
Since there are far fewer MMS status numbers/names than OPC UA status names, more than one OPC UA status name has to be mapped to a single MMS status name. If an OPC UA name is not mapped to an MMS status name, LEC Server will map the OPC UA status name to the MMS status name as shown in the DEFAULT row of the table.
OPC UA Status Name | MMS Status Name | MMS Number |
---|---|---|
GoodCompletesAsynchronously | IN_PROCESS | -2 |
Good | SUCCESS | -1 |
GoodLocalOverride | SUCCESS | -1 |
GoodEntryInserted | SUCCESS | -1 |
GoodEntryReplaced | SUCCESS | -1 |
GoodNonCriticalTimeout | SUCCESS | -1 |
BadObjectDeleted | INVALIDATED | 0 |
BadSensorFailure | FAULT | 1 |
BadSensorFailure | FAULT | 1 |
BadResourceUnavailable | UNAVAILABLE | 2 |
BadNoCommunication | UNAVAILABLE | 2 |
BadInvalidState | UNAVAILABLE | 2 |
BadOutOfService | UNAVAILABLE | 2 |
BadStateNotActive | UNAVAILABLE | 2 |
BadUserAccessDenied | DENIED | 3 |
BadRequestTypeInvalid | DENIED | 3 |
BadMethodInvalid | DENIED | 3 |
BadNodeIdUnknown | UNDEFINED | 4 |
BadSourceNodeIdInvalid | INVALID_ADDRESS | 5 |
BadDataTypeIdUnknown | TYPE_UNSUPPORTED | 6 |
BadNotImplemented | TYPE_UNSUPPORTED | 6 |
BadDataEncodingUnsupported | TYPE_UNSUPPORTED | 6 |
BadTypeMismatch | TYPE_INCONSISTENT | 7 |
BadIndexRangeInvalid | TYPE_INCONSISTENT | 7 |
BadOutOfRange | TYPE_INCONSISTENT | 7 |
BadNodeAttributesInvalid | ATTRIBUTE_INCONSISTENT | 8 |
BadDataEncodingInvalid | ATTRIBUTE_INCONSISTENT | 8 |
BadArgumentsMissing | ATTRIBUTE_INCONSISTENT | 8 |
BadDeadbandFilterInvalid | ATTRIBUTE_INCONSISTENT | 8 |
BadAttributeIdInvalid | ATTRIBUTE_INCONSISTENT | 8 |
BadInvalidArgument | ATTRIBUTE_INCONSISTENT | 8 |
BadNotSupported | ACCESS_UNSUPPORTED | 9 |
BadNotWritable | ACCESS_UNSUPPORTED | 9 |
OPC UA Status Name | MMS Status Name | MMS Number |
BadWriteNotSupported | ACCESS_UNSUPPORTED | 9 |
BadNotFound | NON_EXISTENT | 10 |
BadTimeout | TIMEOUT | 11 |
BadRequestTimeout | TIMEOUT | 11 |
DEFAULT | INVALID_ADDRESS | 5 |