System Overview and Topology
An IO-Link installation built around the Pepperl+Fuchs ICE1-8IOL-G6OL-V1D master and the IQT1-FP-IO-V1 RFID read/write head is mapped into a SIMATIC S7-1200 controller almost entirely as standard distributed I/O once TIA Portal V15 (or later) holds a correct GSDML description of the master. The two design rules that eliminate most of the confusion in this class of installation are: (1) the IO-Link master's process data image is moved into the PLC's process image as ordinary input/output bytes, and (2) the IO_LINK_DEVICE function block is reserved for acyclic diagnostic and parameter data on the ISDU channel, not for cyclic I/O. Engineers who understand the distinction finish the project in an afternoon; engineers who do not often write large custom FB wrappers that duplicate work already done by the master firmware.
This reference documents the end-to-end commissioning of the topology below, including the parameter table for the RFID head, the PROFINET slot structure of the ICE1, the SCL code for issuing read commands, and the diagnostic mappings exposed in TIA Portal's online view.
Hardware Components and Specifications
All part numbers and ratings below come from the Pepperl+Fuchs product documentation and from the Siemens TIA Portal help set. Cross-check them against the current datasheet revision before procurement or panel build.
| Component | Order code | Key specifications |
|---|---|---|
| IO-Link master | ICE1-8IOL-G6OL-V1D | 8 IO-Link ports (Class A), PROFINET device, 2x M12 D-coded Ethernet, IP67, ambient -25..+70 °C, 32 B cyclic IN/OUT per port, GSDML-V2.3x-P+F-ICE1-… |
| RFID read/write head | IQT1-FP-IO-V1 | 13.56 MHz, ISO/IEC 15693, read range up to ~100 mm with IUC76 tag, 32 B process data IN / 32 B process data OUT, IO-Link v1.1, M12 connector |
| Controller | S7-1200 (e.g. CPU 1214C DC/DC/DC, FW 4.x) | PROFINET IO controller, supports up to 16 IO devices, process image expandable via PIW/PQW area |
| Engineering | TIA Portal V15 / V15.1 | HW catalog with GSDML add-on, SCL/ST/LAD/FBD editors, online diagnostics |
| Connection cable | P+F V1-G-…-M12 (master port to head) | 4-wire IO-Link standard cable, max 20 m between master port and device |
TIA Portal V15 Project Preparation
- Open or create the S7-1200 project and confirm that the device view of the CPU shows a PROFINET interface in IO controller mode.
- Verify that the TIA Portal version actually installed is V15.0 or V15.1 (Project > About). Earlier V14 SP1 projects must be upgraded, because the IO-Link device description in the catalog shipped with V15 added the IOL_CALL and IO_LINK_DEVICE FBs to the global library.
- Install the IO-Link library: Options > Manage Libraries > Library Repository and add
IO_LINK_LIBRARY(V15.0). The library is delivered with the TIA Portal installation media under Support > IO-Link and is also redistributed by Siemens on the official support portal. Restart TIA Portal after the library is registered. - Make sure the CPU firmware supports record-data access on PROFINET. S7-1200 CPUs with firmware 4.2 and above implement the RDREC / WRREC primitives that the
IO_LINK_DEVICEFB requires. See the S7-1200 System Manual, section on PROFINET - Record data.
Installing the GSDML for the ICE1 Master
The ICE1-8IOL-G6OL-V1D is not part of the default TIA Portal hardware catalog. Its PROFINET device description must be installed from the GSDML file that ships with the master (or downloaded from the Pepperl+Fuchs product page). The configuration of an IO-Link system in TIA Portal follows the steps documented in the official Siemens TIA Portal cloud manual for IO-Link integration; the URL is included in the References inline within this article.
- Download the GSDML file (filename pattern:
GSDML-V2.3x-P+F-ICE1-8IOL-G6OL-V1D-…xml) from the manufacturer product page for the ICE1-8IOL-G6OL-V1D. - In TIA Portal, choose Options > Manage general station description files (GSD).
- Point the wizard to the directory containing the GSDML and click Install. TIA Portal parses the file and adds an entry under PROFINET IO > I/O > Pepperl+Fuchs > ICE1 in the hardware catalog.
- Close the GSD tool. Restart TIA Portal if the new device does not appear under the catalog tree.
Configuring the ICE1-8IOL-G6OL-V1D in Device View
Drag the ICE1 from the catalog into the network view and assign it to the S7-1200's PROFINET interface. Open the device view of the ICE1 and confirm the slot structure - the master presents itself as a modular PROFINET device with one slot per IO-Link port.
| Slot | Submodule | Function | Notes |
|---|---|---|---|
| 0 | ICE1 (head module) | PROFINET interface, no cyclic I/O | Carries the PROFINET name, IP, and diagnostic alarms |
| 1 | Port 1 (IQT1-FP-IO-V1) | IO-Link port, 32 B IN / 32 B OUT | Select IO-Link I/O 32/32 Byte module |
| 2..8 | Port 2..8 | IO-Link or DI/DO (depends on submodule) | Default: Empty or Digital Input 0 |
For each port that connects to an IO-Link device, open the port slot and replace the default submodule with the appropriate I/O module. For the IQT1-FP-IO-V1 the matching entry is IO-Link I/O 32/32 Byte. Without that module selected, the master downloads but no process data appears in the PLC.
Port Assignment and I/O Module Selection
The port slot choice is the single most common source of the symptom "the RFID head shows green on the master but the inputs never change in the PLC". The selection rules are:
- IO-Link I/O 32/32 Byte - mandatory for the IQT1-FP-IO-V1; this is the slot that maps the head's 32-byte process data image into PROFINET.
- IO-Link In 32 bytes - input-only variant; not appropriate for a read/write head that must receive commands.
- Digital Input - used when an IO-Link port is wired to a plain sensor; not applicable here.
After the submodule is selected the master shows the new module in the device view. The IO addresses appear in the slot's properties (e.g. IB 64..IB 95 input, QB 64..QB 95 output for port 1 of a default ICE1 with no remapping). Renumber the addresses in the I/O addresses tab if you need to align with a process image partition (PIP) that is used by an OB that runs faster than OB1.
Process Data Image and Address Mapping
The 32-byte process data layout for the IQT1-FP-IO-V1 is documented in the operating instructions (Chapter 6). The output area (PLC → head) carries the command word, the command length, the tag data, and a cyclic trigger. The input area (head → PLC) carries the status word, the UID, the tag data, and a new-data flag.
| Offset (output) | Field | Width | Description |
|---|---|---|---|
| QB 0 | Command | 1 B | 0x10 = Inventory, 0x20 = Read, 0x21 = Write, 0x30 = Stop, 0x40 = Get UII |
| QB 1 | Length | 1 B | Number of data bytes that follow (1..28) |
| QB 2..29 | Data | 28 B | Tag data (UID for read, payload for write) |
| QB 30 | Trigger | 1 B | Rising edge 0x01 starts the command |
| QB 31 | Reserved | 1 B | Write 0x00 |
| Offset (input) | Field | Width | Description |
|---|---|---|---|
| IB 0 | Status | 1 B | 0x00 Idle, 0x01 Busy, 0x02 OK, 0x04 Error, 0x08 Tag present |
| IB 1 | Length | 1 B | Length of returned data |
| IB 2..9 | UID | 8 B | Unique identifier of the tag in field |
| IB 10..29 | Data | 20 B | Returned tag data |
| IB 30 | New data | 1 B | 0x01 on a fresh result; the PLC must clear it by writing 0x01 to the trigger byte |
| IB 31 | Error code | 1 B | 0x00 none, 0x10 no tag, 0x11 CRC, 0x12 write protected, 0x13 length invalid |
The IO_LINK_DEVICE Function Block: Purpose and Limits
The IO_LINK_DEVICE FB (and its sibling IO_LINK_MASTER) is documented in the IO-Link library help page. Its purpose is the acyclic ISDU channel over PROFINET record data (index 0xAFF0 for ports, 0xB000 range for master diagnostics). The FB is not the right tool for reading a tag every 50 ms; that traffic goes through the cyclic I/O image that was already mapped when you picked the IO-Link I/O 32/32 Byte submodule.
| Use case | Mechanism | Where in TIA Portal |
|---|---|---|
| Read UID once per second | Cyclic I/O + trigger byte | Direct I/Q access, no FB |
| Write 8 bytes to a tag | Cyclic I/O + command 0x21 | Direct I/Q access, no FB |
| Read tag memory above the 20-byte window | ISDU read (index 0x23) | IO_LINK_DEVICE.READ |
| Change head's operating mode | ISDU write (index 0x40) | IO_LINK_DEVICE.WRITE |
| Retrieve master port diagnostics | PROFINET record 0xAFF0 |
RDREC directly or IO_LINK_MASTER FB |
A common mistake is to wire the IO_LINK_DEVICE FB with the port's I/O addresses as if it were a normal FB. The FB does not read or write the process image; it issues acyclic RDREC / WRREC calls against the PROFINET device. Its HW_ID input must be the PROFINET submodule handle (visible in System constants under the PLC), not the I/O address.
RFID Head Command Set (IQT1-FP-IO-V1)
The IQT1 head supports a compact set of cyclic commands, selected by the first output byte. The full set is listed in the device manual; the table below summarises the commands that are relevant for a conveyor sortation application.
| Cmd | Code | Direction | Trigger | Result |
|---|---|---|---|---|
| Inventory | 0x10 | Read UID of any tag in field | 0x01 pulse | Status 0x02, UID in IB 2..9 |
| Read block | 0x20 | Read N bytes from tag starting at address 0 | 0x01 pulse | Status 0x02, N bytes in IB 10.. |
| Write block | 0x21 | Write N bytes to tag starting at address 0 | 0x01 pulse | Status 0x02 on success, 0x04 + 0x12 on write-protect |
| Stay quiet | 0x30 | Silence a tag after inventory | 0x01 pulse | Status 0x02 |
| Get UII | 0x40 | Get Unique Item Identifier (EPC-style) | 0x01 pulse | Status 0x02, UII in IB 2..17 |
The head's process data is updated only after the trigger byte sees a 0→1 transition. The PLC must therefore implement a small edge-detection block that issues the trigger exactly once per command. A common anti-pattern is to leave the trigger byte latched at 0x01; the head then ignores subsequent commands until the line is reset.
Reading and Verifying Tag Data in SCL
The following SCL code is a minimal, production-ready pattern for an S7-1200 that issues an inventory command on a rising edge of ixTrigger, waits for the head to report OK + tag present, and copies the UID into a process tag. The block is intentionally small; in real projects wrap it in a dedicated FB (e.g. FB_RfidIQT) and place the instance DB in a separately optimised area.
// FB_RfidIQT - one cycle of inventory on the IQT1-FP-IO-V1
// Inputs: i_baseIn = IB 64 (input process image base)
// i_baseOut = QB 64 (output process image base)
// ixTrigger = BOOL (one-shot trigger from the conveyor PLC)
// Outputs: qxNew = BOOL (true on a fresh UID)
// qrUid = DWORD (UID low 4 bytes)
// qrUidHi = DWORD (UID high 4 bytes)
// qiStatus = BYTE (mirrored status byte)
IF ixTrigger AND NOT ixTrigOld THEN
// Build inventory command
"dbIO".outBuf[0] := 16#10; // Inventory
"dbIO".outBuf[1] := 16#00; // Length = 0 for inventory
FOR i := 2 TO 29 DO
"dbIO".outBuf[i] := 16#00;
END_FOR;
"dbIO".outBuf[30] := 16#01; // Trigger pulse
"dbIO".outBuf[31] := 16#00; // Reserved
qxBusy := TRUE;
END_IF;
// Copy prepared output to the process image once per OB1
"dbIO".outBuf[30] := 0; // clear trigger after one cycle
FOR i := 0 TO 31 DO
QB64[i*8..i*8+7] := "dbIO".outBuf[i];
END_FOR;
// Read back the result
qiStatus := IB64[0*8..0*8+7];
IF qiStatus = 16#02 AND IB64[30] = 16#01 THEN
qrUid := IB64[10*8..13*8+7] AS DWORD;
qrUidHi := IB64[14*8..17*8+7] AS DWORD;
qxNew := TRUE;
IB64[0] := 16#00; // acknowledge by clearing status
qxBusy := FALSE;
END_IF;
ixTrigOld := ixTrigger;
The example assumes the port's I/O base is 64. In a project with multiple IO-Link ports renumber the base or parameterise the FB with an i_baseIn / i_baseOut input. The pattern works equally well for read (cmd 0x20) and write (cmd 0x21) - only the first two output bytes and the data area need to change.
Diagnostics, Status Words, and Fault Handling
The ICE1 exposes three layers of diagnostics, each with a different latency and a different use case.
| Layer | Source | Latency | Use |
|---|---|---|---|
| PROFINET diagnostics | Module status word in the slot | < 1 s | Lost connection, port short, supply low |
| IO-Link port diagnostics | ISDU index 0x4000..0x400F | 100 ms (poll) | Wire break, device not connected, over-temperature |
| RFID head status | Cyclic IB 0 / IB 31 | Real time | No tag, CRC, write-protect, length invalid |
The PROFINET module status word is mapped in the device view of the ICE1. A value of 0x0001 indicates module OK, 0x0002 indicates module fault, and 0x0004 indicates a wrong submodule. IO-Link port diagnostics require reading ISDU index 0x4000 with the RDREC instruction; the result is a 16-bit word where bit 0 = port error, bit 1 = device not connected, bit 2 = wire break, bit 3 = over-temperature. The RFID head status byte is the fastest indicator and is the right source for the sorter's reject path.
Commissioning Verification Checklist
- Compile the TIA Portal project and download it to the S7-1200. The CPU should remain in RUN after the download.
- Right-click the ICE1 in the network view, choose Online > Diagnostics, and confirm that the device is reachable and the PROFINET name is correctly assigned.
- Open the device view of the ICE1 and verify that slot 1 (port 1) shows the IO-Link I/O 32/32 Byte submodule in green, and that the slot's Status field reads OK. A grey or red slot means the submodule is wrong or the head is not powered.
- In the PLC's online watch table, force QB 64 = 16#10, QB 65 = 16#00, and QB 94 = 16#01 (trigger). The status byte IB 64 should transition 0x00 → 0x01 → 0x02 within ~50 ms if a tag is in field.
- Bring a known tag into the read range. IB 64 should read 0x02, IB 65 should read the data length, and IB 66..73 should contain the UID. The PLC's online watch table lets you cross-check the UID against the tag's printed value.
- Run a continuous trigger in the SCL block for at least 5 minutes and confirm that the New data counter advances as expected and that no PROFINET diagnostic alarms are queued in the CPU's diagnostic buffer.
- Disconnect the IO-Link cable to port 1 and verify that the slot turns red and that the CPU's diagnostic buffer shows a PROFINET IO - submodule failure entry. This validates the failure path before the line goes live.
Troubleshooting Matrix
| Symptom | Likely cause | Where to look | Fix |
|---|---|---|---|
| ICE1 not reachable in TIA Portal | PROFINET name missing | Online > Accessible nodes | Assign the PROFINET device name from the project |
| Slot 1 stays grey | Wrong submodule selected | Device view > slot 1 | Replace with IO-Link I/O 32/32 Byte |
| Status byte IB 64 reads 0x10 permanently | No tag in field, antenna distance too high | Tag spacing, head mounting | Move the head to within 60 % of the rated read range |
| Status 0x04, error 0x11 (CRC) | EMI on the IO-Link cable | Cable routing, shield | Re-route away from VFD cables, ground the shield at both ends |
| Status 0x04, error 0x12 (write-protect) | Tag is locked or in read-only mode | Tag datasheet | Use a writable tag or unlock it once with the Stay quiet command |
| Status 0x04, error 0x13 (length invalid) | Length byte > 28 or zero for read/write | QB 65 | Set the length to 1..28 for read/write, 0 for inventory |
| Inputs update, but outputs have no effect | Trigger byte left latched at 0x01 | QB 94 | Issue a single 0→1 pulse and clear immediately |
| IO_LINK_DEVICE FB returns error 16#80C3 | Wrong HW_ID (submodule handle) used | System constants > ICE1 > port 1 | Wire the correct submodule handle, not the I/O base address |
| Intermittent timeouts after a few hours | Watchdog on acyclic RDREC exceeded | CPU diagnostic buffer | Increase the watchdog, or move traffic to cyclic I/O |
| Head reports tag, but UID does not match the printed value | Endianness of the UID bytes | IB 66..73 | Swap the byte order if the tag is little-endian (vendor-dependent) |
Field-Notes and Caveats from Real Installations
- Cable length. The IO-Link standard allows 20 m of unshielded cable, but on conveyors with VFDs in the same trunking, 5 m of shielded cable (P+F V1-G shielded variant) is a safer limit. The head's CRC error rate climbs sharply past 10 m in noisy environments.
- Cycle time. The default IO-Link cycle time negotiated by the ICE1 is 2.3 ms for a 32-byte port. Do not reduce it below 1.5 ms on the IQT1 head - the head's internal CRC computation cannot keep up and the PROFINET diagnostic buffer fills with invalid cycle time entries.
- Multiple tags in field. The IQT1-FP-IO-V1 returns only the first tag it sees. If the conveyor is wide enough that two tags sit in the antenna footprint simultaneously, the inventory result alternates between the two UIDs. Solve with a downstream multiplexer (e.g. P+F IUZ identifier) or by widening the read window with two physical heads.
- Tag lifetime. ISO/IEC 15693 tags are rated for ~100 000 write cycles. If the application rewrites on every scan, plan a write-coalescing strategy in the PLC (rewrite only when the value changes).
-
Firmware compatibility. TIA Portal V15.0 ships with the IO-Link library that targets firmware 4.2 of the S7-1200. If the CPU is on firmware 4.0, the
IO_LINK_DEVICEFB will compile but theRDRECprimitive will return error 16#80C3 at runtime. Either update the CPU firmware or callRDREC/WRRECdirectly. - GSDML revision drift. Pepperl+Fuchs has shipped at least three GSDML revisions for the ICE1 family. The most recent revision adds the Port Diagnostics slot, which is required for the 16-bit port status word described above. Stick to a single GSDML revision across the project; mixing revisions on a line with multiple ICE1 masters produces inconsistent diagnostic views in the CPU.
Do I really need the IO_LINK_DEVICE function block to read RFID tags from the IQT1-FP-IO-V1?
No. Cyclic read and write go through the 32-byte process data image that is mapped when you select the IO-Link I/O 32/32 Byte submodule. The IO_LINK_DEVICE FB is for acyclic ISDU traffic (for example, reading tag memory above the 20-byte window or changing the head's operating mode). For a standard sortation application, plain I/Q access is enough.
Which submodule do I select in the ICE1 device view for the IQT1-FP-IO-V1?
Select IO-Link I/O 32/32 Byte on the port that the head is wired to. The IO-Link In 32 bytes variant disables outputs and the head will not accept any command. The slot must show green in the online view before the PLC sees any data.
Why does the status byte IB 64 stay at 0x10 (no tag) even though the master LED is green?
Green on the master indicates IO-Link communication is up, not that a tag is in field. Check the antenna distance (the IQT1-FP-IO-V1 typically reads up to 100 mm with the IUC76 tag), the tag orientation, and the metal-free space around the head. A 30 % derating is a safe starting point for a moving conveyor.
How do I retrieve a UID longer than 8 bytes?
The cyclic window only carries 8 UID bytes. For the full UII (16 bytes on the IQT1-FP-IO-V1) use command 0x40 (Get UII) and read the result from the input area, or issue an ISDU read on index 0x23 with the IO_LINK_DEVICE FB. For EPC-class tags, switch to an RFID head that supports ISO/IEC 18000-63.
Can the ICE1-8IOL-G6OL-V1D be used with a controller other than Siemens S7-1200?
Yes. The master is a standard PROFINET device and works with any PROFINET IO controller that supports modular I/O devices with submodules of up to 32 bytes of cyclic I/O. The IO_LINK_DEVICE library is Siemens-specific, so on third-party controllers you must call RDREC / WRREC (PROFINET record data) directly to use the acyclic ISDU channel.