PROFINET ET 200M Diagnostics: SFC51, SSL, and WinCC Setup

David Krause19 min read
Industrial NetworkingSiemensTutorial / 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

1. Overview

Distributed I/O stations based on the ET 200M with the IM 153-4 PN interface module (catalog number 6ES7 153-4AA01-0XB0) communicate with a S7-300 controller (CPU 314 + CP 343-1) over PROFINET IO. Detecting a station drop-out and surfacing the event on a WinCC V6.2 SP3 SCADA requires three coordinated layers:

  1. Diagnostic event generation in the PROFINET device, signalled to the IO controller through channel diagnostics and interruption semantics.
  2. Diagnostic event capture in the S7-300 user program, using either error OBs (OB 82, OB 83, OB 86) or the System Status Lists read with SFC 51.
  3. Diagnostic event visualization in WinCC, where the bit/state from the S7 program is mapped to a tag, alarm, or system-diagnostics faceplate.

This article documents a field-proven configuration that covers all three layers, including the extended PROFINET diagnostics add-on for WinCC, sample STL logic for the SFC 51 partial list reads, and the relevant SSL IDs to query for module and station status.

2. System Architecture and Prerequisites

The reference architecture used in the original commissioning consists of:

Component Catalog Number / Version Role
Engineering station STEP 7 V5.5 + SP2/SP3 (or V5.6) Hardware configuration, diagnostic block compilation
PC runtime WinCC V6.2 SP3 SCADA visualization, alarm logging, system-diagnostics faceplates
IO controller (CPU) CPU 314 (6ES7 314-1AG14-0AB0) PROFINET IO controller via CP
PROFINET interface CP 343-1 (6GK7 343-1EX30-0XE0 or 6GK7 343-1CX10-0XE0) PROFINET IO controller interface
PROFINET devices ET 200M with IM 153-4 PN (6ES7 153-4AA01-0XB0) Distributed I/O stations; one IM per rack
I/O modules SM 321 / SM 322 / SM 331 / SM 332 (S7-300 family) Slot-mounted I/O behind the IM
PROFINET cabling Cat 5e / industrial Ethernet, copper or fiber (FO IM variant) 100 Mbit/s full duplex, switched

Prerequisites for the procedure below:

  • STEP 7 installed with the HSP (Hardware Support Package) that includes the 6ES7 153-4AA01-0XB0 IM 153-4 PN (HSP for ET 200M).
  • The IM 153-4AA01 supports PROFINET IO with diagnostics as a PROFINET IO device. See the Siemens entry 23678970 — Which PROFINET nodes support the extended PROFINET diagnostics for confirmation of supported devices.
  • The IM 153-4 is configured in HW Config under a PROFINET IO system owned by the CP 343-1.
  • WinCC V6.2 SP3 is installed with the option "ProAgent / System Diagnostics" or the system diagnostics add-on for PROFINET.

3. ET 200M IM 153-4 PROFINET Interface Specifications

The interface module 6ES7 153-4AA01-0XB0 (IM 153-4 PN, High Feature) is the central component of the ET 200M station on PROFINET. Key operating parameters relevant to diagnostics:

Parameter Value Diagnostic relevance
PROFINET interface 2 × RJ45 (integrated 2-port switch) Port link status is part of channel diagnostics
Update time 1 ms minimum, 512 ms maximum (PROFINET IO) Watchdog behaviour; loss of IO triggers OB 85 / OB 86
Diagnostics buffer Module-local, time-stamped by the IM Read with SFC 51 SSL 0x0A92 / 0x0A91 partial lists
Interruption support Yes (process, diagnostic, pull/plug, return) OB 82, OB 83, OB 85, OB 86 firing on the CPU
Slot granularity Up to 12 S7-300 I/O modules (max 12 slots) Per-slot diagnostics available through SSL 0x0A91
Device replacement without PG Supported (with topology editor) No direct effect on diagnostics, but the device name must be assigned
Note: Only the IM 153-4 variants with article number suffix ...-4AA01-0XB0 (and ...-4BA01-0XB0 for the FO version) support the full set of PROFINET diagnostics that the System Diagnostics add-on expects. Earlier ...-4AA00-0XB0 revisions have a reduced diagnostics set and should be replaced or firmware-updated for a complete experience.

4. PROFINET Diagnostic Methods Overview

Three diagnostic paths are available on the S7-300 IO controller side. They are not mutually exclusive; a robust solution combines OB-driven events for fast reaction with SFC 51 polling for cyclic state and extended PROFINET diagnostics for graphical display in WinCC.

Method Trigger Latency What it returns Best use
Error OBs (OB 82, 83, 85, 86, 100, 102, 121, 122) Hardware / firmware event Immediate (interrupt-driven) Local data with event, slot, channel Fast reaction in PLC; freeze outputs; set a station bad bit
SFC 51 RDSYSST Cyclic poll from user program OB 1 cycle (poll interval) SSL partial list with module / station state Cyclic quality code for HMI / WinCC tag
Extended PROFINET diagnostics (System Diagnostics add-on for WinCC) Automatic on PROFINET alarm Immediate on alarm Channel-level diagnostic text, topology Operator faceplate in WinCC

For a SCADA indicator ("station 1 disconnected", "station 2 disconnected"), the OB 86 path is the canonical solution because the PROFINET IO failure / return is reported as a rack failure / station failure event. The SFC 51 partial list SSL_ID = W#16#0A91 is the polling fallback when OB 86 is not written, for example on a different scan.

5. OB-Driven Diagnostic Capture

When an ET 200M station fails, the CPU enters OB 86 (Rack failure OB). The local data of OB 86 indicates which logical address (PROFINET device) has gone down or returned. Implementing OB 86 — even as an empty OB — makes the CPU enter STOP only if no handler is present; the OB content then sets a per-station status flag that the SCADA reads.

OB 86 local data structure (relevant fields):

Byte Field Meaning
0..1 Event_ID W#16#38xx for rack failure / return
2 ID_High 0x75 (PROFINET IO)
3 ID_Low Type code (0x91 = station failure, 0x92 = station return, 0x93 = module failure, 0x94 = module return, 0x9A = partial station failure)
4..5 Reserved
6..7 Length of info W#16#000C for full OB86 instance
8..9 Logical address PROFINET device diagnostic address (matches HW Config device properties)
10..11 Slot / channel Module slot, only for module events

Sample OB 86 STL (compile in STEP 7, attach to S7 program; this snippet handles the two ET 200M stations with logical addresses 100 and 101 — adjust to your HW Config):

FUNCTION_BLOCK FB 2000
TITLE = 'PROFINET station status from OB 86'
VAR
   sStation1Bad : BOOL;   // TRUE = station 1 (Addr 100) not OK
   sStation2Bad : BOOL;   // TRUE = station 2 (Addr 101) not OK
END_VAR
BEGIN
NETWORK
TITLE = 'Read event class from OB 86 local data (LDW = OW 0 of the OB instance is mapped via TEMP)
   L     #OB86_EV_CLASS     // 0x38 = outgoing, 0x39 = incoming
   L     B#16#38
   ==I
   JC    EVO                // Event is "station/IO failure"
   L     #OB86_EV_CLASS
   L     B#16#39
   ==I
   JC    EVI                // Event is "station/IO return"
   JU    END_OB86

EVO: L     #OB86_MDL_ADDR     // Logical address of the failed device
   L     W#16#0064           // 100 dec = station 1
   ==I
   JC    S1F
   L     #OB86_MDL_ADDR
   L     W#16#0065           // 101 dec = station 2
   ==I
   JC    S2F
   JU    END_OB86

EVI: L     #OB86_MDL_ADDR
   L     W#16#0064
   ==I
   JC    S1R
   L     #OB86_MDL_ADDR
   L     W#16#0065
   ==I
   JC    S2R
   JU    END_OB86

S1F: S     #sStation1Bad     // Failure of station 1
   JU    END_OB86
S2F: S     #sStation2Bad     // Failure of station 2
   JU    END_OB86
S1R: R     #sStation1Bad     // Return of station 1
   JU    END_OB86
S2R: R     #sStation2Bad     // Return of station 2
   JU    END_OB86

END_OB86: BE
END_FUNCTION_BLOCK
Caution: The exact names of the OB 86 local data symbols depend on the FB's variable declaration. In the snippet, OB86_EV_CLASS, OB86_MDL_ADDR are INTs declared in the OB 86 instance DB (TEMP) that the S7-300 generates when OB 86 is inserted. Use the symbols shown in the STEP 7 OB 86 block template; do not invent local data.

Call this FB from a cycle OB (OB 1) to publish the booleans into a data block (DB) that WinCC reads as tags. Alternatively, the OB 86 can write directly into a shared DB; both are valid.

6. SFC 51 (RDSYSST) System Status List Polling

SFC 51 RDSYSST reads System Status Lists (SSL) from the CPU. The relevant partial lists for PROFINET station and module diagnostics are:

SSL_ID (REQ) Index (SZL_HEADER / SZL_INDEX) Content Use
W#16#0A91 W#16#0000 Status of all modules / stations (rack 0 fixed, plus PROFINET stations) Per-rack module status: 0 = OK, 1 = module defective, 2 = not configured, 3 = inaccessible
W#16#0A92 W#16#0000 (rack), W#16#0001..000C (slot) Channel diagnostics for a module Read channel-level PROFINET diagnostic records
W#16#0A94 W#16#0000 Diagnostic buffer of the CPU Operator-readable history of diagnostic events
W#16#0A95 W#16#0000 Status of all racks in the PROFINET IO system Rack 0 + PROFINET stations; same format as 0x0A91 but rack-oriented
W#16#0392 W#16#0001..n PROFINET diagnosis data record (subset) Channel diagnosis for the indexed slot
W#16#0B92 W#16#0000 Diagnostic status of all PROFINET stations (S7-300 + S7-400 only) All PROFINET devices' status bits, one entry per device
W#16#0174 — Status of the PROFINET IO system (CPU 31x PN/DP) Whether PROFINET subsystem is running

The result record (SSL_HEADER) is always two words long:

  • Word 0: length of the partial list record (LEN_DATA), excluding the header.
  • Word 1: number of records returned (N_DR).

For SSL_ID W#16#0A91 (module status), each record is one word that maps to a configured slot of the CPU or a PROFINET device:

Value Meaning
0x0000 No data / no module
0x0001 Module not available / inaccessible (PROFINET station down)
0x0002 Wrong module / wrong station
0x0004 Module OK
0x0006 Channel fault exists
0x0008 Wrong parameters
0x000A Communication failure
0x000C Module stopped

Sample FC written in STL to call SFC 51 for 0x0A91 partial list (rack 0, all slots and PROFINET stations):

FUNCTION FC 1000 : VOID
TITLE = 'Poll SSL 0x0A91 and pack per-station status into DB'
VAR_TEMP
   tBusy : BOOL;
   tLen  : INT;
   tNdr  : INT;
   tErr  : INT;
   tRet  : WORD;
END_VAR
BEGIN
NETWORK
TITLE = 'Single call to SFC 51 for partial list 0x0A91'
   CALL "RDSYSST" (
        REQ             := TRUE,
        SZL_ID          := W#16#0A91,    // module status, all racks
        SZL_INDEX       := W#16#0000,    // 0 = full list
        RET_VAL         := #tRet,
        BUSY            := #tBusy,
        SZL_HEADER      := P#DB100.DBX 0.0 BYTE 4,   // 4 bytes: LEN_DATA, N_DR
        SZL_DATA        := P#DB100.DBX 4.0 BYTE 200  // large enough for full list
        );

   L     #tRet;
   L     0;
   ==I;
   JCN   ERR;          // RET_VAL <> 0 → check error class

   L     DB100.DBW 0;  // LEN_DATA (excluding header)
   T     #tLen;
   L     DB100.DBW 2;  // N_DR (number of records)
   T     #tNdr;
   JU    END_FC;

ERR: L     #tRet;
   T     #tErr;
   // Map SFC 51 error to MW 200 if desired
END_FC: BE
END_FUNCTION

After the SFC call completes (poll BUSY until FALSE), the SZL_DATA section of DB 100 contains one word per slot. Decode the words that correspond to the PROFINET devices to drive two booleans in DB 101: Station1_OK, Station2_OK. These are the tags WinCC reads.

Indexing caveat: The first record of 0x0A91 always corresponds to the CPU rack (rack 0). The PROFINET device records follow in the order of the PROFINET stations configured in HW Config. Always cross-check the index with the HW Config: in the properties of the IM 153-4, the "Device number" (also the diagnostic address) is the deterministic offset into the SZL record list. If you do not see the expected record at the expected index, the SFC returned fewer records than expected because the PROFINET subsystem is not yet synchronized.

7. Extended PROFINET Diagnostics Configuration

For a graphical representation of the diagnostic state directly in WinCC, use the Extended PROFINET Diagnostics add-on. According to Siemens entry 23678970, the extended PROFINET diagnostics is supported by the IM 153-4AA01 and requires that the option be activated in STEP 7.

STEP 7 setup (V5.5 or V5.6):

  1. Open HW Config, select the IM 153-4 of the ET 200M station.
  2. Open the dialog Properties → PROFINET IO → Diagnostics.
  3. Enable "Activate extended channel diagnostics" and, where offered, the option to forward PROFINET device diagnostics to the higher-level controller (CP 343-1 / CPU).
  4. In the Cycle tab, set the update time within 1..512 ms. For diagnostics that are aggregated in WinCC, 32..128 ms is a reasonable balance between CPU load and granularity.
  5. Compile and download the HW Config to the CPU.

For the configuration of ET 200M itself, follow the ET 200M configuration page in TIA documentation: ET 200M configuration — TIA Portal V20 documentation. The TIA Portal flow is functionally identical to the STEP 7 V5.5 flow for the diagnostic-relevant options; the same option set exists in both tools.

8. WinCC V6.2 SP3 SCADA Integration

WinCC V6.2 SP3 supports two complementary ways of consuming the diagnostic information.

8.1 Method A — Tag-based indicators (minimal effort)

  1. In STEP 7, configure the OPC / MPI / TCP connection to WinCC. The WinCC station connects to the S7-300 over TCP/IP via the CP 343-1 (Industrial Ethernet, ISO-on-TCP, RFC 1006).
  2. Expose the two booleans Station1_Bad and Station2_Bad from a shared DB (e.g., DB 101.DBX0.0 and DBX0.1) in the WinCC tag list (binary tags, length 1 bit, address DB 101 DBW 0).
  3. In the WinCC Graphics Designer, place two rectangles and bind the fill color to the tag value (e.g., red when TRUE, green when FALSE). Add the text "Station 1 disconnected" / "Station 2 disconnected" behind each.
  4. Configure an Alarm Logging entry of class "Error" that fires on positive edge of the boolean, and a "Return" message on negative edge.

8.2 Method B — System Diagnostics add-on for PROFINET

  1. Install the System Diagnostics add-on for WinCC V6.2. This is part of the ProAgent / System Diagnostics option on the WinCC setup media.
  2. Open the WinCC project, right-click Logical Connections, ensure the S7-300 connection is configured. The system diagnostics viewer requires the S7 variable service to be active.
  3. Insert the System Diagnostics faceplate from the WinCC library (under "System Diagnostics"). Place it on the process screen.
  4. On the faceplate's Configuration dialog, set the connection to the S7-300 connection. The faceplate enumerates the configured PROFINET devices from the STEP 7 project if the configuration is downloaded to WinCC via Compile OS in PCS 7 or the WinCC Symbol Export mechanism.
  5. On a station failure, the faceplate highlights the affected PROFINET device in red and shows the diagnostic text returned by the IM 153-4.

The system diagnostics add-on requires the PROFINET diagnostic data records to be forwarded by the CPU. The relevant configuration toggle is in HW Config at the CP 343-1 (or the CPU if it is a CPU 31x PN/DP): Properties → PROFINET IO → Diagnostics forwarding. Enable "PROFINET device diagnostics → Forward to higher-level system". For CP 343-1, ensure the operating mode is set to PROFINET IO controller (not just S7 communication).

9. End-to-End Configuration Procedure

  1. Verify the IM firmware. Open the ET 200M IM in HW Config → Module Information in online mode → check the firmware version. For 6ES7 153-4AA01-0XB0, firmware ≥ V4.x is required to expose all PROFINET diagnostic records used by System Diagnostics.
  2. Set the device name. In HW Config → Target system → Ethernet → Edit Ethernet Nodes, assign a unique PROFINET device name to each IM 153-4 (e.g., et200m-1, et200m-2). The device name is what the IO controller uses to address the station; a missing or duplicate name is the most common cause of a station that refuses to come up.
  3. Configure the diagnostic address. In the IM 153-4 properties, set the diagnostic address (default 0 in the slot 0, but the project may already reserve a separate one). The CPU and the IM exchange PROFINET alarms over this address.
  4. Compile the HW Config and download to the CPU and to the IMs. After the download, the CPUs and IMs go through the AR (Application Relationship) setup. Wait for the BF (Bus Fault) LED on the IM to go off.
  5. Insert OB 86 into the S7 program (project tree → Blocks → Insert New Object → Organization Block → OB 86). Without OB 86, a PROFINET station failure sends the CPU to STOP if other OBs are also missing; with OB 86 inserted, the failure is captured and the CPU continues running.
  6. Implement the OB 86 logic described in Section 5, or use SFC 51 polling from Section 6. For SCADA-grade diagnostics, implement both — OB 86 drives the immediate reaction, SFC 51 drives the cyclic HMI state.
  7. Download the S7 program to the CPU.
  8. Configure the WinCC connection to the S7-300, expose the diagnostic DB, and bind the indicators on the process screen (Section 8).
  9. Verify the alarm path: pull the Ethernet cable from one of the IM 153-4 ports and confirm that within 1..3 seconds the SCADA shows the corresponding station as disconnected and the Alarm Logging entry fires. Reconnect and confirm the return message.

10. Verification and Acceptance Test

Test Method Acceptance
Station drop-out indication Disconnect the PROFINET cable at one IM SCADA tag goes TRUE within ≤ 3 s; Alarm Logging records "Station n failure" with PROFINET diagnostic text
Station return indication Reconnect the cable SCADA tag goes FALSE; Alarm Logging records "Station n return"
OB 86 fired Online → Blocks → OB 86 instance DB OB86_MDL_ADDR contains the expected logical address; OB86_EV_CLASS = 0x38 on failure, 0x39 on return
SFC 51 result Monitor DB 100 in STEP 7 VAT On station failure, the indexed word for that station equals 0x0001 (inaccessible) or 0x000A (communication failure)
Diagnostics buffer of CPU Online → Module Information → Diagnostic Buffer Entry "PROFINET IO: Station failure" with the device name and address; entry "PROFINET IO: Station return" on recovery
System Diagnostics faceplate Trigger any of the four failure modes (cable, port, module, slot) Faceplate highlights the corresponding device in red and shows the human-readable diagnostic text
CPU remains in RUN Watch the CPU display CPU stays in RUN; SF / BF LEDs on CPU may be lit but STOP is not entered

11. Troubleshooting Matrix

Symptom Likely cause Diagnostic step Resolution
Station always red in WinCC IM device name not assigned / wrong Online → Edit Ethernet Nodes → browse Assign correct PROFINET device name; reboot the IM by power-cycle
Station red on SCADA but OB 86 not fired OB 86 not inserted; CPU went to STOP silently Online → Module Information → Diagnostic Buffer Insert OB 86 (even as empty OB) and re-download the program
SFC 51 RET_VAL = 80A1 SSL_ID not supported by this CPU / FW Check S7-300 CPU manual — SSL list supported Use a different SSL_ID; e.g., switch from 0x0B92 to 0x0A91
SFC 51 RET_VAL = 80B1 Invalid SZL_INDEX Index must be 0 for a full list Use SZL_INDEX = W#16#0000 unless a specific slot is queried
System Diagnostics faceplate empty Configuration not loaded into WinCC WinCC → Tools → Compile OS / Symbol Export Re-import the STEP 7 symbols into WinCC; restart the runtime
Faceplate shows the device but no text on failure Extended PROFINET diagnostics not activated in IM HW Config → IM properties → Diagnostics Enable extended channel diagnostics; re-download HW Config
WinCC loses the tags intermittently CP 343-1 in "S7 communication only" mode CP 343-1 properties → Operating Mode Switch to "PROFINET IO controller"; the S7 connection is then a side effect of the IO controller
CPU goes to STOP on station failure No diagnostic OBs installed at all Check the project tree for OB 82, 83, 85, 86, 100, 102, 121, 122 Insert the required OBs. As a baseline, install OB 82, OB 85, OB 86, OB 100, OB 121, OB 122
Stations 1 and 2 swap the indicators Logical address mapping inverted Compare HW Config device numbers to OB 86 / SFC 51 indices Correct the address in the OB 86 comparison or the SFC 51 index decode
BF LED on IM blinking, SF LED on CPU lit PROFINET configuration not downloaded to the CPU Online → Accessible Nodes → download HW Config Compile + download HW Config to the CPU; wait for AR to come up

12. Field-Proven Notes

  • The most common commissioning issue with the IM 153-4AA01 is the device name assignment. Always re-assign the device name with "Edit Ethernet Nodes" after a module replacement, even if the IM was repaired in the same slot with the same MAC address; the name is stored in the IM's non-volatile memory but is not always restored automatically.
  • Update time on the PROFINET IO system affects the OB 86 latency. With 32 ms update time, the OB 86 fires within 2..4 update cycles after the cable is removed — typically < 150 ms in practice.
  • When using SFC 51, do not call it from OB 1 unconditionally at the same scan rate as the IO update time. A poll period of 100..250 ms is sufficient for the SCADA tag and keeps the OB 1 cycle time low.
  • The IM 153-4AA01 only supports a maximum of 12 I/O modules in the ET 200M rack. If the project includes more slots, the IM will reject the configuration at startup. Slot 1 of the ET 200M is reserved for the power supply; the IM is slot 0 and is not counted toward the 12-module limit.
  • For a redundant PROFINET network with the IM 153-4 (PN variants only), the diagnostics from each port are reported separately. The System Diagnostics faceplate shows the affected port; the OB 86 path needs additional logic to decode the port number from the extended diagnostic data (record 0x800A).

Which SSL_ID should I poll with SFC 51 to detect a PROFINET station failure on a CPU 314 + CP 343-1?

Use SSL_ID = W#16#0A91 with SZL_INDEX = W#16#0000 to retrieve the full module status list. The PROFINET devices' status words appear after the CPU's own rack 0. A value of 0x0001 means "module not available / inaccessible" and 0x000A means "communication failure" — both indicate the station is down.

Why does the CPU go to STOP when an ET 200M station drops out?

Because none of the diagnostic OBs (OB 82, OB 85, OB 86, OB 100, OB 121, OB 122) are installed. The S7-300 enters STOP on a non-handled diagnostic event. Insert OB 86 (rack / station failure) at minimum; the CPU will then capture the PROFINET station failure without stopping.

Does the IM 153-4AA01-0XB0 support the extended PROFINET diagnostics used by the WinCC System Diagnostics add-on?

Yes, firmware ≥ V4.x of the 6ES7 153-4AA01-0XB0 supports the extended channel diagnostics. Activate "Extended channel diagnostics" in the IM properties in HW Config and forward PROFINET device diagnostics to the higher-level system in the CP 343-1 properties. See Siemens entry 23678970 for the list of PROFINET nodes that support the extended diagnostics.

How long does it take for a station drop-out to be visible in WinCC V6.2 SP3?

With the OB 86 handler implemented, the CPU flag fires within 1..4 PROFINET update cycles (typically < 150 ms at 32 ms update time). The WinCC tag picks up the flag at the next acquisition cycle (default 250 ms). The total end-to-end latency is therefore ~ 250..500 ms; the System Diagnostics add-on displays the failure on the next PROFINET alarm frame, usually within 1 second.

What is the difference between using OB 86 and SFC 51 to detect a PROFINET station failure?

OB 86 is interrupt-driven and fires immediately on the event, so it gives the shortest reaction time. SFC 51 (RDSYSST) is a polled read of the System Status List and gives a cyclic state. In a robust PROFINET diagnostic solution, use OB 86 for the immediate reaction (set a per-station bad bit, freeze outputs) and SFC 51 for the cyclic state that WinCC reads as a quality tag. The two are complementary, not redundant.

Back to blog