Real-World CNC Macro Programming Examples: Automating Probing, Tool Change & Part Counting
This guide delivers ready-to-use macro patterns for Fanuc, Haas, Siemens, Heidenhain, and Mazak controls. You’ll automate work probing, tool checks, part counting, and safe tool changes with real code you can adapt to your machines.
⚠️ Always dry-run above the part, single-block, and verify variables/parameters per your control. Probing macros require a calibrated probe package.
1) Fanuc Custom Macro B (31i/30i/0i-F)
1.1 Auto Z Surface Probe → Write G54 Z
( O9001 — Z SURFACE PROBE TO G54.Z )
#1 = 20.0 (SAFE PROBE DISTANCE)
#2 = 2.0 (RETRACT)
#3 = 15.0 (PLATE THICKNESS IF USING PLATE; 0 IF DIRECT TOUCH)
G91 G31 Z-#1 F150 (PROBE DOWN)
#100 = #5063 (CAPTURE MACHINE Z CONTACT POS)
G90
G91 G00 Z#2
#101 = #100 + #3 (ADD PLATE THICKNESS IF APPLICABLE)
G10 L2 P1 Z#101 (WRITE TO G54 Z)
M99
Call: G65 P9001 (or map to a soft key).
Notes: #5063 = current machine Z at hit; G10 L2 P1 writes G54.
1.2 Bore Center Probe → Update G54 X/Y (Renishaw-style)
( O9002 — BORE CENTER PROBE )
#1 = 50.0 (APPROX X CENTER)
#2 = 25.0 (APPROX Y CENTER)
#3 = 20.0 (BORE DIAMETER)
G90 G00 X#1 Y#2
(ASSUME PROBE MACRO P9811 EXISTS)
G65 P9811 Q#3 (BORE PROBE; UPDATES #5021/#5022 WITH HIT)
#110 = #5021 (CALC TRUE X CENTER FROM PROBE MACRO VARIABLES)
#111 = #5022
G10 L2 P1 X#110 Y#111
M99
1.3 Part Counter with Auto Alarm & Datalog
( O9003 — PART COUNTER )
#500 = #500 + 1
DPRINT[PART_DONE,#500,TIME=#3011] (IF DATA SERVER ENABLED)
IF[#500 GE 250] THEN #3006 = 1 (BATCH COMPLETE – CHANGE FIXTURE)
M99
1.4 Safe Tool Change With RTCP/DWO Cleanup
( O9004 — SAFE TC )
G49 (CANCEL LENGTH)
G69 (CANCEL G68/G68.2)
G54.4 P0 (DWO OFF)
G91 G28 Z0.
M06 (PERFORM TOOL CHANGE IN MAIN)
M99
Use in main:
T12 M06
G65 P9004
2) Haas NGC (Macro-Compatible)
2.1 Quick Z Probe to G54
( Z SURFACE PROBE — HAAS )
G65 P9810 Z-20. F120. (USE VPS/RENISHAW CYCLE)
G10 L2 P1 Z[#5063] (WRITE G54 Z)
2.2 Persistent Part Counter + Alarm
#100 = #100 + 1 (PERSISTENT ON NGC)
PRINT("PART," + #100)
IF [#100 GE 500] THEN #3006 = 100 (LOT SIZE REACHED)
2.3 Auto Backup Tool on Overload
IF [#3002 GT 120000] THEN (USE RUN TIME OR LOAD LOGIC)
T12 (BACKUP TOOL)
M06
#3006=200 (SWITCHED TO BACKUP TOOL)
END_IF
3) Siemens SINUMERIK (840D / ONE) — TCPM & Cycles
3.1 Datum Probe & Offset Update
; PROBE TOP SURFACE AND UPDATE WORK OFFSET
CYCLE977("SURF", 1, 0.0) ; DEPENDS ON OEM CYCLE FORMAT
; READ MEASURED VALUE FROM $AA_IM[], THEN:
TRAFOOF
G54
; EXAMPLE (PSEUDO): SETMS( G54.Z = MEASURED_Z )
3.2 Part Counter & Log
DEF INT PCOUNT
PCOUNT = PCOUNT + 1
DPRINT("PART_DONE," + RTIME + "," + RDATE + "," + ITOA(PCOUNT))
IF (PCOUNT >= 300) THEN
STOPRE("LOT COMPLETE — CHANGE FIXTURE")
ENDIF
3.3 Safe Tool Change (TRAORI / TCPM OFF)
M129 ; TCPM OFF
TRAORI OFF
G00 G17 G90
G53 Z0
TOOL CALL 12 Z S12000
4) Heidenhain (TNC 530 / 640) — Q Logic & PLANE
4.1 Z Touch & Datum Write
; PROBE Z — CYCL DEF 400 (DATUM)
CYCL DEF 400 DATUM
Q200=+2 ; SAFETY HEIGHT
Q201=+20 ; PROBE DEPTH
Q206=+100 ; FEED
; AFTER CYCLE, SYSTEM UPDATES DATUM — VERIFY OEM SETUP
4.2 Part Counter with Controlled Stop
Q1 = +Q1 + 1
FN 16: IF +Q1 GE +200 STOPRE (LOT DONE)
4.3 Safe Tool Change & PLANE Reset
PLANE RESET
M128 OFF ; TCPM OFF
L Z+100 R0 FMAX
TOOL CALL 12 Z S12000
5) Mazak (SmoothX / SmoothAi) — EIA Mode
5.1 EIA Probing & Offset
(RENISHAW EIA STYLE)
G65 P9810 Z-20. F120.
G10 L2 P1 Z[#5063] (WRITE G54 Z)
5.2 Part Counter + Pallet Macro Call
#100 = #100 + 1
IF[#100 GE 150] THEN
M198 P9200 (CALL PALLET CHANGE / NOTIFY SUB)
#100 = 0
END
5.3 Safe Tool Change / Orientation
G49
G53 Z0
M19 (ORIENT)
T12 M06
6) Drop-In Macro Patterns (Copy/Paste Templates)
6.1 Universal Start Line (per brand — edit as needed)
G17 G21 G40 G49 G80 G90
G94 (FEED PER MIN)
6.2 Safe Retract & Cancel Everything
G49
G69
G54.4 P0
G91 G28 Z0
G90
6.3 Simple “Run X Parts Then Stop”
( F A N U C / H A A S )
#500 = #500 + 1
IF[#500 GE 100] THEN #3006=1 (BATCH COMPLETE)
7) Best Practices & Safety
- Namespaces: Reserve persistent variables (
#500+Fanuc) for counters/settings. - Comments: Explain arguments (
A,B,C...) for maintainability. - Recovery: Provide cancel blocks (e.g., RTCP OFF, DWO OFF, PLANE RESET).
- Probe Sanity: Always validate probe status (battery/signal) before approach.
- Version Control: Store macros centrally; track revisions (Git/SVN).
8) Roadmap (2025–2030)
- Closed-Loop Macros: Auto-tune feeds/speeds using live load & vibration.
- Unified Probe APIs: Vendor-agnostic probing calls across brands.
- Shop-Wide Libraries: Signed, cloud-synced macros with audit trail.
- AI Assist: IDE-style linting for G-code with auto-fix proposals.
✅ Conclusion
These real macro templates jump-start automation on any modern control. Start with probing + offset write, add part counting + alarms, and finish with safe tool-change wrappers. Standardize them across machines to reduce setup time, prevent crashes, and run repeatable, lights-out production.
Leave a comment