Resolving LIOLink_Device Error 16#8602 on ET200SP CM 4xIOLink

David Krause12 min read
I/O ModulesSiemensTroubleshooting
Licensed PE Working through this on a live machine? A Maine-licensed engineer can take it from here — included with IMD hardware, by the hour for everything else. Book an engineer

Problem Description

When integrating an ET 200SP CM 4xIOLink communication module (article number 6ES7147-5JD00-0BA0) into a STEP 7 / TIA Portal project and pairing it with the LIOLink_Device function block from the Siemens IO-Link library, acyclic parameter reads against an attached IO-Link device return the following fault signature:

  • Block status output ERROR = TRUE
  • Block status output STATUS = 16#8602
  • Internal RDREC subfunction error = DE80_B000 (per the TIA Portal online help, this corresponds to "WRREC / RDREC: Index invalid")

The fault reproduces regardless of whether the LIOLink_Device instance was inserted manually or generated from the IO-Link device description (IODD). On the same controller, the identical block instance, identical hardware identifier (hwID), and identical sensor (IFM O1D100 distance / level sensor) work without modification when the master is swapped to a Lumberg IO-Link master using a CAP value of -19456. This controlled comparison isolates the failure to the CAP (Channel Access Point) parameter, not to the IOLink_Device block itself, the RDREC primitive, or the IODD import.

Field observation: The TIA Portal help text for LIOLink_Device states that CAP = 0 forces the block to autodetect the access point. On the ET 200SP CM 4xIOLink this autodetection does not resolve a valid value, so the block forwards the RDREC call to a non-existent submodule index and receives DE80_B000 from the head-end firmware.

Error Code Reference

The combined fault surface must be read in two layers: the LIOLink_Device user-facing status and the embedded RDREC return value.

Code Layer Meaning (per TIA Portal help) Likely cause in this scenario
16#8602 LIOLink_Device STATUS Acyclic parameter access to the IO-Link device failed at the master / PROFINET layer RDREC was directed at the wrong submodule / access point because CAP was left at 0 or set to the wrong master
DE80_B000 Internal RDREC subfunction error "Index invalid" – the record index 0xB000 does not exist in the addressed submodule CAP 0 (autodetect) resolved to a submodule that does not expose index 0xB000 (ISDU read request), so the firmware rejected the record
16#8601 LIOLink_Device STATUS Device is in a wrong state (e.g. not in OPERATE) or master not yet commissioned Power-up race condition – verify after the CM 4xIOLink port status LED is green
16#8603 LIOLink_Device STATUS ISDU response timeout from the IO-Link device Wiring or port-configuration mismatch (3-wire vs 5-wire) – see ET 200SP IO-Link Master manual

The pairing 16#8602 + DE80_B000 is the diagnostic fingerprint of a CAP mismatch on the CM 4xIOLink. Status 16#8601 or 16#8603 with a clean DE80 status would point instead to commissioning or wiring problems.

Root Cause Analysis

The CAP input of LIOLink_Device is the decimal equivalent of the IO-Link master's acyclic access point. It is the value the internal RDREC uses to address the PROFINET submodule slot / sub-slot that owns the IO-Link port's ISDU service. On the ET 200SP CM 4xIOLink, the IO-Link function lives in subslot 1 of the head module's IO-Link submodule; the corresponding acyclic access point is decimal 227 (hex 0xE3). This value is documented in the ET 200SP IO-Link Master manual in the section covering acyclic data exchange via RDREC / WRREC.

The autodetect branch of LIOLink_Device (CAP = 0) only succeeds when the master publishes its IO-Link access point in a way the Siemens library recognises. The ET 200SP CM 4xIOLink does publish the value, but the autodetect path has a known limitation: if the device IODD is added with multiple port mappings, the library may resolve the wrong slot. Manually forcing the known-good value of 227 bypasses autodetect entirely and addresses the IO-Link master submodule directly.

For the Lumberg IO-Link master in the comparison test, the access point is -19456 (hex 0xB400), reflecting a signed-16-bit address used by the third-party PROFINET profile. The two values are not interchangeable.

Solution: Configure CAP = 227 on LIOLink_Device

  1. Open the LIOLink_Device instance DB in the TIA Portal project tree (typically under Program blocks > System blocks > LIOLink_Device_Instance).
  2. Open the instance DB and locate the input CAP (DINT, default 0).
  3. Set CAP = 227.
  4. Recompile the program and download to the CPU (S7-1200 / S7-1500 / ET 200SP CPU).
  5. Restart the LIOLink_Device instance (REQ rising edge) and observe STATUS.
Do not leave CAP = 0 on the CM 4xIOLink. The autodetect path is unreliable for this head module in current library revisions. The CAP value must be entered as a constant at the input of the instance DB; assigning it from a tag at runtime works but defeats the point of the static configuration.

After the change, RDREC is issued against the correct submodule and index 0xB000 (the ISDU read request record). The head-end firmware accepts the record, the IO-Link master forwards the ISDU service to the device, and LIOLink_Device returns the requested parameter with STATUS = 16#0000.

ET 200SP CM 4xIOLink Hardware Reference

The CM 4xIOLink is a four-port IO-Link master in the ET 200SP form factor. The technical data most relevant to acyclic parameter access is summarised below; full specifications are in the TIA Portal technical specifications page for 6ES7147-5JD00-0BA0 and the ET 200SP IO-Link Master manual (PDF).

Parameter Value
Article number 6ES7147-5JD00-0BA0
Number of IO-Link ports 4
Simultaneously controllable 4
IO-Link protocol V1.0 and V1.1
Port connector M12, A-coded
Wiring 3-wire and 5-wire per terminal assignment in the manual block diagram
PROFINET interface Via ET 200SP head module (IM / CPU)
Acyclic access point (CAP) 227 (decimal) / 0xE3 (hex) – IO-Link master function
Port status LED colours Green = port active, Flashing green = no device, Red = fault

IO-Link Master CAP Value Cross-Reference

The CAP value is not universal. It is the decimal access point of the IO-Link master submodule within the PROFINET device model. The table lists the values that have been verified in the field or documented by the manufacturer; the list is not exhaustive.

IO-Link master Family Recommended CAP Notes
SIMATIC ET 200SP CM 4xIOLink (6ES7147-5JD00-0BA0) Siemens 227 Head-end IO-Link function submodule; verified per Siemens support
SIMATIC ET 200AL CM 4xIOLink Siemens 227 (verify against manual) Same firmware family; confirm against manual
Lumberg LioN-P IO-Link master Lumberg / Belden -19456 (0xB400 signed) Third-party PROFINET profile; signed-16-bit representation
Balluff BNI EIP IO-Link master Balluff 0 (autodetect) – or vendor-specific EtherNet/IP variant, separate parameter model
Phoenix Contact AXL F IOL8 Phoenix Contact Vendor-specific – see reference Axioline, not ET 200SP
Best practice: When the LIOLink_Device block is reused across machines with different master types, drive the CAP from a project-specific constant DB rather than hard-coding it inside the instance DB. This makes the value auditable in the commissioning checklist and prevents the symptom from recurring when the project is copied to a new machine.

LIOLink_Device Block Interface

The LIOLink_Device block is the Siemens library wrapper around RDREC for IO-Link ISDU services. The inputs that matter for this fault are summarised below; full interface is in the library documentation that ships with TIA Portal.

Input Type Default Purpose
HW_ID HW_IO 0 Hardware identifier of the IO-Link master PROFINET submodule
CAP DINT 0 Channel Access Point (decimal) of the IO-Link master submodule; 0 = autodetect
PORT UINT 0 IO-Link port number on the master (1..4 for CM 4xIOLink)
INDEX UINT 0 ISDU index of the parameter to read/write
SUBINDEX UINT 0 ISDU sub-index of the parameter
REQ BOOL FALSE Rising edge triggers an acyclic service

For an O1D100 read of, e.g., process data or a parameter such as the switching output configuration, INDEX is the ISDU index defined in the IODD. The CAP must be 227; PORT is 1 for the first physical port on the head module.

O1D100 Device Notes

The IFM O1D100 is a time-of-flight distance / level sensor with an IO-Link interface (V1.0 / V1.1 depending on firmware revision). It exposes a wide ISDU parameter set – switching output mode, output logic, measurement range, filter, hysteresis – all accessible through LIOLink_Device. When the CAP is wrong, no ISDU index is reachable, which is why DE80_B000 ("Index invalid") is reported on the very first read attempt: the RDREC never reaches the device, it is rejected at the head-end.

Once CAP = 227 is in place, typical commissioning reads are:

  • Read device identification (index 0x0018 / sub-index 0) – returns vendor, product, serial, firmware.
  • Read process data length and content (index 0x0028) – for the O1D100 distance value in mm.
  • Configure switching output (index 0x003C) – window mode, NO/NC, hysteresis.
Always validate the IODD version installed in TIA Portal matches the O1D100 firmware. A mismatch produces 16#8603 (ISDU timeout) rather than the 16#8602 / DE80_B000 signature discussed here, but the two faults are easy to confuse in the field.

Verification Procedure

  1. After downloading the project with CAP = 227, place the CPU in RUN.
  2. Trigger a single read on the LIOLink_Device instance (rising edge on REQ).
  3. Monitor STATUS on the instance DB. Expected value: 16#0000 on a successful read.
  4. Confirm the returned data length in LEN matches the ISDU response size declared in the IODD.
  5. Repeat the read several times in the watch table to confirm consistency. A first-call success followed by intermittent 16#8602 indicates the autodetect branch is being re-entered – verify CAP has not been overwritten at runtime.
  6. Cross-check the CM 4xIOLink port LED: solid green on port 1 confirms the O1D100 is in OPERATE and ISDU services are available.

Troubleshooting Matrix

Symptom Most likely cause Fix
16#8602 + DE80_B000 on CM 4xIOLink, autodetect CAP = 0 Autodetect cannot resolve the IO-Link master access point on this head module Set CAP = 227
16#8602 + DE80_B000 on Lumberg master with CAP = 227 Wrong master profile addressed Set CAP = -19456 for Lumberg; restore CAP = 227 only when returning to the CM 4xIOLink
16#8601 after CAP fix Master or port not yet in OPERATE (power-up race) Delay first REQ until port LED is solid green; add a startup gate of > 2 s
16#8603 after CAP fix IODD / firmware mismatch, or wiring fault (3-wire vs 5-wire on the O1D100) Re-import the correct IODD; verify terminal assignment per the manual
STATUS = 16#7002 (busy) for > 10 s then timeout Port powered down or device disconnected Check 24 V supply at the M12 port; check port LED
STATUS = 16#8602 on a write (WRREC path) with CAP = 227 Index / sub-index is read-only on the O1D100, or the parameter is write-protected Verify access rights in the IODD; consult the O1D100 manual for writable ISDU list

Commissioning Checklist for CM 4xIOLink + LIOLink_Device

  1. Verify article number 6ES7147-5JD00-0BA0 in the device configuration matches the installed module.
  2. Configure all four ports in the device view: port mode (IO-Link, DI, DO), IODD assignment, validation settings.
  3. Download the hardware configuration and confirm the port LEDs reach the expected state.
  4. Insert LIOLink_Device from the Siemens IO-Link library (TIA Portal > Options > Manage Library).
  5. Wire the O1D100 (or other device) to port 1 with the correct 3-wire / 5-wire assignment.
  6. Set CAP = 227 on the instance DB before the first REQ pulse.
  7. Run a diagnostic watch table that monitors STATUS, BUSY, ERROR, and the port status byte from the diagnostic data record.
  8. Document the CAP value in the project comments so the next commissioning engineer sees it immediately.

Safety and Operational Notes

The CM 4xIOLink is a standard I/O module without integrated functional safety. IO-Link parameter access via LIOLink_Device is for commissioning, diagnostics, and configuration; it must not be used as the primary means of changing process-critical parameters during a live run without a risk assessment. If the O1D100 switching output drives a safety-relevant function, validate the change in a controlled sequence and re-arm the safety chain if required by the machine's safety design.

What does LIOLink_Device error 16#8602 mean on a Siemens CM 4xIOLink?

It indicates an acyclic parameter read or write failed at the IO-Link master / PROFINET layer. On the ET 200SP CM 4xIOLink (6ES7147-5JD00-0BA0), the most common cause is an unresolved Channel Access Point – the block's CAP input is at 0 (autodetect) and the autodetect path does not return a valid value. The accompanying internal RDREC subfunction error DE80_B000 ("Index invalid") confirms the record was sent to the wrong submodule. The fix is to set CAP = 227.

What CAP value should I use for the ET 200SP CM 4xIOLink?

Set CAP = 227 on the LIOLink_Device instance. This is the decimal access point of the IO-Link master function submodule in the ET 200SP PROFINET device model, and it is the value Siemens support confirmed as correct for the CM 4xIOLink (6ES7147-5JD00-0BA0). The same value typically applies to the ET 200AL CM 4xIOLink family – confirm against the ET 200SP IO-Link Master manual for the specific revision in use.

Why does the same LIOLink_Device block work on a Lumberg IO-Link master but not on the CM 4xIOLink?

The CAP value is master-specific. The Lumberg IO-Link master uses a third-party PROFINET profile with a signed-16-bit access point of -19456 (hex 0xB400). The CM 4xIOLink uses the Siemens profile with access point 227 (hex 0xE3). A CAP value of -19456 sent to the CM 4xIOLink points at a non-existent submodule and the head-end firmware returns DE80_B000 ("Index invalid"), which the LIOLink_Device surfaces as 16#8602. Always match the CAP to the installed master, or drive it from a project-specific constant DB if multiple masters are used.

Can I leave CAP = 0 and let the LIOLink_Device autodetect?

Not reliably on the CM 4xIOLink. Autodetect (CAP = 0) works for some Siemens masters, but in field experience the CM 4xIOLink does not always resolve a valid access point through autodetect, particularly when the project contains multiple IODDs or when the master is paired with an ET 200SP CPU rather than an external S7-1500. For repeatable commissioning, hard-code CAP = 227 and document the value in the project comments.

How do I verify the fix is in place after setting CAP = 227?

Trigger a single REQ edge on the LIOLink_Device instance and monitor the STATUS output. A successful ISDU read returns STATUS = 16#0000. The port LED on the CM 4xIOLink should be solid green for the addressed port (port 1 in the original fault). Repeat the read several times in the watch table to confirm consistency. If STATUS returns 16#8603 instead, the CAP fix is in place but the IODD or wiring needs attention – the TIA Portal technical specifications and the ET 200SP IO-Link Master manual cover the 3-wire / 5-wire assignment and the IODD version requirements.

Back to blog