7.1 IOLinkDeviceType ObjectType Definition

7.1.1 Example

In Figure 11 an example of an instance of the IOLinkDeviceType is shown. This example is using only the mandatory InstanceDeclarations, and excluding several mandatory Methods, in order to give an overview on the ObjectType. Several Properties are directly connected to the Object, whereas the Parameters are connected via the ParameterSet, Methods via the MethodSet and both organized via different FunctionalGroups (Identification and General).

Figure 11 – Example instance of IOLinkDeviceType (no optional InstanceDeclarations shown and some mandatory Methods left out)

7.1.2 Overview

The IOLinkDeviceType provides the generic information of an IO-Link Device and is formally defined in Table 8.

Table 8 – IOLinkDeviceType Definition
Attribute Value
BrowseNameIOLinkDeviceType
IsAbstractFalse
References Node Class BrowseName DataType TypeDefinition Modelling Rule
Subtype of TopologyElementType defined in OPC 10000-100.
HasComponentObject2:ParameterSetBaseObjectTypeMandatory
HasComponentObject2:MethodSetBaseObjectTypeMandatory
HasComponentObject2:IdentificationFunctionalGroupTypeMandatory
HasComponentObjectGeneralFunctionalGroupTypeMandatory
HasPropertyVariable2:SerialNumberStringPropertyTypeOptional
HasPropertyVariable2:ManufacturerLocalizedTextPropertyTypeMandatory
HasPropertyVariable2:ModelLocalizedTextPropertyTypeMandatory
HasPropertyVariable2:HardwareRevisionStringPropertyTypeOptional
HasPropertyVariable2:SoftwareRevisionStringPropertyTypeOptional
HasComponentVariable2:DeviceHealthDeviceHealthEnumBaseDataVariableTypeOptional
HasPropertyVariableMinCycleTimeDurationPropertyTypeMandatory
HasPropertyVariableRevisionIDStringPropertyTypeMandatory
HasPropertyVariableVendorIDUInt16PropertyTypeMandatory
HasPropertyVariableDeviceIDUInt32PropertyTypeMandatory
HasPropertyVariableDeviceAccessLocksUInt16PropertyTypeOptional
HasPropertyVariableProfileCharacteristicUInt16[]PropertyTypeOptional
HasPropertyVariableVendorTextStringPropertyTypeOptional
HasPropertyVariableProductIDStringPropertyTypeOptional
HasPropertyVariableProductTextStringPropertyTypeOptional
HasComponentObjectAlarmsFolderTypeOptional
GeneratesEventObjectTypeIOLinkDeviceEventTypeDefined in 9.3.
GeneratesEventObjectTypeIOLinkDeviceAlarmTypeDefined in 9.8

The IOLinkDeviceType ObjectType is a concrete type and can be used directly, if the server does not have an IODD describing the device. If the server has such an IODD, a subtype shall be created representing the concrete IODD (see section 7.3 for details).

The ObjectType inherits the following InstanceDeclarations directly or indirectly from the TopologyElementType defined in OPC 10000-100.

The optional Object ParameterSet is used to reference all Parameters and shall be provided. Therefore, the ObjectType overrides the Object and changes the ModellingRule to Mandatory.

The optional Object MethodSet is used to reference all Methods and shall be provided. Therefore, the ObjectType overrides the Object and changes the ModellingRule to Mandatory.

The optional Object Identification shall be provided and shall reference the Parameters defined in Table 9. Those Parameters together uniquely identify the device (see OPC 10000-100 for details). Therefore, the ObjectType overrides the Object and changes the ModellingRule to Mandatory.

Table 9 – References of Identification Object
References BrowseName Comment
OrganizesDeviceIDVariable defined in Table 8.
OrganizesVendorIDVariable defined in Table 8.
Organizes2:SerialNumberVariable defined in Table 8.
OrganizesApplicationSpecificTagVariable defined in Table 12.
OrganizesFunctionTagVariable defined in Table 12.
OrganizesLocationTagVariable defined in Table 12.

The Object <GroupIdentifier> has the ModellingRule OptionalPlaceholder and is intended to group the Parameters. It is already used in the ObjectType to define the General Object.

The optional Object Lock can be supported by a server to provide locking capabilities (see OPC 10000-100 for details). This is intended to prevent different clients and users to configure an IO-Link Device at the same time. The DeviceAccessLocks is used to disable the configuration of an IO-Link Device in general while it is set.

The ObjectType uses some InstanceDeclarations the same way as the DeviceType defined in OPC 10000-100.

The Variable SerialNumber of DataType String shall be mapped to ISDU Index 0x0015 (Serial Number). If the device does not support this ISDU Index, the Variable shall not be provided.

The Variable Manufacturer of DataType LocalizedText shall be mapped to ISDU Index 0x0010 (Vendor Name). As the name is intended to be locale-agnostic in IO-Link, the server may provide it with any LocaleId, the string shall be mapped to the text part of the LocalizedText. If the device does not support this ISDU Index, the VendorID (0x07 and 0x08 of Direct Parameter Page 1) shall be used, and either provided as integer representation in the text-part or by translating it internally to the Vendor Name managed by the IO-Link Community.

The Variable Model of DataType LocalizedText shall be mapped to ISDU Index 0x0012 (Product Name). As the name is intended to be locale-agnostic in IO-Link, the server may provide it with any LocaleId, the string shall be mapped to the text part of the LocalizedText. If the device does not support this ISDU Index, the DeviceID (0x09, 0x0A and 0x0B of Direct Parameter Page 1) shall be used, and provided as integer representation in the text-part.

The Variable HardwareRevision of DataType String shall be mapped to ISDU Index 0x0016 (Hardware Revision). If the device does not support this ISDU Index, the Variable shall not be provided.

The Variable SoftwareRevision of DataType String shall be mapped to ISDU Index 0x0017 (Firmware Revision). If the device does not support this ISDU Index, the Variable shall not be provided.

The Variable DeviceHealth of DataType DeviceHealthEnum shall be mapped to ISDU Index 0x0024 (Device Status). If the device does not support this ISDU Index, the Variable shall not be provided. The mapping of the concrete values is defined in Table 10.

The ObjectType defines additional InstanceDeclarations:

The mandatory Object General shall reference the Parameters and Methods defined in Table 11. It provides Parameters and Methods that are generally available on IO-Link Devices based on the IO-Link Specification.

Table 11 – References of General Object
References BrowseName Comment
OrganizesApplicationSpecificTagVariable defined in Table 12.
OrganizesFunctionTagVariable defined in Table 12.
OrganizesLocationTagVariable defined in Table 12.
OrganizesErrorCountVariable defined in Table 12.
OrganizesDetailedDeviceStatusVariable defined in Table 12.
OrganizesProcessDataOutputVariable defined in Table 12.
OrganizesProcessDataInputVariable defined in Table 12.
OrganizesOffsetTimeVariable defined in Table 12.
OrganizesReadISDUMethod defined in Table 16.
OrganizesWriteISDUMethod defined in Table 16.
OrganizesSystemCommandMethod defined in Table 16.
OrganizesParamUploadFromDeviceStartMethod defined in Table 16.
OrganizesParamUploadFromDeviceStopMethod defined in Table 16.
OrganizesParamDownloadToDeviceStartMethod defined in Table 16.
OrganizesParamDownloadToDeviceStopMethod defined in Table 16.
OrganizesParamDownloadToDeviceStoreMethod defined in Table 16.
OrganizesParamBreakMethod defined in Table 16.
OrganizesDeviceResetMethod defined in Table 16.
OrganizesApplicationResetMethod defined in Table 16.
OrganizesRestoreFactorySettingsMethod defined in Table 16.

The read-only Variable MinCycleTime shall be mapped to address 0x02 of Direct Parameter Page 1. The value shall be mapped to Duration (see 12.2.7.2 for details).

The read-only Variable RevisionID shall be mapped to address 0x04 of Direct Parameter Page 1. The value (one byte) shall be mapped to a String using the following rules: The MajorRev (Bit 4 to 7) shall be mapped to an Integer without leading zeros, the MinorRev (Bit 0 to 3) shall be mapped to an Integer without leading zeros and composed to a String as “<MajorRev>.<MinorRev>”. For example, the RevisionID for IO-Link 1.1 shall become the String “1.1”.

The read-only Variable VendorID shall be mapped to address 0x07 and 0x08 of Direct Parameter Page 1. The value (two bytes) shall be mapped to an UInt16, using Big Endian and 0x07 being the most significant byte (MSB).

The read-only Variable DeviceID shall be mapped to address 0x09, 0x0A and 0x0B of Direct Parameter Page 1. The value (three bytes) shall be mapped to an UInt32 (using the lowest three bytes), using Big Endian and 0x09 being the MSB.

The writable, optional Variable DeviceAccessLocks shall be mapped to ISDU Index 0x000C. The value (RecordT of BooleanT of length 16) shall be mapped to an UInt16, where the lowest bit represents the first Boolean of the record. The Variable gives information whether the parameterization of the device is locked in general, the local parameterization or the local user interface is locked (details see IO-Link Specification). By writing the Variable the locks can also be changed. If the device supports the ISDU Index, the server shall provide the Variable, otherwise it shall not provide the Variable.

The read-only Variable ProfileCharacteristic shall be mapped to ISDU Index 0x000D. The value (array of UIntegerT16) shall be mapped to an array of UInt16. If the device supports the ISDU Index, the server shall provide the Variable, otherwise it shall not provide the Variable.

The read-only Variable VendorText shall be mapped to ISDU Index 0x0011. The value (StringT) shall be mapped to a String. If the device supports the ISDU Index, the server shall provide the Variable, otherwise it shall not provide the Variable.

The read-only Variable ProductID shall be mapped to ISDU Index 0x0013. The value (StringT) shall be mapped to a String. If the device supports the ISDU Index, the server shall provide the Variable, otherwise it shall not provide the Variable.

The read-only Variable ProductText shall be mapped to ISDU Index 0x0014. The value (StringT) shall be mapped to a String. If the device supports the ISDU Index, the server shall provide the Variable, otherwise it shall not provide the Variable.

The optional Alarms Object is used to group all alarms of the instance, in case the server supports representing the alarms as Objects in the AddressSpace. If the server does not support this, the Object shall not be provided.

7.1.3 Variables of ParameterSet

In Table 12, the Parameters of the ObjectType, referenced via the ParameterSet Object, are defined.

Table 12 – ParameterSet of IOLinkDeviceType
References Node Class BrowseName DataType TypeDefinition Modelling Rule
The following Parameters are also referenced by the Identification Object
HasComponentVariableApplicationSpecificTagStringBaseDataVariableTypeMandatory
HasComponentVariableFunctionTagStringBaseDataVariableTypeMandatory
HasComponentVariableLocationTagStringBaseDataVariableTypeMandatory
The following Parameters are also referenced by the General Object
HasComponentVariableErrorCountUInt16BaseDataVariableTypeOptional
HasComponentVariableDetailedDeviceStatusByte[][3]BaseDataVariableTypeOptional
HasComponentVariableProcessDataOutputByte[]ProcessDataVariableTypeMandatory
HasComponentVariableProcessDataInputByte[]ProcessDataVariableTypeMandatory
HasComponentVariableOffsetTimeDurationBaseDataVariableTypeOptional

The writeable Variable ApplicationSpecificTag shall be mapped to ISDU Index 0x0018. If the device does not support this ISDU Index, the server shall provide the Variable nevertheless as it can be written by the client. The server shall persist the value, i.e. the value shall still be available after restart of the server. It is recommended to use the default value “***”. To allow clients to distinguish if the ApplicationSpecificTag is managed in the device or by the server, the Variable contains the read-only Property StoredInDevice as defined in Table 13. The value shall be “True” if the IO-Link Device supports the Index, and “False” otherwise.

Note: If the ISDU Index 0x0018 exists but its value is not permanently stored in the device, the server shall nevertheless not store the value persistently.

Table 13 – Properties of ApplicationSpecificTag
References Node Class BrowseName DataType TypeDefinition Modelling Rule
HasPropertyVariableStoredInDeviceBooleanPropertyTypeMandatory

The writeable Variable FunctionTag shall be mapped to ISDU Index 0x0019. If the device does not support this ISDU Index, the server shall provide the Variable nevertheless as it can be written by the client. The server shall persist the value, i.e. the value shall still be available after restart of the server. It is recommended to use the default value “***”. To allow clients to distinguish if the FunctionTag is managed in the device or by the server, the Variable contains the read-only Property StoredInDevice as defined in Table 14. The value shall be “True” if the device supports the Index, and “False” otherwise.

Note: If the ISDU Index 0x0019 exists but its value is not permanently stored in the device, the server shall nevertheless not store the value persistently.

Table 14 – Properties of FunctionTag
References Node Class BrowseName DataType TypeDefinition Modelling Rule
HasPropertyVariableStoredInDeviceBooleanPropertyTypeMandatory

The writeable Variable LocationTag shall be mapped to ISDU Index 0x001A. If the device does not support this ISDU Index, the server shall provide the Variable nevertheless as it can be written by the client. The server shall persist the value, i.e. the value shall still be available after restart of the server. It is recommended to use the default value “***”. To allow clients to distinguish if the LocationTag is managed in the device or by the server, the Variable contains the read-only Property StoredInDevice as defined in Table 15. The value shall be “True” if the device supports the Index, and “False” otherwise.

Note: If the ISDU Index 0x001A exists but its value is not permanently stored in the device, the server shall nevertheless not store the value persistently.

Table 15 – Properties of LocationTag
References Node Class BrowseName DataType TypeDefinition Modelling Rule
HasPropertyVariableStoredInDeviceBooleanPropertyTypeMandatory

The read-only Variable ErrorCount shall be mapped to ISDU Index 0x0020. The value (UIntegerT of length 16) shall be mapped to an UInt16. If the device supports the ISDU Index, the server shall provide the Variable, otherwise it shall not provide the Variable.

The read-only Variable DetailedDeviceStatus shall be mapped to ISDU Index 0x0025. The value (ArrayT of OctetStringT3) shall be mapped to an Array of an Array of Bytes having the length of 3 (the inner Array). (The OctetStringT3 is mapped to an Array of Bytes of length 3 and the ArrayT to an Array.) The first entry in the inner Array is the first octet. If the device supports the ISDU Index, the server shall provide the Variable, otherwise it shall not provide the Variable.

The read-only Variable ProcessDataInput shall be mapped to the cyclically data transferred from the device. The value shall be mapped to a Byte[]. The Variable is of type ProcessDataVariableType (see section 10.1). The ProcessDataLength Variable of ProcessDataVariableType shall be mapped to address 0x05 of Direct Parameter Page 1. The PDDescriptor Variable of ProcessDataVarableType shall be mapped to ISDU Index 0x000E if the device supports the ISDU Index, otherwise the optional Variable shall not be provided. If the PD status of the cyclic communication is set to 1 (invalid data), the StatusCode of the ProcessDataInput shall become a bad code.

The Variable ProcessDataOutput shall be mapped to the cyclically data transferred to the device. It is vendor-specific, if the Variable is writeable. The value shall be mapped to a Byte[]. The Variable is of type ProcessDataVariableType (see section 10.1). The ProcessDataLength Variable of ProcessDataVariableType shall be mapped to address 0x06 of Direct Parameter Page 1. The PDDescriptor Variable of ProcessDataVarableType shall be mapped to ISDU Index 0x000F if the device supports the ISDU Index, otherwise the optional Variable shall not be provided. If the IO-Link Device has not received the IO-Link Master command ‘ProcessDataOutputOperate’, the StatusCode of the ProcessDataOutput shall become a bad code

The optional, writable Variable OffsetTime shall be mapped to ISDU Index 0x0030. The value shall be mapped to Duration (see 12.2.7.2 for details). If the device supports the ISDU Index, the server shall provide the Variable, otherwise it shall not provide the Variable.

7.1.4 Methods of MethodSet

In Table 16, the Methods of the ObjectType, referenced via the MethodSet Object are defined. The first three Methods provide access rather on the protocol level and require the user calling the Methods to understand those protocol-level data transfers. The other Methods are specific IO-Link system commands mapped to OPC UA Methods.

Table 16 – MethodSet of IOLinkDeviceType
References Node Class BrowseName Modelling Rule
The following Methods are also referenced by the General Object
HasComponentMethodReadISDUMandatory
HasComponentMethodWriteISDUMandatory
HasComponentMethodSystemCommandMandatory
HasComponentMethodParamUploadFromDeviceStartMandatory
HasComponentMethodParamUploadFromDeviceStopMandatory
HasComponentMethodParamDownloadToDeviceStartMandatory
HasComponentMethodParamDownloadToDeviceStopMandatory
HasComponentMethodParamDownloadToDeviceStoreMandatory
HasComponentMethodParamBreakMandatory
HasComponentMethodDeviceResetMandatory
HasComponentMethodApplicationResetMandatory
HasComponentMethodRestoreFactorySettingsMandatory
7.1.4.1 ReadISDU

The Method ReadISDU reads parameters from the device using the ISDU mechanism.

Signature

	ReadISDU (
		[in]	UInt16		Index,
		[in]	Byte			SubIndex,
		[out]	Byte[]		Result,
		[out]	UInt16		ErrorType,
		[out]	Int32			Status
		);
	
Argument Description
IndexIndex, 8-bit index and 16-bit index are both mapped to UInt16
SubIndexSubIndex, set to 0 if not used
ResultHex Values returned as data in case of a successful operation. Data needs to be interpreted according to the IO-Link Specification. Empty array if operation was not successful.
ErrorTypeHex Values converted to UInt16 returned as ErrorType in case the operation was not successful. Data needs to be interpreted according to the IO-Link Specification. 0 if the operation was successful.
Status

Returns the status of the operation.

0: OK, operation successful

-1: Operation already running, either by same or different ISDU read or write

-2: Device not active, either device not connected, not in operation mode or port is configured not to be in IO-Link mode

-3: Operation executed but error code returned from device, details are provided in ErrorType

7.1.4.2 WriteISDU

The Method WriteISDU writes parameters on the device using the ISDU mechanism.

Signature

	WriteISDU (
		[in]	UInt16		Index,
		[in]	Byte			SubIndex,
		[in]	Byte[]		Data,
		[out]	UInt16		ErrorType,
		[out]	Int32			Status
		);
	
Argument Description
IndexIndex, 8-bit index and 16-bit index are both mapped to UInt16
SubIndexSubIndex, set to 0 if not used
DataHex Values that need to be composed according to the IO-Link Specification
ErrorTypeHex Values converted to UInt16 returned as ErrorType in case the operation was not successful. Data needs to be interpreted according to the IO-Link Specification. 0 if the operation was successful.
Status

Returns the status of the operation.

0: OK, operation successful

-1: Operation already running, either by same or different ISDU read or write

-2: Device not active, either device not connected, not in operation mode or port is configured not to be in IO-Link mode

-3: Operation executed but error code returned from device, details are provided in ErrorType

7.1.4.3 SystemCommand

The method SystemCommand executes an IO-Link SystemCommand as defined in IO-Link Specification.

IO-Link SystemCommands shall be executed by an ISDU write request on Index 0x0002, or, in case ISDUs are not supported, via a write on Index 0x0F on Direct Parameter Page 1.

Signature

	SystemCommand (
		[in]	Byte				Cmd,
		[out]	UInt16			ErrorType,
		[out]	Int32				Status
		);
	
Argument Description
CmdIndex of the SystemCommand
ErrorType

Hex Values converted to UInt16 returned as ErrorType in case the operation was not successful. Data needs to be interpreted according to the IO-Link Specification. 0 if the operation was successful.

Note that in case the device supports no ISDUs and the SystemCommand is triggered via writing Parameter Page 1, no indication of a positive or negative response is provided and the ErrorType is always 0.

Note that the SystemCommand is optional. In case the IO-Link Device does not support it, the ErrorType returned by the IO-Link Device shall be returned.

Status

Returns the status of the operation.

0: OK, operation successful

-1: Operation already running, either by same or different ISDU read or write

-2: Device not active, either device not connected, not in operation mode or port is configured not to be in IO-Link mode

-3: Operation executed but error code returned from device, details are provided in ErrorType

7.1.4.4 ParamUploadFromDeviceStart

This method executes the SystemCommand 0x01.

Signature

	ParamUploadFromDeviceStart (
		[out]	UInt16			ErrorType,
		[out]	Int32				Status
		);
	
Argument Description
ErrorType

Hex Values converted to UInt16 returned as ErrorType in case the operation was not successful. Data needs to be interpreted according to the IO-Link Specification. 0 if the operation was successful.

Note that in case the device supports no ISDUs and the SystemCommand is triggered via writing Parameter Page 1, no indication of a positive or negative response is provided and the ErrorType is always a 0.

Status

Returns the status of the operation.

0: OK, operation successful

-1: Operation already running, either by same or different ISDU read or write

-2: Device not active, either device not connected, not in operation mode or port is configured not to be in IO-Link mode

-3: Operation executed but error code returned from device, details are provided in ErrorType

7.1.4.5 ParamUploadFromDeviceStop

This method executes the SystemCommand 0x02. The same argument description as for ParamUploadFromDeviceStart (see 7.1.4.4) applies.

Signature

	ParamUploadFromDeviceStop (
		[out]	UInt16			ErrorType,
		[out]	Int32				Status
		);
	
7.1.4.6 ParamDownloadToDeviceStart

This method executes the SystemCommand 0x03. The same argument description as for ParamUploadFromDeviceStart (see 7.1.4.4) applies.

Signature

	ParamDownloadToDeviceStart (
		[out]	UInt16			ErrorType,
		[out]	Int32				Status
		);
	
7.1.4.7 ParamDownloadToDeviceStop

This method executes the SystemCommand 0x04. The same argument description as for ParamUploadFromDeviceStart (see 7.1.4.4) applies.

Signature

	ParamDownloadToDeviceStop (
		[out]	UInt16			ErrorType,
		[out]	Int32				Status
		);
	
7.1.4.8 ParamDownloadToDeviceStore

This method executes the SystemCommand 0x05. The same argument description as for ParamUploadFromDeviceStart (see 7.1.4.4) applies.

Signature

	ParamDownloadToDeviceStore (
		[out]	UInt16			ErrorType,
		[out]	Int32				Status
		);
	
7.1.4.9 ParamBreak

This method executes the SystemCommand 0x06. The same argument description as for ParamUploadFromDeviceStart (see 7.1.4.4) applies.

Signature

	ParamBreak (
		[out]	UInt16			ErrorType,
		[out]	Int32				Status
		);
	
7.1.4.10 DeviceReset

This method executes the SystemCommand 0x80. The same argument description as for ParamUploadFromDeviceStart (see 7.1.4.4) applies.

Signature

	DeviceReset (
		[out]	UInt16			ErrorType,
		[out]	Int32				Status
		);
	
7.1.4.11 ApplicationReset

This method executes the SystemCommand 0x81. The same argument description as for ParamUploadFromDeviceStart (see 7.1.4.4) applies.

Signature

	ApplicationReset (
		[out]	UInt16			ErrorType,
		[out]	Int32				Status
		);
	
7.1.4.12 RestoreFactorySettings

This method executes the SystemCommand 0x82. The same argument description as for ParamUploadFromDeviceStart (see 7.1.4.4) applies.

Signature

	RestoreFactorySettings (
		[out]	UInt16			ErrorType,
		[out]	Int32				Status
		);