Problem Overview
A Siemens SIMATIC S7-1500F fail-safe CPU, programmed in TIA Portal V20, unexpectedly transitions to STOP mode on an Automated Guided Vehicle (AGV) after a long period of reliable operation. The diagnostic buffer records the internal error code 16#75D1 and points to FB 32805 as the block that issued the STOP instruction. Because the F-CPU arbitrates the safety logic that drives the vehicle's laser scanners, the scanners also drop into alarm, immobilising the AGV.
This reference walks through the interpretation of the diagnostic entries, explains the role of FB 32805 in the Siemens safety runtime, isolates the realistic root causes for a STOP invoked from inside a generated fail-safe function block, and lays out a field-proven commissioning and recovery procedure. It is written for an engineer who is on-site, the line is down, and the path to recovery must be reproducible step by step.
Symptom Snapshot
| Observed Behaviour | Value / Code | Source |
|---|---|---|
| F-CPU operating mode | STOP | CPU display / web server / HMI |
| Diagnostic buffer entry | Event ID 16#75D1 (internal error, STOP requested) | TIA Portal → Online & diagnostics → Diagnostic buffer |
| Originating block | FB 32805 (system-side F-runtime FB) | Diagnostic buffer detail view |
| Originating instruction | STOP / F-STOP inside generated F-FB | Diagnostic buffer detail view |
| Downstream effect | Laser scanners enter alarm, PROFIsafe outputs de-energise | Scanner web interface / TIA diagnostic |
| Preceding hardware work | Ethernet cabling replaced between PLC and laser scanner weeks earlier | Maintenance log |
| Encoder in safety chain | Kübler safety encoder with division/remainder processing | Safety program |
| HMI → safety tag writes | Multiple HMI tags write to safety-DB variables | HMI tag list |
Understanding Diagnostic Event 16#75D1
Event 16#75D1 is a Siemens internal error class used by the F-runtime. It is logged when the F-shutdown logic of the F-CPU detects an unrecoverable violation inside the safety program and decides to leave RUN-Safe mode. The accompanying block reference in the diagnostic buffer identifies the F-runtime block that triggered the transition, not necessarily a user-written block.
The relevant Siemens FAQ for this event is published in the Siemens Industry Online Support portal as "How do you proceed if your S7-1500 F CPU goes into STOP caused by the internal error 16#75D1?" and is the canonical entry point for the official remediation steps. The official procedure to follow is documented at the Siemens support entry S7-1500F: CPU goes to STOP with internal error 16#75D1.
What 16#75D1 does NOT mean
- It is not a hardware defect of the CPU module by itself.
- It is not a generic communication error - no PROFIsafe diagnostic frame is required to read it.
- It does not always indicate a code bug - it can also reflect a runtime/integrity violation in the generated F-code, the F-signature, or the I/O consistency check.
What FB 32805 Actually Is
FB 32805 is part of the F-system library delivered with the F-CPU firmware. It is not a user block. It is a protected, know-how-protected block that the F-Compiler references in the generated F-runtime image. When the diagnostic buffer names FB 32805, it is telling you that the F-runtime invoked its built-in safe-shutdown sequence.
The exact path that leads to FB 32805 is always one of the following:
- A user-written F-FB/F-FC was generated with a logic condition that resolved to a STOP / F-STOP request. The compiler embeds a call path that ends in FB 32805.
- The F-CPU detected a violation of the F-monitoring time, F-signature, F-I/O consistency, or F-runtime self-test and called the shutdown sequence in FB 32805.
- Acknowledgement or passivation sequence on a PROFIsafe slot failed and the runtime escalated to F-STOP via FB 32805.
Root Cause Analysis
The realistic root causes for an F-CPU entering STOP with 16#75D1 on an AGV, in descending order of frequency, are listed below. Each item includes a verification step that can be executed on the affected machine without code changes.
1. Generated F-FB invoked F-STOP on a real safety condition
By far the most common cause on a vehicle that has been running for months. A real safety condition (e.g. overspeed, safe position out of range, mismatch between redundant channels) was met, the F-FB generated by the compiler reacted according to the program logic, and FB 32805 was used to take the CPU to STOP.
Verification: Read the diagnostic buffer chronologically, not just the top entry. Look for the preceding events 16#75C0..16#75CF (F-monitoring, F-signature, F-I/O passivation). The buffer often tells you which safety slot or which F-DB raised the request.
2. PROFIsafe slot passivation / watchdog
If the laser scanner or the Kübler encoder PROFIsafe slot lost communication - for example because of a marginal Ethernet cable replacement, an M12 connector not torqued to spec, or an EMC event on the AGV - the F-CPU will passivate the slot and, depending on the configured reaction, escalate to F-STOP. The replacement of the Ethernet cabling "a few weeks before" is a strong candidate for this category.
Verification:
- Open Online & diagnostics → Safety → Status of the F-I/O. A passivated slot is highlighted red.
- Open the diagnostics of the affected laser scanner (SICK microScan3 / nanoScan3, Keyence SZ-V, Omron OS32C, etc.) directly through its web server or the manufacturer's diagnostic tool and read the error history.
- Re-seat the M12 connectors; check for bent pins; check the cable shield bonding at the connector backshell.
3. F-signature mismatch after online edit
If any F-block was edited online, the F-signature in the project no longer matches the signature in the F-CPU. The runtime will refuse to keep running and call FB 32805. The signature is recomputed at every download, even if the change was "harmless".
Verification: Compare the F-signature shown in the safety printout (Project tree → Safety Administration → Print) against the one shown in Online & diagnostics → Safety → Status. If they differ, a download/recommission is required.
4. Overflow in safe arithmetic on the Kübler encoder value
You mention that the program block processes divisions on the encoder value, and the result is "always different from 0". This is significant. If the F-runtime ever evaluates a division where the divisor is 0 (or the integer division of a value by a divisor whose result exceeds the target range), the F-shutdown can be triggered. Standard user code in TIA Portal would throw a divide-by-zero OB, but the F-runtime is stricter and may route the violation to FB 32805 directly.
Verification:
- Inspect the safe arithmetic block in the F-FB. Confirm the divisor is a non-zero constant, or guard it with an F-validated comparison that routes execution to a safe path when the divisor is invalid.
- Use PLCSIM with F-capable simulation (PLCSIM Advanced with F-activation) to force the divisor to 0 and to force the dividend to its full range. The actual S7-1500F may be more sensitive than PLCSIM, so if PLCSIM does not trip, do not conclude the path is safe - it means PLCSIM's safety model differs from the real CPU's.
- Replace any unconstrained division with a safe-substitute (e.g. reciprocal with F-validated bounds, or saturate-to-limit and reject the result).
5. HMI writes to F-DB variables
HMI tags writing directly to variables in an F-DB will corrupt the safety image. Even when the value is within the data type's range, the F-runtime treats it as a signature/data-integrity violation. TIA Portal will warn at compile time, but warnings can be hidden in large projects.
Verification:
- Open Project tree → Safety Administration → Print and check the "Access protection" section.
- In Options → Cross-references, filter for F-DBs and look for HMI tag references.
- Use Compile → Software (rebuild all) and read the warning list.
Removing the HMI tags from the safety blocks is a correct first step. If the CPU still trips after the rebuild, the HMI path is not the cause; move to the next item.
6. F-I/O module pulled, swapped, or re-inserted hot
Hot-swapping an ET 200SP F-module or an F-DI/DO on a running S7-1500F without a configured removal/interruption window is interpreted as a failure and escalates to F-STOP.
Verification: Cross-check the diagnostic buffer for an F-I/O removal event 16#75C3/16#75C4 in the minutes preceding the STOP.
7. Firmware/operating-system incompatibility
TIA Portal V20 is the most recent major release line and is tied to specific F-CPU firmware versions. A downgrade of the CPU firmware to a version below the F-library version in the project will trigger 16#75D1 on the next F-cycle.
Verification: Online & diagnostics → Diagnostics → Module information - compare the F-CPU firmware with the F-library version displayed in Project tree → Safety Administration → Settings.
Systematic Diagnostic Procedure
Run the steps below in order. Each step ends with a Go / No-Go decision. Do not skip steps; later items are dependent on the earlier ones being clean.
Step 1 - Read the diagnostic buffer chronologically
- Connect TIA Portal to the F-CPU online.
- Open Online & diagnostics → Diagnostic buffer.
- Click on event 16#75D1 and read the "Details" column. Note the OB number, the F-DB number, the F-I/O slot, and the secondary event ID that follows.
- Scroll up and read the ten events that precede 16#75D1. The cause is almost always present in those events.
Step 2 - Check F-I/O passivation
- Open Online & diagnostics → Safety → Status of the F-I/O.
- For each passivated slot, expand the slot, read the manufacturer-specific diagnostic, and write down the channel and the reason code.
- Cross-reference the slot with the device on the AGV. The Kübler safety encoder and the laser scanner must be checked first because they were the focus of the recent hardware work.
Step 3 - Verify PROFIsafe addresses and the safety signature
- Open Devices & networks → [F-CPU] → Properties → Safety → F-destination address for each PROFIsafe node.
- Verify the address in the project matches the address configured in the physical device (DIP switches on the laser scanner, parameter page on the encoder).
- Verify the F-source address (PROFIsafe host address) is unique on the PROFINET segment.
- Re-read the F-signature in the safety printout and in the online view.
Step 4 - Inspect the Kübler safety encoder path
- Open the F-FB that processes the encoder value.
- Identify the division block. Replace any division where the divisor is not provably non-zero with a guarded arithmetic block.
- Confirm the encoder is configured in Single-channel or Dual-channel equivalent mode, with the safety protocol expected by the F-CPU (PROFIsafe on PROFINET or PROFIsafe on PROFIBUS, depending on the Kübler model: e.g. Sendix F5868, 8.5868 series).
Step 5 - Confirm Ethernet cabling on the safety segment
After a cable replacement, the failure mode is rarely the cable itself - it is the connector. Verify each M12 connector on the path between the F-CPU and the laser scanner:
- Torque to the manufacturer specification (M12: 0.6 Nm typical).
- Confirm the shield is bonded 360° at both ends, with a low-impedance drain wire back to the AGV chassis ground.
- Confirm the cable category matches the PROFINET requirement (Cat 5e minimum, Cat 6A for >100 Mbit/s links).
- Run a continuity test and a wire-map test on every replaced cable. A single swapped pair on a 100 Mbit/s PROFINET segment will pass link-up and fail under load.
Step 6 - Strip the HMI → F-DB path
Remove every HMI tag that points to an F-DB variable, recompile, and re-test. If the CPU no longer enters STOP, the HMI path was the cause. If it still enters STOP, the HMI path was a red herring and the cause is one of the items above.
Step 7 - Re-evaluate the F-FB and F-FC under PLCSIM Advanced with F-activation
PLCSIM Advanced is the only TIA Portal simulator that runs the F-runtime image on a virtual CPU. Activate Safety simulation in the PLCSIM instance, drive the encoder and the laser scanner inputs to their boundary values, and observe the diagnostic buffer of the virtual CPU. Note: PLCSIM may be more permissive than the real F-CPU, so a clean run in PLCSIM does not exonerate the code; only a real failure in PLCSIM confirms the code path is unsafe.
Resolution Path
Once the diagnostic buffer and the F-I/O status point to a specific root cause, the resolution is mechanical.
Resolution A - Generated F-FB invoked F-STOP on a real condition
- Identify the F-FB and the F-DB variable that holds the F-STOP request.
- Trace the condition upstream to the failing input (e.g. overspeed, safe position out of window, mismatch between two channels).
- Fix the input conditioning so that the input only asserts under genuine safety violations. Re-compile, re-sign the F-program, and re-download.
- Acknowledge the F-CPU, switch from STOP to RUN, and confirm the F-I/O slots re-integrate.
Resolution B - PROFIsafe slot passivation
- Resolve the physical layer issue (re-seat connector, replace cable, bond shield).
- Re-integrate the slot through Online & diagnostics → Safety → Acknowledge F-I/O, or through the F-DB bit wired to the F-I/O ACK input of the F-CPU.
- Confirm the slot comes back to RUN-Safe and the diagnostic buffer records the re-integration.
Resolution C - F-signature mismatch
- Stop the F-CPU.
- Perform a full download of the project (not an online delta) so the F-signature on the CPU matches the project.
- Print the safety printout, sign it, archive it in the AGV's safety file.
- Acknowledge and restart.
Resolution D - Unsafe arithmetic on the encoder value
- Open the F-FB and replace the unconstrained division with a guarded block:
IF divisor <> 0 THEN result := dividend / divisor ELSE result := safe_default; END_IF;wheresafe_defaultis a value that drives the F-DB to a passivated state, not a permissive state. - Confirm the change is visible in the safety printout.
- Re-compile, re-sign, re-download, and re-test on the AGV.
Resolution E - HMI writes to F-DB
- Remove the offending tags from the HMI tag list.
- For every value the HMI needs to display from the safety program, expose the value through a non-safety DB that is mirrored from the F-DB by an F-runtime-supported transfer block (e.g.
F-DB-outmirrored to a standard DB through a typed F-shared DB). - Bind the HMI tags to the standard DB only.
- Re-compile, re-sign, re-download.
Verification
After the resolution is applied, run the following acceptance tests on the AGV before returning it to production.
| Test | Method | Acceptance |
|---|---|---|
| Diagnostic buffer clean | Trigger a controlled safe stop, read the buffer | Only the expected events; no 16#75D1 |
| PROFIsafe slot re-integration | Power-cycle the laser scanner, observe slot status | Slot returns to RUN-Safe within the configured F-monitoring time |
| Encoder division at boundary | Drive the encoder with a test rig to the values that previously tripped the CPU | Safe passivation path is taken, no STOP |
| HMI passivity | Try to write to a safety tag from the HMI | Write is rejected; diagnostic buffer shows the rejection |
| Cable robustness | Flex the replaced cable through 90° in 30° steps | No PROFINET link drops, no passivation |
| F-signature | Compare project vs. online | Identical |
| Safety printout | Re-print and archive | Stored in the AGV's safety file |
Prevention and Long-Term Hardening
- Network discipline. Pin the F-source address, the F-destination address, and the PROFINET device names for every safety device in a commissioning sheet. Any deviation is a STOP candidate.
- Connector discipline. Use torque-limiting tools on every M12 on the safety segment. A loose connector that survives a few weeks of vibration will eventually fail under thermal cycling.
- Code discipline. No division in an F-FB without a guard. No HMI write to an F-DB. No online edit on an F-block on a running AGV.
- Change discipline. Any change to the F-program triggers a new safety printout, a new F-signature, and a documented re-commissioning. The printout is the legal evidence that the safety program is what it claims to be.
- Diagnostic buffer archiving. Configure the F-CPU's web server or the TIA Portal Trace function to archive the diagnostic buffer on every STOP. The buffer is the first thing Siemens support will ask for.
Reference Parameter Mapping
| Diagnostic ID | Meaning | Likely Follow-up Event |
|---|---|---|
| 16#75C0 | F-monitoring time exceeded | 16#75D1 STOP |
| 16#75C1 | F-CPU internal error (F-runtime) | 16#75D1 STOP |
| 16#75C3 | F-I/O passivation | 16#75D1 STOP if unacknowledged |
| 16#75C5 | F-signature mismatch | 16#75D1 STOP |
| 16#75D1 | F-STOP requested (FB 32805 invoked) | CPU transitions to STOP |
Field Notes
- The fact that PLCSIM does not reproduce the STOP does not exonerate the code. PLCSIM's F-model and the real F-runtime differ; only a real reproduction is decisive.
- Removing HMI tags is the right reflex, but it is rarely the only cause on a vehicle that has been running for months. Treat it as one item in a checklist, not as a silver bullet.
- FB 32805 is a symptom in the diagnostic buffer, not a cause. Searching the project for FB 32805 to "fix" it is a misread of the diagnostic.
- The most informative single source for this class of error is the Siemens FAQ S7-1500F: CPU goes to STOP with internal error 16#75D1 in the Siemens Industry Online Support portal. The S7-1500F System Manual on the same portal is the source of truth for the F-runtime behaviour.
- The Kübler safety encoder documentation - in particular the Kübler Sendix F-series encoder manual - must be cross-referenced to confirm the F-source address, the F-monitoring time, and the encoder profile version expected by the F-CPU.
FAQ
What does Siemens diagnostic event 16#75D1 mean on an S7-1500F?
It is the F-runtime's STOP request event, logged when the safety program reaches a state that requires leaving RUN-Safe. The accompanying block reference, typically FB 32805, is the F-shutdown sequence block, not the user code that caused the trip. The root cause is found in the events that precede 16#75D1 in the diagnostic buffer.
Can I delete FB 32805 to clear the error?
No. FB 32805 is a protected, know-how-protected F-runtime block delivered with the F-CPU firmware. Deleting or overwriting it will not clear the error and will corrupt the F-runtime image. The block reference in the diagnostic buffer is informational; the cause must be diagnosed from the surrounding events.
Is replacing the Ethernet cables a plausible cause for 16#75D1?
Yes. Marginal PROFINET cabling on a safety segment can cause intermittent PROFIsafe slot passivation, which escalates to F-STOP on the F-CPU. The most common failure is at the M12 connector - under-torqued, bent pin, or shield not bonded - rather than the cable itself. Verify the connector first, the cable second.
Why did removing the HMI tags writing to the safety blocks not stop the STOP?
Because the HMI path is one of several possible causes. If the CPU still trips after the HMI tags are removed and the project is re-compiled and re-downloaded with a new F-signature, the cause is elsewhere - typically a real F-condition in the generated F-FB, a PROFIsafe slot issue, or an unsafe arithmetic path in the F-program. Continue with the systematic diagnostic procedure.
Does PLCSIM prove the F-program is safe?
No. PLCSIM Advanced with F-activation runs the F-runtime image on a virtual CPU, but its safety model is not bit-identical to the real F-CPU. A failure reproduced in PLCSIM is decisive; a clean run in PLCSIM is not. Treat PLCSIM as a way to confirm a hypothesis, not as a way to clear a hypothesis.
What is the first thing to do when the AGV is down with this error?
Connect TIA Portal to the F-CPU, open the diagnostic buffer, and read the ten events that precede 16#75D1. The cause is almost always visible in those events. Do not start changing code before the buffer has been read; the buffer is the only diagnostic that survives a power-cycle and is the input that Siemens support will require.