Resolving SIMOTION F360:B180 Technological Alarm Buffer Overflow on SIMOTION D
SIMOTION motion controllers (SCOUT / TIA-based engineering) emit a specific diagnostic event, 16# F360:B180, when the runtime can no longer queue technological alarms and warnings. The diagnostic buffer saturates because alarms are being created and acknowledged faster than the runtime can drain them, and the controller responds by transitioning to STOP. This reference walks through the exact decode of the event, the underlying anti-pattern that generates it, and the corrective engineering pattern required on a SINAMICS DCM drive system connected over PROFIBUS.
1. Problem Definition
| Field | Value |
|---|---|
| Event ID | 16# F360:B180 |
| Event Name | Message buffer overflow with technological alarms |
| Event Class | Incoming event (technology / drive alarm) |
| Reaction | SIMOTION CPU transitions to STOP |
| Additional Info 1 (Z1) | 16# 0004 0000 |
| Additional Info 2 | 16# 0000 |
| Additional Info 3 | 16# 0000 |
| Additional Info 4 | 16# 0000 |
| Additional Info 5 | 16# 0000 |
| Typical Trigger | Fast alarm acknowledge/raise loop in TecFault task or synchronous PROFIBUS faults from DCM drives |
The diagnostic buffer is the SIMOTION equivalent of the S7-1500 diagnostic event queue referenced in the SIMATIC ET 200AL equipment manual: when a new diagnostic event cannot be queued because the buffer is full, the runtime escalates and may shut down the controller.
2. Decoding Z1 / Additional Information
SIMOTION uses the German term Zusatzinformation (additional information), abbreviated Z1 through Z5 in the help system and trace dumps. They appear in:
- SCOUT diagnostic buffer (online → Target system → Diagnostic buffer)
- The diagnostic.xml file generated by the SIMOTION device trace
- The online help for the event ID (F1 on the entry)
- System event logs exported with Save service data
For 16# F360:B180, the relevant Z field is Z1 (Additional Information 1). Reading it as a 32-bit word gives:
Z1 = 16# 0004 0000
^^^^
<--- relevant byte-pair (Bits 16-31)
The upper half-word contains the qualitative reason code. The values currently documented for the F360:B180 Z1 field are:
| Z1 Code | Meaning | Typical Cause |
|---|---|---|
| 16# 0001 | Reserved / internal | n/a |
| 16# 0002 | Too many alarms in the technological alarm buffer | Fault storm from a single axis / drive |
| 16# 0004 | Alarms are created and acknowledged too fast | Acknowledgment loop in TecFault task; alarm returned immediately |
| 16# 0008 | Alarm buffer full while alarms are pending | Acknowledgment stopped but pending alarms not cleared |
A Z1 of 0004 is the smoking gun: the user program is creating and clearing technological alarms in a tight cycle inside the TecFault task.
3. Root Cause Analysis
SIMOTION organizes execution into a hierarchy of tasks. The two tasks relevant to alarm handling are:
| Task | Priority / Cycle | Allowed Operations | Forbidden Operations |
|---|---|---|---|
| MotionTask (BackgroundTask / IPOSynchronousTask) | Low to high, deterministic | Acknowledge technological alarms, call _mc_reset, motion commands | Long blocking calls |
| TecFault Task | Triggered only on a technological fault | Evaluate alarm state, read diagnostic data | Acknowledging the alarm that triggered the task |
| Synchronous Task (IPO / IPO2) | IPO cycle (e.g., 4 ms) | Position / velocity setpoint processing | Acknowledging alarms |
| TimeFault Task | Triggered on time faults | Diagnostics only | Fault reset |
Acknowledging the very alarm that triggered the TecFault task creates a re-entrant fault cycle:
- DCM drive raises alarm (e.g., 20005 Torque/Force Limit Exceeded) over PROFIBUS.
- SIMOTION runtime queues the alarm in the technological alarm buffer.
- TecFault task fires; user program executes
_mc_reset/acknowledgeAlarm. - Acknowledgment empties the alarm buffer slot and immediately re-queues the same alarm (because the underlying drive state has not changed — OFF3 was just commanded).
- Within the same TecFault execution the alarm is queued again, then acknowledged again, repeatedly, faster than the buffer can drain.
- Buffer overflow event
F360:B180is raised with Z1=0004. - Runtime enforces the configured STOP reaction and brings the CPU down.
4. The TecFault Acknowledge Anti-Pattern
The common code that produces this failure looks like the example below. It is structurally identical to the pattern documented as invalid in the SIMOTION SCOUT programming manual:
// TecFaultTask - INVALID PATTERN
IF (alarmIsPending(20005)) THEN
_mc_reset(axis := DCM_Axis_1); // WRONG: in TecFault context
_mc_power(axis := DCM_Axis_1, enable := TRUE);
END_IF;
IF (alarmIsPending(20005)) THEN
_mc_reset(axis := DCM_Axis_2); // WRONG: re-entrant
_mc_power(axis := DCM_Axis_2, enable := TRUE);
END_IF;
// ... repeated for 3 more axes
Why this fails:
- The TecFault task runs once per pending technological alarm; acknowledging the same alarm inside it triggers another TecFault firing for the same axis.
- Resetting and re-powering inside TecFault does not give the DCM time to clear the underlying PROFIdrive state word bits (e.g., bit 3 Fault present, bit 7 Warning present).
- The OFF3 (fast stop) you commanded through the drive direct word is racing with the SIMOTION enabling block, generating repeated 20005 entries.
5. The Correct Acknowledge Pattern
Move the acknowledgment out of TecFault and into a MotionTask (preferred) or BackgroundTask. The TecFault task should only observe and set flags.
// TecFaultTask - VALID PATTERN
IF (alarmIsPending(20005, DCM_Axis_1)) THEN
gDcmAxis1ResetRequest := TRUE;
END_IF;
IF (alarmIsPending(20005, DCM_Axis_2)) THEN
gDcmAxis2ResetRequest := TRUE;
END_IF;
// (continue for axes 3 and 4)
// BackgroundTask - VALID PATTERN
IF (gDcmAxis1ResetRequest) THEN
gDcmAxis1ResetRequest := FALSE;
_mc_reset(axis := DCM_Axis_1);
_mc_power(axis := DCM_Axis_1, enable := TRUE);
END_IF;
IF (gDcmAxis2ResetRequest) THEN
gDcmAxis2ResetRequest := FALSE;
_mc_reset(axis := DCM_Axis_2);
_mc_power(axis := DCM_Axis_2, enable := TRUE);
END_IF;
// (continue for axes 3 and 4)
Why this works:
- The TecFault task fires once, raises the flag, and returns — the runtime can drain the alarm buffer.
- The BackgroundTask runs at its configured cycle (e.g., 10 ms), giving the DCM drive a full PROFIBUS cycle to actually clear the fault bit before reset is re-attempted.
- Each axis gets one reset attempt per BackgroundTask pass, eliminating the create-acknowledge loop.
6. Resolving the OFF3 / Enabling Block Conflict on DCM Drives
Driving OFF3 directly into the SINAMICS DCM control word while the SIMOTION _mc_power enabling block still holds the axis in Operation Enable produces a continuous 20005 (Torque/Force Limit Exceeded) storm. Both sources are commanding motion behavior:
| Source | Action | Result on DCM |
|---|---|---|
SIMOTION _mc_power
|
Holds enable; velocity setpoint from SIMOTION | Drive in Operation Enable, following setpoint |
| Direct OFF3 (STW1 bit 2) | Fast stop ramp via drive internal profile | Drive brakes itself; setpoint still demanded |
| Combined | Drive decelerates; SIMOTION keeps pushing setpoint | Torque limit exceeded → alarm 20005 |
Correct approaches (pick exactly one, never combine):
-
Drive OFF3 through the SIMOTION axis object: use the standard
_mc_stopwith stopMode = EMERGENCY_STOP. SIMOTION sets OFF3, ramps the setpoint, and clears the enabling in a coordinated handshake. -
Drive OFF3 from the safety circuit only: route OFF3 via PROFIsafe or hardwired F-DI to the drive terminals; ensure the SIMOTION
_mc_powerenable is dropped simultaneously through a separate_mc_power(enable := FALSE)in the safety-related task. - Avoid direct OFF3 over PROFIBUS to a SIMOTION-controlled axis: this is the failure pattern in the source. SIMOTION expects to be the master of the enable state machine.
Recommended MCC / ST snippet for a SIMOTION-driven DCM axis fast stop:
// FastStop input from HMI or safety circuit
IF (gFastStopRequest) AND (NOT gFastStopActive) THEN
gFastStopActive := TRUE;
// Disable power first so SIMOTION stops demanding torque
_mc_power(axis := DCM_Axis_1, enable := FALSE);
// Then command drive-side fast stop ramp
_mc_stop(axis := DCM_Axis_1,
deceleration := 5000.0,
jerk := 10000.0);
END_IF;
IF (axisState = STANDSTILL) AND (gFastStopActive) THEN
gFastStopActive := FALSE;
END_IF;
7. Alarm Masking Strategy for 20005 and Similar
Alarm 20005 (Torque/Force Limit Exceeded) cannot be globally masked off in SIMOTION because it carries diagnostic information that the runtime uses to enforce the axis state machine. What can be done:
| Action | Where | Effect |
|---|---|---|
| Alarm masking (filter level) | Axis configuration → Alarms tab | Suppress display in HMI; alarm still buffered |
| Alarm priority reduction | Alarm configuration in SCOUT | Downgrade from FAULT to WARNING |
| Event suppression (TecFault task ignore) | Program the TecFault task to skip the alarm | Alarm stays in buffer; TecFault task does not act |
| Reaction change | Alarm properties → Reaction | From STOP to NONE / DECODE_STOP / FOLLOWING_STOP |
8. Buffer Sizing and Configuration Changes
The technological alarm buffer is sized by the alarm queue depth in the SIMOTION device configuration:
| Parameter | Path | Default | Recommended for DCM-heavy systems |
|---|---|---|---|
| Alarm queue depth (alarm buffer) | Device configuration → Settings → Alarm handling | 64 entries | 256 entries minimum |
| TecFault task priority | Task configuration → TecFault | Higher than IPO | Highest synchronous task priority |
| BackgroundTask cycle | Task configuration → BackgroundTask | 10 ms | Match PROFIBUS DP cycle (typically 4-8 ms) |
| IPO cycle | Task configuration → IPO | 4 ms | Match DCM PROFIdrive servo cycle |
If you must keep the default buffer size, ensure the acknowledged-alarm rate stays below queue depth / PROFIBUS cycle — e.g., 64 entries / 4 ms = 16,000 acknowledgments per second maximum sustained, which a re-entrant TecFault loop easily exceeds.
9. Verification Procedure
- Connect SCOUT online to the SIMOTION D controller.
- Open Target system → Diagnostic buffer and clear it.
- Trigger the previously failing scenario (OFF3 with enabling active).
- Confirm
F360:B180does not appear in the diagnostic buffer within 60 s. - Open Task trace and confirm TecFault fires only once per drive alarm, not in a continuous loop.
- Open Alarm history and confirm 20005 appears once per actual drive-side event, not in a tight burst.
- Confirm SIMOTION remains in RUN after the test scenario.
- Force a stop / start cycle, repeat the scenario five times, confirm zero
F360:B180entries.
10. Troubleshooting Matrix
| Symptom | Z1 Code | Likely Cause | First Action |
|---|---|---|---|
| Buffer overflow at startup only | 0002 | DCM drive returns all stored faults on PROFIBUS connection | Clear DCM fault memory before each online connection |
| Buffer overflow during steady-state | 0004 | Acknowledge loop in TecFault task | Move _mc_reset out of TecFault into BackgroundTask |
| Buffer overflow when OFF3 commanded | 0004 | OFF3 racing with _mc_power enabling |
Route fast stop through _mc_stop; do not drive OFF3 directly to STW1 while SIMOTION is enabled |
| Buffer overflow on emergency stop | 0008 | Acknowledgment stopped but pending alarms not cleared | Use resetAllAlarms in BackgroundTask after stop completion |
| 20005 floods diagnostic buffer | n/a | Torque limit exceeded by racing enables | Coordinate _mc_power with drive-side enable; check DCM torque limits (p1520, p1521) |
| F360:B180 after firmware upgrade | variable | Default alarm buffer smaller in new firmware | Increase alarm queue depth; review release notes |
11. Related Event IDs to Watch
| Event ID | Meaning | Action |
|---|---|---|
| 16# F360:B180 | Message buffer overflow with technological alarms | This article |
| 16# F360:B181 | Message buffer overflow with technological warnings | Same fix pattern; warnings usually harmless but can flood |
| 16# F360:B182 | Message buffer overflow on system side | Check BackgroundTask; reduce logging |
| 16# F360:0001 | TecFault task entered (informational) | Normal during a drive-side fault |
| 16# 20005 | Torque/Force limit reached (DCM via PROFIdrive) | Coordinate enables; check torque limits |
| 16# 20003 | Following error (position lag) | Tune Kv / check mechanical load |
What is Z1 in a SIMOTION diagnostic event?
Z1 is short for the German Zusatzinformation 1, the first additional information field of a SIMOTION event. It is a 32-bit word found in the SCOUT diagnostic buffer, the diagnostic.xml export, and the online help (F1) for the event ID. For F360:B180, Z1 = 16#0004 0000 means "alarms are created and acknowledged too fast".
Why does my SIMOTION CPU go to STOP after technological alarms?
The runtime raises F360:B180 when the technological alarm buffer overflows. The configured alarm reaction (default STOP on the CPU itself) is then executed, bringing the controller down. This is a protective measure — the runtime cannot trust the state of any axis when the alarm history is lost.
Can I acknowledge an alarm inside the TecFault task?
No. Acknowledging the same alarm that triggered the TecFault task creates a re-entrant fault loop and overflows the buffer with Z1 = 16#0004. Set a flag in TecFault and acknowledge the alarm from a BackgroundTask or MotionTask instead.
How do I implement a fast stop on a SIMOTION-controlled SINAMICS DCM?
Use _mc_stop with EMERGENCY_STOP mode and let SIMOTION coordinate the enable state machine. Do not write OFF3 (STW1 bit 2) directly to the DCM control word while _mc_power is still enabled — the two will race and produce a 20005 storm.
Can I mask alarm 20005 to stop the buffer overflow?
Not entirely — 20005 carries state-machine information. You can change its reaction from STOP to NONE, lower its priority, or filter it from the TecFault task, but on safety-related axes the correct fix is to eliminate the upstream racing-enable condition. Adjusting DCM torque limits (p1520, p1521) is often the most durable fix.