What frustrates field engineers most about CNC machines is not a screen full of alarms, but “no alarm at all, yet it just won’t move”: the program won’t proceed, an axis stalls for tens of seconds then continues, or an axis is simply locked. This kind of “hidden no-alarm fault” has no alarm number to look up, and many people’s first reaction is to randomly change parameters, making things worse.
FANUC’s self-diagnosis function (DIAGNOSIS / DGN) is built exactly for this scenario. This article maps the most common no-alarm faults to specific diagnosis numbers (DGN000 / 003 / 005 etc.) and gives a troubleshooting path of “which number to read, which wire to check, how to fix.” Pair it with FANUC PMC Ladder Diagram Beginner Tutorial and FAPT-LADDER3 Download and PMC Upload — understanding the M-code completion signal and interlock logic will be much easier.
When there is an alarm, the alarm number itself is a clue (cross-check with the FANUC Alarm Code List). With no alarm, it means the system thinks “the condition is not met,” not “an error occurred.” There are three common cases:
- Condition not met: the action was done, but the “completion confirmation” did not come back. The system keeps waiting, the program stops, but no alarm.
- In-position check not passed: the axis is moving, but the system thinks “it hasn’t reached the commanded position,” and keeps repositioning, stuck there.
- Interlock active: the PMC locked the axis for safety reasons (e.g. a contradictory signal like “both at top and at bottom”), and the system follows the rule without alarming.
The entry diagnosis numbers for these three cases are DGN000, DGN003, and DGN005 respectively. Each is broken down below.
1. Why “No Alarm” Is Harder to Check Than “With Alarm”
No-alarm faults have no number to guide you, so you must fall back on the diagnosis screen. The three entry numbers below are the first things to open whenever a machine “does nothing but shows no alarm.”
2. DGN000 = 1 — Auxiliary Function (M code) Not Confirmed Complete
Diagnosis number 000 showing 1 means WAITING FOR FIN (waiting for the auxiliary-function completion signal): the system is executing an M / S / T / B code, but never received the “done” confirmation signal (FIN, corresponding to PMC output G4.3).
The M-code execution chain is this:
NC reads the M code → outputs MF (F7.0) and M info F10~F13 via strobe delay → PMC decodes (DECB) → outputs Y to drive the external action (valve / relay / motor) → the action-complete switch returns to X → after PMC judges, it issues G4.3 (FIN) → CNC receives FIN, ends that M block, continues to the next line. If any point in this chain breaks, G4.3 is not issued, DGN000 stays 1, and the program is stuck at that M block. The typical symptom: the action actually happened, but the “completion signal” never came back.
Example: M8 coolant already spraying but program stops → check flow switch X2.2
A machining center stops at every M8 (coolant on) during automatic run, but visually the coolant is clearly spraying and the screen shows no alarm.
Open the diagnosis screen: DGN000 = 1, meaning the M8 auxiliary function was not confirmed complete. Check the electrical drawing: the coolant line has a flow switch to confirm “real coolant is flowing,” mapped to input X2.2 in PMC — it should be 1 when there is flow.
Open the PMC signal screen and look at X2.2: it is actually 0. That is, the coolant is spraying, but the flow switch is not giving the “flow present” signal (usually the switch sensitivity is insufficient, the sensing is misaligned, or the port is clogged). After repositioning / re-tuning the switch sensitivity and cleaning it, X2.2 becomes 1, G4.3 is issued normally, and the fault is cleared.
Not just coolant — M06 / M08 / M19 / M56 follow the same logic
Tool change M06, spindle orient M19, second-spindle M56, etc. are essentially “NC issues command → PMC drives external action → external returns completion signal → G4.3 confirms.” Second-hand machines, retrofitted machines, or machines that later added M codes often get stuck at an M because “the completion signal is not wired up / not written into the ladder.”
Unified troubleshooting: when DGN000 = 1, open the PMC signal screen and watch whether G4.3 (FIN) is set; if not, trace back along the ladder for that M code’s completion condition — it usually ends at an X (in-position / pressure / flow / clamp) or an intermediate relay.
3. DGN003 = 1 — In-Position Check Not Passed (most common)
Diagnosis number 003 showing 1 means IN-POSITION CHECK: the system is verifying “did the moved axis accurately stop at the commanded position.” If the axis fails to position accurately, 003 stays 1 for a long time and the program gets stuck.
The real-time position deviation (command position − actual position) of each axis is seen in DGN300~308 (axes 1~8). The tolerance the system uses to judge “in position” is set by parameter 1826 (in-position width).
DGN300 position deviation vs parameter 1826 in-position width
The rule is simple:
- As long as the deviation in DGN300 ≤ the value set in parameter 1826, the system considers positioning complete; otherwise it considers it not in position, repositions repeatedly, and DGN003 stays 1.
How the deviation is calculated (position-loop gain 1825)
The relationship between position deviation (following error), feed rate, and position-loop gain, per FANUC servo theory, is:
Position deviation E = feed rate F (mm/min) ÷ (60 × position-loop gain Kp)
where Kp = the actual gain of parameter 1825 (unit 1/s). 1825 stores Kp × 0.01: for example 1825 = 3000 means 30/s, 1825 = 5000 means 50/s (semi-closed loop commonly 3000~5000, full-closed loop about 1500~3000, tune to field stability).
In other words: the higher the gain (larger 1825), the smaller the following error and the more “responsive” the positioning; too low a gain makes the deviation larger and easily gets stuck at in-position check.
Note a common mis-transmission: many reposted articles from around 2010 wrote the formula as “position deviation = feed rate ÷ 60 × servo-loop gain,” reversing the direction. By that writing you get the wrong conclusion “the larger the gain, the larger the deviation,” which is opposite to the actual servo rule. This article gives the correct relationship per FANUC servo theory. For gain background see FANUC Servo Gain 2021 / 1825 Adjustment.
Servo-gain setting is also closely related to vibration and overshoot; if abnormal vibration appears while tuning gain, see Servo Vibration and Overshoot Troubleshooting.
Example: Z axis frequently stalls after moving, then continues tens of seconds later
A machine frequently “stalls” during automatic machining, especially after the Z axis moves; the program won’t proceed, but sometimes continues after tens of seconds, sometimes just freezes, with no alarm throughout.
Diagnosis screen: DGN003 = 1 (in-position check). Look at DGN300: the Z-axis real-time deviation = 50, while parameter 1826 (Z-axis in-position width) is set to 4. Deviation 50 is far larger than tolerance 4, so the system judges “not in position,” repositions repeatedly, and the program stalls; the servo keeps trying to eliminate the deviation, occasionally pressing it within tolerance so the program “moves a few more steps,” appearing as “stalls for tens of seconds then continues.”
The field root cause is usually mechanical / transmission making the following error large (backlash, ball-screw preload, sudden load change, etc.), or 1825 set too low. Correct action order:
- First check mechanical and load (backlash, screw / guide, brake, cutting load); don’t rush to change parameters.
- Confirm 1825 is in a reasonable range; if low, raise it moderately (limited to stable, no vibration).
- Confirm 1826 is not set too small; but you must not blindly raise 1826 to “cover up” a mechanical problem — that only hides the hazard.
4. DGN005 = 1 — Axis Interlock Active
Diagnosis number 005 showing 1 means INTERLOCK / START-LOCK: the PMC sent a “forbid axis movement” signal, and the axis is locked. The system considers it a safety protection and does not alarm.
The interlock signal is sent from PMC to CNC; polarity must be clear:
| Signal | Meaning | Active polarity |
|---|---|---|
| G8.0 (*IT) | All-axis interlock: all axes forbidden to move | =0 locks all axes |
| G130.0~G130.3 (*IT1~*IT4) | Axis 1~4 separate interlock | =0 locks the corresponding axis |
| G132.0~G132.3 (+MIT1~+MIT4) | Axis 1~4 positive-direction interlock | =1 locks positive direction (negative still movable) |
| G134.0~G134.3 (-MIT1~-MIT4) | Axis 1~4 negative-direction interlock | =1 locks negative direction (positive still movable) |
Whether these signals actually take effect is controlled by parameter 3003: #0 (ITL) = all-axis interlock enable/disable, #2 (ITX) = per-axis interlock, #3 (DIT) = directional interlock. Setting the corresponding bit to 1 disables that signal — a common field trick to escape a jam temporarily, but you must confirm the safety risk before using it, and restore it afterward.
Example: turret upper and lower proximity switches both ON causing Z axis lock
A special machine stops at G90 G01 Z0, resets and retries, still stuck at the same block, no alarm. Diagnosis screen DGN005 = 1 (interlock active).
Open the PMC signal screen and see G130.0 = 0 (Z axis is axis 1, corresponding to *IT1). Trace back along the ladder: this special machine’s PMC wrote “the turret (or tool magazine) upper-limit switch and lower-limit switch must not be ON at the same time, otherwise it judges unsafe and locks the Z axis.” The field situation: the turret upper-limit proximity switch was stuck by iron chips / oil, always outputting ON; when the lower-limit switch also went ON due to motion, the PMC received the contradictory “both at upper and at lower” signal, so G130.0 was set to 0 and the Z axis was locked. After cleaning the switch and restoring the gap, G130.0 returned to 1 and the interlock was released.
Troubleshooting rule: when DGN005 = 1, open the PMC signal screen and see which bit of G8.0 / G130~G134 is unexpected, then trace back along the ladder to see who gave that signal.
5. Common Diagnosis Numbers Quick Reference
The table below covers the highest-frequency diagnosis numbers for no-alarm troubleshooting. For complete alarm meanings cross-check the FANUC Alarm Code List.
| Diagnosis No. | Meaning | Common symptom / action |
|---|---|---|
| 000 | Waiting for FIN (M/S/T/B not finished) | Program stops at M block → check G4.3 (FIN) and the action-complete X |
| 001 | Auto-run movement command in execution | Normal |
| 002 | Pause (DWELL, G04) in execution | Normal |
| 003 | In-position check | =1 for long → check DGN300 and parameter 1826 |
| 004 | Feed override 0% | Program won’t run → check override knob / parameter |
| 005 | Interlock / start lock | Check G8.0 / G130~G134 |
| 006 | Spindle speed-reached check | Spindle not at rated speed |
| 010 / 011 | Punch output / read-in | Data I/O in progress |
| 012 | Waiting for (un)clamp | Rotary table / indexer not clamped |
| 013 | Handwheel override 0% | Handwheel not moving → check override |
| 014 | Waiting for reset / e-stop / RRW release | Check e-stop chain, external reset |
| 020~025 | Feed up/down, reset, e-stop, stop class | Check reset / e-stop chain |
| 030~031 | TH alarm character position | Tape / macro alarm location |
| 200~204 | Servo alarm detailed bits (OVL/LV/OVC/HCAL/HVAL/DCAL/FBAL/OFAL etc.) | Pair with 4xx alarm to locate |
| 300~308 | Each axis position deviation | Check here when DGN003 is stuck |
| 350 | α serial pulse encoder internal control anomaly | Check 202 / 204 |
| 400~412 | Servo / spindle module, overheat, disconnection etc. | Check 200 / 201 etc. |
| 450~475 | Overtravel / overload / battery hardware auxiliary diagnosis | Combine with screen alarm text |
6. Alarm → Diagnosis Number Reverse Lookup Table
When you already see an alarm, use this table to map the alarm number to the corresponding diagnosis number and avoid detours. The exact text of each alarm follows your machine’s screen (0i series common mapping below):
| Alarm | Common meaning | Key diagnosis numbers |
|---|---|---|
| 350 | α serial pulse encoder internal control anomaly | 202, 204 |
| 351 | α serial pulse encoder ↔ module communication anomaly | 203 |
| 400 class | Servo related (overheat / overload etc., per screen) | 200, 201 |
| 414 | Digital servo alarm (X axis example) | 200, 201, 204 + module LED |
| 416 | Position detector signal disconnection / short | 200, 201 |
| 417 | Servo parameter setting anomaly | 203, 280 |
| 749 | Serial spindle module anomaly | 408 |
| 750 | Serial spindle system power-up start anomaly | 409 |
7. Pre-Troubleshooting: Do These 3 Things First
Before changing anything, do these three things to avoid turning a “small problem” into a “big accident”:
- Back up parameters before acting: including NC parameters, PMC / ladder, pitch compensation, macro variables. If you make a mistake you can still roll back. For backup methods see the FANUC PMC Ladder Diagram Beginner Tutorial (backup section).
- Check alarm history: even if there is no alarm now, the history may record an instantaneous alarm or a 300-level event — often a foreshadowing.
- Record a diagnosis snapshot: photograph / note the current values of DGN000~006, DGN300~308, 200~204, compare with a healthy machine; the difference is the breakthrough. More ideas in FANUC Fault Troubleshooting 5 Cases.
8. When to Stop and Call the Manufacturer
In these situations, don’t force parameters or disassemble; contact the machine-tool builder or authorized service directly:
- PMC/CPU status light constantly red: the PMC/CPU indicator on the control unit should normally blink green regularly; constantly red means PMC is not running normally (program damaged, battery failure losing the program, etc.).
- F-ROM write failure / SRAM checksum alarm: involves the system software layer; forcing operations may enlarge the fault.
- 970~975 class system / PMC alarms that return on reset and recur: usually I/O module, PMC type mismatch, or hardware problems — not adjustable by normal parameters.
- When it involves changing PMC logic, disassembling the servo amplifier, or touching the scale / encoder without field confidence, also stop.
Frequently Asked Questions (FAQ)
1. My FANUC machine has no alarm but the program won’t proceed — which diagnosis number should I check first?
Check DGN000 first. =1 means the system is waiting for the auxiliary function (M/S/T/B) “completion confirmation” signal FIN (G4.3), commonly seen when the M-code action happened but the completion signal didn’t come back. If DGN000 is normal, then look at DGN003 (in-position not passed) and DGN005 (axis interlocked).
2. DGN003 stays 1 for a long time with no alarm — what does that mean?
It means the system keeps doing the in-position check but never passes: the moved axis’s position deviation stays larger than the tolerance set by parameter 1826 (in-position width). Open DGN300~308 to see which axis deviation is too large; first check mechanical / load, then verify whether 1825 (position-loop gain) is too low or 1826 is too small.
3. What usually causes an intermittent stall (stops for tens of seconds then continues)?
The most typical is DGN003 in-position check stuck: an axis’s position deviation occasionally crosses the tolerance, the program pauses, and after the servo presses the deviation back within tolerance the program moves a few more steps — appearing as “stalls for tens of seconds then continues,” mostly happening after the Z axis moves. The root cause is usually mechanical / transmission making the following error large, or 1825 set too low.
4. What should parameter 1826 (in-position width) be set to, and how does it differ from 1825?
1826 (in-position width) is “the maximum position deviation the system allows to judge positioning complete,” in the same unit as DGN300. Set too small it easily gets stuck at in-position check; set too large positioning accuracy drops. Generally use the machine builder’s default, don’t change it casually. 1825 (position-loop gain) decides how “responsive” the servo is: higher gain means smaller following error, but too high causes vibration. Their relationship: position deviation ≈ feed rate ÷ (60 × 1825 actual gain). Tuning 1825 changes the size of the deviation itself; tuning 1826 changes the threshold of allowed deviation.

























暂无评论内容