04.10.25

Spline Cutting Macro (HAAS Macro)

Wrote a quick spline cutting routine for cutting splines for the side. Supports starting at a given tooth, roughing depth, taper adjustment and finish depths. Can come from -/+Y and go any direction on X. Nothing too spectacular but I leave it here for fun.

%
O2023 (SPLINE CUTTING PROGRAM)
(STEVEN MACKAAY 2025)
(!!!USE AT YOUR OWN RISK!!!)

(SETUP VARIABLES)
#100 = 38.   (TOTAL NUMBER OF TEETH/SPLINES)
#101 = -.5   (START X POSITION)
#102 = 4.13   (END X POSITION)
#103 = -2.55   (CLEARANCE Y POSITION - ABSOLUTE DISTANCE FROM Y0)
#104 = -2.35  (START Y POSITION - ABSOLUTE DISTANCE FROM Y0)
#105 = -2.2323   (FINISH Y POSITION - ABSOLUTE DISTANCE FROM Y0)
#106 = 0.02  (Y STEPDOWN AMOUNT - POSITIVE VALUE)
#107 = 0.001  (Y FINISH PASS AMOUNT - POSITIVE VALUE)
#108 = 1.25 (CUTTER RADIUS - POSITIVE VALUE)
#109 = 0.002 (TAPER AMOUNT Y PER UNIT X - POSITIVE TAPER WIDENS AWAY FROM X AXIS AT ENDX)
#110 = 15.  (CUTTING FEEDRATE F)
#111 = 5.0   (PLUNGE FEEDRATE F)
#112 = 50.0  (CLEARANCE FEEDRATE F)
#113 = 460  (SPINDLE SPEED S)
#114 = 1.0   (START TOOTH NUMBER 1 TO #100)
#115 = 4.0   (SPINDLE DIRECTION 3 FOR M03 CW, 4 FOR M04 CCW)

(CALCULATED VARIABLES)
#120 = 0 (CURRENT TOOTH NUMBER)
#121 = 0 (ANGLE FOR CURRENT TOOTH)
#122 = 0 (CURRENT Y POSITION FOR STEPDOWN)
#123 = 0 (CUTTER COMPENSATION - WILL BE POSITIVE OR NEGATIVE BASED ON Y SIGN)
#124 = 0 (DIRECTION FLAG - 1 FOR POSITIVE Y, -1 FOR NEGATIVE Y)
#125 = 0 (TOTAL NUMBER OF STEPDOWNS)
#126 = 0 (CURRENT STEPDOWN NUMBER)
#127 = 0 (STEP DIRECTION - SIGN OF STEP TOWARDS Y0)
#128 = 0 (FINISH PASS Y POSITION)
#130 = 0 (REMAINING DISTANCE AFTER FULL STEPDOWNS)

(DETERMINE APPROACH DIRECTION)
IF [[#103 LT 0]] THEN #124 = -1 (APPROACHING FROM NEGATIVE Y)
IF [[#103 GT 0]] THEN #124 = 1 (APPROACHING FROM POSITIVE Y)

(DETERMINE STEP DIRECTION - TOWARDS Y0)
#127 = -#124 (STEP DIRECTION TOWARDS Y0)

(CALCULATE CUTTER COMPENSATION)
IF [[#124 LT 0]] THEN #123 = -#108 (NEGATIVE Y - SUBTRACT CUTTER RADIUS)
IF [[#124 GT 0]] THEN #123 = #108 (POSITIVE Y - ADD CUTTER RADIUS)

(CALCULATE FINISH PASS Y POSITION)
#128 = #105 - #127 * #107 (POSITION BEFORE FINISH PASS)

(CALCULATE NUMBER OF STEPDOWNS)
#125 = FIX[ABS[#104 - #128] / #106] (NUMBER OF FULL STEPDOWNS)
#130 = ABS[#104 - #128] - [#125 * #106] (REMAINING DISTANCE AFTER FULL STEPDOWNS)
IF [[#130 GT 0.0001]] THEN #125 = #125 + 1 (ADD ONE MORE STEPDOWN IF NEEDED)

G90 (ABSOLUTE POSITIONING)
G17 (XY PLANE SELECTION)
G20 (INCH PROGRAMMING)
G40 (CANCEL CUTTER COMPENSATION)
G49 (CANCEL TOOL LENGTH COMPENSATION)
G80 (CANCEL CANNED CYCLES)
T15 M6 (SELECT TOOL 15)
G43 H15 (APPLY TOOL LENGTH COMPENSATION)
S#113 (SET SPINDLE SPEED)

(MAIN LOOP FOR EACH TOOTH)
#120 = #114 (START AT SPECIFIED TOOTH)

M08 (COOLANT ON)

WHILE [[#120 LE #100]] DO1
  (CALCULATE TOOTH ANGLE)
  #121 = 360.0 * [#120 - 1] / #100 (ANGLE FOR CURRENT TOOTH)
  
  (POSITION TO TOOTH START)
  G0 A#121 (ROTATE TO TOOTH ANGLE)
  G0 X#101 Y[#103 + #123] (RAPID TO START POSITION WITH CLEARANCE Y AND CUTTER COMPENSATION)
  
  (START SPINDLE AND COOLANT)
  IF [[#115 EQ 3]] THEN M03
  IF [[#115 EQ 4]] THEN M04

  
  (RAPID TO Z0)
  G0 Z0
  
  (MOVE TO START Y POSITION)
  G1 Y[#104 + #123] F#112 (FEED TO START Y WITH CLEARANCE FEED AND CUTTER COMPENSATION)
  
  (STEPDOWN LOOP)
  #126 = 1 (INITIALIZE STEPDOWN COUNTER)
  
  WHILE [[#126 LE #125]] DO2
    (CALCULATE CURRENT Y STEPDOWN)
    IF [[#126 LT #125]] THEN #122 = #104 + #127 * #106 * #126 (INCREMENTAL STEPDOWNS TOWARDS Y0)
    IF [[#126 EQ #125]] THEN #122 = #128 (LAST STEPDOWN BEFORE FINISH PASS)
    
    (PLUNGE TO STEPDOWN)
    G1 Y[#122 + #123] F#111 (PLUNGE TO CURRENT DEPTH WITH PLUNGE FEED AND CUTTER COMPENSATION)
    
    (CUT TO END X WITH TAPER)
    G1 X#102 Y[#122 + #123 + [#109 * #124]] F#110 (CUT TO END X WITH TAPER ADJUSTMENT)
    
    (RETRACT TO CLEARANCE)
    G0 Y[#103 + #123] (RAPID BACK TO CLEARANCE Y WITH CUTTER COMPENSATION)
    
    (RETURN TO START X)
    G0 X#101 (RAPID BACK TO START X)
    
    (INCREMENT STEPDOWN COUNTER)
    #126 = #126 + 1
  END2
  
  (FINISH PASS)
  G0 Y[#103 + #123] (RAPID TO CLEARANCE Y)
  G0 X#101 (RAPID TO START X)
  G1 Y[#105 + #123] F#111 (PLUNGE TO FINISH Y WITH PLUNGE FEED)
  G1 X#102 Y[#105 + #123 + [#109 * #124]] F#110 (CUT FINISH PASS TO END X WITH TAPER)
  G0 Y[#103 + #123] (RAPID BACK TO CLEARANCE Y)
  
  (INCREMENT TOOTH COUNTER)
  #120 = #120 + 1
END1

(PROGRAM END)
M5 (SPINDLE STOP)
M9 (COOLANT OFF)
G28 G91 Z0 (RETURN TO Z HOME)
G28 G91 Y0 (RETURN TO Y HOME)
M30 (END PROGRAM)
%

Tags: , , , ,
| Posted in Machining, Programming | Comments Off on Spline Cutting Macro (HAAS Macro)