1. S7-400H Redundant I/O Passivation Overview
On a Siemens SIMATIC S7-400H high-availability station (CPU 417H or CPU 414H paired in rack 0 and rack 1), redundant I/O modules of the SM 326 family are designed to keep a process running when a single channel, module, or subrack fails. When the controller cannot resolve the redundant partner address, the RED_STATUS (FB 453) block reports HIGH_ADD = 16#FFFF, every CH_DI / CH_DO driver connected to the pair enters passivation, and downstream signal quality turns BAD. The plant shows loss of feedback, drives drop to safe state, and the operator station displays quality code 0x00 ("bad") rather than 0xC0 ("good-cascade") or 0xD0 ("good-local override").
This article documents the field-proven root cause and the exact sequence that restores redundant operation. It is written against the PCS 7 V8.2 / V9.0 / V9.1 automation library and is also valid for STEP 7 V5.6 + S7-H Add-On deployments that use the same redundancy blocks (FB 450, FB 451, FB 452, FB 453, FC 451).
2. Affected Hardware, Modules, and Firmware
Symptom reproduction concentrates on the following configuration envelope. The values are the most widely deployed revisions; a similar passivation path is reported on newer versions.
| Component | Catalog Number | Minimum Firmware / Functional State |
|---|---|---|
| CPU 417H (master + standby) | 6ES7 417-4HT14-0AB0 | Firmware V6.0.x / V7.0.x |
| CPU 414H (smaller plants) | 6ES7 414-4HM14-0AB0 | Firmware V6.0.x |
| SM 326 DI 24 × DC 24 V, redundancy-capable | 6ES7 326-1BK02-0AB0 (functional state 1BL) | FW V3.0 / 1BL |
| SM 326 DO 32 × DC 24 V / 0.5 A, redundancy-capable | 6ES7 326-2BF01-0AB0 / -2BF41-0AB0 (functional state 7BL) | FW V3.x / 7BL |
| Sync module (fiber) | 6ES7 960-1AA06-0XA0 (up to 10 km) or 6ES7 960-1AB06-0XA0 (up to 10 m cabinet) | n/a |
| PCS 7 / STEP 7 + S7-H Add-On | PCS 7 V8.2 SP1 or V9.0 SP2 minimum; S7-H Add-On V6.0 | Library "Redundancy V6" |
Functional state suffixes (1BL, 7BL, etc.) are the Siemens "Ausgabestand" codes printed on the front panel after the MLFB; they identify internal hardware revisions and must be present in both racks.
3. Symptom Matrix: Identifying the RED_STATUS 16#FFFF Fault
The fault signature is consistent across all recent firmware releases. Use this matrix to confirm the diagnosis before changing configuration.
| Indicator | Expected (Healthy) | Fault Condition |
|---|---|---|
| FB 453 RED_STATUS.HIGH_ADD | Logical byte address of partner module (e.g. 16#0100) | 16#FFFF |
| FB 453 RED_STATUS.LOW_ADD | Logical byte address of active module (e.g. 16#0100) | Often still 16#0100 (only the partner is unresolved) |
| FB 453 RED_STATUS.MODE_xx bits | MODE_00 = 1 (channel selected from master) | All MODE bits = 0; both channels passivated |
| CH_DI / CH_DO quality code | 16#C0 (good-cascade) or 16#D0 | 16#00 (bad) |
| CPU diagnostic buffer (online) | No entries from OB 70 / OB 83 / OB 72 for I/O | "I/O redundancy lost" event; channel passivated entries |
| HW Config online view | Both modules show green, no diagnostic SF / BF | Both modules show green (because the modules are alive, but the partner pointer is wrong in the controller data) |
| Generate Module Drivers | Completes without errors and creates OB 83 + FC 451 automatically | Completes without errors but FC 451 is missing in OB 83, or driver is in @0 only |
Diagnostic entry read path. In STEP 7 open the online AS, navigate to PLC > Diagnostics/Settings > Diagnostic Buffer, and search for event IDs 16#73A0, 16#73A1, 16#73A2, and 16#73A3 (I/O redundancy lost / passivation). In PCS 7 the same events are mirrored in the Maintenance Station alarm log.
4. Root Cause: Missing RED_DEPA and Asymmetric Configuration
The defect is almost always one of the following, in descending order of frequency:
-
FC 451 "RED_DEPA" is not called in OB 83. PCS 7's Generate Module Drivers should drop a call to FC 451 inside OB 83 (subrack fault OB), but it does not always do so when the project was imported from an older PCS 7 version, when the CFC chart is opened in SIMATIC Manager rather than the PCS 7 Engineering tool, or when OB 83 is locked for editing. Without FC 451 the controller never publishes the active partner address; FB 453 consequently returns
16#FFFFon the high address. - HW Config pairing is set only on rack 0. The user must right-click each SM 326 module in HW Config, open Object Properties > Redundancy, and tick the partner slot. If the partner is left blank or points to the same slot in the same subrack, the high address is unresolved.
- The CFCs that contain FB 450/451/453 sit in @0 only, with no equivalent in @1. When the rack-1 CFC is missing, the partner side has no driver. The controller reports the master as passivated from the partner's perspective.
- HW Config of rack 1 was not downloaded or contains a different address gap. Both racks must have identical I/O layout and identical start addresses. If rack 1 has been edited, even slightly, the redundancy consistency check inside the H-CPU fails.
-
Firmware mismatch on the two SM 326 modules. The diagnostic buffer entry "Module
functional state differs" indicates a 1BL vs. 1BN functional-state mismatch; the H-CPU refuses to bind the redundancy pair. - The CH_DI block is connected to the wrong process image partition (PIP). The driver PIP must match the one configured in HW Config (default PIP 1 for the default OB1 process image). A mismatch leaves the high address permanently "not found".
5. Required Redundancy Library Blocks
PCS 7 / S7-H Add-On ships the following FBs. All are in the "Redundancy V6" library ("PCS 7 Library V90" or "PCS 7 APL V8.2") and must be present in the S7 program container of the AS.
| Block | Name | Function | Call Site |
|---|---|---|---|
| FB 450 | RED_IN | Reads two physical input words (channel A and channel B), returns the value with the better quality and a status word | CFC @0, called from the CH_DI block |
| FB 451 | RED_OUT | Writes a value to two physical output words; matches updates and surfaces a passivation flag | CFC @0, called from the CH_DO block |
| FB 452 | RED_DIAG | Diagnostic block; returns detailed event flags per channel | Diagnostics CFC (optional but recommended) |
| FB 453 | RED_STATUS | Returns the active low and high I/O addresses of the redundant pair plus MODE bits | Diagnostics CFC or inside the CH_DI/CH_DO block |
| FC 451 | RED_DEPA | Depassivates channels after OB 70 / OB 83 / OB 72 events | Must be called in OB 83 (mandatory) and recommended in OB 70 / OB 72 |
| OB 70 | I/O redundancy loss | Triggered when a redundant module pair loses one side | Loaded automatically by S7-H Add-On |
| OB 72 | CPU redundancy loss | Triggered when standby CPU drops out of sync | Loaded automatically by S7-H Add-On |
| OB 83 | Insert/remove module / subrack fault | Triggered when a module is removed, inserted, or a redundancy relationship breaks | FC 451 call must be inserted manually if Generate Module Drivers omits it |
Generate Module Drivers normally instantiates FB 450/451/453 and CH_DI/CH_DO in the @0 master chart, places the partner instances in @1, and creates the FC 451 call inside OB 83. If the call is missing the symptom described in Section 3 appears immediately after download.
6. Step-by-Step Resolution Procedure
Apply the following sequence. Steps 1-3 are mandatory; steps 4-8 cover every documented variation. The full procedure is rated engineering time 30-90 minutes plus a 60-90 minute AS compile / download cycle on a large project.
Prerequisites
- PCS 7 V8.2 SP1 or later with the S7-H Add-On installed; or STEP 7 V5.6 SP2 + S7-H Add-On V6.0.
- Active project license for the affected AS (redundancy blocks consume additional runtime license counters).
- Step 7 ES with the affected S7 program open online to the master CPU.
- Authority to perform a download (full or delta) and to switch the OS if needed.
Step 1 - Verify FC 451 is inside OB 83
- In SIMATIC Manager, expand the S7 program of the affected AS, open Blocks > OB 83.
- Open the OB 83 in FBD or STL view. Confirm that segment 1 contains a call to
CALL FC 451. - If the call is missing, open the @1 CFC (the redundancy partner chart) and add the call manually:
CALL FC 451 (no parameters)in the first network of OB 83. - Recompile and download the changed blocks (delta download is sufficient).
Step 2 - Verify HW Config pairing in both racks
- Open HW Config, select the SM 326 module in rack 0 (slot X), right-click and choose Object Properties > Redundancy.
- Tick "Operate in redundant mode" and select the partner slot (rack 1, same slot number). Click OK.
- Repeat for the partner module in rack 1 and verify that it points back to rack 0, slot X.
- Save and recompile HW Config. Download the new hardware configuration to both CPUs (rack 0 first, then rack 1) so the operating system images are identical.
Step 3 - Verify CFC presence on both racks
- Switch the chart view to Plant View > AS x > CFC > @0 and @1.
- Open the chart that owns the redundant I/O driver. Confirm that FB 450 / FB 451 / FB 453 are present.
- In @1, confirm the partner instance exists. If the @1 chart is empty, copy the chart from @0 with Chart > Copy > To rack 1 and recompile.
Step 4 - Re-run Generate Module Drivers
- In the CFC editor, choose Options > Chart > Generate Module Drivers.
- Select the affected signal modules; click OK.
- After generation, open OB 83 and confirm that FC 451 was re-inserted.
Step 5 - Force a complete OB 83 / FC 451 reload
If FC 451 was present in the offline program but the controller still reports passivation, perform a full block rebuild of the S7 program:
- Mark the Blocks container, choose Edit > Delete > All blocks in offline container.
- Right-click the S7 program and choose Compile > All (rebuild). This step regenerates OB 83, OB 70, OB 72, FC 451, and the system data from the S7-H Add-On templates.
- Perform a full download to both CPUs (Halt > Download > Run).
Step 6 - Check that OB 70 and OB 72 also call FC 451
While OB 83 is the most important, depassivation should be issued from any redundancy-failure OB. Add the same CALL FC 451 to the first network of OB 70 and OB 72 to ensure consistent recovery. OB 72 is generated automatically with an FC 451 callout; OB 70 is sometimes missing it on imported projects.
Step 7 - Validate the redundancy I/O addresses
Open the S7 program, choose PLC > Redundancy > I/O Redundancy, and inspect the active address list. The "High address" column should now show the partner's logical byte address (for example, the SM 326 DI at I 256.0 in rack 1 reports HIGH_ADD = 16#0100). If the partner address still shows 16#FFFF, repeat step 2 with attention to slot numbering.
Step 8 - Recompile OS and run an operator-level test
- Trigger an OS compile to push the new status to the WinCC faceplates.
- On the Maintenance Station, navigate to the redundant I/O faceplate and verify the quality stamp is now 16#C0 (good-cascade).
- Simulate a module removal (with the station in single-channel) to confirm passivation/depassivation behaves correctly before returning to redundant mode.
7. Verification and Commissioning Checks
Use the following checks before signing off the fix. Each check is fast and can be run on a live plant if the appropriate operator protections are in place.
-
RED_STATUS inspection. In a CFC test view on the master chart, look at FB 453 outputs:
LOW_ADDandHIGH_ADDmust be non-zero, equal, and equal to the I/O area of the SM 326 modules (for example, both = 16#0100 for an I 256-257 address).MODE_00= 1 indicates the master side is selected. - Diagnostic buffer scan. The buffer should show no passivation events after FC 451 was inserted. Filter for event ID 16#73A3 ("redundancy restored") to confirm that the system acknowledges the fix.
- Forced channel test. Force the input from a digital test sensor; confirm the value arrives on CH_DI on both rack 0 and rack 1 faceplates. Switch the redundancy link status (SF LED on the standby CPU); the active channel should swap from master to standby without process interruption.
- OB 83 stack. Induce a controlled subrack fault (for example, pull the partner module) and confirm OB 83 runs without CPU STOP and FC 451 issues a depassivation on the way out.
- OS faceplate quality. The WinCC quality code on the I/O faceplate must display 0xC0 (good-cascade) for redundant variables; 0xC0 indicates that the driver selected a value from a non-passivated channel.
8. Field-Proven Configuration Tips and Pitfalls
Lessons learned from multiple field interventions on PCS 7 V8.x and V9.x redundant plants.
- Address gap rule. Always reserve a contiguous I/O address range (for example, I 256-I 287, Q 256-Q 287) for SM 326 modules. PCS 7's CFC needs at least 4 bytes of headroom for the redundancy housekeeping, so leave a 16-byte gap above the highest redundant address.
- PIP consistency. If the process image partition is anything other than the default PIP 0 / OB 1, verify that the partner I/O PIP matches. A common mistake is to put rack-0 modules in PIP 1 and rack-1 modules in PIP 0; the H-CPU treats that as a logical mismatch.
- FC 451 as the single depassivation call. Avoid calling FC 451 from a cyclic OB 1 interrupt (time-of-day OB or cyclic interrupt OB); this can cause depassivation storms after planned maintenance. The official call sites are OB 70, OB 72, and OB 83.
- Manual depassivation button. Many plants add a manual "Reset redundancy" button that calls FC 451 in a single-instance background OB (for example, OB 100 start-up). Use this only as a manual recovery tool, not as the primary depassivation path.
- Hardware revision ("Ausgabestand"). Mixing 1BL and 1BN functional states inside one redundant pair is the most common hardware-side cause of passivation that survives a clean software fix. Always store the partner module's functional state in your asset record.
- Compile-time order. Compile CFC charts before HW Config, not after. Generating module drivers after HW Config sometimes overwrites OB 83 and removes the FC 451 call.
- Importing projects from older PCS 7. When migrating from PCS 7 V7.x to V8.x, the OB 83 template changes. Use Update block templates from the S7-H Add-On, then re-run Generate Module Drivers, then verify the FC 451 call survived.
9. Quick Diagnostic Script (Optional)
Add a small SCL block to your diagnostics CFC to log RED_STATUS values on each redundancy loss event. The block can be written to a data block and pulled into WinCC via a status tag, so a maintenance engineer can see the last known LOW_ADD / HIGH_ADD without going online.
// RED_STATUS monitor (SCL, run in OB1 or a 100 ms cyclic OB)
FUNCTION "FB_RED_STAT_MON" : VOID
VAR_INPUT
iRedStatBlock : BLOCK_FB; // instance of FB 453
END_VAR
VAR_TEMP
tLow : WORD;
tHigh : WORD;
END_VAR
BEGIN
tLow := WORD_TO_INT(iRedStatBlock.LOW_ADD);
tHigh := WORD_TO_INT(iRedStatBlock.HIGH_ADD);
IF tHigh = 16#FFFF THEN
"DB_RED_LOG".LastEvent := 16#0001; // passivation active
"DB_RED_LOG".HighAddLast := tHigh;
END_IF;
"DB_RED_LOG".LowAdd := tLow;
"DB_RED_LOG".HighAdd := tHigh;
END_FUNCTION
The SCL block is provided for reference; the equivalent logic in STL is also acceptable.
10. Related Standards and Documentation References
The fix is fully described in the official Siemens manuals. The most relevant documents are:
- SIMATIC S7-400H High Availability Systems, System Manual (Siemens, edition 2017, A5E00271259).
- PCS 7 Process Control System, Operator Station Manual (Siemens, edition 2019, A5E31741202).
- SIMATIC PCS 7 APL Library V8.2 / V9.0, Function Manual (Siemens, A5E35150060).
- S7-H Add-On for SIMATIC S7-400H, Installation and Configuration Manual (Siemens, A5E00799952).
Frequently Asked Questions
What does RED_STATUS HIGH_ADD = 16#FFFF actually mean?
It means the partner module of the redundant I/O pair could not be resolved by the H-CPU. The most common cause is that FC 451 (RED_DEPA) is missing from OB 83, or that the HW Config pairing on the SM 326 module does not point to the correct partner slot in rack 1.
Do I need FC 451 in OB 70 and OB 72 as well, or just OB 83?
At minimum, FC 451 must be called in OB 83 (insert/remove / subrack fault). For full coverage, place the same CALL FC 451 call in OB 70 (I/O redundancy loss) and OB 72 (CPU redundancy loss). OB 72 is usually generated with the call already present; OB 70 is frequently missing it on imported projects.
My modules show green in HW Config online, but the I/O is still passivated. Why?
The hardware is healthy, but the redundancy software path is broken. A green module means only that the module is responding on the backplane. The partner pointer inside the controller's redundancy data is the real problem; check OB 83, FC 451, and the @1 CFC first.
Generate Module Drivers reports success but OB 83 is empty. How do I fix that?
This happens on imported projects and on projects created with mismatched PCS 7 / S7-H Add-On versions. Open the S7 program, delete the offline Blocks container, recompile everything ("Compile > All (rebuild)"), and perform a full download. After the rebuild, OB 83 will contain the FC 451 call from the S7-H Add-On template.
Can I just call FC 451 in OB 1 to depassivate on every cycle?
Not recommended. The official call sites are OB 70, OB 72, and OB 83. Calling FC 451 every cycle can cause depassivation loops after a planned module removal, and the resulting write traffic on the redundant I/O bus can mask the real diagnostic event in the buffer.
How long does a full AS compile / download take on a 1.5 hour AS project?
For a mid-size PCS 7 project (about 1.5 h compile time and 40 min download), expect the full download to be 60-90 minutes, plus 10-15 minutes to re-establish the H-sync between the two CPUs. Plan for at least two hours of process downtime or coordinate with operations to run in single-channel during the work.