Setting Tool Length on Large Facing Cutters programmatically

Has anyone figured out how to programmatically set the tool length of a large fly cutter or facing cutter?

For all of my tools smaller than the face diameter of the ETS, I wrote a simple subroutine to call G37.1 and then G37 to set the active tool length immediately after a tool change. What I would like to do is pass a variable to the subroutine to move the X axis away from the center of the ETS ( 38.1 mm for a 3" facing cutter for example) so that after the call to G37.1, the system could call G0 X#1 (-38.1 for 3") and then perform the second half of the G37 command without returning to the saved ETS X,Y, and Z locations. Kind of like checking the “Z Only” box on the Offsets Tab. I can’t find any help in the “Mill KB”.

Manually, I remove the Facing Cutter from the ATC, and then “Touch Off the Entire Tray” at the start of an operation. I then return the Facing Cutter to the ATC and then move the X axis -38.1mm and check the “Z Only” box for that one Tool.

Looking forward to an answer here as it would probably solve one of my biggest gripes with the G37 cycle. Because of 1 or 2 very long tools I have my G37 start position set quite high which wastes a lot of time for every other tool in my library. Unfortunately, the variables that contain the G37 XYZ position aren’t exposed to the user because my intention was to create a macro that would alter the G37 position on the fly based on the current tool length for a given tool. Something like + 1" = , G37, = .

The same approach would work for your application, just replacing Z with X (or Y) and tool length with tool radius.

I thought I had found a solution to this since I found that the ETS X and Y Values are stored in #5420 and #5421, however they are Read-Only persistent values and can not be changed on the fly.


There’s not currently a good solution to be able to use large tools with the “touch off entire tray” button. You can specify an M19 command with a rotation angle (on MX machines) and add X/Y coordinates to a G37 command to apply an offset from the stored G37 position but those need to be done via MDI commands.

This is on the roadmap for development, but is fairly low priority vs the 2.12 unification and will likely added in conjunction with diameter touchoff for 1500’s. To nudge that work being bumped up the priority list I’d encourage anyone to submit a feature request ticket here to get the Pathpilot team’s eyes on it (they do not regularly monitor the forums).

Thank you,

Oooh! Diameter touch off?! I see you specified the 1500 in that comment but I do hope that will be made available to the earlier machines as well. Or at least not locked out for the earlier machines.


Diameter touchoff is not possible on previous ETS models (they can only touch off in Z) but there’s no reason we can’t step over to measure the length of a large tool.

Thank you,

Thanks Norman, this is exactly what I needed. I was playing with G37 and realized that it required G53 coordinates, so I wrote the following subroutine and tester:

(Mill - 7-11-24)
(PathPilot Version: 2.10.1)

o<set_tool_length_with_radius_offset> sub
( #1 radius of tool)
( #2 former tool length offset)
( #3 tool orientation )
G37.1 Z0 (go to ETS center location )
#10 = #<_x_machine> (get G53 value for ETS X value)
o1 if [[ #3 GE 0 ] and [ #3 LE 360 ]] (test for valid orientation)
M19 R #3 (lock spindle at desired angle)
o1 endif
o2 if [ #<_metric> eq 1 ]
#13 = -364.24 (metric location of ETS Surface below Spindle nose )
#14 = [ #13 + #2 + 19 ] (3/4" slow travel)
o2 else
#13 = -14.34 (imperial location of ETS Surface below Spindle nose)
#14 = [ #13 + #2 + .75 ] (3/4" slow travel)
o2 endif
G37 X[ #10 - #1 ] Z #14
o<set_tool_length_with_radius_offset> endsub

(Test Starts Here)
G17 G90 (XY Plane, Absolute Distance Mode)
G64 P 0.0050 Q 0.0000 (Path Blending)
G21 (units in mm)
G54 (Set Work Offset)
G30 (Go to preset G30 location)

T283 M6 G43 H283 (3" Facing 61 degree insert offset)

o<get_tool_specs> call (calculates #<_tool_radius> from #5410 and #<_tool_length> offset from #5403)
o<set_tool_length_with_radius_offset> call [ #<_tool_radius> ] [#<_tool_length>] [61]

T340 M6 G43 H340 (1/4" End Mill)

o<get_tool_specs> call
o<set_tool_length_with_radius_offset> call [0] [#<_tool_length>] [0] (small tool NO offset needed)


Ian this is the answer to your few long tools problem!