Post-processor G-code checker
Paste or open a CNC program posted from Fusion and check it against the controller it will run on — GRBL, grblHAL, Marlin, LinuxCNC or a Haas/Fanuc-style mill: unsupported codes, arcs it will reject, modal state the program relies on, feeds of zero, cutting with the spindle off, fast plunges, low rapids, moves past the machine's travel, and a run-time estimate.
Added
Works with
- G-code viewer and simulator CNC and 3D printingOpen in G-code viewer shows the checked program there in 3-D
How to use it
The usual way to find out a program was posted for the wrong controller is error:20 halfway through a
job, or a router that drills nothing because Marlin silently skipped the drilling cycle. This page reads
the program the way the controller will, line by line, and tells you first. Everything runs in your
browser.
How to use it
-
Paste the program or Open file (
.nc,.gcode,.tap,.ngc…). Two samples show the idea: the same bracket posted for a Haas-style mill (try it against GRBL) and posted for GRBL. -
Choose the controller, or leave it on detect: the page guesses from what is in the file —
Oprogram numbers andG187look like Haas,Ewords andM104like a printer,o100 suband#<_name>like LinuxCNC — and tells you why. -
Set up the machine: its travel, where work zero sits in it (the distance from the X and Y minimum and down from the top of Z), rapid speed, maximum feed, acceleration, the stock top, a safe height for sideways rapids, a plunge limit and how long a tool change takes. A few presets are there to start from; the values are approximate, so put in your own.
-
Read the findings, problems first. Click one to see its lines in the listing and in red on the top view.
What it checks:
-
Codes the controller doesn’t run. GRBL has no cutter compensation (G41/G42 — set Fusion’s compensation to In computer), no tool table (G43 H), no drilling cycles (G81–G89), and stops at M6. Marlin skips anything it doesn’t know without stopping. LinuxCNC doesn’t know Haas codes (G187, G103, M97). Haas has no G38 probing or G90.1. Words the controller doesn’t accept (D, H, Q, O on GRBL), lines longer than its buffer (80 characters on GRBL),
%lines, o-words and expressions. -
Arcs. An R arc whose radius is less than half the distance between its ends, a full circle written with R, a half circle with R (unstable), and I/J/K arcs whose end is not on the circle — GRBL and LinuxCNC reject a difference of more than 0.005 mm and 0.1 % of the radius (
error:33). An arc straight after G41/G42. -
Modal state. Units, absolute mode, plane, work offset and feed mode that the program uses but never sets. GRBL keeps these from the last job or jog until it is reset, so a program without a safe-start line can run in inches or incremental mode by accident.
-
Moves. Feed moves with no feed (or F0), cutting below the stock top with the spindle off or at S0, plunges faster than your limit, rapids sideways below the safe height or inside the stock, rapids down into the stock, a first sideways move before any Z is set, G28 with no intermediate point, G92 offsets, and the extent of the program against the machine’s reach (soft limits).
-
Run time: distance over feed (capped at the machine’s maximum feed) for cuts and rapids, an allowance for accelerating at each sharp change of direction, dwells and tool changes. Drilling cycles are expanded. Treat it as an estimate: a program of many tiny segments runs slower than this on a real planner.
Open in G-code viewer sends the program to the G-code viewer for a 3-D look and a line-by-line simulation. To run it, the G-code sender streams it to a GRBL machine. For feeds that suit the bit, see router feeds and speeds; to make the DXF the program came from cut cleanly, the DXF checker.
Limits
The controller notes come from their documentation (GRBL 1.1’s G-code parser, grblHAL, Marlin’s G-code index, the LinuxCNC G-code reference, Haas’s mill manual) and cover what Fusion’s posts actually write; they are not a full emulation. Optional build features (Marlin’s spindle and coordinate systems, GRBL’s M7) are reported as notes, not errors. Machine coordinates (G53) are not checked against the travel.
Feedback is a gift. Something to improve, a feature to add, or a bug? Tell me.
Runs entirely in your browser; nothing you type leaves this page.