Haas Alarms & Diagnostics
Alarms on the Next Generation Control
When a Haas stops on a fault, the control tells you three ways at once: the display jumps to the alarm screen (or you press the ALARMS key) with the alarm number, its text, and usually a help description; the beacon on top of the machine flashes red; and the alarm is appended to the alarm history. The ALARMS key cycles through tabs — the active alarm, the messages page, and the history — so the same key that shows you today’s problem also shows you last week’s pattern.
The distinction that matters on the floor: an alarm stops the machine. Motion halts, the program stops, and nothing runs again until the cause is fixed and RESET clears it (a few faults need a power cycle). A message is just text — it sits on the messages tab, doesn’t interrupt anything, and is the right tool for notes to the next operator. In between the two sits the programmable stop (#3006, below): the program pauses with a message and waits for CYCLE START, like an M00 that explains itself. Beacon shorthand: solid green means cycling, flashing green means the machine is waiting on you (feed hold, M00, a #3006 stop), flashing red means an alarm.
How Alarm Numbers Are Organized
Haas alarms are plain numbers with plain-English names — there’s no prefix code to decode like a Fanuc SV or Mitsubishi M01. What the number does tell you is the family, because related faults cluster in bands. The names are descriptive enough that the alarm text itself is usually half the diagnosis. (Exact numbering varies some by model and software version — trust the name and the on-screen help text over a memorized number.)
| Family | Canonical examples | What it means on the floor |
|---|---|---|
| Servo & axis faults (100-band) | 102 SERVOS OFF, 103–106 X/Y/Z/A SERVO ERROR TOO LARGE, 107 EMERGENCY OFF, SERVO OVERLOAD | The axis couldn’t follow the command — crash, binding, chip packing, a brake that didn’t release, or a drive fault. SERVO ERROR TOO LARGE is the Haas equivalent of Fanuc’s excess-error alarm: the gap between commanded and actual position blew the limit. 107 just means the E-stop chain is open. |
| Overtravel | AXIS OVERTRAVEL alarms per axis; travel-range alarms when a program commands past the stored limits | Two flavors: the axis physically hit a stroke-end switch (jog off it, then RESET), or the lookahead caught a programmed move outside the envelope before anything moved — that one is a work-offset or program problem, not a machine problem. |
| Tool changer | TOOL UNCLAMP FAULT, ATC arm / shuttle / carousel faults, SPINDLE ORIENTATION FAULT | The changer sequence stalled mid-motion. Air pressure, a stuck pull stud, a tool seated wrong in the carousel, or orientation not reached. Recovery is the documented tool-changer restore procedure — not jogging things by hand. |
| Spindle | Spindle drive faults, spindle overload/overheat, gear-change faults | Drive- or transmission-level: sustained overload, cooling, or a gear change that never confirmed. Check what the cut was asking for before blaming the drive. |
| Support systems | LOW COOLANT, LOW AIR PRESSURE, low lube / low oil pressure alarms | The machine protecting itself. These are the cheapest alarms you’ll ever fix — fill the tank, find the air leak — and the most expensive to ignore. |
| Program errors | Invalid G-code, cutter-comp interference, missing feedrate-type alarms raised at run time | Your G-code, not the machine. The alarm text names the offending block; fix the program and RESET. |
| Macro-generated (1000–1999) | Whatever your macros raise via #3000 — e.g. 1086 PATH OBSTRUCTED from the Renishaw macros | Alarms 1000–1999 are reserved for programs: #3000 = n displays as alarm 1000 + n with your message text. If the alarm is in this band, a macro decided to stop the machine — read the message, not the wiring diagram. |
Macro-Generated Alarms (#3000) and Messages (#3006)
The two most useful lines in Haas macro programming are a hard stop and a soft stop. Writing #3000 raises a real alarm: the machine stops exactly as if the control had faulted, the beacon flashes red, your text shows on the alarm screen, and the operator must RESET. Writing #3006 is a planned stop: the program pauses with your message displayed and continues on CYCLE START.
#3000= 15 (TOOL TOO LONG) (hard stop: displays alarm 1015 TOOL TOO LONG)
#3006= 1 (FLIP PART) (planned stop: message shown, CYCLE START continues)
The message goes in parentheses in the same block, and the number you assign to #3000 (1–999) becomes the alarm number plus 1000 — which is why picking distinct numbers for distinct failure modes pays off later, when the alarm history shows which check tripped without anyone remembering the message text.
Where this earns its keep is in-process gauging: probe a feature mid-program, compare against nominal, and refuse to keep cutting if the part has walked out of tolerance. A minimal version:
(IN-PROCESS BORE CHECK)
(#121 = MEASURED DIAMETER, SET BY THE PROBING CYCLE ABOVE)
#122= 25.400 (NOMINAL DIAMETER)
#123= 0.025 (PLUS/MINUS TOLERANCE)
IF [ABS[#121 - #122] LE #123] GOTO 100
#3000= 101 (BORE OUT OF TOLERANCE) (STOPS HERE - ALARM 1101)
N100 (IN TOLERANCE - CONTINUE MACHINING)
If the bore is good, execution falls through N100 and nothing visible happens. If it isn’t, the machine hard-stops with 1101 BORE OUT OF TOLERANCE on the screen — no scrapped follow-on operations, no bad part quietly finishing. The same pattern with #3006 instead of #3000 gives you a gentler version for warnings that deserve eyes but not a red beacon: the operator reads the message, checks the part, and presses CYCLE START to accept.
Probe and Skip Alarms
A bare G31 skip move on a Haas is trusting to a fault: if the skip signal never arrives, the move simply completes to its programmed endpoint — the control raises nothing. All the protection you actually see on a probing Haas comes from the macro layer sitting on top. The Renishaw (WIPS) macros check the probe state before and during every move and raise #3000 alarms when something is wrong, which is why probe faults land in the 1000-band with Renishaw’s text:
| Alarm text | Raised via | What happened |
|---|---|---|
| PATH OBSTRUCTED | #3000 = 86 → alarm 1086 | The probe triggered during a protected positioning move — the stylus hit something where nothing was expected. Check for a mislocated part, wrong work offset, or chips on the feature. |
| PROBE OPEN | #3000 = 92 → alarm 1092 | The stylus was already deflected before the measuring move started — the probe is resting against the part, hung in chips, or the stylus is bent. |
| PROBE FAIL | #3000 family | The measuring move finished without ever seeing a trigger — the surface wasn’t where the cycle expected it, or the probe never switched on (dead battery, no spin-on/start signal). |
The full cycle-by-cycle alarm list, flag-only mode for unattended running, and the output variables the cycles leave behind are covered in Haas Renishaw Inspection.
Diagnostics on the NGC
The DIAGNOSTIC key opens the control’s live internals: the Diagnostics tab shows the discrete inputs and outputs (every switch, sensor, and solenoid state the control can see), axis load meters, and temperature readings, and the neighboring Maintenance tab tracks component usage. It’s all read-only — when a tool changer won’t complete or a door interlock alarm makes no sense, watching the relevant input flip (or fail to flip) on this screen is how you separate a bad switch from a bad sequence.
Almost everything on that screen is also readable from a macro, which turns diagnostics into something your programs can act on rather than something you look at after the fact:
| Variables | What they read | Shop use |
|---|---|---|
#1064–#1068 | Maximum axis loads for X, Y, Z, A, B | Tool-wear canary: record the peak load after a roughing pass and raise a #3000 or #3006 when it creeps past a known-good baseline |
#3027 | Spindle RPM (read-only) | Verify the spindle actually reached speed before a critical cut |
#11000–#11255 | 256 discrete inputs (read-only) | Read the same input states the Diagnostics tab displays — gate a cycle on a fixture-confirm switch or part-present sensor |
#3020–#3025 | Timers: power-on, cycle-start, feed, present part, last complete part, previous part | Cycle-time drift tracking without a stopwatch |
#3901 / #3902 | M30 counters 1 and 2 | Utilization and parts-per-shift tracking — one counter for the operator to reset, one left running |
The full variable map lives in Haas System Variables. One more habit worth building: the alarm history can be exported to a file for a service call, so capture it before anyone starts clearing things.
A Debugging Workflow
When a Haas is down and people are standing around it, work in this order. History first: open the alarm history before touching RESET — the alarm on screen is often the last domino, and the history shows the first one, with timestamps that tell you whether this is new or has been building for a week. Then macro state: if the alarm number is 1000–1999, a program raised it deliberately — pull up the macro variables display and look at the values the macro was checking (the measured size, the flag, the load reading) instead of opening the electrical cabinet. Then hardware: for tool changer, interlock, and support-system alarms, go to the Diagnostics tab and watch the actual input while you operate the thing that should trip it — a switch that never changes state is your answer. Only after that does one deliberate RESET become a diagnostic: if the alarm comes straight back, the cause is still present; if it clears and reoccurs an hour later, the history you saved is now your trend line.
See also: Haas System Variables for the complete #-variable map, Haas Programming & Macros for the macro language these alarms are written in, Haas Settings & Parameters for the settings that change alarm-adjacent behavior, and Alarms & Timers for how #3000/#3006 compare across controls.
References
- Haas Automation, Mill Operator’s Manual — Next Generation Control, Haas Automation Inc.
- Haas Automation, alarm list and troubleshooting guides, haascnc.com service pages.
Have a question or want to contribute?
Contact us with corrections, additions, or topics you'd like covered.
Get in Touch