Accessing IO-Link parameters

The exchange of the acyclic data takes place via a specified index and subindex range that is device-specific and can be read about in the corresponding vendor documentation.

Parameter data exchange

An intelligent IO-Link sensor/actuator (in the previous figure marked "Sensor (IO-Link Device)") can support parameterization by SPDU (Service Protocol Data Units). The PLC must explicitly query or, when marked as such, send these acyclic service data.

SPDU access

TwinCAT supports access via ADS and via the EP6224-xxxxxx CoE directory.

The respective parameter is addressed via the so-called SPDU index. The following ranges are available:


Index range









Preferred Index


Extended Index



the range 0x4000..0xFFFF is reserved

The use of the implementation of these ranges is the responsibility of the sensor/actuator vendor. In the interest of clarity, only a few possible indices with names are listed here. Please refer to the corresponding chapter "Object description and parameterization".




Vendor Name


Vendor Text


Product Name


Product ID


Serial Number


Hardware Revision


Firmware Revision




Communication relating to IO-Link demand data is initiated via an ADS command. An ADS address always consists of a NetID and PortNo. TwinCAT forwards an ADS command to the EP6224 Box module via AoE (ADS over EtherCAT). From where the command is relayed to the IO-Link master section and therefore to the data channel.


The EP6224 is assigned a dedicated AoE-NetID for communication with the IO-Link master section. This is assigned by the configuration tool (see the figure below).

Accessing IO-Link parameters 1:
AoE-NetID allocation


The individual IO-Link ports for the master are allocated via the port number. The port numbers are allocated in ascending order from 0x1000. I.e. IO-Link Port1 === PortNo 0x1000 and IO-Link Portn === PortNo 0x1000 + n-1.
The following specification applies for the EP6224 (4-port IO-Link master):
IO-Link Port1 === PortNo 0x1000
IO-Link Port2 === PortNo 0x1001
IO-Link Port3 === PortNo 0x1002
IO-Link Port4 === PortNo 0x1003

ADS Indexgroup

As for CoE, the Indexgroup of an ADS command is specified as 0xF302 for the IO link data channel.

ADS Indexoffset

The IO link addressing with index and subindex is coded in the Indexoffset. The Indexoffset has a size of 4 bytes and is subdivided as follows: 2-byte index, 1-byte reserve, 1-byte subindex.

  • Example: Indexoffset 0x12340056 corresponds to index 0x1234 and subindex 56

Example with ADS monitor

Reading of the Application-Specific Name, index 0x0018 subindex 0x00 (see figure below).

Accessing IO-Link parameters 2:
Reading of the Application-Specific Name

Example showing the principle in the code

Reading of Application-Specific Name, index 0x0018 subindex 0x00 at IO-Link Port2.
AmsAddr adsAdr;
adsAdr.netId.b[0] = 0x0A; //AoE-NetID of EP6224
adsAdr.netId.b[1] = 0x03; //AoE-NetID of EP6224
adsAdr.netId.b[2] = 0x02; //AoE-NetID of EP6224
adsAdr.netId.b[3] = 0x16; //AoE-NetID of EP6224
adsAdr.netId.b[4] = 0x02; //AoE-NetID of EP6224
adsAdr.netId.b[5] = 0x03; //AoE-NetID of EP6224
adsAdr.port = 0x1001; //IO-Link Port2
errCode = AdsSyncReadReq(&adsAdr, 0xF302, 0x00180000, 100, &pReadBuffer);