; MACROCOMMAND=Finish Diameter,SFM,DOC,FPR,Finish Length,Radius,Angle,Tool Number, Max RPM ; MACRODEFAULTS=1.0,500.0,.02,.007,-2.0,0.0,0.0,1,1500 ; MACROSVG=LatheMacro.svg,0,11 ; O call [${turn.x-f}] [${turn.sf-f}] [${turn.cut-f}] [${turn.feed-f}] [${turn.z-f}] [${turn.rad-f}] [${turn.angle-f}] [${turn.tool-s}] ; #1 finish diameter ; #2 speed ; #3 depth of cut ; #4 feed/rpm ; #5 finish length ; #6 radius ; #7 angle ; #8 tool number ; #9 max RPM ;Turning O sub O107 IF [#<_imperial>] (MSG, IMPERIAL ON) #1 = [#1 * 25.4] #2 = [#2 * 304.8] ; sf/m to mm/m #3 = [#3 * 25.4] #4 = [#4 * 25.4] #5 = [#5 * 25.4] #6 = [#6 * 25.4] O107 ENDIF M73 ;save/restore codes G8 ; Radius mode (easier maths) G18 ; XZ Plane G21 ; Metric Units G90 ; Absolute Distance G91.1 ; but not for arcs #1 = [#1 / 2] ; because of radius mode #14 = [#<_x>] (starting X) #13 = [#<_z>] (starting Z) #20 = [#6 * SIN[#7]] #21 = [#6 * COS[#7]] #22 = [#6 / COS[#7]] #23 = [#5 + #6 - #20] #24 = [[#13 - #23] * TAN[#7]] (debug, Start rad #14) (debug, start length #13) (debug, finish rad #1) (debug, finish length #5) (MSG, Unpause To start Turning Macro) m0 M6 T#8 G43 G96 D500 S#2 ; Constant Surface Speed Mode m3 ;Start Spindle g95 F#4 ; Feed-Per-Rev Mode g4p1 ; Wait to reach speed O100 WHILE [#14 GT [#1 + #3 / 2]] g0 X #14 #14=[#14-#3 / 2] G1 X #14 G1 Z #23 X[#14 + #24] O101 IF [#6 GT 0] G2 Z#5 X[#14 + #24 + #21] I#21 K#20 G1 X[#14 + #24 + #21 + #3/2] O101 ELSE G1 X[#14 + #24 + [#3 * .6]] O101 ENDIF O104 IF [#7 LT 0] G0 X#14 O104 ENDIF G0 Z[#13] O100 ENDWHILE G0 x#1 G1 Z #23 X[#1 + #24] O102 IF [#6 GT 0] G2 Z#5 X[#1 + #24 + #21] I#21 K#20 G1 X[#1 + #24 + #21 + #3] O102 ELSE G1 X[#1 + #24 + #3] O102 ENDIF O106 IF [#7 LT 0] G0 X#14 O106 ENDIF G0 Z #13 G0 X #1 ; For touch-off M5 G7 O endsub M2