Alarm and error decoder
Machine stopped? Paste the line your sender showed (like ALARM:9, error:22 or a FluidNC soft-limit message), or the code an xTool or Ruida laser shows (like M222 S9 or Water protection failure). You get the plain meaning, whether the machine still knows where it is, and what to do. Free, and it works offline once loaded.
Just powered on, or the machine won't move?
A machine that stops with an alarm right after power-on usually needs homing, or is parked against a limit switch. Home it first, unlock it, then check the job. In one owner's report it was the alarm state, not a dead board. (CLAIMED · forum report, not official; the thread doesn't name the alarm number: r/hobbycnc thread, Jan 2026 (the thread doesn't name the alarm number))
Every code
Codes with a link have a full page with steps. The rest show the firmware's own message. Official text copied from each firmware's source on 2026-11-01; position answers are Hamrun's reading unless the firmware's message says it.
GRBL 1.1 alarms (10)
| Code | What it means | Position |
|---|---|---|
| ALARM:1 | A limit switch was hit while the machine was moving, so the controller stopped dead. | lost |
| ALARM:2 | A move in the file would take the machine past the travel it knows it has, so the controller refused to start it. | kept |
| ALARM:3 | The controller was reset while the machine was moving. | lost |
| ALARM:4 | The probe already looked touched (or untouched, for a probe-away move) before probing even started. | kept |
| ALARM:5 | The probe moved its full distance and never touched the plate. | kept |
| ALARM:6 | Homing was interrupted by a reset before it finished. | not-set |
| ALARM:7 | The safety door was opened during homing. | not-set |
| ALARM:8 | After touching a limit switch, the machine backed off but the switch still read as pressed. | not-set |
| ALARM:9 | During homing an axis travelled as far as it's allowed to and never found its limit switch. | not-set |
| ALARM:10 | On a machine with two motors on one axis, the second limit switch wasn't found when squaring. | not-set |
GRBL 1.1 errors (36)
| Code | What it means | Position |
|---|---|---|
| error:1 | The controller got a line that isn't proper G-code: something without a letter, or a stray character. | kept |
| error:2 | A number in the line is missing or badly written (like X1.2.3 or a letter with no value). | kept |
| error:3 | Grbl '$' system command was not recognized or supported. | kept |
| error:4 | Negative value received for an expected positive value. | kept |
| error:5 | You asked the machine to home, but homing is turned off in its settings. | kept |
| error:6 | Minimum step pulse time must be greater than 3usec. | kept |
| error:7 | An EEPROM read failed. Auto-restoring affected EEPROM to default values. | kept |
| error:8 | Grbl '$' command cannot be used unless Grbl is IDLE. Ensures smooth operation during a job. | kept |
| error:9 | The controller is in an alarm or jog state, so it refused the G-code. | kept |
| error:10 | Soft limits cannot be enabled without homing also enabled. | kept |
| error:11 | Max characters per line exceeded. Received command line was not executed. | kept |
| error:12 | Grbl '$' setting value cause the step rate to exceed the maximum supported. | kept |
| error:13 | Safety door detected as opened and door state initiated. | kept |
| error:14 | Build info or startup line exceeded EEPROM line length limit. Line not stored. | kept |
| error:15 | A jog would go past the machine's travel, so it was ignored. | kept |
| error:16 | Jog command has no '=' or contains prohibited g-code. | kept |
| error:17 | Laser mode requires PWM output. | kept |
| error:20 | The line has a G or M code this controller doesn't know. | kept |
| error:21 | More than one g-code command from same modal group found in block. | kept |
| error:22 | A cutting move came before any feed rate (F) was set. | kept |
| error:23 | G-code command in block requires an integer value. | kept |
| error:24 | Two commands on one line both want the X/Y/Z values, so the controller can't tell which gets them. | kept |
| error:25 | Repeated g-code word found in block. | kept |
| error:26 | No axis words found in block for g-code command or current modal state which requires them. | kept |
| error:27 | Line number value is invalid. | kept |
| error:28 | G-code command is missing a required value word. | kept |
| error:29 | G59.x work coordinate systems are not supported. | kept |
| error:30 | G53 only allowed with G0 and G1 motion modes. | kept |
| error:31 | Axis words found in block when no command or current modal state uses them. | kept |
| error:32 | G2 and G3 arcs require at least one in-plane axis word. | kept |
| error:33 | A move's target is impossible, usually an arc whose end doesn't fit its centre or radius. | kept |
| error:34 | Arc radius value is invalid. | kept |
| error:35 | G2 and G3 arcs require at least one in-plane offset word. | kept |
| error:36 | Unused value words found in block. | kept |
| error:37 | G43.1 dynamic tool length offset is not assigned to configured tool length axis. | kept |
| error:38 | Tool number greater than max supported value. | kept |
grblHAL alarms (22)
| Code | What it means | Position |
|---|---|---|
| ALARM:1 | A limit switch was hit while the machine was moving, so the controller stopped dead. | lost |
| ALARM:2 | A move in the file would take the machine past the travel it knows it has, so the controller refused to start it. | kept |
| ALARM:3 | The controller was reset while the machine was moving. | lost |
| ALARM:4 | The probe already looked touched (or untouched, for a probe-away move) before probing even started. | kept |
| ALARM:5 | The probe moved its full distance and never touched the plate. | kept |
| ALARM:6 | Homing was interrupted by a reset before it finished. | not-set |
| ALARM:7 | The safety door was opened during homing. | not-set |
| ALARM:8 | After touching a limit switch, the machine backed off but the switch still read as pressed. | not-set |
| ALARM:9 | During homing an axis travelled as far as it's allowed to and never found its limit switch. | not-set |
| ALARM:10 | The emergency stop input is active. | lost |
| ALARM:11 | The controller is set to require homing before anything else. | not-set |
| ALARM:12 | A limit switch reads as pressed, so the controller won't move until it's clear. | not-set |
| ALARM:13 | The probe was touched while the machine wasn't probing. | lost |
| ALARM:14 | The spindle didn't report reaching its speed in time. | kept |
| ALARM:15 | On a machine with two motors on one axis, the second limit switch wasn't found when squaring. | not-set |
| ALARM:16 | The controller's power-on self test failed. | not-set |
| ALARM:17 | A stepper or servo driver reported a fault. | lost |
| ALARM:18 | Homing is set up in a way the controller can't run. | not-set |
| ALARM:19 | Communication with a Modbus device (often the spindle VFD) timed out or failed. | – |
| ALARM:20 | The controller lost contact with an I/O expander board. | – |
| ALARM:21 | The controller couldn't read or write its settings memory. | – |
| ALARM:22 | A buffer in the controller overflowed. | – |
grblHAL errors (89)
| Code | What it means | Position |
|---|---|---|
| error:1 | The controller got a line that isn't proper G-code: something without a letter, or a stray character. | kept |
| error:2 | A number in the line is missing or badly written (like X1.2.3 or a letter with no value). | kept |
| error:3 | '$' system command was not recognized or supported. | kept |
| error:4 | Negative value received for an expected positive value. | kept |
| error:5 | You asked the machine to home, but homing is turned off in its settings. | kept |
| error:6 | Step pulse time must be greater or equal to 2 microseconds. | kept |
| error:7 | A settings read failed. Auto-restoring affected settings to default values. | kept |
| error:8 | '$' command cannot be used unless controller state is IDLE. Ensures smooth operation during a job. | kept |
| error:9 | The controller is in an alarm or jog state, so it refused the G-code. | kept |
| error:10 | Soft limits cannot be enabled without homing also enabled. | kept |
| error:11 | Max characters per line exceeded. Received command line was not executed. | kept |
| error:12 | '$' setting value cause the step rate to exceed the maximum supported. | kept |
| error:13 | Safety door detected as opened and door state initiated. | kept |
| error:14 | Build info or startup line exceeded line length limit. Line not stored. | kept |
| error:15 | A jog would go past the machine's travel, so it was ignored. | kept |
| error:16 | Jog command has no '=' or contains prohibited g-code. | kept |
| error:17 | Laser mode requires PWM output. | kept |
| error:18 | Reset asserted | – |
| error:19 | Non positive value | kept |
| error:20 | The line has a G or M code this controller doesn't know. | kept |
| error:21 | More than one g-code command from same modal group found in block. | kept |
| error:22 | A cutting move came before any feed rate (F) was set. | kept |
| error:23 | G-code command in block requires an integer value. | kept |
| error:24 | Two commands on one line both want the X/Y/Z values, so the controller can't tell which gets them. | kept |
| error:25 | Repeated g-code word found in block. | kept |
| error:26 | No axis words found in block for g-code command or current modal state which requires them. | kept |
| error:27 | Line number value is invalid. | kept |
| error:28 | G-code command is missing a required value word. | kept |
| error:29 | G59.x work coordinate systems are not supported. | kept |
| error:30 | G53 only allowed with G0 and G1 motion modes. | kept |
| error:31 | Axis words found in block when no command or current modal state uses them. | kept |
| error:32 | G2 and G3 arcs require at least one in-plane axis word. | kept |
| error:33 | A move's target is impossible, usually an arc whose end doesn't fit its centre or radius. | kept |
| error:34 | Arc radius value is invalid. | kept |
| error:35 | G2 and G3 arcs require at least one in-plane offset word. | kept |
| error:36 | Unused value words found in block. | kept |
| error:37 | G43.1 dynamic tool length offset is not assigned to configured tool length axis. | kept |
| error:38 | Tool number greater than max supported value or undefined tool selected. | kept |
| error:39 | Value out of range. | kept |
| error:40 | G-code command not allowed when tool change is pending. | kept |
| error:41 | Spindle not running when motion commanded in CSS or spindle sync mode. | kept |
| error:42 | Plane must be ZX for threading and lathe cycles. | kept |
| error:43 | Max. feed rate exceeded. | kept |
| error:44 | RPM out of range. | kept |
| error:45 | A limit switch is pressed, so only homing is allowed. | kept |
| error:46 | The machine has to be homed before it will do this. | kept |
| error:47 | ATC: current tool is not set. Set current tool with M61. | kept |
| error:48 | Value word conflict. | kept |
| error:49 | Power on self test failed. A hard reset is required. | kept |
| error:50 | Emergency stop active. | kept |
| error:51 | Motor fault. | kept |
| error:52 | Setting value is out of range. | kept |
| error:53 | Setting is not available, possibly due to limited driver support. | kept |
| error:54 | Retract position is less than drill depth. | kept |
| error:55 | Attempt to home two auto squared axes at the same time. | kept |
| error:56 | Coordinate system is locked. | kept |
| error:57 | Unexpected file demarcation. | kept |
| error:58 | Port is not available | kept |
| error:60 | SDMount Error (no message text in the firmware) | kept |
| error:61 | File Read Error (no message text in the firmware) | kept |
| error:62 | Fs Failed Open Dir (no message text in the firmware) | kept |
| error:63 | FSDir Not Found (no message text in the firmware) | kept |
| error:64 | SDNot Mounted (no message text in the firmware) | kept |
| error:65 | Fs Not Mounted (no message text in the firmware) | kept |
| error:66 | Fs Read Only (no message text in the firmware) | kept |
| error:70 | BTInit Error (no message text in the firmware) | kept |
| error:71 | Unknown operation found in expression. | kept |
| error:72 | Divide by zero in expression attempted. | kept |
| error:73 | Too large or too small argrument provided. | kept |
| error:74 | Argument is not valid for the operation | kept |
| error:75 | Expression is not valid. | kept |
| error:76 | Either NAN (not a number) or infinity was returned from expression. | kept |
| error:77 | Authentication required. | kept |
| error:78 | Access denied. | kept |
| error:79 | Not allowed while critical event is active. | kept |
| error:80 | Flow statement only allowed in filesystem macro. | kept |
| error:81 | Unknown or invalid flow statement. | kept |
| error:82 | Stack overflow while executing flow statement. | kept |
| error:83 | Out of memory while executing flow statement. | kept |
| error:84 | Could not open file. | kept |
| error:85 | Fs Format Failed (no message text in the firmware) | kept |
| error:86 | Port is not usable. | kept |
| error:87 | Tool in spindle. | kept |
| error:88 | No tool in spindle. | kept |
| error:89 | File Delete Failed (no message text in the firmware) | kept |
| error:90 | Cutter compensation is already active. | kept |
| error:91 | Command not allowed while cutter compensation is active. | kept |
| error:92 | Cutter compensation is not valid for current move. | kept |
| error:253 | User defined error occured. | kept |
FluidNC alarms (18)
| Code | What it means | Position |
|---|---|---|
| ALARM:1 | A limit switch was hit while the machine was moving, so the controller stopped dead. | lost |
| ALARM:2 | A move in the file would take the machine past the travel it knows it has, so the controller refused to start it. | kept |
| ALARM:3 | The controller was reset while the machine was moving. | lost |
| ALARM:4 | The probe already looked touched (or untouched, for a probe-away move) before probing even started. | kept |
| ALARM:5 | The probe moved its full distance and never touched the plate. | kept |
| ALARM:6 | Homing was interrupted by a reset before it finished. | not-set |
| ALARM:7 | The safety door was opened during homing. | not-set |
| ALARM:8 | After touching a limit switch, the machine backed off but the switch still read as pressed. | not-set |
| ALARM:9 | During homing an axis travelled as far as it's allowed to and never found its limit switch. | not-set |
| ALARM:10 | The spindle controller reported a problem. | – |
| ALARM:11 | A control or limit input was already on when FluidNC started. | not-set |
| ALARM:12 | A limit switch is active, but FluidNC can't tell which way to move to clear it. | not-set |
| ALARM:13 | A hard stop was triggered. | lost |
| ALARM:14 | The controller is set to require homing before anything else. | not-set |
| ALARM:15 | FluidNC is starting up, or its setup didn't finish. | not-set |
| ALARM:16 | The controller lost contact with an I/O expander board. | – |
| ALARM:17 | A G-code error while running a file raised an alarm, so the job stopped. | kept |
| ALARM:18 | A limit switch was hit during probing. | lost |
FluidNC errors (85)
| Code | What it means | Position |
|---|---|---|
| error:1 | The controller got a line that isn't proper G-code: something without a letter, or a stray character. | kept |
| error:2 | A number in the line is missing or badly written (like X1.2.3 or a letter with no value). | kept |
| error:3 | Invalid $ statement | kept |
| error:4 | Negative value | kept |
| error:5 | Setting disabled | kept |
| error:6 | Step pulse too short | kept |
| error:7 | Failed to read settings | kept |
| error:8 | Command requires idle state | kept |
| error:9 | The controller is in an alarm or jog state, so it refused the G-code. | kept |
| error:10 | Soft limit error | kept |
| error:11 | Line too long | kept |
| error:12 | Max step rate exceeded | kept |
| error:13 | Check door | kept |
| error:14 | Line too long | kept |
| error:15 | A jog would go past the machine's travel, so it was ignored. | kept |
| error:16 | Invalid jog command | kept |
| error:17 | Laser mode requires PWM output | kept |
| error:18 | You asked the machine to home, but homing is turned off in its settings. | kept |
| error:19 | Single axis homing not allowed | kept |
| error:20 | The line has a G or M code this controller doesn't know. | kept |
| error:21 | Gcode modal group violation | kept |
| error:22 | A cutting move came before any feed rate (F) was set. | kept |
| error:23 | Gcode command value not integer | kept |
| error:24 | Two commands on one line both want the X/Y/Z values, so the controller can't tell which gets them. | kept |
| error:25 | Gcode word repeated | kept |
| error:26 | Gcode no axis words | kept |
| error:27 | Gcode invalid line number | kept |
| error:28 | Gcode value word missing | kept |
| error:29 | Gcode unsupported coordinate system | kept |
| error:30 | Gcode G53 invalid motion mode | kept |
| error:31 | Gcode extra axis words | kept |
| error:32 | Gcode no axis words in plane | kept |
| error:33 | A move's target is impossible, usually an arc whose end doesn't fit its centre or radius. | kept |
| error:34 | Gcode arc radius error | kept |
| error:35 | Gcode no offsets in plane | kept |
| error:36 | Gcode unused words | kept |
| error:37 | Gcode G43 dynamic axis error | kept |
| error:38 | Gcode max value exceeded | kept |
| error:39 | P param max exceeded | kept |
| error:40 | Check startup pins | kept |
| error:60 | Failed to mount device | kept |
| error:61 | Read failed | kept |
| error:62 | Failed to open directory | kept |
| error:63 | Directory not found | kept |
| error:64 | File empty | kept |
| error:65 | File not found | kept |
| error:66 | Failed to open file | kept |
| error:67 | Device is busy | kept |
| error:68 | Failed to delete directory | kept |
| error:69 | Failed to delete file | kept |
| error:70 | Failed to rename file | kept |
| error:80 | Number out of range for setting | kept |
| error:81 | Invalid value for setting | kept |
| error:82 | Failed to create file | kept |
| error:83 | Failed to format filesystem | kept |
| error:90 | Failed to send message | kept |
| error:100 | Failed to store setting | kept |
| error:101 | Failed to get setting status | kept |
| error:110 | Authentication failed! | kept |
| error:111 | End of line | kept |
| error:112 | End of file | kept |
| error:113 | System Reset | – |
| error:114 | No Data | kept |
| error:115 | Deferred | kept |
| error:120 | Another interface is busy | kept |
| error:130 | Jog Cancelled | kept |
| error:150 | Bad Pin Specification | kept |
| error:151 | Bad Runtime Config Setting | kept |
| error:152 | FluidNC's configuration file has a problem, so it won't run until it's fixed. | kept |
| error:160 | File Upload Failed | kept |
| error:161 | File Download Failed | kept |
| error:162 | Read-only setting | kept |
| error:170 | Expression Divide By Zero | kept |
| error:171 | Expression Invalid Argument | kept |
| error:172 | Expression Invalid Result (no message text in the firmware) | kept |
| error:173 | Expression Unknown Operator | kept |
| error:174 | Expression Argument Out of Range | kept |
| error:175 | Expression Syntax Error | kept |
| error:176 | Flow Control Syntax Error | kept |
| error:177 | Flow Control Not Executing Macro | kept |
| error:178 | Flow Control Out of Memory | kept |
| error:179 | Flow Control Stack Overflow | kept |
| error:180 | Parameter Assignment Failed | kept |
| error:181 | Gcode invalid word value | kept |
| error:182 | Gcode M72 without saved modal state | kept |
Laser controllers (29)
xTool and Ruida don't number their codes the GRBL way, and xTool uses different schemes on different models. Meanings are in Hamrun's own words from each maker's list; neither maker says what happens to position, so none is guessed. “Hard limit protection” and “Border crossing” are named in Ruida's manual without an explanation, so they aren't listed.
| Controller | Code or message | What it means |
|---|---|---|
| xTool S1 | M222 S4 | The machine was moved or knocked while it was set up or working. source |
| xTool S1 | M222 S7 ⚠ | A job was started with no project file loaded, or with the lid up. source |
| xTool S1 | M222 S9 ⚠ | The machine's sensor saw a flame. source |
| xTool S1 | M222 S20 | A move during the job reached the end of the machine's travel. source |
| xTool S1 | M222 S21 | The Wi-Fi part of the machine stopped talking to the main board. source |
| xTool S1 | M222 S22 | The laser head stopped talking to the main board. source |
| xTool S1 | M363 S0 | Measuring the distance to the work went wrong. source |
| xTool S1 | M363 S2 | The distance sensor's signal isn't coming through properly. source |
| xTool S1 | M363 S3 | The distance sensor didn't return to its starting position. source |
| xTool S1 | M363 S4 | Measuring the distance to the work went wrong. source |
| xTool S1 | M363 S5 | Measuring the distance to the work went wrong. source |
| xTool S1 | M53 T0 | The machine's internal storage, or its SD card, has a problem or may be damaged. (xTool lists M53 T0 twice with different descriptions; this is listing 1 of 2.) source |
| xTool S1 | M53 C1/C2/W2 | Something is wrong with the base plate or the riser base. source |
| xTool S1 | M53 I0 | Outside light is interfering with the machine's sensors. source |
| xTool S1 | M53 S0 | The safety key was taken out. source |
| xTool S1 | M53 T0 | The SD card or the machine's internal storage has failed or isn't working. (xTool lists M53 T0 twice with different descriptions; this is listing 2 of 2.) source |
| xTool S1 | M53 W0 ⚠ | The laser module is too hot. source |
| xTool S1 | M53 F5 ⚠ | The machine thinks there's a risk of fire. source |
| xTool S1 | M8 | A chip that drives the motors reported a fault. source |
| xTool P2 | BOARDS.ELEMENT_NOT_FOUND.wcb_gd330 | The main board can't reach the water-cooling board. source |
| xTool P2 | BOARDS.ELEMENT_NOT_FOUND.ui_gd330 | The main board can't reach the board behind the screen and buttons. source |
| xTool P2 | BOARDS.ELEMENT_NOT_FOUND.motion_gd450 | The machine can't reach its main control board. source |
| xTool D series | M363 N1 | Outside light is interfering with the machine's sensors. source |
| xTool F1 | FIRE_RECOGNITION ⚠ | The machine's sensor saw a flame. source |
| Ruida RDC6445 | Water protection failure ⚠ | The controller thinks the laser tube's cooling water isn't flowing, or the water sensor or its wiring has a problem. It can also be a temperature reading out of range. source |
| Ruida RDC6445 | Cover protection ⚠ | The lid switch says the lid is open, or its sensor or wiring is faulty. source |
| Ruida RDC6445 | Over breadth | The job goes outside the machine's work area. source |
| Ruida RDC6445 | X/Y/Z/U axis Over breadth | The job goes past the travel of one axis (the message names X, Y, Z or U). source |
| Ruida RDC6445 | Insufficient motion buffer distance | The job asks for more speed than the machine has room to reach and stop from. source |
⚠ = fire or safety risk: stop and check for flame first.