The IODD data types IntegerT and UIntegerT are mapped to OPC UA DataTypes in different ways, depending on various elements of the IODD.
- If no SingleValue and no ValueRange is defined the DataType depends on the bitLength according to Table 63. If the value can directly be mapped to a Variable (see 12.3), the VariableType BaseDataVariableType is used. If the bitLength does not directly fit into an OPC UA DataType (all bitLengths except 8, 16, 32 and 64) the Variable shall contain a Property called InstrumentRange as defined in OPC 10000-8 for AnalogItemVariableType using the same BrowseName and DataType. In case of an unsigned integer the low value shall be 0 and the high value according to the bitLength (e.g. 127 for bitLength 7). In case of a signed integer the low and high value shall be according to the bitLength (e.g. bitLength 7 leads to low = -63 and high = 63).
Table 63 – Mapping of Integer and UInteger data types
IO-Link data type |
IO-Link bitLength |
OPC UA DataType |
UIntegerT |
2..8 |
Byte |
9..16 |
UInt16 |
17..32 |
UInt32 |
33..64 |
UInt64 |
IntegerT |
2..8 |
SByte |
9..16 |
Int16 |
17..32 |
Int32 |
33..64 |
Int64 |
- If no SingleValue and exactly one ValueRange is defined, the same mapping as defined in (1) is used, except for the InstrumentRange Property. The InstrumentRange shall always be provided and be filled according to the ValueRange definition.
- If at least one SingleValue is defined and no ValueRange is defined:
- If all SingleValue values fit into the range of an Int32, an OPC UA Enumeration DataType is created, containing all SingleValue entries of the IODD definition in the EnumValues Property (see section 13). If the value can directly be mapped to a Variable (see section 12.3), the VariableType BaseDataVariableType shall be used
- If not all SingleValue values fit into the range of an Int32, the same mapping as defined in (1) is used with the following exceptions. If the value can directly be mapped to a Variable (see section 12.3), the VariableType MultiStateValueDiscreteType shall be used, and the EnumValues are filled according to the SingleValue entries (see section 13). The InstrumentRange Property is provided as according to (1).
- If no SingleValue and more than one ValueRange is defined the same mapping as defined in (1) is used with the following exceptions. If the value can directly be mapped to a Variable (see section 12.3), in addition to potentially providing the InstrumentRange Property (depending on the bitLength) another Property InstrumentRanges (see section 13) is provided, containing an array of ranges, one entry for each ValueRange defined in the IODD.
- If at least one SingleValue and exactly one ValueRange is defined the same mapping as defined in (2) is used with the following exceptions. If the value can directly be mapped to a Variable (see section 12.3), an additional Property EnumValues (same as defined on MultiStateValueDiscreteType in OPC 10000-8) is provided, with one entry for each SingleValue (see 13).
- If at least one SingleValue and more than one ValueRange is defined the same mapping as defined in (1) is used with the following exceptions. If the value can directly be mapped to a Variable (see section 12.3), an additional Property EnumValues (same as defined on MultiStateValueDiscreteType in OPC 10000-8) is provided, with one entry for each SingleValue defined in the IODD, and in addition to potentially providing the InstrumentRange Property (depending on the bitLength) another Property InstrumentRanges (see section 13) is provided, containing an array of ranges, one entry for each ValueRange defined in the IODD.
Note: Due to the meta data provided in the IODD an OPC UA Server can already identify that a write operation to a device will fail if the value is out of range. It is recommended that OPC UA Servers already check the value to avoid unnecessary communication to the IO-Link Device.