Problem Overview
When a Siemens ET 200SP CM 4xIO-Link communication module (6ES7 137-6BD00-0BA0) is connected to a Festo solenoid valve manifold and the LIOLlink_Diagnose function block is executed from the IO-Link Function Block Library, two failure modes appear repeatedly in field reports:
- The FB stays in the
BUSYstate indefinitely and never assertsDONEorERROR. - The FB returns
DONEbut the diagnostic buffer (DIAG) is empty; pulling the manifold from the IO-Link port produces no status code, no error flag, and no event change in the HMI alarm list.
Both symptoms are almost always caused by the same root cause: the REQ input on the FB is not edge-triggered, so the request is continuously re-asserted on every OB1 cycle. The IO-Link master interprets this as a never-ending diagnostic request and the busy state never clears. The second symptom is a side effect: when the FB cannot reissue a request, it cannot re-poll the port, so a disconnect that occurs after the first successful read is never observed in the cached DIAG buffer.
This article walks through the proper way to call the LIOLlink_Diagnose FB, including the full interface, the meaning of cap = 227, the diagnostic data structure returned, the reason a held REQ input hangs the block, the code patterns that fix it, and the commissioning checks that prove the link is healthy. Reference material is drawn from the Siemens application document IO-Link Diagnostics and the IO-Link technology primer Understanding how IO-Link works published by IFM.
CM 4xIO-Link Module Technical Specifications
The CM 4xIO-Link (Siemens part number 6ES7 137-6BD00-0BA0) is a SIMATIC ET 200SP communication module that provides four independent IO-Link master ports (channels 0 to 3), each conforming to the Single-Drop Digital Communication Interface (SDCI) standard IEC 61131-9. The module is plugged into a TM-E or TM-P terminal module on an ET 200SP station, headed by an interface module such as the IM 155-6 PN HF.
| Parameter | Value |
|---|---|
| Article number | 6ES7 137-6BD00-0BA0 |
| Module family | SIMATIC ET 200SP |
| Function | CM 4xIO-Link master |
| Number of IO-Link ports | 4 (X1 to X4, addressed as PORT 0..3) |
| IO-Link specification | V1.0 and V1.1 (backward compatible) |
| Port type | Class A (3-wire, L+ / L- / C/Q) |
| Maximum cable length per port | 20 m |
| Transmission rates | 4.8 kbaud (COM1), 38.4 kbaud (COM2), 230.4 kbaud (COM3) |
| Process data width | Up to 32 bytes per port (input + output) |
| Diagnostic interrupt | Yes, channel-granular, mapped to OB82 |
| Function blocks provided | LIOLlink_Diagnose, LIOLink_Master, LIOLink_Device, LIOLink_Port |
| Firmware version recommended | V2.2.x or higher (required for LIOLlink_Diagnose V2) |
| Configuration in TIA Portal | Via the device configurator of the IM 155-6 |
| Power supply | 24 V DC from the base unit (power) |
For the product-specific manual and firmware download, search the article number 6ES7 137-6BD00-0BA0 on the Siemens Industry Online Support portal at support.industry.siemens.com. The manual lists the diagnostic interrupt mapping and the supported IODD descriptors. The IO-Link diagnostics document 109772813 is the primary engineering reference for the LIOLlink_Diagnose FB itself.
IO-Link Diagnostic Architecture
IO-Link is a point-to-point serial protocol that runs on top of a standard 3-wire sensor cable. The master (the CM 4xIO-Link) handles all electrical, timing, and message-layer concerns, while the device (the Festo MPA-S, VTSA, or VTOC manifold) exchanges cyclic process data and acyclic service data with the PLC. The diagnostic model is layered into four levels, each addressed by a different part of the IO-Link stack:
-
Port-level diagnostic. The master reports whether a device is connected, whether the port is shorted, whether the supply voltage is present, and whether the most recent frame had a checksum error. This data is always available, even when no
LIOLlink_Diagnoserequest is in flight. - Master-level diagnostic. The master aggregates port status into a port-qualifier byte (0x00 = no device, 0x01 = device present and OK, 0x02 = device present but not yet ready, 0x03 = device error, 0x04 = port reserved).
- Device-level diagnostic (events). The device can push asynchronous events to the master. Each event contains a 16-bit event code, an event qualifier (notification, warning, or error), and a vendor-specific payload. The Festo manifold uses events to report undervoltage, coil short, or communication timeout.
-
Identification and parameter data. Reading IODD-defined parameters (Vendor Name, Product Name, Function Tag, cycle time, revision). These are read with
READ_REQand stored in the diagnostic structure.
The LIOLlink_Diagnose FB addresses levels 2, 3, and 4. It does not read process data; that is the job of LIOLink_Master or the cyclic IO data update. The architectural placement of the FB and its relationship to the master is shown in the IFM primer Understanding how IO-Link works, which also describes the role of the IODD as the device description file.
LIOLlink_Diagnose FB Interface Definition
The FB is delivered as part of the Siemens "IO-Link Function Block Library" (the global library that ships with TIA Portal V15 and later). The current block is LIOLlink_Diagnose V2.x and can be called from OB1, OB82, or a cyclic interrupt OB. The block is multi-instance capable and re-entrancy-safe inside one CPU.
Input parameters
| Parameter | Type | Meaning |
|---|---|---|
| LADDR | HW_IO (Word) | Hardware identifier of the CM 4xIO-Link module from the TIA Portal device configuration. |
| CAP | DInt | Capability selector. Determines what diagnostic substructure is read back. See capability table below. |
| PORT | UInt | Port number (0 to 3) inside the module. |
| REQ | Bool | Request trigger. Rising edge starts a diagnostic read. Must be edge-triggered. |
| RD_WR | Bool | 0 = read (default), 1 = write (used to acknowledge events in some profiles). |
Output parameters
| Parameter | Type | Meaning |
|---|---|---|
| DONE | Bool | One-shot pulse on success. Pulse-shaped, not latched. |
| BUSY | Bool | True while a request is in flight. |
| ERROR | Bool | True on a hard error (invalid module, invalid port, time-out). |
| STATUS | DWord | Detailed status code. See status table below. |
| DIAG | StructLiollinkDiag | Output structure with the diagnostic payload. Layout depends on CAP. |
Capability codes (CAP parameter)
The capability selector tells the FB which section of the master/device diagnostic memory to retrieve. The most relevant codes for IO-Link V1.1 devices (such as the Festo manifolds that ship with the Festo IODD V1.1) are:
| CAP (hex) | CAP (dec) | Returns |
|---|---|---|
| 0x0001 | 1 | Port status (4 bytes, one byte per port). |
| 0x0002 | 2 | Port qualifier (4 bytes). |
| 0x0008 | 8 | Master identification. |
| 0x000D | 13 | Last event from the device. |
| 0x0010 | 16 | Process data width information. |
| 0x0023 | 35 | Port configuration. |
| 0x00E0 | 224 | Extended device identification. |
| 0x00E3 | 227 | Full diagnostic block including all event logs, device status, last error code, and qualified channel information. |
| 0x00FF | 255 | All available diagnostics (single read; large payload). |
The value 227 (0xE3) is the most useful for engineers who want to see the full state of the IO-Link link in a single read. It returns the MasterDiagnosticData, the PortStatus, the LastEvent with timestamp, and the DeviceStatus, packed into the DIAG output structure. This is the capability the original question asked about and the capability that produces the largest single-call data set.
STATUS code reference
| STATUS (hex) | Meaning |
|---|---|
| 16#0000_0000 | No error, request complete (DONE = 1). |
| 16#0000_0001 | Request in progress (BUSY = 1). |
| 16#7000_0000 | No request currently active (initial state). |
| 16#8001_0001 | Master not found at the configured LADDR. |
| 16#8001_0002 | Module type mismatch (slot is not a CM 4xIO-Link). |
| 16#8001_0003 | Firmware version of the master is too old. |
| 16#8002_0001 | Invalid port number (not 0..3). |
| 16#8002_0002 | Port not configured for IO-Link mode. |
| 16#8002_0003 | Port is in DI/DO mode; switch to IO-Link. |
| 16#8003_0001 | Device on port returns no answer (cable, IODD, or device fault). |
| 16#8003_0002 | SDCI checksum error on last read. |
| 16#8003_0003 | Device reports an error event (see LastEventCode in DIAG). |
| 16#8600_0000 | System error in the FB; contact support with the STATUS value. |
Always record the last non-zero STATUS value to a non-volatile data block so the HMI can display the master error code when a fault occurs. The Siemens IO-Link Diagnostics document 109772813 contains the full STATUS reference.
Root Cause: Why the FB Stays Busy
The most common reason for an FB stuck on Busy is the request input being held high. The IO-Link FB family implements a non-reentrant request model: while BUSY is true, the FB ignores further REQ pulses. If the calling code asserts REQ = 1 on every scan while the FB is busy, the FB continues to process the first request, then sees that REQ is still high and starts a second request immediately. The master returns a "busy, request in progress" status (typically STATUS = 16#0000_0001) until the cycle is complete, and the user sees a permanent BUSY.
The reason REQ ends up held high is almost always one of these:
- The
REQinput is wired directly to a level-driven flag such as a function-key input, an HMI tag that is set in one screen and only reset in another, or a tag that is written from a recipe and never cleared. - The
REQinput is wired to the output of another FB that never resets (e.g., a comparison that stays true). - The developer is using a "trigger coil" in ladder logic that stays on for more than one OB1 cycle because the rung is not pulsed by a clock generator.
The same root cause also explains why no status code is reported when the manifold is disconnected. The FB can only re-poll the port when it sees a fresh REQ edge. As long as REQ is held high, the FB will issue exactly one diagnostic read and then sit in the "request already running" state. When the cable is pulled, the port status byte changes from 1 to 0, but the FB never gets a chance to read it again, because it is still serving its original (held) request.
REQ waveform is one OB1 cycle of TRUE, then FALSE, then optionally TRUE again on the next event. Level-driven REQ is always a bug.Step-by-Step: Proper FB Execution Flow
The correct call pattern for LIOLlink_Diagnose on the CM 4xIO-Link is:
- Build the hardware identifier (
LADDR) for the CM 4xIO-Link module from the TIA Portal device configuration. This is the same value used as the input onLIOLink_Master; the system constants view exposes it under the slot's HW identifier. - Set
CAP = 227(0xE3) for a full diagnostic block. - Set
PORTto the physical port number (0 to 3) on the module that the Festo manifold is wired to. - On the rising edge of a one-second heartbeat (or an operator trigger), set
REQ = TRUEfor exactly one OB1 cycle. Use anR_TRIGinstance in SCL or a--|P|--contact in ladder. - Monitor
DONE,ERROR,BUSY, andSTATUS. On the first cycle where any of these go true (DONE,ERROR, orBUSY), record the values. This is the "edge capture" step. - After
DONEorERROR, clear the trigger so the next event can start a new read. The next read can be requested on the next rising edge of the heartbeat. - If
BUSYremains high for more than two OB1 cycles, you have either addressed the wrong module, theLADDRdoes not match the slot, or the FB is in a stall. See the troubleshooting matrix for the diagnostic next step.
The DONE bit is pulse-shaped, not latched. If your code only samples DONE on a slow scan, you will miss it. Capture DONE the same cycle it goes high. The same applies to ERROR.
SCL Implementation Example
The following SCL block demonstrates the proper call pattern. It can be instantiated in OB1, in a cyclic interrupt OB (e.g., OB35 at 100 ms), or behind a function-key input from the HMI.
FUNCTION_BLOCK "FB_DiagFestoManifold"
VAR
RTrig_Req : R_TRIG; // rising-edge detector on the request
RTrig_Done : R_TRIG; // edge-capture of DONE
RTrig_Err : R_TRIG; // edge-capture of ERROR
fbDiag : LIOLlink_Diagnose; // instance DB of the library FB
tHeartbeat : TON; // 1-second cyclic timer
tDiagBusy : TON; // 5-second stall timer
sDiag : StructLiollinkDiag; // output structure
wStatus : DWORD; // last STATUS
bError : BOOL;
bDiagValid : BOOL; // TRUE after first Done
END_VAR
BEGIN
// Heartbeat: pulse TRUE for one OB1 cycle every 1 s
tHeartbeat(IN := NOT tHeartbeat.Q, PT := T#1S);
RTrig_Req(CLK := tHeartbeat.Q);
// Call the FB every cycle, drive REQ from the rising edge
fbDiag(
LADDR := "HwCM4xIOLink", // HW identifier from TIA Portal
CAP := 227, // full diagnostic block
PORT := "i_Port", // 0..3 (pass in from HMI or fixed)
REQ := RTrig_Req.Q, // EDGE-triggered, never level-driven
RD_WR := FALSE, // read mode
DONE => ,
BUSY => ,
ERROR => ,
STATUS => wStatus,
DIAG => sDiag
);
// Edge-capture DONE / ERROR so the user does not miss them
RTrig_Done(CLK := fbDiag.DONE);
RTrig_Err (CLK := fbDiag.ERROR);
bError := fbDiag.ERROR;
bDiagValid := bDiagValid OR RTrig_Done.Q;
// Stall detection: 5 s of continuous BUSY is a bug
tDiagBusy(IN := fbDiag.BUSY, PT := T#5S);
IF tDiagBusy.Q THEN
// The FB is hung. Reset heartbeat to force a clean re-issue.
tHeartbeat(IN := FALSE, PT := T#1S);
END_IF;
END_FUNCTION_BLOCK
The pattern is the same in ladder: use a normally-open contact from a one-second clock generator to provide the leading edge, wire that contact directly to the REQ input of the FB, and use separate --|P|-- contacts on DONE and ERROR to latch an "event happened" bit for the HMI. Do not put a --|N|-- contact on the clock generator; use only the leading edge, otherwise the FB will receive a request on the falling edge as well on some FB revisions.
Edge-Triggered Request Pattern
The principle of edge-triggered requests applies to every block in the LIOLlink family: LIOLlink_Diagnose, LIOLink_Master, LIOLink_Device, LIOLink_Port, and the lower-level READ_REQ / WRITE_REQ blocks. Holding REQ high is never correct.
Pattern 1: Cyclic heartbeat
Use a timer that is on for one OB1 cycle every N seconds (N typically 1 to 5). Wire the timer's output through a rising-edge detector to REQ. This pattern is best for periodic background diagnostics that the HMI does not need to drive. The advantage is deterministic load: the diagnostic read happens at a known rate and consumes a known amount of CPU time. The disadvantage is that the diagnostic data is up to N seconds stale when the operator views it.
Pattern 2: Operator button
Wire an HMI button directly to a rising-edge detector. Do not latch the button in an HMI tag; let the detector produce the edge. If you latch, the HMI sets the tag, REQ goes high, the FB goes busy, the HMI does not clear the tag until the next round-trip, REQ is still high, and you are back at the original problem. If the HMI must show a busy indicator, drive the indicator from the FB's BUSY output, not from the button state.
R_TRIG in SCL or --|P|-- in ladder on the REQ input. This is the single most common correction Siemens support asks for when an LIOLlink_Diagnose call appears to be stuck.Disconnect Detection: Why No Status Code
After the FB returns DONE, the diagnostic structure (DIAG) contains a snapshot of the master and device state at the moment of the read. The PortStatus byte for the affected port will be 0 (NoDevice) if the manifold was disconnected at the time of the read, or 3 (Error) if a short or a watchdog fault occurred.
If the user disconnects the manifold after the FB has returned DONE, the PortStatus byte in the cached DIAG structure does not change, because the FB is not polling continuously. To detect a later disconnect, the application must:
- Issue a new diagnostic read at a faster heartbeat (250 ms to 1 s is typical for disconnect detection).
- Compare the cached
PortStatuswith the freshly readPortStatus. A transition from 1 (OK) to 0 (NoDevice) is a disconnect event. - Optionally, also read the port's cyclic diagnostic bit from the I/O area. The CM 4xIO-Link maps the port diagnostic interrupt (per channel) to the channel fault bit in the input process image. A high-to-low transition on that bit is a near-instant disconnect signal and is much faster than a 1 s
LIOLlink_Diagnosecycle.
A common misconception is that pulling the cable should be reflected in the same DIAG buffer that was read 30 s earlier. IO-Link diagnostics are pull-based, not push-based, at the application layer. The master does push events to the OB82 diagnostic interrupt, but the LIOLlink_Diagnose FB does not automatically subscribe to that interrupt; the application has to read the data.
For a robust Festo manifold installation, the recommended detection chain is:
- OB82 (diagnostic interrupt) for sub-cycle disconnect detection, raising a fast "port lost" flag.
-
LIOLlink_Diagnoseat 1 Hz, providing the full event log and last event code for the HMI alarm. - Cyclic process data read from
LIOLink_Master, providing the coil states.
Diagnostic Data Structure with cap = 227
When CAP = 227, the DIAG output structure contains the full diagnostic block, with the subfields listed in the table below. Engineers should focus on the fields that map directly to user-visible problems:
| Subfield | Size | Meaning |
|---|---|---|
| .MasterID | 4 bytes | Vendor ID + master firmware version. |
| .PortStatus[0..3] | 4 bytes | One byte per port: 0=NoDevice, 1=OK, 2=NotReady, 3=Error, 4=Reserved. |
| .PortQualifier[0..3] | 4 bytes | Per-port qualifier (bit 0 = comm OK, bit 1 = process data valid). |
| .DeviceStatus | 2 bytes | SDCI device status (DeviceState, ErrorCount). |
| .LastEventCode | 2 bytes | 16-bit event code from the device. |
| .LastEventQualifier | 1 byte | 0=notification, 1=warning, 2=error. |
| .LastEventTimestamp | 8 bytes | Time of last event (TF time format). |
| .EventLog[0..N] | Variable | Ring buffer of recent events. |
| .VendorName | Up to 64 bytes | Read from the device (e.g., "Festo AG & Co. KG"). |
| .ProductName | Up to 64 bytes | Read from the device (e.g., "VTSA-44"). |
| .SerialNumber | Up to 16 bytes | Read from the device. |
| .HardwareRevision | Up to 16 bytes | Read from the device. |
| .FirmwareRevision | Up to 16 bytes | Read from the device. |
Festo event codes observed on the manifold
| Event code (hex) | Qualifier | Meaning |
|---|---|---|
| 0x0000 | notification | No event. |
| 0x1800 | error | Process data lost (SDCI timeout, indicates cable or device hang). |
| 0x1801 | warning | Undervoltage at the actuator supply. |
| 0x1802 | error | Coil short detected on a solenoid output. |
| 0x1803 | warning | Temperature warning on the manifold. |
| 0x5100 | error | General device fault; consult Festo IODD for the specific subcode. |
| 0x8F00 to 0xFFFF | varies | Vendor-specific, refer to the Festo IODD V1.1 documentation. |
If the diagnostic block returns all zeroes except PortStatus, the FB read the master successfully but the device did not answer. Re-check the cable, the port configuration, and the IODD assignment in TIA Portal (the IO-Link device must be assigned to a port with the correct IODD file). If the VendorName is non-zero, the read did reach the device and any zero subfield is a "no event" or "no data" by design.
Comparison: LIOLlink_Diagnose vs. LIOLink_Master
Engineers often confuse LIOLlink_Diagnose with LIOLink_Master. The two blocks serve different purposes and should be used together.
| Feature | LIOLlink_Diagnose | LIOLink_Master |
|---|---|---|
| Purpose | Read master and device diagnostic data, including events. | Read/write cyclic process data (coil states, valve states). |
| Update rate | Pull-based on REQ edge; 1 Hz typical. | Cyclic; tied to OB1 or the configured update time. |
| Output | DIAG structure with VendorName, PortStatus, LastEventCode, etc. | I/O process image with coil bits, diagnostics, status. |
| Use case | HMI alarm list, event log, device identification. | Valve actuation, live I/O. |
| Trigger | Rising edge on REQ only. | Always running; no trigger needed. |
A complete Festo manifold solution typically calls both: LIOLink_Master continuously for process data, and LIOLlink_Diagnose at 1 Hz for the diagnostic page and the HMI alarm list.
Commissioning Verification Checklist
After wiring the FB call, run through this checklist before declaring the IO-Link link healthy:
- The CM 4xIO-Link module is plugged into a powered terminal module and the IM 155-6 reports it as OK in the device configuration (no red diagnostic LED on the station).
- The IO-Link port is configured in the TIA Portal port configuration with the correct IODD. For the Festo manifold, import the IODD from the Festo IODDfinder or from the Festo support site and assign it to the correct port.
- The
LADDRconstant matches the HW identifier in the TIA Portal project. Open the system constants view, expand the module, and copy the HW identifier of the CM 4xIO-Link slot. - The
REQinput is rising-edge triggered. Confirm by adding a watchpoint on the trigger and verifying it is TRUE for one OB1 cycle only, then FALSE. - The FB returns
DONEwithin two OB1 cycles. If it does not, the trigger is being re-asserted. TheSTATUSoutput will show 16#0000_0001 (in progress) or 16#8600_0000 (FB stall) if the trigger is held. - The
DIAGstructure contains a non-zeroVendorName. If it does not, the device is not answering. Check the cable, the port mode (must be IO-Link, not DI/DO), and the IODD assignment. - Pull the manifold cable. The
PortStatus[PORT]byte in the nextDIAGread is 0. Reconnect the cable. The next read reports 1. - The HMI alarm list displays the
LastEventCodefrom the FB on a transition from 0 to a non-zero value. - The
STATUSoutput never reports 16#8001_xxxx. If it does, the LADDR is wrong; if it reports 16#8003_0001, the device is not answering. - The cyclic process data from
LIOLink_Masterreflects the coil states correctly. The two blocks should agree on the port status.
Troubleshooting Matrix
| Symptom | Likely cause | Next step |
|---|---|---|
| FB stays on BUSY forever | REQ is level-driven. | Replace level-driven REQ with R_TRIG or --|P|--. |
| DONE fires but DIAG is empty | REQ only fired once; cache not updated. | Verify REQ pulses at the configured rate; check OB1 cycle time. |
| PortStatus stays at 0 | Cable, port mode, or IODD assignment. | Check port mode = IO-Link; verify IODD is assigned; swap cable. |
| LastEventCode is always 0 | No events on the device, or the read is too slow. | Disconnect power to a coil to force an event; verify heartbeat is 1 Hz or faster. |
| STATUS = 16#8001_0001 | Wrong LADDR. | Copy the HW identifier again from the TIA Portal project. |
| STATUS = 16#8003_0001 | Device not answering. | Check cable, port mode, IODD, and supply voltage at the manifold. |
| STATUS = 16#8600_0000 | FB internal error. | Capture STATUS, capture the FB instance name, and contact Siemens support. |
| DIAG VendorName is non-zero but SerialNumber is empty | IODD V1.0 device; some V1.1 fields are absent. | Update the IODD to V1.1 in the TIA Portal device configuration. |
Safety and Field-Notes
A few caveats that come up in real installations:
- The CM 4xIO-Link requires the head module (IM 155-6) to be on a current firmware. Mix-and-match with older IM 155-6 PN ST stations can produce partial diagnostic reads. Check the compatibility list on the Siemens support portal before substituting head modules.
- Festo manifolds ship with a 3-wire M12 connector on a pigtail. If you use a Y-distributor (e.g., to retain a manual override switch), confirm that the IO-Link signal still reaches the device; some Y-distributors attenuate the C/Q line below the SDCI threshold.
- Do not assign the same port to two different IODDs in TIA Portal. The portal will warn you at compile time, but the runtime behaviour is undefined.
- If you have more than one CM 4xIO-Link in the ET 200SP station, each gets its own LADDR. The library does not auto-discover.
- Always verify the FB instance name in the call (e.g.,
i_FestoManifold.fbDiag) before posting to a support request. The STATUS code alone is not enough to diagnose the issue.
FAQ
Why does LIOLlink_Diagnose stay on BUSY forever?
The most common reason is that the REQ input is level-driven instead of edge-triggered. The FB sees a continuous request and refuses to clear. Use a rising-edge detector (R_TRIG in SCL, --|P|-- in ladder) and the FB will return DONE within two OB1 cycles.
I set cap = 227 but the DIAG structure is empty. What is wrong?
A cap = 227 read returns Done quickly, but if the cached structure is all zeroes the device is not answering. Check that the IO-Link port is assigned to the correct IODD, that the cable is in good condition, and that VendorName is non-zero. If VendorName is non-zero, the read did reach the device and any zero subfield is a field-of-zeros by design (e.g., LastEventCode is 0x0000 when there is no event).
Why is there no status code when I disconnect the manifold?
The LIOLlink_Diagnose FB is pull-based, not push-based. It reads the diagnostic state on each rising edge of REQ. If the FB is called only once per minute, a disconnect that occurs between two calls will not be reported until the next call. For sub-second disconnect detection, also wire the OB82 diagnostic interrupt (the channel fault bit) or poll PortStatus at 1 Hz.
Does the Festo manifold support IO-Link V1.1 with event logs?
The Festo MPA-S, VTSA, and VTOC manifolds all support IO-Link V1.1 with full event-based diagnostics. To get vendor-name, product-name, and event log entries, the TIA Portal project must import the IODD V1.1 from the Festo IODDfinder and assign it to the correct port.
Can I call LIOLlink_Diagnose from OB82 to get the event for free?
No. The OB82 interrupt fires when the master detects a change, but the LIOLlink_Diagnose FB needs its own REQ edge to read the event log. The recommended pattern is OB82 for the fast "port lost" flag plus a cyclic 1 Hz LIOLlink_Diagnose call to populate the alarm list.
What is the difference between LIOLlink_Diagnose and LIOLink_Master?
LIOLlink_Diagnose reads diagnostic data, events, and identification (pull-based, edge-triggered). LIOLink_Master reads and writes the cyclic process data (coil states) and runs continuously. Use both: LIOLink_Master for live I/O and LIOLlink_Diagnose at 1 Hz for the HMI alarm list.