Problem Overview
When consolidating multiple SIMATIC S7-1200 stations (e.g., a fleet of CPU 1214C DC/DC/DC controllers spread across geographically distributed wind turbine sites) into a single TIA Portal project, every PROFINET IO device configured in the device configuration must be reachable at runtime. If an IO device listed in the project is physically absent on the network, the CPU logs an "IO device failure – IO device not found" diagnostic entry and the SF (Group Fault) LED illuminates. The fault propagates to OB82, OB83, OB86, and the diagnostic buffer, generating noise that masks real process faults and trips the maintenance crew into nuisance callouts.
This article documents three field-proven methods to suppress or mask expected PROFINET IO device failures on the S7-1200 (firmware V4.2 through V4.6) inside TIA Portal V17 while still preserving the ability to detect truly missing critical devices.
Prerequisites
- SIMATIC S7-1200 CPU 1214C DC/DC/DC (order number 6ES7214-1AG40-0XB0) with firmware V4.2 or higher. TIA Portal V17 minimum CPU firmware is V4.2; V4.4 is required for full symbolic diagnostic access.
- TIA Portal V17 Update 4 or later (Build 17.0.0.170). The LCC (Library of Communication and Configuration) requires the matching V17 distribution; older V16 libraries can be upgraded but the internal block versions are not always available.
- The configured PROFINET IO devices must be standard PROFINET devices (not shared devices, not MRP clients on ring ports that the S7-1200 CPU is supposed to manage).
- Programming knowledge of SCL or LAD/FBD, and a basic understanding of the
PNIOstack diagnostics.
Understanding S7-1200 CPU Error Behavior
The S7-1200 system manual defines a layered fault response. When the PROFINET controller detects a station failure (lost AR - Application Relationship), the following sequence occurs:
- The PNIO stack raises a station-level diagnostic interrupt.
- The operating system calls
OB86(Rack/Station failure). IfOB86is not loaded, the CPU transitions to STOP. IfOB86is present but empty, the CPU remains in RUN but logs the diagnostic buffer entry. - The diagnostic buffer records event ID 0x013C ("IO device failure") or 0x013E ("IO device returned") with the station number and PROFINET device name.
- The SF LED is latched until the diagnostic buffer is read or the station returns.
Reference: SIMATIC S7-1200 Manual Collection – CPU Error Behavior.
The fatal error path is separate: when the firmware detects a non-recoverable internal fault (e.g., firmware defect, watchdog overflow), the CPU attempts a defect-mode restart. After a successful restart, the diagnostic buffer records a power-on event; after a failed restart, the CPU remains in STOP with the SF LED steady on. This behavior cannot be masked with user logic; it is a hardware/firmware level escalation.
Method 1: D_ACT_DP – Native Enable/Disable Function
The D_ACT_DP function is part of the standard IEC 61131-3 distributed I/O library and is documented in the Siemens support entry "How do you enable and disable DP slave and PROFINET IO device?". The block signature is:
| Parameter | Declaration | Data Type | Description |
|---|---|---|---|
| REQ | INPUT | BOOL | Rising edge triggers activation/deactivation |
| MODE | INPUT | BYTE | 0 = check status, 1 = activate, 2 = deactivate |
| ADDR | INPUT | WORD | Logical address of the PROFINET IO device (diagnostic address, slot 0 submodule) |
| RET_VAL | OUTPUT | INT | Return value (0 = OK, see error table below) |
| BUSY | OUTPUT | BOOL | 1 = operation in progress |
The ADDR parameter must point to the diagnostic address of the IO device. In TIA Portal V17, locate it in Devices & Networks → [IO Device] → Properties → PROFINET interface → [Port / Diagnostics tab. The diagnostic address is the slot-0 submodule address assigned automatically by the PROFINET controller, and it is the only valid input for D_ACT_DP on a PROFINET IO device (on PROFIBUS DP, use the slave's diagnostic address).
Error Code Reference for D_ACT_DP
| RET_VAL (hex) | Meaning | Field Action |
|---|---|---|
| 0000 | OK | None |
| 8090 | ADDR invalid or device does not exist in configuration | Verify diagnostic address in device properties |
| 8092 | MODE outside range 0..2 | Correct MODE constant |
| 8093 | REQ parameter not acceptable (e.g., REQ is FALSE on call) | Use edge detection |
| 80A0 | Another D_ACT_DP call is in progress on same ADDR | Wait for BUSY = 0, or sequence calls per device |
| 80A1 | Device cannot be deactivated (PROFIsafe, F-CPU slot) | Do not attempt; this is a safety-integrated station |
| 80A2 | Device is in data exchange; deactivation aborted by stack | Retry after grace period or remove from configuration |
| 80A3 | Internal error – call OB 121 and check diagnostic buffer | Reboot or reflash firmware |
| 80A4 | Device is configured but not present in the project tree | Re-compile the hardware configuration |
SCL Example Call
// Deactivate station 4 (diagnostic address 256) on cold start
IF "FirstScan" THEN
"dbDisableStations".REQ := TRUE;
"dbDisableStations".MODE := 2; // 2 = deactivate
"dbDisableStations".ADDR := 256; // diagnostic address of IO device 4
D_ACT_DP(
REQ := "dbDisableStations".REQ,
MODE := "dbDisableStations".MODE,
ADDR := "dbDisableStations".ADDR,
RET_VAL := "dbDisableStations".RetVal,
BUSY := "dbDisableStations".Busy);
END_IF;
D_ACT_DP with a valid ADDR against a device that has never been seen on the wire still returns 0 (OK) and the device enters the "deactivated" state in the PNIO stack. However, the diagnostic buffer records event 0x013C on the deactivation itself. To suppress that entry, the call must be made from OB100 (warm restart) or OB101 (hot restart) before OB1 processes the station failure. Calling it from OB86 is too late – the fault is already logged.Method 2: LCC ReconfigSys and ReconfigIOSystem
The Siemens LCC (Library Communication & Configuration) provides finer-grained reconfiguration. The V17 distribution is shipped as LCC_V17.zip and contains the FB ReconfigIOSystem, the FB ReconfigIODevice, and supporting types. The V16 library does not always port cleanly to V17 because the PNIO_IFC type definitions were refactored between V16 and V17 (the V16 → V17 upgrade preserves the blocks but flags the PNIO_IFC_v2 as obsolete).
ReconfigIOSystem Interface
| Parameter | Type | Purpose |
|---|---|---|
| hwInterface | HW_INTERFACE | PROFINET interface of the CPU (system-side) |
| ioSystem | PNIO_IO_SYSTEM | Target IO system (usually the head module system of the CPU) |
| mode | DINT | 0 = reconfigure, 1 = reset to project |
| deviceList | ARRAY[*] OF PNIO_DEVICE_NAME | Devices to remove from or add to the system |
| status | DWORD | Bitwise status (see below) |
ReconfigIOSystem Status Word Bits
| Bit | Meaning |
|---|---|
| 0 | Busy |
| 1 | Done (success) |
| 2 | Error |
| 3..7 | Reserved |
| 8..15 | Error class (1 = parameter, 2 = stack, 3 = internal) |
| 16..31 | Vendor-specific sub-code |
Call Sequence
- Open TIA Portal V17 → Options → Manage Libraries → import
LCC_V17.zip. - Drag
ReconfigIOSysteminto the project. TIA may require you to update the type version to V17.0.1; accept. - Wire
hwInterfaceto the CPU PROFINET interface symbol (e.g.,"Local~PROFINET_interface_1"). - Call from
OB100withmode := 0and populatedeviceListwith the PROFINET station names of the wind turbines not present at this site. - Evaluate
statusbit 1 (Done) before allowingOB1to read any IO from those devices.
If the ReconfigIOSystem block is not visible in the V17 master copy library, verify that the Hardware Support Package for the CPU 1214C is installed at firmware V4.4 or higher: Options → Support Packages → Installed. The block depends on the PNIO system constants generated by the compiler; without the matching support package, the type references resolve to V15.1 stubs that do not export the reconfiguration entry points.
Method 3: Configuration-Time Suppression (No Code Change)
If runtime reconfiguration is not required (e.g., the per-site device list is static and known at engineering time), the cleanest approach is to not configure the absent devices in the TIA project at all, and use a centralized project where each site has a derived sub-device set via a project library master copy. This avoids the firmware-level diagnostic entirely.
For a single shared project across sites, use TIA Portal's "Station Configuration Editor" feature (V17 Update 4+): Project tree → CPU → Properties → PROFINET interface → Operating mode → "IO device substitution permitted". With this option enabled, the PNIO stack tolerates the listed devices being absent for the configured Watchdog time (default 3 s) and does not raise OB86 during that grace period. Beyond the watchdog, the failure propagates normally.
Diagnostic Event ID Reference (S7-1200 PROFINET)
| Event ID (hex) | Description | OB | Recommended Response |
|---|---|---|---|
| 013C | IO device failure | OB86 | Deactivate via D_ACT_DP in OB100; log if persistent |
| 013D | IO device fault – channel-level error | OB82 | Inspect channel diagnostics of the specific slot |
| 013E | IO device returned | OB86 | Reactivate via D_ACT_DP MODE=1 |
| 013F | IO device does not match configured name | OB86 | Verify PROFINET device name in TIA topology editor |
| 0170 | Port/link status change | OB82 | Check cabling, switch ports |
| 04A2 | PROFINET controller stack overflow | OB121 | Reduce number of ARs; consult Siemens support |
| 35xx | PROFINET AR establishment failure | OB86 | Verify GSD file version matches device firmware |
Verification Procedure
- Compile the project (Project → Compile → Software (rebuild all)) and download to the CPU 1214C. Ensure the CPU is in STOP during download.
- Power-cycle the CPU; observe
OB100executes and theD_ACT_DPorReconfigIOSystemcall completes withRET_VAL = 0/statusbit 1 set. - Connect TIA Portal online → Online & Diagnostics → Diagnostics buffer. Confirm that no event 0x013C entry is present for the deactivated stations.
- Verify the SF LED is OFF after the boot sequence completes (allow up to 10 s for the PROFINET stack to settle).
- Reconnect one of the deactivated devices; verify that an event 0x013E ("IO device returned") is logged. If expected, call
D_ACT_DPwithMODE := 1fromOB1on a rising edge of the return event to formally reactivate. - Force a real fault by disconnecting a critical device (one that should still alarm). Confirm
OB86fires, the diagnostic buffer logs the failure, and the SF LED activates. This validates that suppression is targeted and not blanket.
Troubleshooting Matrix
| Symptom | Likely Root Cause | Corrective Action |
|---|---|---|
| RET_VAL = 8090 on D_ACT_DP | ADDR points to a process image address, not a diagnostic address | Use the slot-0 diagnostic address, not the input/output address |
| RET_VAL = 80A1 | Target is a PROFIsafe device | Do not deactivate; remove from project or use station substitution |
| ReconfigIOSystem not visible in V17 | Hardware Support Package not installed | Install HSP matching CPU 1214C firmware V4.4+ |
| CPU transitions to STOP after D_ACT_DP | OB86 not loaded | Create a dummy OB86 (empty) to keep CPU in RUN on station failure |
| Diagnostic buffer still shows 0x013C | Deactivation called from OB1 after OB86 already fired | Move call to OB100/OB101 |
| Deactivation works once, then CPU enters STOP on next cycle | Mode set to 2 (deactivate) but device is being re-AR'd by stack | Add MODE=0 (status) check and only deactivate on first scan |
| 100 devices configured, CPU sluggish | Exceeds AR limit (CPU 1214C = 16 IO devices max as controller) | CPU 1214C supports up to 16 PROFINET IO devices in the controller role. For more, upgrade to CPU 1215C (32) or CPU 1217C (64), or use ET200SP as a downstream controller |
Edge Cases and Field Notes
- Device name vs. IP address. PROFINET devices are identified by their station name, not IP. If two sites use the same device name (e.g., "et200sp-turbine-1"), the CPU at site B will see site A's device when networked together. Always encode the site in the device name (e.g., "et200sp-FR-S01-T01").
-
OB86 priority. If
OB86is loaded with priority higher thanOB1, it preempts and may race withD_ACT_DPinOB100. ConfigureOB86with priority 7 andOB100with priority 27 to ensure restart completes first. -
Firmware V4.5 behavior change. From firmware V4.5 onward, the diagnostic buffer no longer records a 0x013C event for devices deactivated via
D_ACT_DPinOB100. Older V4.2/4.3 firmware still records the entry even on successful deactivation. Check the CPU's Online & Diagnostics → Diagnostics tab to confirm the firmware version. -
PROFINET vs. PROFIBUS mix.
D_ACT_DPworks on both, but the ADDR interpretation differs. On PROFINET, use the diagnostic address of the IO device's slot 0. On PROFIBUS, use the slave's diagnostic address (slot 0 of the slave).
Related Official Documentation
For deeper reference on the methods described here:
- Siemens Support Entry 105020938 – Enable/Disable DP slave and PROFINET IO device
- Siemens Support Entry 29430270 – Which options are available in the TIA Portal to deactivate an IO device?
- SIMATIC S7-1200 Manual Collection – CPU Error Behavior
Why does D_ACT_DP return 0x8090 even though the device is in my project?
The ADDR parameter must be the diagnostic address of the slot-0 submodule, not the process image address of the input or output data. Open the device's PROFINET interface properties in TIA Portal and read the diagnostic address from the "PROFINET" tab – this is the only valid input for D_ACT_DP on a PROFINET IO device.
Can I deactivate a PROFIsafe or safety-integrated IO device with D_ACT_DP?
No. The PNIO stack rejects deactivation of PROFIsafe stations with RET_VAL = 80A1. Safety-integrated devices must remain configured and monitored; remove them from the project if they are not present at a given site rather than attempting to mask their absence.
ReconfigIOSystem does not appear in my TIA V17 library – how do I install it?
Import the LCC_V17.zip library via Options → Manage Libraries. If the block is still missing, install the Hardware Support Package matching your CPU 1214C firmware (V4.4 or higher). The block's type references depend on PNIO system constants generated only by the matching HSP.
How many PROFINET IO devices can a CPU 1214C DC/DC/DC control?
The 6ES7214-1AG40-0XB0 supports a maximum of 16 PROFINET IO devices in the controller role. For larger fleets, upgrade to a CPU 1215C (32 devices) or CPU 1217C (64 devices), or place an ET200SP PN/PN coupler downstream of the S7-1200 to offload AR management.
Why does the diagnostic buffer still log 0x013C even after a successful D_ACT_DP call?
The deactivation call must execute before OB86 fires. Call D_ACT_DP from OB100 (warm restart) or OB101 (hot restart), not from OB1 or OB86. On CPU 1214C firmware V4.5 and later, the entry is no longer recorded for successfully deactivated stations; older firmware versions still log it even on success.