Fanuc Alarms & Diagnostics
Alarm Prefix Decode Table
Every Fanuc 30i/31i/32i alarm starts with a two-letter prefix that tells you which subsystem is complaining before you read a single word of the message. Decode the prefix first — it decides whether you're looking at a program problem, a drive problem, or a hardware problem, and whether RESET will even clear it.
| Prefix | Subsystem | What it usually means | Typical clear |
|---|---|---|---|
| PS | Program & operation | G-code syntax, illegal command, missing option, bad offset call — the program, not the machine | Fix the program, RESET |
| BG | Background edit | Same alarm numbers as PS, but raised while background editing | RESET (in the background editor) |
| SR | Communication | Same alarm numbers as PS, raised by RS-232 / I/O device transfer (parity, overrun, framing) | Fix cabling/settings, RESET |
| SW | Parameter write | Only one member: SW0100, PWE is on | Set PWE = 0, RESET |
| SV | Servo axes | Drives, motors, encoders (Pulsecoders), amplifier power supply, following error | RESET for some; many need power-cycle after fixing the cause |
| OT | Overtravel / interference | Soft stroke limits, hard limit switches, interference checks | Jog off the limit, RESET |
| IO | Memory file | CNC file system / part-program storage errors (checksum, access) | Often needs memory maintenance or service |
| PW | Power-off required | A parameter or configuration change (or safety check) that only takes effect at boot | Power-cycle only — RESET will not clear |
| SP | Spindle | Serial spindle amp, position coder, rigid tap following error, spindle communication | RESET for some (e.g. SP0754); comm/amp faults need power-cycle |
| OH | Overheat | Cabinet, PCB fan, spindle overheat | Cool down / fix fan, RESET |
| DS | Other (data/settings) | Grab bag: absolute encoder (APC) battery and reference loss, external data I/O | Varies; APC battery alarms need battery + reference return |
| IE | Malfunction prevention | The safety cross-check caught an overtravel or accel/decel command error | RESET; PW0006 variant needs power-cycle |
| MC | Macro alarm | The part program raised it itself via #3000 — the message is whatever the macro programmer wrote | Fix whatever condition the macro is checking, RESET |
| ER / WN | PMC | Ladder program errors, I/O Link assignment faults (shown on the PMC alarm screen) | Fix ladder/hardware; usually power-cycle |
Gotcha #1: PS, BG, and SR share the same alarm numbers — the manual lists them once. PS0085 and SR0085 are the same "overrun error"; the prefix just tells you whether it fired in the foreground program, background edit, or a serial transfer.
Gotcha #2: Inside SV alarm messages, "PS" means Power Supply module (e.g. SV0437 PS OVERCURRENT), not a program alarm. If an SV alarm message starts with "PS", you are chasing the common power supply in the drive cabinet, not your G-code.
Gotcha #3: The number after MC depends on bit 1 (MCA) of parameter 6008. With MCA = 0, #3000 = 1 (ALARM MESSAGE) displays as MC3001 — the value is added to 3000, and #3000 only accepts 0–200. With MCA = 1 the value displays as-is (MC0001) and the range grows to 0–4095. So MC alarms from different machine tool builders can sit in completely different number ranges for the same macro package.
Alarms You'll Actually Hit
The full appendix runs about eighty pages. These are the ones that show up on real shop floors, with the first thing worth checking. All verified against the 30i/31i/32i-B Plus maintenance manual (B-64725EN/01, Appendix A).
| Alarm | Message | Cause | First check |
|---|---|---|---|
| Program & operation (PS) | |||
| PS0010 | IMPROPER G-CODE | G code the control doesn't have (often a missing option) | Typo first, then option list |
| PS0011 | FEED ZERO (COMMAND) | Cutting move with F0 or no active feedrate; also undersized F in rigid tapping | F word in the block and modal F state |
| PS0020 | OVER TOLERANCE OF RADIUS | Arc start/end radii disagree beyond parameter 3410 | I/J/K or R values from the CAM post |
| PS0060 / PS0078 | SEQUENCE NUMBER NOT FOUND | GOTO / M99 P__ / search target N number doesn't exist | The N number in the macro or restart search |
| PS0090 | REFERENCE RETURN INCOMPLETE | Ref return started too close to home or too slow | Jog away from home, retry the reference return |
| PS0092 | ZERO RETURN CHECK (G27) ERROR | G27 check axis didn't land on zero | Work offsets / program path back to home |
| PS0224 | ZERO RETURN NOT FINISHED | Cycle start attempted before reference return (ZRNx = 0) | Home the machine |
| PS5010 | END OF RECORD | EOR (%) hit mid-block — classic truncated drip-feed or bad transfer | Re-send the program; check the file tail |
| Custom macro math & syntax (PS) | |||
| PS0110 / PS0111 | OVERFLOW :INTEGER / :FLOATING | An integer (or floating-point value) went out of range during macro arithmetic | The calculation feeding the variable — usually a runaway loop counter or bad argument |
| PS0112 | ZERO DIVIDE | A custom macro divided by zero | The divisor variable — often an argument the caller never passed (#0 vacant) |
| PS0114 / PS0115 | ILLEGAL EXPRESSION FORMAT / VARIABLE NO. OUT OF RANGE | Malformed macro expression, or a variable number that doesn't exist on this control/option set | Bracket balance and variable numbers vs. installed options (there is no PS0113 — the list skips it) |
| Communication (SR) & parameter write (SW) | |||
| SR0085 | OVERRUN ERROR | Overrun/parity/framing on reader-punch channel 1 — baud/handshake mismatch | Baud rate + stop bits both ends (parameters 0101/0103) |
| SW0100 | PARAMETER ENABLE SWITCH ON | PWE = 1 — parameter writing is enabled, control reminds you constantly | Set PWE back to 0, RESET. Not a fault. |
| Servo (SV) | |||
| SV0401 | IMPROPER V_READY OFF | Velocity ready dropped while position ready was on — amp MCC dropped out, E-stop chain, or an alarm on another axis of a multi-axis amp | Amp STATUS LED, E-stop / MCC chain; look for a buddy alarm (SV0007) |
| SV0404 | IMPROPER V_READY ON | Velocity ready on when it should be off — usually amp or axis-assignment fault | FSSB/axis settings, amplifier |
| SV0410 | EXCESS ERROR (STOP) | Following error at standstill exceeded parameter 1829 — axis being pushed, brake, or tuning | Mechanical load on the axis; DGN 300 |
| SV0411 | EXCESS ERROR (MOVING) | Following error in motion exceeded the limit — overload, lube, crash, or undersized rapid on a cold machine | Way lube / binding; DGN 300 while jogging |
| SV0417 | ILL DGTL SERVO PARAMETER | A digital servo parameter is out of range | DGN 203 bit 4, then DGN 352 for the culprit |
| SV0430 | SV MOTOR OVERHEAT | Servo motor thermal trip | Duty cycle, motor temp (DGN 308), fan/covers |
| SV0436 | SOFTTHERMAL (OVC) | Software thermal — sustained overcurrent, axis working too hard | Mechanical drag, cutting load, accel/decel settings |
| SV0438 | SV ABNORMAL CURRENT | Motor overcurrent — shorted cable/motor phase or amp | Megger motor + power cable |
| SV0453 | SPC SOFT DISCONNECT ALARM | Built-in Pulsecoder soft disconnect | Power off, reseat the encoder cable; recurs → replace Pulsecoder |
| SV0301–SV0306 | APC ALARM (comm/timing/parity...) | Absolute encoder data garbled — encoder, cable, or interface module | Encoder cable and connectors first |
| Overtravel (OT) | |||
| OT0500 / OT0501 | +/− OVERTRAVEL (SOFT 1) | Axis commanded past stored stroke check 1 | Work offset vs. machine envelope; jog back, RESET |
| OT0506 / OT0507 | +/− OVERTRAVEL (HARD) | Physical limit switch tripped — machine is at the stroke end | Jog off the switch (may need OT-release mode), then RESET |
| Power-off required (PW) | |||
| PW0000 | POWER MUST BE OFF | A parameter flagged "power must be off" was changed — expected after setup work | Full power-cycle; RESET will never clear it |
| Spindle (SP) | |||
| SP1220 | NO SPINDLE AMP. | Serial spindle amp not connected or its fiber/cable is broken | Fiber optic / cable to the spindle amp, amp power |
| SP0740 / SP0741 | RIGID TAP ALARM: EXCESS ERROR | Spindle following error blew the limit during rigid tapping (stopped / moving) | Spindle-axis gain match, orient, tap condition |
| SP1225–SP1228 | CRC / FRAMING / RECEIVING / COMM ERROR | CNC-to-spindle-amp serial communication faults | Fiber optic cable, connectors, noise/grounding |
| SP0754 | ABNORMAL TORQUE | Abnormal load detected on the spindle motor | Crash/stall evidence; clears with RESET |
| Overheat (OH) & data/settings (DS) | |||
| OH0700 | LOCKER OVERHEAT | CNC cabinet over temperature | Cabinet fans, filters, ambient temp, door left open with AC off |
| OH0701 | FAN MOTOR STOP | PCB cooling fan failed | Replace the fan unit — don't run without it |
| DS0300 | APC ALARM: NEED REF RETURN | Absolute encoder lost its zero reference — often follows a battery alarm | Re-establish the reference position |
| DS0306 / DS0307 | APC BATTERY VOLTAGE 0 / LOW | Absolute encoder backup battery dead (0) or dying (LOW) | Replace batteries with the control powered on or positions are lost |
Old vs. New Numbering: Reading a Mixed Fleet
The two-letter prefixes only exist on the 30i/31i/32i generation and the modern 0i controls that share its software. Everything before — 16i/18i/21i, 0i-A/B, 15, 0 — used a single shared number space where the number range itself was the category. The 16i/18i-B operator's manual (B-63534EN/02) documents the bands:
| Old number band | Category | Modern prefix |
|---|---|---|
| 000–255 and 5000+ | P/S alarm (program errors) | PS (mostly; see exceptions below) |
| 300–349 | Absolute pulse coder (APC) | Split: SV (comm faults) and DS (battery / reference loss) |
| 350–399 | Serial pulse coder (SPC) | SV |
| 400–499 | Servo | SV |
| 500–599 | Overtravel | OT |
| 700–739 | Overheat | OH |
| 740–748 | Rigid tapping | SP |
| 749–799 | Spindle | SP |
| 900–999 | System | System alarm screen (SYS_ALARM) |
A P/S number raised during background editing displayed as "BP/S" with the same number — the ancestor of today's BG prefix. The good news for shops running both generations: in most cases the old number survives as the digits after the prefix. The classics map like this:
| Old (16i/18i-B and earlier) | Meaning | 30i / modern 0i |
|---|---|---|
| P/S 000 PLEASE TURN OFF POWER | Power-off-required parameter changed | PW0000 POWER MUST BE OFF |
| P/S 100 PARAMETER WRITE ENABLE | PWE is on | SW0100 PARAMETER ENABLE SWITCH ON |
| P/S 101 PLEASE CLEAR MEMORY | Power lost mid-edit, program memory corrupt | No direct successor in the 30i-B Plus alarm list |
| P/S 010 IMPROPER G-CODE | Unknown / un-optioned G code | PS0010 (same number) |
| P/S 5010 END OF RECORD | EOR mid-block, truncated transfer | PS5010 (same number) |
| 3000–3200 (no prefix) | Macro alarm from #3000 (displayed as 3000 + n) | MC3001-style (MCA = 0) or MC0001-style (MCA = 1) |
| 401 SERVO ALARM: VRDY OFF | Amp ready signal dropped | SV0401 |
| 410 / 411 EXCESS ERROR | Following error at stop / in motion | SV0410 / SV0411 |
| 500 / 501 OVER TRAVEL ± | Stored stroke limit 1 | OT0500 / OT0501 |
| 506 / 507 OVER TRAVEL ± | Hardware limit switch | OT0506 / OT0507 |
| 700 / 701 OVERHEAT | Control unit / fan motor | OH0700 / OH0701 |
| 740 / 741 RIGID TAP EXCESS ERROR | Spindle following error tapping (stop / move) | SP0740 / SP0741 — note the move to the spindle prefix |
| 300 APC: origin return needed | Absolute encoder lost reference | DS0300 |
| 306 / 307 APC battery 0 / low | Absolute encoder battery dead / dying | DS0306 / DS0307 — battery alarms moved from the 3xx band to DS |
| 301–304 APC comm/timing/framing/parity | Absolute encoder data garbled | SV0301–SV0304 — comm faults moved to SV |
Macro alarms are the biggest translation trap. On a 16i, #3000 = 1 (TOOL NOT FOUND) puts a plain 3001 TOOL NOT FOUND on the screen — operators learn it as "P/S 3001" (n limited to 0–200, message to 26 characters). On a 30i the same line displays MC3001 TOOL NOT FOUND — and if the builder set MCA (bit 1 of parameter 6008) to 1, the same probe or tool-change package alarms as MC0001 instead. Same macro, three different numbers across a mixed fleet.
The Diagnostic (DGN) Screen
The diagnosis screen is the control's live internals view — read-only, so you can't break anything by looking. Press the SYSTEM function key, then soft key [DIAGNOSIS], and key in a diagnosis number followed by [NO.SRH]. These are the numbers worth knowing cold:
| DGN | Name | Use it when |
|---|---|---|
| 000 | CNC internal state 1 | Machine won't move on a command. Shows a 1 next to the reason: in-position check running, feedrate override 0%, jog override 0%, interlock/start lock on, waiting for spindle speed arrival, waiting for the one-rotation signal (threading), waiting on the position coder (feed-per-rev), feed stop |
| 002 | Dwell execution | Displays 1 while a G04 dwell runs — the "is it stuck or dwelling?" check |
| 200 / 201 | Servo alarm detail bits | An SV alarm is up and you need the flavor: DGN 200 bits flag overload (OVL), low voltage (LV), overcurrent (OVC), abnormal current (HCA), overvoltage (HVA), discharge (DCA), disconnection (FBA), overflow (OFA). DGN 201 ALD/EXP bits split overload into motor-vs-amp overheat and disconnection into built-in vs. separate Pulsecoder, hard vs. soft |
| 300 | Position error (per axis) | Following-error in detection units — the single most useful servo number. Watch it while jogging: it should sit near the predicted value and drop to ~0 at rest |
| 301 | Machine position | Distance from reference position, per axis, in detection units |
| 308 | Servo motor temperature | Motor temp in °C — sanity check before/after SV0430 overheat trips |
Expected steady-state position error while feeding is predictable — if DGN 300 reads wildly above this while cutting, the axis is fighting something mechanical or the loop gain is off:
position error = feedrate (mm/min) x 1
------------------------------ ----------------
60 x servo loop gain (1/sec) detection unit
Rule of thumb: at loop gain 30 (parameter 1825 = 3000) and 1 μm detection, 1000 mm/min shows roughly 555 counts. In-position is declared when DGN 300 falls below the in-position width in parameter 1826.
Reading SV Alarms: What Servo Alarms Usually Mean
Most SV alarms sort into four buckets. Bucket first, then the specific number:
| Bucket | Typical alarms | Where to look |
|---|---|---|
| Feedback / encoder | SV0301–0307 (APC), SV0364–0369 (built-in Pulsecoder), SV0380 (separate detector), SV0453 | Encoder cables and connectors first — they fail far more often than the encoders. Coolant intrusion in connectors is the classic. Then the Pulsecoder itself |
| Overload / overcurrent | SV0410/0411 (excess error), SV0430, SV0436 (OVC), SV0438 | Mechanical: lube, binding, chip packing, crash damage, brake not releasing. DGN 200/201 splits motor vs. amp; DGN 300 shows the axis struggling in real time |
| Power / amplifier | SV0401/0404 (V-ready), SV-alarms with "PS" messages (SV0431–0433, 0437, 0439), SV0010–0018 | Drive cabinet: E-stop and MCC chain, amp STATUS LED code, incoming power quality, regen resistor. "PS" here = the common power supply module |
| Setup / parameter | SV0417, SV0006, SV0032/0033 | Almost always after servo parameter or FSSB changes — diff against your last parameter backup |
Deep servo tuning (gain, filters, HRV) is its own discipline with its own screens (SERVO GUIDE / the SV setting pages) — beyond alarm-clearing scope. If a machine needs its loop retuned to stop alarming, something mechanical usually changed first.
Practical Triage: Before You Call Service
The control already recorded what happened. Pull it before anything gets reset or power-cycled away:
| Step | Action | Why |
|---|---|---|
| 1 | Photograph the active alarm screen (MESSAGE key) | Full prefix + number + message + axis/path; phones don't typo |
| 2 | Open the alarm history: MESSAGE key → soft key [HISTRY] | Chronological list with date, time, alarm type, number, and message — shows the first alarm in a cascade, which is the real one (e.g. SV0007 fingering another axis behind an SV0401) |
| 3 | Note what the machine was doing | Program name/block, cold start vs. mid-shift, after a crash, after parameter work, after a battery change |
| 4 | Capture the relevant DGN values | DGN 300 for excess-error alarms, DGN 200/201 for servo detail, DGN 000 for won't-move complaints |
| 5 | Check the amp STATUS LEDs in the cabinet | Servo/spindle amps display their own alarm character codes — service will ask |
| 6 | Only then RESET or power-cycle | One RESET is diagnostic (does it clear? does it come right back?). Repeated blind resets just wear out the button |
History caveats: the [ALL CLEAR] soft key (only shown when bit 7 (EKE) of parameter 3195 = 1) wipes all history types at once — alarms, operator messages, operations, and I/O signals live in one shared storage area, and there is no per-type delete. Don't clear it while troubleshooting. Because that storage is shared, a chatty machine can push old alarms out; bit 2 (SAH) of parameter 11354 reserves a dedicated area that always keeps the last 50 alarms. To get external/macro alarm messages (#3000) recorded with their text, set bit 3 (EAH) of parameter 3112 to 1 and bit 7 (HAL) of parameter 3196 to 0. On the 16i/18i generation the equivalent history lives under the same MESSAGE key but only holds the last 25 alarms.
See also: Fanuc Parameters for PWE and the parameter number map, and Fanuc System Variables for macro alarm generation via #3000.
References
- Fanuc, Series 30i/31i/32i-MODEL B Plus Maintenance Manual, B-64725EN/01, FANUC Corporation. (Appendix A alarm list; Section 1.3 diagnosis function; Section 1.10.6 alarm history.)
- Fanuc, Series 30i/31i/32i-MODEL B Plus Operator’s Manual (Common to Lathe System/Machining Center System), B-64724EN/01, FANUC Corporation. (Chapter 7 alarm and self-diagnosis functions; Section 16.2 macro alarm system variable #3000.)
- Fanuc, Series 16i/18i/160i/180i-MODEL B Operator’s Manual (Machining Center), B-63534EN/02, GE Fanuc. (Section 7.1 error-code bands; Appendix G alarm list; Section 15.2 macro alarms.)
- Fanuc, Series 16i/18i/21i-MODEL B Maintenance Manual, B-63525EN/02, GE Fanuc. (Diagnostic page and position-error formula.)
Have a question or want to contribute?
Contact us with corrections, additions, or topics you'd like covered.
Get in Touch