GCode Small-Move Remover
PowerShell script that removes gcode cutting moves where X and Y coordinates differ from the previous kept position by less than or equal to a configurable threshold (default 0.0006). These near-zero moves cause Komo CNC machines to throw ERROR: CRC Fault.
Problem
Komo controllers reject cutting moves where the actual displacement in X and Y is negligibly small. For example:
N7633 G1 X23.1756 Y27.9265 Z0.7700 F150.
N7634 G1 X23.1757 Y27.9268 Z0.7700 F150. <-- dX=0.0001, dY=0.0003 (CRC Fault)
N7635 G1 X23.1962 Y27.9797 Z0.7700 F150.
N7636 G1 X23.1963 Y27.9799 Z0.7700 F150. <-- dX=0.0001, dY=0.0002 (CRC Fault)
N7637 G1 X23.2163 Y28.0330 Z0.7700 F150.
Lines N7634 and N7636 move less than 0.0006 in both X and Y from the previous position, which Komo sees as invalid and halts with a CRC Fault error.
Solution
The script parses .OUT gcode files and removes cutting move lines (G1, G2, G3) where both X and Y differ from the last kept position by less than or equal to the threshold, and there is no Z change. This eliminates the CRC Fault triggers while preserving all meaningful toolpath data.
What gets removed
- G1/G2/G3 lines where dX <= threshold AND dY <= threshold AND Z is unchanged
What is always kept
- Z moves - any line where Z changed is never removed
- G0 (rapid) positioning lines
- G28 (home return) lines
- G52 (coordinate offset) lines
- M-codes, comments, tool changes, and all other non-cutting lines
Usage
# Basic - creates *_cleaned.OUT next to the original
.\Remove-SmallMoves.ps1 -InputFile "C:\path\to\file.OUT"
# Specify output file
.\Remove-SmallMoves.ps1 -InputFile "file.OUT" -OutputFile "file_fixed.OUT"
# Custom threshold
.\Remove-SmallMoves.ps1 -InputFile "file.OUT" -Threshold 0.001
Parameters
| Parameter | Required | Default | Description |
|---|---|---|---|
InputFile |
Yes | - | Path to the input gcode file |
OutputFile |
No | *_cleaned.OUT |
Path for the cleaned output file |
Threshold |
No | 0.0006 |
Max X or Y difference for removal |
Example Output
GCode Small-Move Remover
========================
Threshold: <= 0.0006 in both X and Y
Input: file.OUT (8864 lines)
Output: file_cleaned.OUT (8310 lines)
Removed: 554 lines
Sample removed lines (first 20):
Line 36 removed: X=28.0339 Y=25.8585 Z=0.77 (dX=0.0002, dY=0.0003, dZ=0)
Line 47 removed: X=27.7644 Y=27.1713 Z=0.77 (dX=0, dY=0, dZ=0)
...
How It Works
- Reads the input file line by line
- Extracts X, Y, Z coordinates using regex
- For cutting moves (G1/G2/G3) only:
- If Z changed significantly (> 0.0001), the line is always kept
- If Z is the same, compares X and Y against the last kept position
- If both dX and dY are within threshold, the line is removed
- Updates the last known X/Y/Z position from kept lines only (removed lines don't update position tracking)