G43, G44 & G49: Tool Length Compensation
G43 tells the control how far the tool sticks out of the spindle, so a programmed Z-25 puts the tool tip 25mm below your part zero regardless of which tool is loaded. G49 cancels it. G44 applies the same offset in the opposite direction and you will almost never use it.
Syntax
G43 H__ Z__ Apply tool length offset, positive direction
G44 H__ Z__ Apply tool length offset, negative direction
G49 Cancel tool length compensation
Parameters
| Address | Meaning | Notes |
|---|---|---|
H | Offset register number | Match to the tool number by convention: T01 uses H01 |
Z | Target Z position | The offset is applied on this move, not before it |
Example
O0001 (FACE AND DRILL)
G21 G17 G40 G49 G80 G90 (safe start block)
T01 M06 (25mm face mill)
G54 (work offset)
S2200 M03 (spindle on)
G00 X-40. Y0. (position clear of part)
G43 H01 Z50. M08 (comp on, well above part, coolant)
G01 Z0. F800 (to face height)
X140. F1200 (cut across)
G00 Z50. (retract)
G49 (cancel comp)
G91 G28 Z0. (home Z)
M30
Controller differences
| Control | Behaviour |
|---|---|
| Fanuc | Offset applied on the first Z move after G43. G43 H01 with no Z on the block is legal, but the move happens later, and that catches people out. |
| Haas | Same as Fanuc, but Setting 56 (M30 Restores Default G) can silently cancel comp at program end. Bites you when you rely on modal state across programs. |
| Siemens 840D | ISO mode accepts G43 and H. The native Siemens dialect uses D numbers against the tool (T1 D1) and has no G43 at all. Post-processor dependent. |
| Mazak | Mazatrol conversational handles this in the tool data page; G43 only applies in EIA/ISO mode. |
| Okuma | OSP uses the same G43/H syntax, but offset tables are split into length and wear pages. Updating the wrong one is the usual mistake. |
What goes wrong
The big one is calling G43 too late. The offset gets applied on the Z move, not on the block where you write it, so if you're already down near the part when compensation kicks in, the tool drops by the full tool length in one rapid. That's how spindles meet vices. Call it on your first Z move while you're still 50mm clear, every time, no exceptions.
Second is T and H drifting apart. Convention says T01 uses H01, and it holds right up until someone renumbers tools mid-job or copies a program from another machine. Then you're cutting with tool 4 using tool 2's length. If it's shorter you get a shallow part and scratch your head. If it's longer you find out immediately.
Third is the offset table itself. Length and wear live in separate columns, and typing 125.6 into wear instead of geometry is a quiet way to lose an afternoon. Check which column you're in before you touch anything.
Last, don't rely on the machine cancelling comp for you at a tool change. Some do, some don't, and on a Haas, Setting 56 changes the answer without telling you. Put G49 in your safe start block and put it in your program ending. It costs nothing and it means a stale offset never carries into the next tool.
Updated 5 Sep 2026