S7-400 PROFINET Station Failure: HMI Alarm via OB 86

David Krause18 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

Resolving PROFINET Station Failure Alarms on S7-400 with TIA Portal

Engineer field notes: when an S7-400 CPU 414-3 supervises a PROFINET IO line of ET 200S stations and Festo valve terminals, the diagnostic buffer captures the loss-of-station event in OB 86 but the operator sees nothing on the TP2200 Comfort HMI. The objective is to translate every station failure into an indexed trigger bit and surface that bit as a discrete alarm with the station name. This reference documents three implementation paths that work in TIA Portal V12 SP1 and later, and ends with a commissioning checklist and a troubleshooting matrix.

1. Problem Statement

A discrete-machine line is controlled by a SIMATIC S7-400 (CPU 414-3 PN/DP, MLFB 6ES7414-3EM05-0AB0). Six ET 200S heads (IM 153-4, MLFB 6ES7153-4AA01-0XB0) and nine Festo CTEU/CPV valve terminals are spread on PROFINET. The PROFINET diagnostic buffer records the rack failure in OB 86, but the operator cannot distinguish "Station 3 dropped" from "Station 5 dropped" because no dedicated alarm is configured. The required outcome is one alarm per station with a stable station number and timestamp, displayed in the active alarm window of both TP2200 Comfort panels (MLFB 6AV2124-1MC01-0AX0).

Constraints encountered in the original project:

  • Engineering tool: TIA Portal V12 SP1 (no S7-1500-style Program_Alarm by default; SCL is available).
  • No external diagnostics server (no PNIODiag FB126) is available unless migrated from STEP 7 V5.5.
  • Two TP2200 Comfort panels are on the same PROFINET subnet; alarms must be visible on both.
  • The HMI must not require project-specific scripts; standard "Bit-triggered" alarms with text lists are preferred.

2. System Architecture and Component Identification

Use the exact part numbers below to validate that the firmware and hardware features referenced in the article are present on the running plant.

Component MLFB / Article No. Role in PROFINET Notes
CPU 414-3 PN/DP 6ES7414-3EM05-0AB0 IO Controller Firmware ≥ V6.0 required for PROFINET IO; OB 86 is present in all S7-400 CPUs.
IM 153-4 (ET 200S) 6ES7153-4AA01-0XB0 IO Device (head) PROFINET interface module; supports diagnostic alarms; revision ≥ 6.
TP2200 Comfort 6AV2124-1MC01-0AX0 HMI (WinCC Comfort) 22" Comfort Panel; supports bit-triggered alarms; communicates with the CPU over TCP/IP, not PROFINET IO.
Festo CTEU / CPV Various (e.g. 8047001) IO Device (valve terminal) PROFINET slave; supports channel diagnostics and port diagnostics.

Confirm the device name assigned in the PROFINET topology editor: im153_4_st1 through im153_4_st6 for the ET 200S heads, and vt1 through vt9 for the valve terminals. The PROFINET device name is the canonical identifier used by OB 86 and is recommended for the alarm text.

Network topology (logical view):

              +---------------------------+
              |   CPU 414-3 PN/DP        |
              |   6ES7414-3EM05-0AB0    |
              |   PROFINET IO Controller |
              +-------------+-------------+
                            |
        +-------------------+--------------------+
        |                   |                    |
   +----+----+         +----+----+         +----+----+
   | IM 153-4|         | IM 153-4|   ...   | Festo  |
   | st1     |         | st2     |         | vt1..9 |
   +---------+         +---------+         +---------+

   +-- TP2200 Comfort #1 (TCP/IP to CPU)
   +-- TP2200 Comfort #2 (TCP/IP to CPU)

3. PROFINET IO Diagnostics Architecture

Per the PROFINET alarm definition, an alarm is "an abnormal or unexpected event within an IO-Device" reported acyclically to the IO-Controller. The controller forwards the alarm to the CPU, which calls a designated Organization Block. The mapping for Siemens S7-400 is:

PROFINET Event OB Called Fault ID (W#16#) Information Available
IO Device failure (station drop) OB 86 73A3 Logical base address (MDL_ADDR), station number in Z_INFO
IO Device return (station up) OB 86 73A4 Logical base address, station number in Z_INFO
PROFIBUS DP slave failure / return OB 86 7381 / 7382 Logical base address, slot
Module / channel diagnostic OB 82 39xx / 38xx Channel, channel value, channel fault type
I/O access error (process image) OB 122 n/a Area, byte address, block

OB 86 is the central entry point for "rack or station failed" and "rack or station returned". Each station has a bit position inside the word OB86_RACKS_FLTD; for distributed I/O the bit position is derived from the device number assigned in the PROFINET topology editor (slot 0 of the device = bit 0 of the head, etc.). TIA Portal V12 SP1 uses the same naming convention as STEP 7 V5.5, so the OB 86 temporary variables (EV_CLASS, FLT_ID, PRIORITY, OB_NUMBR, RESERVED_1, RESERVED_2, RACKS_FLTD, MDL_ADDR, Z_INFO, DATE_TIME) are directly accessible from STL or SCL.

If OB 86 is not present in the S7-400 program, the CPU enters STOP the moment a station drops. The diagnostic buffer will then show the entry "STOP caused by missing OB 86". This is the most common commissioning error for new S7-400 / PROFINET systems and is the first thing to verify before any other troubleshooting step.

State diagram for the alarm-bit lifecycle:

OK (bit=0) OB86 73A3 → S bit FAIL (bit=1) OB86 73A4 → R bit

4. Solution Strategy

Three independent paths exist. Pick by project constraints.

Path Best When Tooling Lines of Code HMI Standards
OB 86 + global bit array (STL/SCL) No extra packages, full S7-400 compatibility TIA Portal V12 SP1 stock ~25 LOC Yes (bit-triggered alarms)
Program_Alarm instruction S7-1500 / S7-1200 / newer S7-400 firmware with TIA V16+ TIA Portal V16+ 1 FB call per station Yes (PLC-managed alarm text)
PNIODiag FB126 (legacy) Migrating STEP 7 V5.5 project with existing diagnostics STEP 7 V5.5 → TIA migration 0 LOC (Libraries) Yes, but requires migrating FBs

Path 1 is the recommended baseline for the described system because TIA V12 SP1 ships with the standard S7-400 blocks and does not require an additional library. Path 2 is included as the modern alternative for projects that can upgrade the engineering tool. Path 3 is referenced for completeness; PNIODiag is the historical Siemens recommendation and is the answer the original investigation produced, but it requires STEP 7 V5.5 sources to migrate from.

5. Implementation Path 1 — OB 86 with Indexed Bit Array

The principle: every time OB 86 fires, write the station number into a global data block and set the corresponding bit in an array of trigger words. The HMI subscribes to the bit array; each bit drives one alarm text. The bit clears when OB 86 reports the station return.

5.1. Define the data block DB100 (alarm status, non-retain):

DATA_BLOCK "DB_Alarm_ProfiNet"
{ S7_Optimized_Access := 'FALSE' }
VERSION : 0.1
  STRUCT
   Station_Failed      : WORD ;   // bit 0..15 -> stations 1..16
   Station_Return      : WORD ;   // bit 0..15 -> return edge from OB 86
   Station_Number      : WORD ;   // last station number reported
   Fault_ID            : WORD ;   // copy of OB86_FLT_ID
   LADDR               : WORD ;   // logical address of affected device
   Station_Timestamp   : DWORD ;  // tick count from TIME_TCK()
  END_STRUCT;
END_DATA_BLOCK

5.2. OB 86 SCL body (paste into OB 86 in TIA Portal):

// __________________________________________________________________
// OB 86 - PROFINET station failure / return -> indexed trigger bits
// Temp variables of OB 86 are referenced symbolically:
//   #OB86_FLT_ID     : WORD   (W#16#73A3 failure / W#16#73A4 return)
//   #OB86_MDL_ADDR   : WORD   (PROFINET logical address of device)
//   #OB86_Z_INFO     : DWORD  (high byte = station number, low byte = slot)
//   #OB86_DATE_TIME  : DATE_AND_TIME
// __________________________________________________________________

CASE WORD_TO_INT(#OB86_FLT_ID) OF
  W#16#73A3:   // -------- STATION FAILURE --------
    "DB_Alarm_ProfiNet".LADDR    := #OB86_MDL_ADDR;
    "DB_Alarm_ProfiNet".Fault_ID := #OB86_FLT_ID;
    "DB_Alarm_ProfiNet".Station_Number :=
        WORD_TO_INT(SHR(IN := WORD_TO_DWORD(#OB86_Z_INFO), N := 8)
                    AND DWORD#16#000000FF);
    "DB_Alarm_ProfiNet".Station_Timestamp := TIME_TCK();
    CASE "DB_Alarm_ProfiNet".Station_Number OF
      1:  "DB_Alarm_ProfiNet".Station_Failed.%X0  := TRUE;
      2:  "DB_Alarm_ProfiNet".Station_Failed.%X1  := TRUE;
      3:  "DB_Alarm_ProfiNet".Station_Failed.%X2  := TRUE;
      4:  "DB_Alarm_ProfiNet".Station_Failed.%X3  := TRUE;
      5:  "DB_Alarm_ProfiNet".Station_Failed.%X4  := TRUE;
      6:  "DB_Alarm_ProfiNet".Station_Failed.%X5  := TRUE;
      7:  "DB_Alarm_ProfiNet".Station_Failed.%X6  := TRUE;
      8:  "DB_Alarm_ProfiNet".Station_Failed.%X7  := TRUE;
      9:  "DB_Alarm_ProfiNet".Station_Failed.%X8  := TRUE;
      10: "DB_Alarm_ProfiNet".Station_Failed.%X9  := TRUE;
      11: "DB_Alarm_ProfiNet".Station_Failed.%X10 := TRUE;
      12: "DB_Alarm_ProfiNet".Station_Failed.%X11 := TRUE;
      13: "DB_Alarm_ProfiNet".Station_Failed.%X12 := TRUE;
      14: "DB_Alarm_ProfiNet".Station_Failed.%X13 := TRUE;
      15: "DB_Alarm_ProfiNet".Station_Failed.%X14 := TRUE;
      ELSE ; // outside mapped range - record to diagnostic buffer
    END_CASE;

  W#16#73A4:   // -------- STATION RETURN --------
    "DB_Alarm_ProfiNet".LADDR    := #OB86_MDL_ADDR;
    "DB_Alarm_ProfiNet".Fault_ID := #OB86_FLT_ID;
    CASE WORD_TO_INT(SHR(IN := WORD_TO_DWORD(#OB86_Z_INFO), N := 8)
                     AND DWORD#16#000000FF) OF
      1:  "DB_Alarm_ProfiNet".Station_Failed.%X0  := FALSE;
      2:  "DB_Alarm_ProfiNet".Station_Failed.%X1  := FALSE;
      3:  "DB_Alarm_ProfiNet".Station_Failed.%X2  := FALSE;
      4:  "DB_Alarm_ProfiNet".Station_Failed.%X3  := FALSE;
      5:  "DB_Alarm_ProfiNet".Station_Failed.%X4  := FALSE;
      6:  "DB_Alarm_ProfiNet".Station_Failed.%X5  := FALSE;
      7:  "DB_Alarm_ProfiNet".Station_Failed.%X6  := FALSE;
      8:  "DB_Alarm_ProfiNet".Station_Failed.%X7  := FALSE;
      9:  "DB_Alarm_ProfiNet".Station_Failed.%X8  := FALSE;
      10: "DB_Alarm_ProfiNet".Station_Failed.%X9  := FALSE;
      11: "DB_Alarm_ProfiNet".Station_Failed.%X10 := FALSE;
      12: "DB_Alarm_ProfiNet".Station_Failed.%X11 := FALSE;
      13: "DB_Alarm_ProfiNet".Station_Failed.%X12 := FALSE;
      14: "DB_Alarm_ProfiNet".Station_Failed.%X13 := FALSE;
      15: "DB_Alarm_ProfiNet".Station_Failed.%X14 := FALSE;
      ELSE ;
    END_CASE;
END_CASE;

If the IM 153-4 head variant you are using reports the station number in a different byte of Z_INFO, swap the SHR argument or fall back to MDL_ADDR by comparing against the configured PROFINET base addresses (a CASE on the configured addresses is straightforward to add). On the 6ES7153-4AA01-0XB0 with the standard slot mapping, the high byte of Z_INFO is the device number (1-15) when the head is configured as device 1-15 in the PROFINET topology.

Edge case: the S7-400 calls OB 86 with the priority of the failure event. The CASE in OB 86 must not block — keep the logic lean (no function calls, no loops). If you need a longer computation, post the values into DB100 and process them in OB1 (priority 1) the next cycle.

6. Implementation Path 2 — Program_Alarm Instruction (TIA V16+)

The Program_Alarm instruction monitors a boolean signal SIG and emits a PLC-side program alarm when the signal changes. The alarm text is declared inside the FB call, and the HMI receives the alarm via the standard WinCC alarm mechanism — no manual text list wiring required. This is the cleanest path on S7-1500 / S7-1200 / newer S7-400 firmware (FW ≥ V6.4 with TIA V16+).

// One Program_Alarm call per station in OB1
"inst_Program_Alarm_St1"(
  SIG              := "DB_Alarm_ProfiNet".Station_Failed.%X0,
  ID               := 0,
  EV_ID            := 16#0001_0001,   // unique per station
  SEVERITY         := 1,
  MSG_TYP          := 1,              // 1 = Acknowledgement required
  ACK_STATE_REQ    := FALSE,
  ENABLE           := TRUE,
  ...);

For the operator, the alarm text appears in the active alarm window of both TP2200 panels and can be filtered by EV_ID. No DB is required for the bit. The drawback is that TIA Portal V12 SP1, used in the original project, does not expose Program_Alarm in the instruction catalog for S7-400. Migrate to TIA V16+ or V18 to use this path.

Cross-reference: the PROFINET alarm definition describes an alarm as "an abnormal or unexpected event within an IO-Device" reported to the IO-Controller. The Program_Alarm instruction creates a similar construct on the controller side: an event the controller reports to the HMI, with the same "alarm comes in, must be acknowledged" semantics.

7. Implementation Path 3 — PNIODiag FB126 (STEP 7 V5.5 Migration)

PNIODiag is a free diagnostics library that contains FB126 PNIO_DIAG, FB127 PNIO_BASIC, FB128 PNIO_ANA and others. The library is shipped as STEP 7 V5.5 source and is the historical answer to the question "how do I get a single error bit out of PROFINET". It works on S7-300, S7-400, and S7-1500. To use it in a TIA Portal project:

  1. Open the original STEP 7 V5.5 project that contains PNIODiag.
  2. Use the TIA Portal "Migrate project" wizard; the FB126 / FB127 / FB128 source containers move into the TIA project as "External sources".
  3. Compile the migrated sources; the FBs are added to the master program.
  4. Call PNIO_DIAG in OB1 (cyclically) or in OB 86. The FB writes one bit per station into an output array.
  5. Map the output array to the TP2200 alarm tags exactly as in Path 1.

This is the path that the original investigation produced. It works, but it requires the STEP 7 V5.5 sources to be available; without them the FBs must be sourced separately from the Siemens Industry Online Support portal. Note that PNIODiag was developed for PROFIBUS and PROFINET alike and is robust on both, but it does not surface per-channel diagnostics on the ET 200S — use the Path 1 combination of OB 86 and OB 82 for per-channel faults.

8. HMI Alarm Configuration on TP2200 Comfort

The TP2200 (6AV2124-1MC01-0AX0) is configured in TIA Portal under "HMIs". Once the PLC tag DB_Alarm_ProfiNet.Station_Failed.%X0..%X14 exists, configure the alarms as follows.

  1. Open the HMI device in the project tree → Alarms → Bit-triggered alarms.
  2. For each station, add one row with:
    • Trigger tag: DB_Alarm_ProfiNet.Station_Failed.%X0 (and X1..X14).
    • Alarm text: e.g. "PROFINET station ET200S-1 unreachable", "PROFINET station ET200S-2 unreachable", …
    • Alarm class: "Errors" (the default red class with acknowledgement).
  3. Set PLC → HMI tag update to "Cyclic" with a 500 ms polling interval; the Comfort panel handles 500 ms comfortably for 15 tags.
  4. In the screen, place an Alarm view (Controls → Alarm view) bound to the "Errors" class. Both TP2200 panels inherit the same alarm configuration when the HMI is synchronised in TIA Portal (Project → HMI synchronisation).
  5. Optional: bind a tag-logger to DB_Alarm_ProfiNet.Station_Timestamp to record the moment of the event in an Excel/CSV archive for post-incident review.
Important: The TP2200 tag update must be set to "Cyclic" and the DB must be marked as "Accessible from HMI" (right-click the DB → Properties → General → tick "Accessible from HMI"). Without this, the HMI cannot read the DB even though the tag link is configured. The "Accessible from HMI" attribute is the single most common reason that a tag stays at zero in the watch table on the HMI side even when the bit is clearly TRUE in the PLC.

Bit-triggered alarms and the Program_Alarm path produce the same UX (the alarm text appears in the "Errors" window with a timestamp and the operator must acknowledge it). The difference is who owns the text: with bit-triggered alarms the text lives in the HMI text list; with Program_Alarm the text lives in the PLC source as a multi-language comment on the FB instance, which is the more portable approach when the same alarm must appear on multiple HMIs in different languages.

9. Verification and Commissioning Procedure

Walk the following test plan before signing off the engineering package.

  1. Compile the project (TIA Portal → Project → Compile all). Resolve any address-resolution errors before downloading.
  2. Download to the CPU in RUN (the S7-400 supports run-time download of OBs and DBs without a stop). The CPU must be in "Run" with the key switch to RUN or RUN-P.
  3. Online → Monitoring and force: force DB_Alarm_ProfiNet.Station_Failed.%X0 = TRUE from the watch table. The "Errors" alarm window on both TP2200 panels must show "PROFINET station ET200S-1 unreachable" within 1 s.
  4. Reset the bit. The alarm must clear (move to history).
  5. Physical disconnect test: pull the PROFINET cable from the ET 200S head #3. Within 1 s OB 86 should fire, the CPU should call the failure branch, and the TP2200 should display "PROFINET station ET200S-3 unreachable".
  6. Reconnect: the failure alarm must clear within 1 s; an informational "Station 3 returned" message is optional but recommended.
  7. Test all 6 ET 200S heads and 9 valve terminals. Note the timestamp in the diagnostic buffer (Online → Diagnostics → Diagnostic buffer) and compare to the HMI alarm time. The delta must be ≤ 2 s; anything above 5 s indicates polling latency, not OB 86 latency.
  8. Test simultaneous failures: pull two cables. Both bits must set independently; the alarm window must show two entries, not one overwritten entry. This validates the indexed-bit design rather than a single shared bit.
  9. Power-cycle test: turn off an ET 200S at the head (24 V off). This is a more aggressive failure than a cable pull — the head power supply LED is off and the CPU must still log the failure within 5 s. If the failure is not reported, the PROFINET device name on the head is missing; re-assign the device name via PRONETA or the topology editor.
  10. Cold restart: MRES the CPU. The bit array in DB100 must be initialised to all-zero (the DB must be set to "non-retain" or the bit clearing will not take effect on restart). If the DB is retain, the bits will survive the MRES and the HMI will continue to show stale alarms — add a CLEAR call in OB100 that sets the WORD to 16#0000 on every restart.

10. Troubleshooting Matrix

Symptom on TP2200 Likely Root Cause Diagnostic Step Fix
No alarm when a station is disconnected. OB 86 not downloaded, or DB not linked to HMI. Online → OB 86 → "Monitor" with station disconnected; check if the OB lights up. Cross-check "Accessible from HMI" flag on DB100. Download the OB 86 source again; tick the HMI access flag on the DB.
Alarm appears but the text is the default "Alarm 0" with no station name. Alarm text list not synchronised, or the bit is wired to the wrong tag. HMI → Alarms → check the "Trigger tag" column matches DB_Alarm_ProfiNet.Station_Failed.%Xn; compile the HMI again. Re-link the trigger tag; recompile the HMI; re-download to the TP2200.
Alarm appears on TP2200 #1 but not on TP2200 #2. Only one HMI has the alarm configuration, or the HMI tag scope differs. Right-click each HMI → "Compile and download" — only the HMI whose project subtree is downloaded receives the update. Use TIA's "Project synchronisation" to push the HMI configuration to both panels.
The wrong station number is displayed. OB86_Z_INFO does not map to the device number on this IM 153-4 variant; the LADDR must be used instead. Open the online diagnostic buffer; record MDL_ADDR and the slot that the diagnostic message refers to. Replace the case statement on Z_INFO with a case on MDL_ADDR using the configured PROFINET logical addresses.
The alarm clears on disconnect but does not re-appear on reconnect-disconnect (sticky bit). OB 86 return path is not clearing the bit. Online → watch the bit while reconnecting; the return branch must fire and reset the bit. Add the W#16#73A4 return branch to the CASE in OB 86 and confirm the same Z_INFO / MDL_ADDR is decoded.
CPU goes to STOP when a station is disconnected. OB 86 is not in the program; the S7-400 stops on unhandled OB 86 by default. Project tree → Program blocks → check that OB 86 is present. Add OB 86 (even an empty one) to the program. The CPU will then continue to run on station failure.
Bits survive a CPU MRES / restart. DB 100 is configured as retain. DB properties → "Retain" → "Set retain"; change to "non-retain". Switch to non-retain, or add a CLEAR in OB100 to reset the array on startup.
Stale "Station 3 unreachable" alarm keeps appearing after fixing the cable. OB 86 return path does not fire because the head power was cycled before reconnection. Diagnostic buffer → look for the W#16#73A4 event. Issue a manual reset of the bit from the HMI (operator button) and add the same to the return branch.
Alarm class "Errors" does not display a red background on the TP2200. Alarm class re-numbered or the alarm view is filtered to a different class. HMI → Alarms → Classes → verify the "Errors" class has red flashing and acknowledgement enabled. Re-create or repair the alarm class; recompile the HMI.
The HMI tag stays at zero even though the DB bit is set in the PLC. DB is not flagged "Accessible from HMI" OR the HMI connection is interrupted. HMI → Connections → ping the PLC; right-click DB → Properties → General → check the HMI access flag. Tick the "Accessible from HMI" flag, recompile, re-download. If the connection is the issue, verify the subnet mask and router on the TP2200.

11. Frequently Asked Questions

Does an S7-400 CPU 414-3 call OB 86 on a PROFINET station failure, or only on PROFIBUS?

OB 86 is called for both PROFIBUS DP and PROFINET IO station failures. For PROFINET the fault ID is W#16#73A3 (failure) and W#16#73A4 (return). The logical address of the affected IO Device is in OB86_MDL_ADDR. For PROFIBUS DP the equivalent IDs are W#16#7381 / W#16#7382.

Can I see the station number directly in OB 86?

Yes. The PROFINET device number is encoded in the high byte of OB86_Z_INFO for ET 200S heads (1-15). For other device types, decode the logical address in OB86_MDL_ADDR against the configured base address in the PROFINET topology. The slot number is in the low byte of Z_INFO.

What is the difference between OB 86 and OB 82?

OB 86 reports the loss of an entire station (rack or IO Device). OB 82 reports a module- or channel-level diagnostic. For "the whole head went away" use OB 86. For "module slot 4 reports short-circuit" use OB 82. Both can coexist: the same physical fault can fire OB 86 (head gone) and OB 82 (module diagnostic) at slightly different timestamps.

Is the PNIODiag FB126 library still available for S7-400 in TIA Portal?

Yes. PNIODiag is published by Siemens as a free download on the Siemens Industry Online Support portal. The library is provided as STEP 7 V5.5 source and must be migrated into TIA Portal using the "External sources" tool, then compiled as a user library. It works on S7-300, S7-400, and S7-1500.

Why does my TP2200 not display the alarm even though the bit is set in the PLC?

Three common causes: (1) the DB is not flagged "Accessible from HMI" — the HMI sees an invalid handle; (2) the HMI alarm trigger tag is wired to a different DB or bit; (3) the HMI runtime was not re-compiled and re-downloaded after the alarm text list was changed. Open the watch table on the HMI side to verify the tag is being updated; if the value is 0, the HMI access flag is missing.

Can I trigger the alarm from the PLC side without a separate DB?

Yes. In TIA Portal V16 and later, the Program_Alarm instruction raises a PLC-side alarm that the HMI receives over the standard WinCC alarm channel — no DB required. The PROFINET device standard describes the alarm as "an abnormal or unexpected event within an IO-Device" reported to the IO-Controller, and the WinCC channel treats the PLC-side alarm in the same way.

What is the maximum number of PROFINET IO devices an S7-400 CPU 414-3 can handle?

The CPU 414-3 PN/DP supports up to 256 PROFINET IO devices in total, with a maximum of 16 devices per PROFINET IO system (line). The described system of 6 ET 200S heads + 9 valve terminals = 15 devices fits comfortably in one PROFINET IO system. For larger systems, add an IE/PB-Link or split into multiple PROFINET IO systems.

Back to blog