Troubleshooting Sinumerik 840D sl Alarm 3000 in Part Programs
Sinumerik 840D sl alarm 3000 ("Emergency stop") is normally raised when the NCK/PLC safety interface reports an active emergency stop request — typically because the operator pressed the physical E-Stop pushbutton, the Safety Integrated (SI) chain opened, or an external hard-wired E-Stop contact released. On a running production machine, however, this alarm is frequently observed on a fixed block of a brand-new part program even though no operator input was registered, the safety chain is healthy, and the machine has been cutting the previous part without issue. The fault is reproducible: the alarm always appears at the same block number, often at — or one block after — a new S, T, D, or axis letter. The cause is the program itself, not the hardware. This article documents the field-proven root causes, the diagnostic workflow, and the verification steps required to clear and prevent the alarm.
1. Alarm 3000 — Definition, Clear Conditions, and Why NC Programs Trigger It
Alarm 3000 in the Sinumerik 840D sl is a system-level alarm raised by the NCK when the internal emergency-stop request line goes active. The relevant signals in the NCK/PLC user interface are:
| Signal | Address | Meaning |
|---|---|---|
| E-Stop request from NCK | DB31, ... DBX84.7 |
NCK-aggregated E-Stop, including SI signalling |
| E-Stop from PLC user program | DB31, ... DBX84.6 |
Operator panel or hard-wired chain |
| Drive enable ready (per axis) | DB31, ... DBX2.1 |
Feedback that the drive is ready after reset |
| NC-Stop active | DB11 DBX0.6 |
Channel is in hold/reset state |
The standard clear sequence after alarm 3000 is:
- Verify the operator-panel E-Stop is released and the hard-wired chain reports healthy (24 V on the E-Stop loop, all monitored contacts closed).
- Clear the alarm with Cancel on the HMI, or the reset key on the operator panel.
- Issue a mode-group reset to re-enable the drives (
DB11 DBX0.7for one PLC cycle). - Re-reference any axis whose position reference was lost. The HMI will display an "Axis must be referenced" prompt.
- Re-arm the spindle and check
DB31, ... DBX84.7is back to 0.
If the alarm is raised again on the next NC start at the same block, the cause is internal to the program. Five NC-side categories account for the overwhelming majority of field reports: non-printable characters, axis names outside the channel configuration, spindle programming conflicts, tool/offset mismatches, and modal G-group or sub-program issues. The categories are described in Sections 2 through 6.
2. Root Cause 1 — Non-Printable Characters in the NC Source
The single most common cause of a "phantom" 3000 on a freshly transferred program is a hidden character that the HMI's NC editor masks by default but that the NCK's interpreter rejects or misinterprets. The interpreter runs block preparation across the entire program; a non-DIN-66025 byte in line N can therefore raise the alarm several lines later than expected.
| Visible symptom | Likely cause | Hex signature | Fix |
|---|---|---|---|
Leading  on line 1 in Notepad |
UTF-8 byte-order mark | EF BB BF |
Re-save the file as ANSI / ISO 8859-1 / Windows-1252 |
| Strange spacing between two blocks | Soft hyphen (U+00AD) or zero-width space |
C2 AD or E2 80 8B
|
Find and delete in a hex editor |
| Block ends with extra whitespace | Tab character (U+0009) | 09 |
Strip trailing whitespace |
| Alarm cascades through 5–10 lines | Carriage-return-only line endings |
0D without 0A
|
Convert to LF (0A) endings |
| Alarm on first block containing & or µ | Editor replaced characters with smart-quote equivalents |
E2 80 99 for ’ |
Disable autocorrect in the source editor |
Verification procedure:
- Transfer the part program back from the HMI to a PC (CF card, network share, or DNC mode).
- Open the file in a hex editor. On Windows, PowerShell's
Format-Hexcmdlet gives a quick view; on Linux,xxd file.nc | head -20shows the first 20 lines. - Search for any byte outside the printable-ASCII range
0x20–0x7E, plus the line-ending bytes0x0A(LF) and0x0D(CR). The BOM at offset 0 is the single most common offender. - Replace or delete the offending byte, save the file as plain ASCII, and reload onto the HMI.
Concrete example: a post-processor that saves as UTF-8 with BOM produces a file that begins EF BB BF G90 G94 .... When the HMI loads it, the BOM is silently dropped from the visible editor, but the NCK's interpreter sees a non-ASCII byte on line 1, fails block preparation, and raises 3000 on the first motion block (often line 4 or 5). Renaming or re-saving the file in ANSI eliminates the BOM and clears the alarm.
3. Root Cause 2 — Axis Names Outside the Channel Configuration
If the new part program contains an axis identifier (X, Y, Z, A, B, C, U, V, W, Q, SP1, SP2, etc.) that is not part of the active channel's axis list, the interpreter rejects the block. Depending on the PLC's alarm-routing configuration, the operator sees alarm 3000, 2200, or a channel-specific configuration error. The most frequent variants observed in the field are:
- A second spindle
SP2referenced on a single-spindle machine (onlySP1exists in MD20070). - A linear auxiliary axis
U,V, orWthat is configured as a virtual / display axis on this machine and not enabled for NC programming via MD30450 or MD30460. - An axis inherited from a 5-axis post on a 3-axis mill (e.g.,
5AXor an unused rotary axisC). - An axis name from a sister machine's post, copied across to this controller without adapting to MD20070 / MD20080.
Verification procedure:
- On the HMI, navigate to Diagnostics > Axis diagnostics and confirm the active channel's axis assignment. The list of axes for the current channel is also visible under Setup > Channel > Axis configuration.
- Open the offending part program in the HMI's NC editor. Search for any axis letter that is not in the channel's list.
- Compare with a known-good part program running on the same machine: the axis letters at the top of that program define the working set.
- If a second spindle is required, confirm that MD20070 (axis assignation) and MD20090 (spindle assign) include both spindles for the channel; otherwise, request a configuration change from the machine builder.
Common machine data that controls the active channel's axis list:
| MD | Description | Default behaviour |
|---|---|---|
| MD20070 | Axis assignation in channel | Defines which machine axes are accessible from the active channel (e.g., X, Y, Z, A) |
| MD20080 | Channel name | Logical name of the channel; cross-references with MD20070 |
| MD30450 | Linear axis index | Maps a generic axis to a specific kinematic transformation |
| MD30460 | Rotary axis index | Same for rotary axes; missing index = 3000 on first A... or C... block |
4. Root Cause 3 — Spindle Programming Conflicts (the S1000 Case)
The original fault report references a new program that includes the command S1000 on a machine whose normal operating spindle speed is 10000 rpm. S1000 is well within the operating envelope, so the numeric value is not the issue. The conflict is usually with one of the following:
| Parameter | HMI / MD path | Failure mode |
|---|---|---|
Minimum spindle speed SS_MIN
|
MD10720 / Setup > Spindle | S below configured minimum raises 3000 (or 2017/2021 depending on PLC routing) |
| Maximum per gear stage | MD35110 / MD35130 | M41/M42/M43 stage caps; S above the active stage's max is clamped, but a mismatch with the active gear M-code can drive 3000 |
| Spindle mode (G94 vs G95) | Active G-group in the block | Switching to G95 (rev-feed) without a valid S, or to G96 (CSS) without a tool nose radius compensation, can cause an interpreter-side E-Stop |
| Spindle assignation | MD20070 / MD20090 | If the spindle is not in the active channel, any S... reference fails |
| Position-controlled spindle | MD30150 / MD30200 | Activating SPCON on a spindle whose position interface is not enabled raises 3000 on the next positioning block |
Diagnostic steps for the S1000 case:
- Open the program in the HMI's NC editor. The active G-group is shown in the right-hand editor status line. Confirm that
G94(feed per minute) and a validSvalue coexist, or thatG95is active only when feed-per-revolution is intended. MixingG95with a fixedSis sometimes intentional (threading), but it must be consistent across the block. - Check spindle mode assignation: Setup > Spindle > Modes > Spindle assignation. Confirm that the spindle used in the program is the spindle assigned to the channel.
- Run the program in Single Block mode up to the S block. If the alarm is raised exactly when the
S1000line is interpreted, the issue is spindle-related. If the alarm is raised on the next motion block, the issue is axis programming (see Section 3) or tool/offset (see Section 5). - Verify the active gear stage with the current M-function (
M41,M42,M43). The maximum spindle speed of the active stage must be greater thanS1000; if it is not, either upshift the gear or reduce the S value. - For machines with a position-controlled spindle (e.g., rigid tapping), confirm that the
SPCON/SPCOFstate matches the operation. A rigid-tapping block (G331/G332) withoutSPCONraises 3000 in most configurations.
Concrete example: a milling program begins with S1000 M3 but the active gear stage is M42 (low range, max 800 rpm). The spindle cannot reach 1000 rpm in low range, the PLC detects the mismatch, and the alarm is raised as 3000. Switching to M43 (high range) before the S block clears the alarm.
5. Root Cause 4 — Tool and Offset Mismatches
A tool call (T...) or D-correction (D...) that does not exist in the active magazine triggers alarm 3000 in some controller variants, depending on the PLC's error-handling configuration. Symptoms:
- The alarm appears immediately on the line of the
T...call, or on the next motion block after the tool change. - The PLC's magazine-status bits do not reflect the requested tool (
DB72 DBW...). - For chain magazines, the requested tool slot is empty (sister-tool logic could have placed a substitute, but the substitute magazine slot is itself empty).
Verification procedure:
- Open the Tool list from the HMI and confirm the tool number exists. If a sister tool is required, confirm it is in the magazine and not in a hidden slot.
- Confirm the D-correction for the requested tool has a valid length and radius. An unloaded D-correction can also trigger 3000 if the PLC is configured to treat the empty D-offset as an error condition.
- For rotary tools, confirm the orientation-mode bits are set correctly; some 5-axis configurations raise 3000 on a tool change if the kinematic chain is incomplete.
- Check the magazine's Status field on the HMI; an empty slot with
ST_EMPTY = 1for the requested location will fail any subsequent call.
| Offset family | HMI path | What to verify |
|---|---|---|
| Tool length / radius | Tools > Tool list | Length and radius are entered; wear offsets are sensible |
| Work offsets G54–G599 | Setup > Work offsets | Each active offset has non-zero Z and at least one XY; empty offsets on a G54 call can drive 3000 on the first motion |
| Settable work offsets | Setup > Settable zero offsets | G58/G59 values, particularly in lathe applications |
| Spindle-specific data | Setup > Spindle | SS_MIN / SS_MAX / gear-stage limits match the actual hardware |
6. Root Cause 5 — G-Group State and Sub-Program Search Path
Two final common causes worth checking before re-typing the program:
-
Modal G-group state conflict. The new program begins with a modal G-code (e.g.,
G91incremental) that conflicts with the active modal state left over from the previous program. Many programmers add a safety initial block (G90 G94 G17 G40 G80) at the start of every program to ensure a clean modal state. If this is missing, the new program inherits the last program's modal state — and if that state was unusual (e.g., a left-handed G18 with active cutter compensation from the previous tool), the new motion block can drive 3000. -
Sub-program / cycle search path. A call such as
CYCLE83(...),CYCLE84(...),CYCLE97(...), or a user-definedL12fails to resolve. The interpreter continues, but the missing subroutine raises 3000 on the next interpreter cycle in many PLC configurations, especially when the missing subroutine is a standard cycle that the controller expects to be present.
Verification procedure for both:
- Insert a safety initial block at the start of the program:
G90 G94 G17 G40 G80for 3-axis mills, orG90 G95 G18 G40 G80for lathes. If the alarm clears with this addition, the cause was inherited modal state. - Open the Program manager on the HMI and confirm that the called sub-program or cycle exists at the configured search path. Standard cycles live in the manufacturer's CF card directory; user sub-programs are typically in
MPF.DIRorSPF.DIRon the local NC file system. - For cycles, check that the cycle's version is compatible with the controller's NCK software version. A cycle from a newer SW release called on an older NCK raises 3000 in some installations.
7. PLC Interface Signal and Machine Data Reference
For deeper diagnosis, verify the NCK/PLC interface and the relevant machine data. The signals below are read from the PLC user program (typically in OB1, OB82, or the safety OB) and indicate the live state of the safety chain.
| Signal | Address (DB / byte) | Bit | Meaning |
|---|---|---|---|
| E-Stop active (NCK-aggregated) | DB31, ... DB84 | .7 | NCK reports an active E-Stop request |
| E-Stop active (PLC-side) | DB31, ... DB84 | .6 | PLC user program requests E-Stop |
| Drive enable ready | DB31, ... DB2 | .1 | Drive is in ready state after reset |
| Pulse enable | DB31, ... DB2 | .0 | Drive has the pulse enable; this must be 1 for motion |
| Axis/spindle enable (controller) | DB31, ... DB1 | .0 | Controller enable from PLC |
| Spindle reset | DB31, ... DB16 | .7 | Triggers a spindle reset; clears latch faults |
Key machine data that the maintenance engineer should review when the alarm persists after the program has been corrected:
| MD | Description | Typical value |
|---|---|---|
| MD10000 | Print configuration | 0 / 1 (read-only on most systems) |
| MD10720 | Operating-mode default for SS_MIN / SS_MAX | Per spindle, set by commissioning |
| MD20070 | Axis assignation in channel | e.g., 1, 2, 3 for X, Y, Z in channel 1 |
| MD20090 | Spindle assignation in channel | e.g., 4 for SP1 in channel 1 |
| MD20150 | G-code defaults | Default G-group for new programs |
| MD30150 | Position-controlled spindle threshold | RPM at which the spindle switches to position control |
| MD30200 | Number of spindles | 1 for single-spindle machines |
| MD35010 | Gear-stage change with M40/M41–M45 | Defines the active gear-stage M-codes |
| MD35110 | Maximum spindle speed per gear stage | Per-stage RPM cap |
| MD35130 | Minimum spindle speed per gear stage | Per-stage RPM floor |
None of these MD values should be modified without consulting the machine builder. They are listed here to help the maintenance engineer understand what to look for in the active configuration when the alarm is reproducible.
8. Diagnostic Workflow
Use the following ordered workflow to isolate the cause on a real machine without losing production time. The workflow starts with the mandatory safety-chain pre-check, then runs through the four NC-side categories in order of how quickly each can be ruled out.
Each branch must clear before moving on. If a branch check fails, the most efficient remediation is to fix the indicated category, re-load the program, and re-run in Single Block mode. If all branches check out and the alarm persists, escalate to the next-level diagnostic: PLC interface signal analysis (Section 7) and a full NCK reset / reload of the controller's commissioning archive.
9. Single-Block Tracing and Offset Verification
Single-block mode is the most efficient way to find the exact line that triggers 3000 without committing to a full program run. The procedure is:
- Set the mode-group to AUTO and select Single Block (SBL) on the operator panel.
- Use the Block search with calculation function (HMI menu: Program > Block search) to position the interpreter one block before the suspect line. Some HMI versions label this as Search > Block.
- Press NC Start repeatedly to step through the program one block at a time. Note the block number at which the alarm is raised.
- Compare the raised block to the same line in a known-good part program. Differences in axis letters, S values, and T/D numbers are the prime suspects.
- Use the HMI's Re-Number function (under Program > Edit > Re-Number) to renumber the program. After renumber, the error block number is unambiguous and matches the HMI display — useful for documenting the fault and for future fault-finding.
Offset verification — to be done before running the new program in production:
| Offset family | HMI path | What to verify |
|---|---|---|
| Work offsets G54–G599 | Setup > Work offsets | Each active offset has non-zero Z and at least one XY; empty offsets on a G54 call can drive 3000 on the first motion |
| Settable zero offsets | Setup > Settable zero offsets | G58/G59 values, particularly in lathe applications |
| Tool length / radius | Tools > Tool list | Length and radius are entered; wear offsets are sensible |
| Channel machine data | Diagnostics > MD (read-only, password) | MD20070 (axis assignment) and MD20090 (spindle assign) reflect the physical machine |
If a Re-Number was performed earlier in the workflow, re-verify that the offset block numbers in the program still match the offset list — older programs sometimes hard-code G54 P1 where the offset is actually stored as a different P index.
10. Logging and Alarm History Analysis
The Sinumerik 840D sl keeps a rolling alarm log under Diagnostics > Alarm log. The log records the alarm number, the channel and mode-group, the block number, the time stamp, and (for some alarms) the interpolation buffer pointer that points to the offending token. Reading the log carefully avoids the common mistake of fixing the wrong block.
| Log field | Meaning | Use |
|---|---|---|
| Alarm number | 3000 / 2017 / 2021 / 2200 / etc. | Identifies the fault family |
| Channel | Active channel at the time of the alarm | Locates the channel-specific machine data |
| Block number | Block at which the alarm was raised | Cross-check with editor |
| Time stamp | When the alarm was raised | Correlate with operator actions and shifts |
| Clearance flag | Whether the alarm was cleared by the operator or by NCK reset | Distinguishes hard faults from intermittent |
For deeper traceability, activate the Trace function under Diagnostics > Trace on the channel of interest. The Trace records the interpreter's block-preparation and the NCK/PLC interface signals at a configurable sample rate. A short trace of the suspect block, captured with the alarm, shows which signal flipped first — usually DB31, ... DBX84.7 — and the sequence of NCK states leading up to it.
11. Verification Matrix and Prevention Checklist
Use the matrix below to score a fixed-block 3000 alarm against the most likely root causes, then apply the prevention checklist to avoid re-occurrence.
| Observed symptom | Most likely cause | First check |
|---|---|---|
| Alarm on first NC start of new program; old programs still run | Program source / non-printable chars | Hex view of NC file |
| Alarm on a line with a new axis letter (X, Y, Z, A, B, C, U, V, W) | Axis not in channel configuration | Channel axis list (MD20070) |
| Alarm on the S line or the next motion block after S | Spindle assignation / gear-stage limit | MD20070, MD20090, MD35110 |
| Alarm on the T line or first motion after T | Missing tool or D-offset | Tool list, D-correction |
| Alarm at different blocks on repeated runs | Non-printable char (interpreter is non-deterministic over hidden bytes) | Hex view; re-save as ANSI |
| Alarm clears after power cycle, returns on first NC start | Stored NCK state from a prior crash | NCK reset / reload archive |
| Alarm persists with no program in NC memory | Hardware E-Stop chain (not this article's topic) | Verify PLC DBX84.7 and the E-Stop loop |
Prevention checklist for the next new part program:
- Configure the CAM / post-processor to output plain ASCII (not UTF-8 with BOM). Most controllers' post-processors support this in a settings dialog.
- Always include a safety initial block at the start of every program:
G90 G94 G17 G40 G80for 3-axis mills,G90 G95 G18 G40 G80for lathes. - Add a comment header that lists the channel's axis letters and the assigned spindle. The post-processor can emit this automatically.
- Validate every new program in Single Block mode the first time it is run on the machine, with the feed-rate override at 0 % and rapid override at 25 %.
- Configure the HMI to disable NC Start if a referenced tool, axis, or sub-program is missing. This converts a hard 3000 into a clearer, non-stopping alarm.
- Run a periodic hex-view audit of the latest 10 part programs to catch BOM and CRLF issues introduced by editor updates on the office PC.
- Document the alarm block number in the maintenance log for cross-referencing with future occurrences on related parts.
For authoritative procedures on the Sinumerik 840D sl alarm system, the operator's commissioning handbook, and the Safety Integrated integration, refer to the manufacturer documentation portal at Siemens Industrial Online Support and the dedicated Sinumerik 840D sl Lists Manual (Alarms). Programming constructs (modal G-groups, sub-program search paths, gear-stage M-codes) are detailed in the Sinumerik 840D sl Programming Manual (basics). For deeper diagnostic procedures including trace and NCK/PLC interface signals, the Sinumerik 840D sl Diagnostics Manual covers the full set of available service tools. The underlying NC programming language is defined by DIN 66025, which the controller's interpreter implements with a small set of profile-specific extensions.
Why does alarm 3000 fire on a fixed NC block when the E-Stop button was never pressed?
The NCK can interpret certain programming errors (non-existent axis, conflicting S value, missing tool or D-offset, non-printable character in the source) as a request for emergency stop. The PLC sees the internal state and raises alarm 3000. Confirm by clearing the alarm and re-running in Single Block mode — if it fires on the same block with no operator input, the cause is the program itself, not the hardware E-Stop chain.
Can the S1000 command really cause alarm 3000 on a machine that normally runs at 10000 rpm?
Yes. The numeric value is well within the spindle's range, but the conflict is usually with the spindle's channel assignation (MD20070 / MD20090), the active gear-stage limits (MD35110 / MD35130), or the modal G-group (G94 vs G95). Verify with Setup > Spindle and the active G-group line in the NC editor. A common cause is the active gear stage (M41/M42/M43) capping the maximum spindle speed below S1000.
How do I detect a non-printable character that the HMI editor hides?
Transfer the program back to a PC and open it in a hex editor. Search for bytes outside 0x20–0x7E (printable ASCII) and the line-ending bytes. The most common offender is a UTF-8 BOM (0xEF 0xBB 0xBF) at the start of the file, introduced by the source editor. Re-saving the file in ANSI / ISO 8859-1 encoding clears the issue and removes the source of cascading interpreter errors.
What is the difference between alarm 3000 and alarm 2017 or 2021 on the spindle?
Alarm 3000 is the generic "Emergency stop" raised through the NCK/PLC safety interface. Alarms 2017 and 2021 are spindle-specific (axis-percentage and configuration respectively) and are reported through the spindle's own alarm channel. A spindle programming error can raise either depending on the PLC's alarm-routing configuration. When the routing is unknown, always check the alarm log for the full chain and the channel/block information.
After clearing alarm 3000, do I have to re-reference the axes?
Yes, in most configurations. The drives lose their position reference when alarm 3000 is raised, and NC Start is inhibited until each affected axis is re-referenced. The HMI will display the "Axis must be referenced" prompt — follow the standard reference-point approach procedure documented in the operator manual. For machines with absolute encoders, the re-referencing is automatic on power-on but still requires an explicit confirmation when alarm 3000 has been cleared.