CNC Milling | G43-G44 and G49 Codes | Tool Length Offset

Tool Length Offset Introduction

Most of numeric control systems other machine controls offer three commands relating to the tool length offset - all are preparatory G-commands.


All three commands are only applicable to the Z-axis. Unlike work offset commands G54-G59, G43 or G44 cannot be used without additional specification. They can only be used with an offset number designated by the address H. Address H must be followed by up to three digits, depending on the number of offsets available within the control system.

Tool Length Offset Codes Format

G43 : Positive tool length offset
G44 : Negative tool length offset
G49 : Tool length offset cancel
H00 : Tool length offset cancel
H… : Tool length offset number selection

Tool length offset should always be programmed in the absolute mode G90. A typical program entry will be the G43 or G44 command, followed by the Z-axis target position (based on part zero for Z) and the H-offset number:

N66 G43 Z1.0 H04

This is also a convenient block to add coolant function M08 for the current tool, if desired:

N66 G43 Z1.0 H04 M08

Resulting motion in the example will be to 1.0 inch above the part zero. Control system will calculate the distance to go, based on the value of H-offset stored by the CNC operator during setup.

Figure 19-2
Typical tool length offset entry screen

Figure 19-2 shows a typical screen for tool length offset entry. Note that the actual display will vary from one control to another and the wear offset column may not be available on some controls. The wear offset (if available) is only used for adjustments to the tool length and is separate from the geometry offset.

Many CNC programmers and operators may not realize that the Z-axis setting in a work offset (G54-G59) is also very important for the tool length offset. The reason why will be clear in the coming descriptions of different methods of tool length offset setting.

Some programming manuals suggest the older G45 or G46 commands can also be used for tool length offset. Although this is still true today and may have had some advantages in the early days, it is best to avoid them. First, the position commands are practically not used anymore and, second, they can also be used with the X and Y axes and do not truly represent the Z-axis exclusively.

Distance-To-Go in Z-axis

In order to interpret how the CNC system uses tool length command, the programmer or operator should be able to calculate the distance-to-go of the cutting tool. Logic behind the tool length offset is simple:

  • Stored amount of the H-offset will be added to the target Z-position if G43 is used, because G43 is defined as the positive tool length offset
  • Stored amount of the H-offset will be subtracted from the target Z-position if G44 is used, because G44 is defined as the negative tool length offset

Target position in both cases is the absolute Z-axis coordinate in the program. If the Z-axis setting of work offset (G54-G59), the length offset stored amount, and the Z-axis target are all known, distance-to-go can be accurately calculated. Control system will use this formula:

Zd = Distance-to-go along Z-axis (actual travel)
Wz = Work coordinate value for Z-axis
Zt = Target position in Z-axis (Z-coordinate)
H = Stored amount of the applied H-offset number

Calculation Examples and Usage

Example - Wz= 0:
G43 Z0.1 H01
G54 in Z is set to Z0, Z-axis target position is 0.1 and H01 is set to -6.743, then the distance-to-go Zd will be:
Zd = 0 + (+0.1) + (-6.743)
= 0 + 0.1 - 6.743
= -6.643
Displayed distance-to-go will be Z-6.643
In order to make sure the formula is always correct, try to change a few values.

Example - Wz = 0.0200:
In this example, the program contains block
G43 Z1.0 H03
G54 in Z is set to 0.0200, Z-axis target is Z1.0 and the stored amount of H03 is -7.47:
Zd = (+0.02) + (+1.0) + (-7.47)
= 0.02 + 1.0 - 7.47
= -6.45
The result is correct, tool will travel along the Z-axis, towards the part and distance-to-go will be Z-6.45.

In the last example, a negative target position is shown:

Example - Wz = 0.0500:
Program block contains a negative Z-coordinate:
G43 Z-0.625 H07
G54 along Z is set to 0.0500, Z-axis target is -0.625 and offset H07 stores -8.28 setting. Distance-to-go calculation uses the same formula, but with different values:
Zd = (+0.05) + (-0.625) + (-8.28)
= 0.05 - 0.625 - 8.28
= -8.855

Again, the formula works correctly and can be used for any distance-to-go calculation along Z-axis. Experimenting with other settings may also be useful.