Internal Thread SubProgram for HAAS CNC machines
Note* Does not work if the tool dia is very close to the hole diameter
Note* Pulls tool information from macro variables, so the tool library must be setup to work properly
​
Usage: G65 P1900 S X Y Z K T W R C H A
%
O01900 (Automatic Internal threadmill application)
(This is a generalized threadmilling program, units are in SAE)
(It is assumed the hole/piller is already machined to the major/minor diameter)
(This code uses climb milling, coolant on, and uses cutter compensation, Check setting 44 on HASS machines is 100%)
(A=Crest length, typicly 0.001"-0.003")
(S= Number of passes to make, 1, 2, 3, or 4)
(D= major diameter of hole)
(K=Thread depth)
(T=Threads per inch)
(X,Y,Z=Top dead center of hole location relative to WCS)
(H=Tool number to use)
(R=SFM desired for material)
(C=Chipload desired for cutter)
(W=Work Coordinate System 54-153)
;
#10002 = #6 (DEPTH to THREAD to);
#10003 = #20 (THREADS PER INCH);
#10005 = #1 (CUTTER CREST LENGTH TYPICALLY AROUND 0.003)
(ENTER TOP CENTER OF HOLE POSITION)
#10006 = #24 (x position start);
#10007 = #25 (y position start);
#10008 = #26 (z position start);
#10009 = #18 (SURFACE FEET PER MINUTE FOR MATERIAL);
#10010 = #3 (DESIRED FEED PER FLUTE);
#10013 = #11 (TOOL NUMBER);
(automatic calculations and base operation)
M06 T#10013 (CHANGE TO THREADMILL TOOL);
#10011 = #[1600 + #10013] (NUMBER OF FLUTES ON CUTTER);
#10012 = #[2400 + #10013] (recall CURRENT tool diameter);
#10014= 1/#10003 (CALCULATE THREAD PITCH);
#10015= #10009*3.82/#10012 (RPM TO RUN SPINDLE);
#10016= #10015*#10010*#10011 (IDEAL LINEAR FEED RATE);
#10017=0.5*#10014/TAN[30] (THREAD HEIGHT);
#10018 =#10014/8 (z axis move on arc on);
#10019 = #10018+#10002 (z axis move for full thread);
IF[#19EQ 1. ]GOTO10
IF[#19EQ 2. ]GOTO20
IF[#19EQ 3. ]GOTO30
IF[#19EQ 4. ] GOTO40
(********************* Multi thread internal, SINGLE PASS **************************)
#10025=1 (cut area reduction 100%);
#10001=#7+2*[#10017*#10025-7/8*#10017-#10005];
#10020 = [#10001-#10012]/4 (arc on/off);
#10021 = [#10001-#10012]/2 (full rotation value);
#10022 = #10016*[[#10001-#10012]/#10001] (ADJUSTED FEED RATE FOR INTERNAL THREADING);
N10
G20 G80 G40 G17 G90 (RESET GENERAL PARAMETERS)
IF [ #23 LE 59. ] G#23
IF [ #23 GT 59 ] G154 P [ #23 -59 ]
S#10015 M3 (SET WCS SPINDLE SPEED AND TURN SPINDLE ON)
G01 F120. X#10006 Y#10007
G43 H#10013 Z[#10008+ 0.5 ] M8 (SET TOOL OFFSET AND TURN ON COOLANT)
G01 F50. X#10006 Y#10007 Z#10008 (MOVE TO TOP CENTER OF HOLE)
G91 G01 Z[-1*#10019] F40. (MOVE TO BOTTOM OF HOLE)
G41 D#10012 (SET CUTTER COMPENSATION DIAMETER);
G01 X#10020 y#10020 F#10022 (POSTION FOR ARC ON);
G03 X[-1*#10020] Y#10020 Z#10018 I[-1*#10020] J0.0000 F[#10022/2] (ARC ON);
G03 X0.0 Y0.0 Z#10014 I0.0 J[-1*#10021] F#10022 (FULL PASS);
G03 X[-1*#10020] Y[-1*#10020] Z#10018 I0.0 J[-1*#10020] F[#10022/2] (ARC OFF);
G40 G01 X#10020 Y[-1*#10020] Z0 F#10022 (RETURN TO CENTER);
G90 G00 Z[#10008+.5];
M99
(********************* Multi thread internal, TWO PASS **************************)
N20
G20 G80 G40 G17 G90 (RESET GENERAL PARAMETERS)
IF [ #23 LE 59. ] G#23
IF [ #23 GT 59 ] G154 P [ #23 -59 ]
S#10015 M3 (SET WCS SPINDLE SPEED AND TURN SPINDLE ON)
G01 F120. X#10006 Y#10007
G43 H#10013 Z[#10008+ 0.5 ] M8 (SET TOOL OFFSET AND TURN ON COOLANT)
(PASS 1)
(find reduced diameter and adjust aparmeters)
#10025=.66 (cut area reduction 66%);
#10001=#7+2*[#10017*#10025-7/8*#10017-#10005];
#10020 = [#10001-#10012]/4 (arc on/off);
#10021 = [#10001-#10012]/2 (full rotation value);
#10022 = #10016*[[#10001-#10012]/#10001] (ADJUSTED FEED RATE FOR INTERNAL THREADING);
G01 F50. X#10006 Y#10007 Z#10008 (MOVE TO TOP CENTER OF HOLE)
G91 G01 Z[-1*#10019] F20. (MOVE TO BOTTOM OF HOLE)
G41 D#10012 (SET CUTTER COMPENSATION DIAMETER);
G01 X#10020 y#10020 F#10022 (POSTION FOR ARC ON);
G03 X[-1*#10020] Y#10020 Z#10018 I[-1*#10020] J0.0000 F[#10022/2] (ARC ON);
G03 X0.0 Y0.0 Z#10014 I0.0 J[-1*#10021] F#10022 (FULL PASS);
G03 X[-1*#10020] Y[-1*#10020] Z#10018 I0.0 J[-1*#10020] F[#10022/2] (ARC OFF);
G40 G01 X#10020 Y[-1*#10020] Z0 F#10022 (RETURN TO CENTER);
G90 G00 Z[#10008+.5];
(PASS 2)
#10025=1 (cut area reduction 100%);
#10001=#7+2*[#10017*#10025-7/8*#10017-#10005];
#10020 = [#10001-#10012]/4 (arc on/off);
#10021 = [#10001-#10012]/2 (full rotation value);
#10022 = #10016*[[#10001-#10012]/#10001] (ADJUSTED FEED RATE FOR INTERNAL THREADING);
G01 F50. X#10006 Y#10007 Z#10008 (MOVE TO TOP CENTER OF HOLE)
G91 G01 Z[-1*#10019] F20. (MOVE TO BOTTOM OF HOLE)
G41 D#10012 (SET CUTTER COMPENSATION DIAMETER);
G01 X#10020 y#10020 F#10022 (POSITION FOR ARC ON);
G03 X[-1*#10020] Y#10020 Z#10018 I[-1*#10020] J0.0000 F[#10022/2] (ARC ON);
G03 X0.0 Y0.0 Z#10014 I0.0 J[-1*#10021] F#10022 (FULL PASS);
G03 X[-1*#10020] Y[-1*#10020] Z#10018 I0.0 J[-1*#10020] F[#10022/2] (ARC OFF);
G40 G01 X#10020 Y[-1*#10020] Z0 F#10022 (RETURN TO CENTER);
G90 G00 Z[#10008+.5];
M99
(********************* Multi thread internal, THREE PASS **************************)
N30
G20 G80 G40 G17 G90 (RESET GENERAL PARAMETERS)
IF [ #23 LE 59. ] G#23
IF [ #23 GT 59 ] G154 P [ #23 -59 ]
S#10015 M3 (SET WCS SPINDLE SPEED AND TURN SPINDLE ON)
G01 F120. X#10006 Y#10007
G43 H#10013 Z[#10008+ 0.5 ] M8 (SET TOOL OFFSET AND TURN ON COOLANT)
(PASS 1)
#10025=.66 (cut area reduction 66%);
#10001=#7+2*[#10017*#10025-7/8*#10017-#10005];
#10001=#7+2*[#10017*#10025-#10005-7/8*#10017];
#10020 = [#10001-#10012]/4 (arc on/off);
#10021 = [#10001-#10012]/2 (full rotation value);
#10022 = #10016*[[#10001-#10012]/#10001] (ADJUSTED FEED RATE FOR INTERNAL THREADING);
G01 F50. X#10006 Y#10007 Z#10008 (MOVE TO TOP CENTER OF HOLE)
G91 G01 Z[-1*#10019] F40. (MOVE TO BOTTOM OF HOLE)
G41 D#10012 (SET CUTTER COMPENSATION DIAMETER);
G01 X#10020 y#10020 F#10022 (POSTION FOR ARC ON);
G03 X[-1*#10020] Y#10020 Z#10018 I[-1*#10020] J0.0000 F[#10022/2] (ARC ON);
G03 X0.0 Y0.0 Z#10014 I0.0 J[-1*#10021] F#10022 (FULL PASS);
G03 X[-1*#10020] Y[-1*#10020] Z#10018 I0.0 J[-1*#10020] F[#10022/2] (ARC OFF);
G40 G01 X#10020 Y[-1*#10020] Z0 F#10022 (RETURN TO CENTER);
G90 G00 Z[#10008+.5];
(PASS 2)
#10025=.83 (cut area reduction 83%);
#10001=#7+2*[#10017*#10025-7/8*#10017-#10005];
#10020 = [#10001-#10012]/4 (arc on/off);
#10021 = [#10001-#10012]/2 (full rotation value);
#10022 = #10016*[[#10001-#10012]/#10001] (ADJUSTED FEED RATE FOR INTERNAL THREADING);
G01 F50. X#10006 Y#10007 Z#10008 (MOVE TO TOP CENTER OF HOLE)
G91 G01 Z[-1*#10019] F40. (MOVE TO BOTTOM OF HOLE)
G41 D#10012 (SET CUTTER COMPENSATION DIAMETER);
G01 X#10020 y#10020 F#10022 (POSTION FOR ARC ON);
G03 X[-1*#10020] Y#10020 Z#10018 I[-1*#10020] J0.0000 F[#10022/2] (ARC ON);
G03 X0.0 Y0.0 Z#10014 I0.0 J[-1*#10021] F#10022 (FULL PASS);
G03 X[-1*#10020] Y[-1*#10020] Z#10018 I0.0 J[-1*#10020] F[#10022/2] (ARC OFF);
G40 G01 X#10020 Y[-1*#10020] Z0.0 F#10022 (RETURN TO CENTER);
G90 G00 Z[#10008+.5];
(PASS 3)
#10025=1 (cut area reduction 100%);
#10001=#7+2*[#10017*#10025-7/8*#10017-#10005];
#10020 = [#10001-#10012]/4 (arc on/off);
#10021 = [#10001-#10012]/2 (full rotation value);
#10022 = #10016*[[#10001-#10012]/#10001] (ADJUSTED FEED RATE FOR INTERNAL THREADING);
G01 F50. X#10006 Y#10007 Z#10008 (MOVE TO TOP CENTER OF HOLE)
G91 G01 Z[-1*#10019] F40. (MOVE TO BOTTOM OF HOLE)
G41 D#10012 (SET CUTTER COMPENSATION DIAMETER);
G01 X#10020 y#10020 F#10022 (POSTION FOR ARC ON);
G03 X[-1*#10020] Y#10020 Z#10018 I[-1*#10020] J0.0000 F[#10022/2] (ARC ON);
G03 X0.0 Y0.0 Z#10014 I0.0 J[-1*#10021] F#10022 (FULL PASS);
G03 X[-1*#10020] Y[-1*#10020] Z#10018 I0.0 J[-1*#10020] F[#10022/2] (ARC OFF);
G40 G01 X#10020 Y[-1*#10020] Z0.0 F#10022 (RETURN TO CENTER);
G90 G00 Z[#10008+.5];
M99
(********************* Multi thread internal, FOUR PASS **************************)
N40
G20 G80 G40 G17 G90 (RESET GENERAL PARAMETERS)
IF [ #23 LE 59. ] G#23
IF [ #23 GT 59 ] G154 P [ #23 -59 ]
S#10015 M3 (SET WCS SPINDLE SPEED AND TURN SPINDLE ON)
G01 F120. X#10006 Y#10007
G43 H#10013 Z[#10008+ 0.5 ] M8 (SET TOOL OFFSET AND TURN ON COOLANT)
(PASS 1)
(find reduced diameter and adjust aparmeters)
#10025=.66 (cut area reduction 66%);
#10001=#7+2*[#10017*#10025-7/8*#10017-#10005];
#10020 = [#10001-#10012]/4 (arc on/off);
#10021 = [#10001-#10012]/2 (full rotation value);
#10022 = #10016*[[#10001-#10012]/#10001] (ADJUSTED FEED RATE FOR INTERNAL THREADING);
G01 F50. X#10006 Y#10007 Z#10008 (MOVE TO TOP CENTER OF HOLE)
G91 G01 Z[-1*#10019] F40. (MOVE TO BOTTOM OF HOLE)
G41 D#10012 (SET CUTTER COMPENSATION DIAMETER);
G01 X#10020 y#10020 F#10022 (POSTION FOR ARC ON);
G03 X[-1*#10020] Y#10020 Z#10018 I[-1*#10020] J0.0000 F[#10022/2] (ARC ON);
G03 X0.0 Y0.0 Z#10014 I0.0 J[-1*#10021] F#10022 (FULL PASS);
G03 X[-1*#10020] Y[-1*#10020] Z#10018 I0.0 J[-1*#10020] F[#10022/2] (ARC OFF);
G40 G01 X#10020 Y[-1*#10020] Z0.0 F#10022 (RETURN TO CENTER);
G90 G00 Z[#10008+.5];
(PASS 2)
#10025=.83 (cut area reduction 83%);
#10001=#7+2*[#10017*#10025-7/8*#10017-#10005];
#10020 = [#10001-#10012]/4 (arc on/off);
#10021 = [#10001-#10012]/2 (full rotation value);
#10022 = #10016*[[#10001-#10012]/#10001] (ADJUSTED FEED RATE FOR INTERNAL THREADING);
G01 F50. X#10006 Y#10007 Z#10008 (MOVE TO TOP CENTER OF HOLE)
G91 G01 Z[-1*#10019] F40. (MOVE TO BOTTOM OF HOLE)
G41 D#10012 (SET CUTTER COMPENSATION DIAMETER);
G01 X#10020 y#10020 F#10022 (POSTION FOR ARC ON);
G03 X[-1*#10020] Y#10020 Z#10018 I[-1*#10020] J0.0000 F[#10022/2] (ARC ON);
G03 X0.0 Y0.0 Z#10014 I0.0 J[-1*#10021] F#10022 (FULL PASS);
G03 X[-1*#10020] Y[-1*#10020] Z#10018 I0.0 J[-1*#10020] F[#10022/2] (ARC OFF);
G40 G01 X#10020 Y[-1*#10020] Z0.0 F#10022 (RETURN TO CENTER);
G90 G00 Z[#10008+.5];
(PASS 3)
#10025=.92 (cut area reduction 92%);
#10001=#7+2*[#10017*#10025-7/8*#10017-#10005];
#10020 = [#10001-#10012]/4 (arc on/off);
#10021 = [#10001-#10012]/2 (full rotation value);
#10022 = #10016*[[#10001-#10012]/#10001] (ADJUSTED FEED RATE FOR INTERNAL THREADING);
G01 F50. X#10006 Y#10007 Z#10008 (MOVE TO TOP CENTER OF HOLE)
G91 G01 Z[-1*#10019] F40. (MOVE TO BOTTOM OF HOLE)
G41 D#10012 (SET CUTTER COMPENSATION DIAMETER);
G01 X#10020 y#10020 F#10022 (POSTION FOR ARC ON);
G03 X[-1*#10020] Y#10020 Z#10018 I[-1*#10020] J0.0000 F[#10022/2] (ARC ON);
G03 X0.0 Y0.0 Z#10014 I0.0 J[-1*#10021] F#10022 (FULL PASS);
G03 X[-1*#10020] Y[-1*#10020] Z#10018 I0.0 J[-1*#10020] F[#10022/2] (ARC OFF);
G40 G01 X#10020 Y[-1*#10020] Z0.0 F#10022 (RETURN TO CENTER);
G90 G00 Z[#10008+.5];
(PASS 4)
#10025=1 (cut area reduction 100%);
#10001=#7+2*[#10017*#10025-7/8*#10017-#10005];
#10020 = [#10001-#10012]/4 (arc on/off);
#10021 = [#10001-#10012]/2 (full rotation value);
#10022 = #10016*[[#10001-#10012]/#10001] (ADJUSTED FEED RATE FOR INTERNAL THREADING);
G01 F50. X#10006 Y#10007 Z#10008 (MOVE TO TOP CENTER OF HOLE)
G91 G01 Z[-1*#10019] F40. (MOVE TO BOTTOM OF HOLE)
G41 D#10012 (SET CUTTER COMPENSATION DIAMETER);
G01 X#10020 y#10020 F#10022 (POSTION FOR ARC ON);
G03 X[-1*#10020] Y#10020 Z#10018 I[-1*#10020] J0.0000 F[#10022/2] (ARC ON);
G03 X0.0 Y0.0 Z#10014 I0.0 J[-1*#10021] F#10022 (FULL PASS);
G03 X[-1*#10020] Y[-1*#10020] Z#10018 I0.0 J[-1*#10020] F[#10022/2] (ARC OFF);
G40 G01 X#10020 Y[-1*#10020] Z0.0 F#10022 (RETURN TO CENTER);
G90 G00 Z[#10008+.5];
M99
%