(This file is Copyright 2006 Chris Radek and released under the GPL v2.) (This is meant as a place to collect useful subroutines. Please add any) (other general-purpose routines that you think are useful. Put instructions) (for calling the subroutine at its beginning, and add it to the table of) (contents. Use a different O number for each subroutine. If you like, add) (a usage example at the end of this file.) (Table of contents:) (O100: "hole drilling" with an end mill) (O200: slot cutting) o100 sub (helical hole milling, load tool and set feed first, then use like so:) (o100 call [x pos] [y pos] [safety height] [hole depth] [hole dia] [tool dia]) (tool dia doesn't have to be specified exactly.) #4=[0 - #4] #7=[#6 / 2] (#7 is depth per circle = half of tool diameter) #8=[#3 - #7] (#8 is current depth step) g0 z#3 (start above and right so we make a convex corner for entry to the ccw arcs) g0 x[#1 + #6] y[#2 + [#5 / 2]] g41 g0 x#1 y[#2 + [#5 / 2]] o101 while [#8 GT #4] (down toward the specified depth a bit at a time) g3 x#1 y[#2 + [#5 / 2]] i0 j[0 - [#5 / 2]] z#8 #8=[#8 - #7] o101 endwhile (down to the actual depth) g3 x#1 y[#2 + [#5 / 2]] i0 j[0 - [#5 / 2]] z#4 (full circle at the actual depth) g3 x#1 y[#2 + [#5 / 2]] i0 j[0 - [#5 / 2]] g0 z#3 g40 o100 endsub o200 sub (slot cutting, load tool and set feed first, then use like so:) (o200 call [x1] [y1] [x2] [y2] [width] [depth] [safety height] [tool dia]) #10=[#5/2] (radius) #11=[[atan [#4-#2]/[#3-#1]] + 180] ("backward" direction) #12=[#11 + 90] ("right" side direction) #13=[#10 * [cos [#11]]] #14=[#10 * [sin [#11]]] #15=[#10 * [cos [#12]]] #16=[#10 * [sin [#12]]] g0 z#7 g0 x[#1+#13+#15] y[#2+#14+#16] g41 g0x[#1+#15] y[#2+#16] #17=[#8/2] (depth per cut is half tool dia) #18=[#7-#17] (z) (down toward the specified depth a bit at a time) o201 while [#18 GT [0-#6]] g1 x[#3+#15] y[#4+#16] z#18 g3 x[#3-#15] y[#4-#16] r#10 g1 x[#1-#15] y[#2-#16] g3 x[#1+#15] y[#2+#16] r#10 #18=[#18-#17] o201 endwhile (down to the actual depth and one more cut) g1 x[#3+#15] y[#4+#16] z[0-#6] g3 x[#3-#15] y[#4-#16] r#10 g1 x[#1-#15] y[#2-#16] g3 x[#1+#15] y[#2+#16] r#10 g1 x[#3+#15] y[#4+#16] g0 z#7 g40 o200 endsub g20 g64 g17 g90 (here is the actual usage of o100: T1 is a 1/16th end mill) t1 m6 s1000 m3 f60 o100 call [0] [0] [.01] [.125] [.125] [.0625] o100 call [.25] [0] [.01] [.0625] [.25] [.0625] m5 t0 m6 (here is the actual usage of o200: T1 is a 1/16th end mill) t1 m6 s1000 m3 f60 o200 call [0] [.5] [1] [1] [.190] [.1] [.02] [.0625] o200 call [1] [0] [.5] [.5] [.190] [.1] [.02] [.0625] m5 t0 m6 m2