134 lines
3.8 KiB
Plaintext
Executable File
134 lines
3.8 KiB
Plaintext
Executable File
; Circular pocket - clears a round pocket using spiral toolpath
|
|
; Params: #1=x, #2=y, #3=diameter, #4=ztop, #5=zbot, #6=finishcut, #7=mode
|
|
; Mode bitmask: bit0=conventional, bit1=bothways, bit2=plunge(vs helix), bit3=outside
|
|
o<pocket_circ> sub
|
|
; o<pocket_circ> call [x][y] [diameter] [ztop][zbot] [finishcut] [mode]
|
|
|
|
#<M_CONVENTIONAL> = [FIX[#7/1] MOD 2 EQ 1]
|
|
#<M_BOTHWAYS> = [FIX[#7/2] MOD 2 EQ 1]
|
|
#<M_PLUNGE> = [FIX[#7/4] MOD 2 EQ 1]
|
|
#<M_OUTSIDE> = [FIX[#7/8] MOD 2 EQ 1]
|
|
#<M_CLIMB> = [FIX[#7/1] MOD 2 EQ 0]
|
|
#<M_ONEWAY> = [FIX[#7/2] MOD 2 EQ 0]
|
|
#<M_HELIX> = [FIX[#7/4] MOD 2 EQ 0]
|
|
#<M_INSIDE> = [FIX[#7/8] MOD 2 EQ 0]
|
|
|
|
G90 ; absolute x,y,z
|
|
G90.1 ; absolute i,j,k
|
|
M101 ; enable Z-axis (M102 disables)
|
|
G17 ; select XY plane for arcs
|
|
|
|
#<td> = [#<_td>]
|
|
#<tr> = [#<td>/2]
|
|
o1 if [EXISTS[#<_z_clearance>]]
|
|
#<z_clearance> = #<_z_clearance>
|
|
o1 else
|
|
#<z_clearance> = #4
|
|
o1 endif
|
|
o2 if [EXISTS[#<_rampang>]]
|
|
#<rampang> = #<_rampang>
|
|
o2 else
|
|
#<rampang> = 5 ; degrees
|
|
o2 endif
|
|
o3 if [EXISTS[#<_stepover>]]
|
|
#<stepover> = #<_stepover>
|
|
o3 else
|
|
#<stepover> = [#<td>*0.4]
|
|
o3 endif
|
|
|
|
o4 if [#<td> GT #3] ; tool bigger than pocket, bail out
|
|
o5 return
|
|
o4 endif
|
|
|
|
#<a> = 0
|
|
#<r> = 0
|
|
o100 if [#<M_HELIX>] ; helical plunge
|
|
#<r> = [#<td>*0.3] ; helix radius = 30% of tool diameter
|
|
o115 if [[[#3-#<td>]/2-ABS[#6]] LE #<r>] ; shrink if helix would exceed pocket wall
|
|
#<r> = [[[#3-#<td>]/2-ABS[#6]]*0.8]
|
|
o115 endif
|
|
|
|
#<z_step> = [#<r>*2*3.14*TAN[#<rampang>]]
|
|
|
|
G0 Z#<z_clearance>
|
|
G0 X[#1+#<r>] Y[#2]
|
|
G0 Z#4
|
|
|
|
; helical plunge
|
|
#<z> = [#4-#<z_step>]
|
|
o101 while [#<z> GT #5]
|
|
o102 if [#<M_CLIMB>]
|
|
G3 X[#1+#<r>] Y[#2] I[#1] J[#2] Z[#<z>] P1
|
|
o102 else
|
|
G2 X[#1+#<r>] Y[#2] I[#1] J[#2] Z[#<z>] P1
|
|
o102 endif
|
|
#<z> = [#<z> - #<z_step>]
|
|
o101 endwhile
|
|
|
|
; finish the helical plunge
|
|
#<a> = [[#<z>-#5]/[#4-#5]*360] ; TODO: what the heck is the denominator here doing?
|
|
o103 if [#<M_CLIMB>]
|
|
G3 X[#1+COS[#<a>]*#<r>] Y[#2+SIN[#<a>]*#<r>] I[#1] J[#2] Z[#5]
|
|
G3 X[#1+COS[#<a>]*#<r>] Y[#2+SIN[#<a>]*#<r>] I[#1] J[#2] Z[#5]
|
|
o103 else
|
|
G2 X[#1+COS[#<a>]*#<r>] Y[#2-SIN[#<a>]*#<r>] I[#1] J[#2] Z[#5]
|
|
G2 X[#1+COS[#<a>]*#<r>] Y[#2-SIN[#<a>]*#<r>] I[#1] J[#2] Z[#5]
|
|
o103 endif
|
|
|
|
o100 elseif [#<M_PLUNGE>] ; straight plunge
|
|
|
|
|
|
G0 Z#<z_clearance>
|
|
G0 X[#1] Y[#2]
|
|
G0 Z[#4]
|
|
G1 Z[#5]
|
|
|
|
o100 endif
|
|
|
|
; spiral outward from center to clear pocket, stopping short by finishcut amount
|
|
#<r_base> = #<r>
|
|
#<a_base> = #<a>
|
|
o105 while [#<r> LT [[#3-#<td>]/2-ABS[#6]]]
|
|
|
|
o106 if [#<M_CLIMB>]
|
|
G1 X[#1+COS[#<a>]*#<r>] Y[#2+SIN[#<a>]*#<r>]
|
|
o106 else
|
|
G1 X[#1+COS[#<a>]*#<r>] Y[#2-SIN[#<a>]*#<r>]
|
|
o106 endif
|
|
#<a> = [#<a>+1] ; advance 1 degree per step
|
|
|
|
#<r> = [#<r_base>+[#<a>-#<a_base>]/360*#<stepover>] ; radius grows by stepover each revolution
|
|
o105 endwhile
|
|
|
|
; pre-finish cut: full circle at pocket wall minus finishcut allowance
|
|
#<r> = [[#3-#<td>]/2-ABS[#6]]
|
|
o107 if [#<M_CLIMB>]
|
|
G1 X[#1+COS[#<a>]*#<r>] Y[#2+SIN[#<a>]*#<r>]
|
|
G3 X[#1+COS[#<a>]*#<r>] Y[#2+SIN[#<a>]*#<r>] I[#1] J[#2]
|
|
o107 else
|
|
G1 X[#1+COS[#<a>]*#<r>] Y[#2-SIN[#<a>]*#<r>]
|
|
G2 X[#1+COS[#<a>]*#<r>] Y[#2-SIN[#<a>]*#<r>] I[#1] J[#2]
|
|
o107 endif
|
|
|
|
; finish cut: full circle at final pocket wall radius
|
|
o104 if [ABS[#6] GT 0.0]
|
|
#<r> = [[#3-#<td>]/2]
|
|
o108 if [#<M_CLIMB>]
|
|
G1 X[#1+COS[#<a>]*#<r>] Y[#2+SIN[#<a>]*#<r>]
|
|
G3 X[#1+COS[#<a>]*#<r>] Y[#2+SIN[#<a>]*#<r>] I[#1] J[#2]
|
|
#<r> = [[#3-#<td>]/2*0.9] ; retract slightly inward before rapid out
|
|
G1 X[#1+COS[#<a>]*#<r>] Y[#2+SIN[#<a>]*#<r>]
|
|
o108 else
|
|
G1 X[#1+COS[#<a>]*#<r>] Y[#2-SIN[#<a>]*#<r>]
|
|
G2 X[#1+COS[#<a>]*#<r>] Y[#2-SIN[#<a>]*#<r>] I[#1] J[#2]
|
|
#<r> = [[#3-#<td>]/2*0.9] ; retract slightly inward before rapid out
|
|
G1 X[#1+COS[#<a>]*#<r>] Y[#2-SIN[#<a>]*#<r>]
|
|
o108 endif
|
|
o104 endif
|
|
|
|
G0 Z#<z_clearance>
|
|
|
|
|
|
o<pocket_circ> endsub
|
|
|
|
M2 |