I'm glad I have GWizard. For example, I don't think I've ever used a 27/64" drill, and I know I've never worked with Incoloy 825. If tomorrow I needed to drill a 27/64" hole in some Incoloy 825, good old GWizard would be there for me.
For the work I'm likely to do today, I shouldn't need to use GWizard. I might need a clearance hole for an M6 screw, drilled through aluminum 6061-T6. I've done that many times before. The same gCode that knows how to drill a hole should remember the feeds & speeds needed for recurrent jobs.
Forget Incoloy, which I'd never heard of until I found it in the recesses of GWizard. I'll cross the Incoloy bridge when I need to. I once looked up what I needed to know for that M6 clearance hole in 6061, and now I shouldn't need to look it up again. In general,
- the drills I own are a small fraction of the drills known to GWizard, and
- the drills I have ever used are a small fraction of the drills I own, and
- the materials I have ever used are a tiny fraction of the the materials known to GWizard, and
- the drill/material combinations I have ever used are a tiny fraction of all of the possible combinations of drill and material on hand.
What I had been doing, and what similarly-situated forum members probably do, is to take notes somewhere, after I'd looked up a feed/speed package, and then refer to those notes whenever I needed to produce a new instance of a familiar hole.
Editing the notes into gCode allows for new efficiencies. The code could be slicker if gCode were a less primitive programming language (for example, if it had arrays and enumerated ordinal constants), but it's good enough.
In my current hole-drilling utility (a fragment of which was shown a few posts ago in this thread), a group of lines at the beginning lets me specify what material I want to drill:
Code:
; ***************** material (pick one) ****************************************
#<_aluminum_6061> = 1
#<_steel_1018> = 0
#<_steel_12L14> = 0
#<_pine> = 0
These are not all the materials I've ever heard of, or even all the materials I have on hand. When I need another material here, I'll just edit it in.
Similarly, the next group of lines is a subroutine, establishing variable names for some drills of interest and setting all of those variables to zero.
Code:
; ***************** drills
o 1 ; set all drills to be not in use; repository of drill names
#<_drill_0169_HSS_135_30> = 0 ; HSS drill #18 helix 30° tip 135°
#<_drill_0204_HSS_135_30> = 0 ; HSS drill #6 helix 30° tip 135° tap M6 aluminum
#<_drill_0234_HSS_135_30> = 0 ; HSS drill #A helix 30° tip 135°
#<_drill_0238_HSS_135_30> = 0 ; HSS drill #B helix 30° tip 135° clear M6
#<_drill_0413_HSS_135_30> = 0 ; HSS drill #Z helix 30° tip 135°
#<_drill_0453_HSS_135_30> = 0 ; HSS drill 29/64 helix 30° tip 135° clear 7/16
#<_drill_0500_HSS_135_30> = 0 ; HSS drill 1/2 helix 30° tip 135°
#<_drill_0750_HSS_135_30> = 0 ; HSS drill 3/4 helix 30° tip 135°
M99 ; return to caller
As is evident, I can use comments here ("clear M6" and so on) to remind me what the various drills are good for. This list is even less complete than the list of materials; as I need to make use of other drills, I'll add them here.
The drills and materials come together in another subroutine that carries forward what I've learned about drill/material-specific feeds & speeds:
Code:
o 2300 ; ************* feeds & speeds
#<_HelixAngle> = 30 ; set here but could be different for each tool
#<_PointAngle> = 135 ; set here but could be different for each tool
o 2301 if [#<drill_0169_HSS_135_30>]
o 23011 if [#<_aluminum_6061>]
#<_ShallowFeed> = 7.58 #<_ShallowRPM> = 3932 ; tested to 10D
o 23011 endif
o 2301 elseif [#<drill_0204_HSS_135_30>]
o 23012 if [#<_aluminum_6061>]
#<_ShallowFeed> = 6.7 #<_ShallowRPM> = 2600 ; tested
o 23012 endif
o 2301 elseif [#<drill_0234_HSS_135_30>]
o 23013 if [#<_aluminum_6061>]
#<_ShallowFeed> = 7.4 #<_ShallowRPM> = 2405 ; per GW
o 23013 endif
o 2301 elseif [#<drill_0238_HSS_135_30>]
o 23014 if [#<_aluminum_6061>]
#<_ShallowFeed> = 8 #<_ShallowRPM> = 2500 ; tested
o 23014 elseif [#<_pine>]
#<_ShallowFeed> = 65 #<_ShallowRPM> = 4411 ; tested
o 23014 endif
(abridged)
o 2301 elseif [#<drill_0453_HSS_135_30>]
o 23016 if [#<_aluminum_6061>]
#<_ShallowFeed> = 7.07 #<_ShallowRPM> = 1471 ; per GW, but fails
#<_ShallowFeed> = 4 #<_ShallowRPM> = 1471 ; fails
#<_ShallowFeed> = 3 #<_ShallowRPM> = 1471 ; tested
o 23016 endif
(abridged)
o 2301 elseif [#<drill_0750_HSS_135_30>]
o 23018 if [#<_aluminum_6061>]
#<_ShallowFeed> = 4 #<_ShallowRPM> = 889 ; per GW
o 23018 elseif [#<_steel_12L14>]
#<_ShallowFeed> = 2 #<_ShallowRPM> = 408 ; per GW
o 23018 endif
o 2301 endif
M99 ; return to caller
Some of the comments here (see the code associated with the 29/64" drill, here called drill_0453_HSS_135_30) usefully remind me of feed/speed combinations that didn't work, so I know not to try them again. Also, if any of my drills had a permanently-assigned tool number in PathPilot, I could record that here.
Once the drill/material --> feed/speed relationship has been recorded, any further drilling with this drill/material combination is simple. To drill 3 holes, 2 of the same depth, and using 2 different drills, the entire non-subroutine content of the utility might be edited to
Code:
; ************** action starts *************************************************
M98 P2000 ; initialize
M98 P1 ; deselect all drills
#<_ZClear> = 0.2
#<_ZTop> = -0.4
#<_ZBottom> = -1.3
#<_FullODToDepth> = 1 ; if NZ, add depth for tip taper
#<_XCenter> = 1.005 #<_YCenter> = 0 ; hole #1, same depth
#<_drill_0204_HSS_135_30> = 1 #<_ToolNumber> = 5 ; use drill #6
M98 P500 ; ..
#<_XCenter> = 4.165 #<_YCenter> = 0 ; hole #2, same depth
M98 P1 ; deselect old drill
#<_drill_0238_HSS_135_30> = 1 #<_ToolNumber> = 6 ; use drill #B
M98 P500 ; ..
#<_XCenter> = 5 #<_YCenter> = 5.6 ; hole #3, same drill
#<_ZBottom> = -4 ; but deeper
M98 P500
M00 ; end of program
; *************** action ends
I've attached a copy of my drilling utility.