Resolving Siemens S7-1500 F-CPU Error 16#75D1 Variable Overflow

David Krause11 min read
Safety SystemsSiemensTroubleshooting
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

Overview of Internal Error 16#75D1

Error 16#75D1 is a STOP-class diagnostic event reported by Siemens SIMATIC F-CPUs (fail-safe controllers) in the S7-1500, S7-300, and S7-400 families. The hexadecimal code maps to a generic safety-program fault detected by the F-runtime group's integrity check. According to Siemens Support Entry 109783988, when the F-CPU enters STOP with 16#75D1, the firmware has detected a safety-critical violation inside the safety program (the F-block container compiled from the FBD/LAD/ST safety logic). The CPU cannot continue execution because doing so would compromise the SIL 2 / SIL 3 / PL d / PL e guarantee the F-system is rated for.

The same error code applies to legacy controllers running STEP 7 V5.x, as documented in Siemens Support Entry 16770414. Although the symptoms are identical, the diagnostic buffer entries, the F-signature regeneration procedure, and the recompilation rules differ between TIA Portal (S7-1500F) and STEP 7 V5.x (S7-300F / S7-400F).

Safety notice: 16#75D1 forces a transition to STOP and disables safety outputs. Production lines under F-control lose their defined safe state (typically de-energize) until the operator clears the fault and performs a safety acceptance check. Never bypass the F-block signature check to return the system to RUN.

Catalogue of Documented Causes for 16#75D1

Siemens lists several root causes in the support entries cited above. Each maps to a different failure mode inside the F-runtime group:

Cause Category Trigger Condition Typical Diagnostic Buffer Text
Arithmetic overflow / underflow Signed integer wraps beyond INT range in an F-FB or F-FC "Overflow in safety-related variable"
Invalid range on F-channel access Reading an F-I/O channel outside its declared value range (e.g., raw value > 27648 on a 6ES7 analog F-module) "F-I/O access error"
Division by zero F-runtime DIV instruction with divisor = 0 "Division by zero in safety program"
Invalid F-DB signature Online modification without F-signature regeneration "F-signature mismatch"
Passivation timeout F-I/O module removed or failed during passivation window "F-module passivation failed"
Time-out of F-monitoring F-runtime group watchdog exceeded (default 100 ms for S7-1500F) "F-monitoring time expired"

This article focuses on the first row: arithmetic overflow of a safety-related variable, which is the most common cause reported by users who observe the F-CPU entering STOP without an obvious hardware fault.

Why a Simple +1 Loop Will Not Trigger 16#75D1

Engineers frequently attempt to provoke the overflow deliberately by incrementing a safety-tag until it wraps. They observe that the value rolls over from +32767 to -32768 (for INT) or from +2147483647 to -2147483647 (for DINT) without raising any diagnostic event. This behaviour is by design, not a bug.

The F-runtime compiler emits a ADD_I or ADD_DI instruction that performs modular arithmetic in hardware. The CPU's ALU does not flag a status bit for signed wraparound because the result is mathematically well-defined in two's-complement representation. The result is wrong from a process-safety perspective (the tag no longer represents a meaningful count), but the instruction itself completed successfully and therefore does not raise 16#75D1.

The F-runtime's overflow detection operates at a different level. The error is raised when:

  1. The F-runtime invokes the F-block integrity check after the F-cycle.
  2. The integrity check compares the declared value range of an F-tag (set in the F-tag DB or declared at the F-FB interface) against the actual value produced by the F-block.
  3. If the actual value falls outside the declared range AND the tag has been marked with the "Range check" attribute in the F-block properties, the F-runtime raises 16#75D1 and forces the F-CPU into STOP.

Incrementing a tag with Range check = disabled (the default for performance reasons) will not raise the error even when the value wraps. This is why bench testing often fails to reproduce the field failure.

Conditions That Genuinely Trigger the Overflow Path

To raise 16#75D1 through overflow, the F-tag must be configured with an active range check. The following table summarizes the configuration paths in TIA Portal V17 and later:

F-Block Property Default Required Value to Trigger 16#75D1
F-tag range check (F-DB attribute) Disabled Enabled
F-tag declared range (lower bound) -32768 0 (or any positive lower bound)
F-tag declared range (upper bound) +32767 30000 (must be < INT_MAX)
F-runtime version V2.x (S7-1500F) Any; integrity check present from V1.0
STEP 7 Safety version V17 V16 or later for full overflow detection on S7-1500F

Reproducible Test Procedure in TIA Portal

  1. Create a new F-Function Block (F-FB) inside the safety program.
  2. Declare an F-tag of type INT named iTestCount.
  3. Open the F-tag properties and enable "Range check". Set lower bound to 0 and upper bound to 30000.
  4. In the F-FB body, add a network with: iTestCount := iTestCount + 1;
  5. Assign the F-tag to a non-safety retention DB only if the test is run on a real PLC. For simulation, use PLCSIM V17+.
  6. Download the safety program. The TIA Portal prompts for an F-signature regeneration; confirm.
  7. In the safety administration editor, set the F-monitoring time to its maximum (5000 ms) to avoid a parallel watchdog STOP.
  8. Force the tag to 29999 from the watch table.
  9. Single-step the F-runtime group. The next +1 instruction raises 16#75D1 and the F-CPU transitions to STOP within one F-cycle (typically < 10 ms on an S7-1516F).

The same procedure is described implicitly in the diagnostic flow of Siemens Support Entry 109783988: the entry requires the engineer to verify that the offending F-tag has a non-default range configuration before treating the error as a real overflow.

Diagnostic Workflow After a STOP Event

When a fielded F-CPU enters STOP with 16#75D1, follow the decision tree below. This sequence aligns with the official Siemens recovery procedure documented for both S7-1500F and S7-300F / S7-400F.

  1. Read the diagnostic buffer. Open TIA Portal → Online → Diagnostics → Diagnostic buffer. Note the timestamp, the F-block instance that raised the event, and any passivation events from F-I/O modules.
  2. Identify the F-runtime group. The diagnostic buffer entry lists the F-runtime group number (1, 2, or 3) and the F-FB name. S7-1500F supports up to three independent F-runtime groups.
  3. Cross-check F-tag ranges. Open the F-FB or F-DB identified in step 2 and inspect every F-tag with the range-check attribute enabled. The most likely candidate is a counter, accumulator, or position-integral value.
  4. Review the online/offline difference. If the safety program was modified since the last safety acceptance, the F-signature mismatch itself can raise 16#75D1. TIA Portal will display a yellow warning triangle on the safety program node.
  5. Check F-I/O substitution values. If the offending tag is sourced from an F-I/O channel that has been passivated, the substitution value (default 0) may push the running sum of an F-block accumulator out of range on the next cycle.
  6. Capture the safety log. The S7-1500F maintains a non-volatile safety log (up to 512 entries) accessible via the web server or TIA Portal → Safety Administration → Logs. Export the log before any restart attempt.
Mandatory safety step: Per EN ISO 13849-1 and IEC 61508, a complete safety acceptance test must be re-performed and signed off after any modification to the safety program, even if the change is a range-check attribute toggle. See Siemens Support Entry 109783988 for the acceptance template.

Restart Procedure Once the Root Cause Is Known

Restarting an F-CPU that has stopped on 16#75D1 requires a deliberate operator sequence. The firmware refuses to return to RUN automatically.

Step Operator Action Result
1 Turn the mode selector to STOP (or issue "CPU → Stop" from TIA Portal) F-CPU remains in STOP, diagnostic buffer preserved
2 Correct the F-tag range or F-block logic Offline change saved to project
3 Compile and download the safety program F-signature is regenerated; TIA Portal forces re-acceptance
4 Execute the safety acceptance test Signed test record archived in the safety log
5 Turn the mode selector to RUN F-CPU enters RUN only if all F-runtime groups pass their initial integrity check

Firmware-Specific Behaviour

The behaviour of 16#75D1 varies slightly across firmware versions. The table below summarises documented changes:

CPU Family Firmware Version Behaviour
S7-1518F-4 PN/DP V2.9.x Original behaviour; range check optional
S7-1516F-3 PN/DP V2.9.7 and later Improved diagnostic buffer entries; F-runtime group ID is logged
S7-1515F-2 PN V3.0.x Added F-tag range-check default = Enabled for new projects (opt-out available)
S7-1504F (compact) V2.6.x Single F-runtime group; identical error semantics
S7-300F (CPU 317F-2) V3.x (STEP 7 V5.x) Same code; range check configured via S7F configuration tool per Support Entry 16770414
S7-400F (CPU 416F-3) V6.x Same code; range check via CFC/SFC and S7F

Comparison: Real Overflow vs. False Positive on S7-300/400F

Engineers migrating a safety program from S7-300F or S7-400F (STEP 7 V5.x) to S7-1500F (TIA Portal) sometimes report 16#75D1 for the first time. The discrepancy usually has one of two causes:

Aspect STEP 7 V5.x (S7-300F / S7-400F) TIA Portal (S7-1500F)
F-runtime compiler S7F / Distributed Safety V6.x STEP 7 Safety integrated
Default range check on F-tags Disabled Disabled (V17), Enabled (V18+, new projects)
Overflow detection in pure ADD instruction No (only on tagged range check) No (only on tagged range check)
Overflow on DINT->REAL cast Raises OF flag in STATUS word; user must wire a check Same; S7-1500F does not auto-raise 16#75D1 on cast overflow
F-monitoring default 100 ms 100 ms (configurable 1-5000 ms)

The crucial insight is that the legacy controllers also do not raise 16#75D1 on bare modular wraparound. A migrated program with the same arithmetic will exhibit the same lack of detection unless the F-tag range check is explicitly enabled in TIA Portal.

Prevention Best Practices

  1. Enable range check on every F-tag that is an accumulator or integrator. Counters, position integrals, and runtime-hours tags are the three most common offenders.
  2. Clamp the F-tag upper bound below the INT/DINT maximum. Setting the upper bound to 32000 for a count that realistically never exceeds 10000 gives a 220% safety margin before 16#75D1 is raised.
  3. Use F-validated wrap-around logic. If the process genuinely requires a counter that rolls over (e.g., cycle counter), implement the wrap with a conditional reset: IF iCount >= 32000 THEN iCount := 0; END_IF; Place the reset logic in the same F-FB so it is part of the F-signature.
  4. Avoid implicit type promotion. Adding a DINT constant to an INT F-tag in TIA Portal promotes the operation to DINT, which silently widens the F-tag. Ensure the F-tag type matches the operation.
  5. Document the F-tag ranges in the safety requirement specification (SRS). The SRS must list every F-tag's declared range; the F-block implementation must match.
  6. Use PLCSIM Advanced for FAT coverage. Force the F-tag to within 1 count of its upper bound and verify the STOP behaviour. This step is mandatory for SIL 3 systems per IEC 61508-3.

Verification Checklist After Restart

Use this checklist to confirm that the F-CPU has returned to a valid safe state:

Check Method Pass Criterion
F-CPU operating mode TIA Portal Online → CPU operator panel RUN, green
F-runtime group status Safety Administration → F-Runtime Groups All groups show "OK"
Passivated F-modules Diagnostics → F-I/O None passivated
F-tag live values Watch table All F-tags within declared range
Diagnostic buffer Online → Diagnostics → Diagnostic buffer No pending 16#75D1 event
Safety log Web server → Safety log Acceptance test entry recorded with timestamp and signature
F-signature Safety Administration → F-Signature Matches the value recorded in the safety acceptance report

Related Diagnostic Background

Although the support entries focus on 16#75D1, the underlying overflow / underflow detection mechanism is shared with other TIA Portal diagnostics. For example, the ET 200SP analog input module AI Energy Meter CT ST (6ES7134-6PA01-0BU0) exposes an overflow / underflow diagnostic alarm on the voltage channel, configured via the "Tolerance factor overvoltage/undervoltage" parameter. The TIA Portal manual collection describes the tolerance-band logic in TIA Portal documentation for the ET 200SP AI Energy Meter. While the module's diagnostic is hardware-level rather than F-runtime-level, the same pattern of declaring an expected range and triggering an alarm on violation applies.

Troubleshooting Matrix

Symptom Most Likely Cause Fix
STOP immediately after F-program download F-signature mismatch Re-accept safety program; verify F-signature in watch table
STOP after several hours of operation F-tag range exceeded by runtime accumulation Enable range check, clamp upper bound, add conditional reset
STOP after F-I/O module replacement Passivation timeout on substitute value Check F-I/O substitution value; verify channel range
STOP with 16#75D1 but no range-checked F-tag in the project F-runtime group watchdog exceeded Increase F-monitoring time; profile F-runtime group with trace
STOP with 16#75D1 immediately after power-up Non-volatile F-tag loaded with out-of-range value Inspect retentive F-tags; clear with initial value download
STOP with 16#75D1 only on S7-1500F, not on PLCSIM PLCSIM does not emulate the F-runtime integrity check fully Test on physical hardware for final qualification

What does error 16#75D1 mean on a Siemens S7-1500 F-CPU?

It is a STOP-class diagnostic indicating that the F-runtime detected a safety-critical violation inside the safety program, such as an F-tag leaving its declared range, a division by zero, or an F-signature mismatch. The CPU cannot resume RUN until the operator clears the fault and re-accepts the safety program per Siemens Support Entry 109783988.

Why does my INT tag wrap from +32767 to -32768 without triggering 16#75D1?

The F-runtime only raises the error when the F-tag has the range-check attribute enabled and the resulting value falls outside the declared lower or upper bound. The default configuration disables the range check for performance, so a bare iTag := iTag + 1; statement performs modular two's-complement arithmetic without raising any diagnostic event.

How do I deliberately provoke a 16#75D1 overflow for testing?

Create an F-tag with type INT, enable its range-check attribute, set the upper bound to 30000, and force the value to 29999. The next cycle of the F-runtime group will raise 16#75D1 and STOP the F-CPU. Run this test on a physical S7-1500F, since PLCSIM does not emulate the full F-runtime integrity check.

Does the same error code apply to S7-300F and S7-400F?

Yes. 16#75D1 is raised on legacy controllers with identical semantics, as documented in Siemens Support Entry 16770414. The diagnostic buffer format and the F-signature regeneration steps differ from TIA Portal, but the STOP cause is the same.

Do I need to re-run the safety acceptance test after clearing 16#75D1?

Yes. Any modification to the F-block that addresses the overflow - including enabling the range-check attribute or adding a conditional reset - changes the F-signature and requires a complete safety acceptance test per EN ISO 13849-1 and IEC 61508. The acceptance record must be archived in the safety log before the F-CPU returns to RUN.

Back to blog