Files
linuxcnc/nc_files/macros.md
Thaddeus Hughes ad1f8719d6 big overhaul
2026-04-05 20:51:43 -05:00

156 lines
4.1 KiB
Markdown
Executable File

# Macros & Subroutines
Custom M-codes and G-code subroutines for the Lagun mill LinuxCNC configuration.
All macro `.ngc` files live in `nc_files/subs/` and are loaded automatically via the `SUBROUTINE_PATH` setting in the INI.
## Mode Flags (Bitmask)
All material-removal macros (except drill/bore) take `mode` as the **first argument**:
| Bit | Value | Set (1) | Clear (0) |
|-----|-------|---------|-----------|
| 0 | +1 | Conventional milling | Climb milling |
| 1 | +2 | Both-ways milling | One-way milling |
| 2 | +4 | Plunge entry | Helix entry |
| 3 | +8 | Outside | Inside |
Default mode (0) = climb, one-way, helix entry, inside.
## Global Named Parameters
| Parameter | Description | Required? |
|-----------|-------------|-----------|
| `#<_z_top>` | Top of material / start Z height | **Required** |
| `#<_z_bot>` | Final cut depth | **Required** |
| `#<_z_clearance>` | Safe Z retract height | Optional, falls back to `#<_z_top>` |
| `#<_rampang>` | Helix entry angle in degrees | Optional, defaults to 5.0 |
| `#<_stepover>` | Stepover distance | Optional, defaults to 40% of tool diameter |
Tool diameter is read automatically from `#5410` (the built-in LinuxCNC parameter for the current tool's diameter from the tool table). A tool must be loaded (`T M6 G43`) before calling any material-removal macro.
A negative `fincut` value causes macros to rough only, leaving that amount of material for a separate finishing pass.
## M-Codes (Shell Scripts)
### M101 - Enable Z-Axis
Sets HAL signal `z-override` to True, enabling CNC control of Z.
### M102 - Disable Z-Axis
Sets HAL signal `z-override` to False, allowing manual quill control.
## Utility Subroutines
### z_home - Rapid to Machine Z0
Rapids the quill to machine Z=0 (fully up) using G53 to bypass all offsets.
```
o<z_home> call
```
## Drilling Subroutines
### drill - Peck Drill
```
o<drill> call [x][y] [peck]
```
Calls M101 to enable Z. Retracts to Z Top between pecks with 0.020" rapid-approach gap.
### drill_man - Manual Drill
```
o<drill_man> call [x][y]
```
Calls M102 to disable Z, then M0 pause. No Z globals needed.
### drill_retr - Semi-Manual Drill with Retract
```
o<drill_retr> call [x][y]
```
## Material Removal Subroutines
### pocket_circ - Circular Pocket
```
o<pocket_circ> call [mode] [x][y] [diameter] [fincut]
```
### pocket_rect - Rectangular Pocket (Zigzag)
```
o<pocket_rect> call [mode] [x1][y1] [x2][y2] [fincut]
```
Zigzag along the long axis, stepping by `#<_stepover>`. Perimeter cleanup pass at the end.
### frame_rect - Rectangular Frame
```
o<frame_rect> call [mode] [x1][y1] [x2][y2] [radius]
```
### frame_circ - Circular Frame
```
o<frame_circ> call [mode] [x][y] [diameter] [fincut]
```
### slot - Slot / Obround
```
o<slot> call [mode] [x1][y1] [x2][y2] [width] [fincut]
```
### bore - Helical Bore
```
o<bore> call [x][y] [d] [stepdown]
```
No mode arg. Uses `#<_z_top>`, `#<_z_bot>`, and `#5410`.
### poly_frame - Polygon Perimeter
```
o<poly_frame> call [mode] [x][y] [n_sides] [apothem] [rotation] [fincut]
```
Apothem = flat-to-flat / 2. Rotation in degrees (0 = first vertex on +X, CCW positive).
### poly_pocket - Polygon Pocket
```
o<poly_pocket> call [mode] [x][y] [n_sides] [apothem] [rotation] [fincut]
```
## Typical Program Header
```gcode
#<_z_clearance> = 0.2
#<_rampang> = 5.0
#<_z_top> = 0.05
#<_z_bot> = -0.25
G10 L1 P1 Z0.0 R0.125 ; set tool 1 offset and 1/4" radius
T1 M6 ; load tool (sets #5410 = 0.250)
G43 ; activate TLO
M101 ; enable z-axis
G90 ; absolute coordinates
G54 ; fixture #1
F5.0 ; feedrate
o<pocket_circ> call [0] [0][0] [1.0] [0]
```
## Known Bugs & Limitations
1. **Some combinations of values cause hangs.** LinuxCNC has no stall/timeout detection; a macro stuck in an infinite loop hangs the whole machine. Iteration limits have been added to pocket_circ's spiral loop as a safety measure.
2. **Slot arc directions may be wrong under some combinations** — inverted arc ends seen under certain mode/geometry combinations.