Configuring Pepperl+Fuchs IO-Link Master in TIA Portal V15

David Krause17 min read
SiemensTIA PortalTutorial / How-to
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

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.

S7-1200 CPU PROFINET IO Controller TIA Portal V15 project PROFINET ICE1-8IOL-G6OL-V1D P+F IO-Link Master, 8 ports IP67, GSDML-V2.3x Port 1 IQT1-FP-IO-V1 RFID head, 32B IN / 32B OUT Port 2..8 Standard I/O or unused Digital inputs / IO-Link Cyclic I/O path PLC process image <--> Master slot 1..8 <--> Port module (32I/32O) <--> RFID head Acyclic path (ISDU) IO_LINK_DEVICE FB over PROFINET record data <--> Master <--> Port 1 ISDU channel

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
The IQT1-FP-IO-V1 datasheet and the operating instructions (Chapter 6: Process data and command structure) are the authoritative source for the 32-byte command/response layout. Always download the latest revision from the manufacturer portal before you lock the tag database schema.

TIA Portal V15 Project Preparation

  1. Open or create the S7-1200 project and confirm that the device view of the CPU shows a PROFINET interface in IO controller mode.
  2. 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.
  3. 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.
  4. 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_DEVICE FB 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.

  1. 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.
  2. In TIA Portal, choose Options > Manage general station description files (GSD).
  3. 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.
  4. Close the GSD tool. Restart TIA Portal if the new device does not appear under the catalog tree.
If you intend to use port diagnostics (vendor-specific ISDU indices 0x10..0x18), make sure the GSDML version is at least 2.3.1. Older GSDML versions expose only the standard diagnostics.

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 exact byte offsets depend on the IO-Link master port slot start address in the PLC. The table assumes the port 1 module starts at IB 64 / QB 64; substitute the actual base address from the device view before commissioning.

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

  1. Compile the TIA Portal project and download it to the S7-1200. The CPU should remain in RUN after the download.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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_DEVICE FB will compile but the RDREC primitive will return error 16#80C3 at runtime. Either update the CPU firmware or call RDREC / WRREC directly.
  • 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.

TIA Portal V15 - Configuration of the IO-Link system
Back to blog