Skip to main content
CNC.wiki

G46 Tool Offset Decrease: CNC Programming on Fanuc and Mitsubishi

Understand G46 tool offset decrease on Fanuc and Mitsubishi CNC controls. Learn syntax, parameters, Siemens alternatives, and how to avoid Alarm PS0041.

Hakan Gündoğdu
Hakan Gündoğdu

CNC CARE Co-founder

Introduction to G46 Tool Offset Decrease and Collision Risks

An unprogrammed coordinate shift during a machining pass can drive a CNC tool or tool turret directly into the fixture clamps, a vise jaw, or the rotating spindle chuck, resulting in a catastrophic hard collision that shatters the carbide cutting insert, damages the machine axis, and converts raw stock into a ruined scrap part. In modern manufacturing, programmers frequently rely on precise tool offsets to control part dimensions. However, utilizing the legacy G46 tool offset decrease command without establishing a clear safety clearance envelope larger than twice the tool nose radius creates a high risk of unexpected movements. When the offset value programmed in the register is incorrect or when the offset value exceeds the programmed travel distance, the tool moves in the opposite direction of the expected path, leading to immediate mechanical damage and triggering overload alarms.

Another critical risk associated with the G46 command is its non-modal, one-shot behavior on machining centers. If an operator verifies a program block by block and fails to specify the offset value in every single block where travel reduction is needed, the control will revert to the uncompensated coordinates. This sudden path translation near physical boundaries often leads to unexpected tool path deviations. Because a single misplaced minus sign in the D or H offset register completely inverts the motion vector, operators must always verify the toolpath direction and starting clearance before execution.

Technical Summary

SpecificationDetails
Command CodeG46
Modal GroupGroup 00 (Non-modal / one-shot) in Fanuc & Mitsubishi Machining Center; Group 07 (Modal) in Mitsubishi Lathe; Not supported in Siemens.
BrandsFanuc, Siemens (G46 not supported), Mitsubishi
Critical ParametersFanuc Parameter No. 5042 (Offset units & range); Mitsubishi Parameter No. 1037 cmdtyp (G-code system configuration)
Main ConstraintMust not be programmed during active G41 or G42 cutter radius compensation. Zero travel in absolute mode (G90) results in no motion, whereas incremental mode (G91) executes a shift equal to the offset amount.

Quick Read

  • Establish a minimum safety clearance envelope larger than twice the tool nose radius before executing G46.
  • Do not execute G46 tool position offsets while modal cutter compensation is active to prevent Alarm PS0041.
  • Program G46 moves in incremental mode (G91) to allow the tool to shift physically when specifying zero travel.
  • Verify the directional sign of the value stored in the H or D offset register to avoid inverting the toolpath.
  • Ensure the programmed travel distance exceeds the offset value to prevent the tool from traveling in the opposite direction.
  • Verify the G-code system configuration via Mitsubishi Parameter No. 1037 before selecting lathe or milling modes.

Basic Concepts of G46 Tool Offset Decrease

The G46 tool offset decrease preparatory function is designed to reduce the programmed travel distance of an active motion block by a value retrieved from a tool compensation register. By invoking G46, programmers can adjust workpiece dimensions on a block-by-block basis without altering the underlying coordinate coordinates of the part program. This command belongs to Group 00, meaning it is non-modal or one-shot, and it only acts on the specific block in which it is explicitly programmed.

When G46 is called on a machining center, it modifies the tool center trajectory by subtracting the active offset value from the programmed target. If the value stored in the compensation register is positive, the tool travels a shorter distance along the programmed direction. Conversely, a negative offset value stored in the register inverts the mathematical operation, translating the decrease command into an actual travel increase. This relationship makes accurate register entry critical for preventing unexpected tool shifts.

Because G46 is an unmodal, legacy command, modern CNC manufacturers classify it as obsolete and retain it strictly for backward compatibility with existing programs written decades ago. In contemporary programming, setup operators and programmers prefer modal cutter compensation like G41 cutter radius compensation and use G40 compensation cancel to terminate compensation. Managing separate, manual coordinate offsets on every block with G46 is tedious and highly prone to programming errors, which contrasts with modern modal path calculations.

Command Structure and Programming Syntax

The execution of G46 requires specifying a movement axis and a compensation register. In absolute programming (G90) mode, programming a zero-travel command such as G90 G46 X0 D01; results in no physical movement, because absolute coordinate calculations override the offset shift when the target coordinate matches the start point. In contrast, in incremental programming (G91) mode, commanding a zero-travel move like G91 G46 X0 D01; forces the axis to travel physically by the exact amount stored in the offset register. This allows setup operators to execute tool offsets without specifying new coordinate endpoints.

When G46 is programmed alongside other preparatory codes, it must not be combined with active modal cutter compensation. Operators must also understand the difference between G46 and the corresponding G45 tool offset increase command, which increases the travel distance. If multiple axes are commanded simultaneously in a G46 block during taper cutting, the offset is applied to all axes, which can lead to slope deviations. Therefore, taper operations must use standard modal compensation instead of G45-G48.

Syntax Formats

Fanuc Machining Center (Milling) Mode:

G90/G91 G00/G01 G46 IP__ D__ ;

Mitsubishi Machining Center Mode:

G90/G91 G00/G01 G46 IP__ D__ (or H__) ;

Mitsubishi Lathe Mode:

G18 G90 G01 G46 X(U)__ Z(W)__ T__ ;

Parameters

AddressBrandDescriptionRange / Limit
IP__Fanuc, MitsubishiCoordinate axis movement command specifying the target endpoint (e.g., X, Y, or Z).Machine coordinate limits
D__Fanuc, MitsubishiDesignates the tool compensation register number containing the offset value.01 to 999 (D00 is locked to zero)
H__Fanuc, MitsubishiAlternative address designating the tool compensation register number.01 to 999
T__Mitsubishi (Lathe)Tool select command designating the tool and offset number.Tool register range

Brand Applications: Fanuc, Siemens, and Mitsubishi

Fanuc

Fanuc systems manage tool position offset values and data entry ranges using specific control parameters. The units and valid data ranges for compensation values are defined by Parameter No. 5042. Additionally, Parameter No. 3405 Bit 4 disables the I, J, and K addresses for chamfering so they can designate correction directions of compensation vectors during active offsets.

In Fanuc machining center applications, G46 operates as a non-modal (one-shot) Group 00 preparatory function. The operator commands G46 in a motion block along with a target coordinate and a register number (D or H) to decrease the travel distance. Since G46 is non-modal, the path reduction must be programmed in every block where offset translation is desired.

TypeCode / ParameterDescription / ConditionRange or Value
ParameterParameter No. 5042Controls the unit and valid data range for offset entries.Metric: ±9999.99 mm to ±999.999999 mm. Inch: ±999.999 inch to ±99.9999999 inch.
ParameterParameter No. 3405 Bit 4 (CCR)Disables I, J, K addresses for chamfering to specify correction direction.0 (default) or 1
ParameterParameter No. 5008 Bit 4 (MCR)Prohibits or allows cutter radius compensation in Manual Data Input (MDI) mode.0 (default) or 1
AlarmAlarm PS0041 / No. 041Cutter radius compensation interference / Overcutting risk when legacy commands are called.Active when G45-G48 are stacked in G41/G42.
AlarmAlarm PS5257G41/G42 specified in MDI mode when parameter 5008 bit 4 is set to 1.Active in MDI mode.
VersionParameter No. 5000 Bit 3 (GNI)Determines G40 cancellation behavior on Series 30i/31i/32i-B Plus compared to legacy controls.0 (default forces perpendicular path) or 1 (legacy behavior).

Warning: Specifying G46 during active modal cutter compensation (G41 or G42) violates controller logic, corrupts the look-ahead vector preprocessor, and triggers Alarm PS0041, which immediately stops the machine.

Siemens

Siemens Sinumerik controls manage tool geometry and contour adjustments using machine data and channel-specific settings. Suppression of tool length and radius compensation during coordinate suppression commands is controlled by MD 10760. In addition, MD 20250 defines the preprocessor look-ahead buffer interruption limit for tool radius compensation blocks.

Siemens controls do not support G46 or the legacy G45-G48 G-code group. Instead, they manage contour adjustments dynamically using modal radius compensation (G41/G42), cutting edge registers (Address D), and the contour allowance parameter OFFN. Since G46 does not exist, running a program containing G46 on a Siemens control will result in command errors.

TypeCode / ParameterDescription / ConditionRange or Value
ParameterMD 10760 $MN_G53_TOOLCORRDetermines suppression of tool compensation on G53/G153/SUPA.2 to 4 (default is 2)
ParameterMD 20250Look-ahead preprocessor buffer interruption limit in TRC mode (consecutive non-travel blocks).Standard limit is 3
ParameterDISCTransition circle overshoot parameter used with G450 at outside corners.0 (pure circle) to 100 (theoretical intersection)
ParameterOFFNPrograms an allowance directly on the contour normal to the profile.Real decimal values
ParameterAddress DCutting edge number selecting tool offset register block.1 to 32000 (D0 deselects)
AlarmAlarm 10751No intersection point is geometrically possible in G40 retraction block.Active in TRC mode due to collision danger.
AlarmAlarm 14011CYCLE3106.spf retraction subroutine is missing from NC memory.Active when G10.6 rapid lift is triggered.
AlarmAlarm 61800External CNC dialect mode (G291) called but MD 18800 is disabled.Active when external language is disabled.
Version840D sl vs. 802D slMulti-edge turning option support and machine data modification limits.802D sl limits parameter modifications and omits multi-edge turning.

Warning: Attempting to call unsupported G-codes like G46 in Siemens controls will result in parsing errors unless Siemens ISO dialect mode (G291) is active and the command is mapped to supported probing cycles.

Mitsubishi

Mitsubishi controls configure G-code systems and tool offset validation checks using parameters. The overall G-code system type is determined by Parameter No. 1037 cmdtyp. If this parameter is active, Mitsubishi systems can also check for invalid zero offset amounts using Parameter No. 1381.

On Mitsubishi Machining Center (M) systems, G46 operates as an unmodal Group 00 command that reduces tool travel distance by the offset stored in the D or H register. On Lathe (L) systems, G46 functions as a Group 07 modal command that activates tool nose radius compensation with automatic direction identification, shifting the tool path based on tool nose orientation parameters.

TypeCode / ParameterDescription / ConditionRange or Value
ParameterParameter No. 1037 cmdtypConfigures G-code system and determines whether G46 is lathe auto-direction (1-8) or M system offset reduction (0 or 9).0 to 9
ParameterParameter No. 1381 TolOfsCmdCheck_MTriggers a program error if G46 is called with a zero offset number or amount when bit 0 is set to 1.0 or 1
ParameterParameter No. 1003 iunitInput setting unit determining maximum valid compensation value range.Unit B, C, D, or E
AlarmProgram Error (P608)Stacking G46 tool nose compensation with Torque Limitation Skip (G160) in the same channel.Active in lathe mode during skip commands.
AlarmProgram Error (P35)Tool offset amount programmed via G10 exceeds the range limit.Active when offset exceeds parameter 1003 limit.
AlarmProgram Error (P169)G46 called with zero offset amount while parameter 1381 bit 0 is set to 1.Active when zero offset is commanded.
VersionMachining Center (M) vs. Lathe (L)Determines whether G46 is a Group 00 unmodal offset decrease or Group 07 modal nose compensation.Behavior changes completely based on G-code type selection.

Warning: Stacking G46 tool nose compensation with Torque Limitation Skip (G160) in the same channel triggers Program Error P608, halting spindle rotation and axis feed immediately.

Brand Comparison

Comparison MetricFanucSiemensMitsubishi
Legacy Offsets G45-G48Supported as Group 00 unmodal tool position offsets.Not supported (Uses D edge registers and OFFN instead).Supported as Group 00 unmodal M system and Group 07 modal auto direction L system.
Manual Reverse Run RecoveryNo coordination recovery for one-shot G45-G48 offsets.— (no source)Supported (G46 coordinates recovered during handwheel reverse run G127).
Auto Direction IdentificationNot supported.Not supported.Supported in Group 07 G46 in lathe systems under parameter 1037 selection.

Technical Analysis

An analytical evaluation of position offset handling reveals three primary distinctions between Fanuc, Siemens, and Mitsubishi controls. First, Fanuc retains G46 strictly as a Group 00 unmodal position offset command for backward compatibility with programs written for legacy controls. In contrast, Siemens completely omits G45 to G48 from its vocabulary, relying instead on high-level cutting edge registers (Address D) and the programmable contour offset variable OFFN to manage dimensional allowances dynamically. This architectural difference means that legacy programs containing G46 cannot run on Siemens controls without extensive rewriting of the G-code contour commands.

Second, Mitsubishi lathe controls expand the functionality of G46, transforming it from a simple Group 00 position offset decrease on milling machines into a Group 07 modal tool nose radius compensation command with automatic direction identification. By referencing the lathe tool nose orientation value (1 to 8) configured in Parameter No. 1037, the Mitsubishi motion kernel automatically calculates whether the tool must compensate to the left or right of the programmed contour. Neither Fanuc nor Siemens provides a similar automatic direction identification code, requiring manual left/right G-code selection instead.

Third, Mitsubishi integrates position offsets with its manual arbitrary reverse run function (G127) to recover coordinate information. During reverse tracing with the handwheel, Mitsubishi's motion kernel reconstructs G45-G48 offsets using a modal information storage block, allowing the operator to back out of a cut safely. Fanuc controls do not support coordinate recovery during handwheel reverse tracing for unmodal, one-shot position offsets, which increases the risk of a tool turret crash if the operator attempts manual retraction along the programmed path.

Program Examples

Fanuc Example

G91 G01 G46 X100.0 D01 F250 ;
G91 G00 G46 Y0 D02 ;
G46 G02 X-30.0 Y30.0 J30.0 D01 ;

dry run

  • The controller executes a linear move along the X-axis in incremental mode. The travel distance is reduced from 100.0 mm by the positive tool offset value stored in register D01 at a feedrate of 250 mm/min.
  • The tool executes a zero-travel shift along the Y-axis. Because the control is in incremental mode (G91), the Y-axis physically moves by the exact offset amount stored in D02.
  • The tool performs circular interpolation along a quarter circle, decreasing the path travel by the offset value stored in D01.

Siemens Example (Contour Offset Alternative)

N10 G17 T1 D2 M03 S1200 ;
N20 G01 G41 NORM X50.0 Y50.0 OFFN=1.0 F500 ;
N30 G40 G00 KONT X100.0 Y100.0 D0 ;

dry run

  • The controller selects the XY plane (G17), activates tool T1 with cutting edge D2, and starts the spindle clockwise at 1200 RPM.
  • The tool moves to X50.0 Y50.0 while activating left tool radius compensation (G41) with a normal approach vector (NORM). An allowance of 1.0 mm is programmed directly normal to the contour profile using the OFFN parameter.
  • The controller cancels tool radius compensation (G40) and retraction is executed via the transition circle path (KONT) to coordinates X100.0 Y100.0, clearing the active tool offset.

Mitsubishi Example

G91 G46 X-40.0 Y-40.0 D01 F200 ;
G18 G90 G01 G46 X50.0 Z2.0 T0101 F0.15 ;
G01 G46 Y-20.0 D02 F100 ;

dry run

  • The controller executes an incremental linear movement along the X and Y axes, reducing the programmed travel distance by the offset stored in D01 at a feedrate of 200 mm/min.
  • The lathe control selects the ZX plane (G18), absolute mode (G90), and linear interpolation (G01). It activates automatic tool nose radius compensation (G46) to coordinates X50.0 Z2.0 using tool T0101 at a feedrate of 0.15 mm/rev.
  • The milling or machining center control executes a linear movement along the Y-axis, reducing the travel by the value stored in register D02.

Error Analysis

BrandAlarm CodeTrigger ConditionOperator SymptomRoot Cause / Operator Fix
FanucAlarm PS0041 / No. 041Attempting to execute G46 during active modal cutter compensation (G41/G42).The CNC screen displays Alarm PS0041, the axis motion halts immediately, and the program execution is aborted.Cutter radius compensation interference. Remove G45-G48 commands from active G41/G42 blocks.
FanucAlarm PS5257G41/G42 specified in MDI mode when Parameter No. 5008 Bit 4 (MCR) is set to 1.The control screen displays Alarm PS5257 and rejects the manual data input.MDI cutter compensation is prohibited by parameter. Set Parameter No. 5008 Bit 4 (MCR) to 0.
SiemensAlarm 10751Preprocessor determines no intersection point is geometrically possible in G40 retraction block.The NC program halts with Alarm 10751, preventing G40 cancellation and locking the axis.Collision risk detected by look-ahead preprocessor. Adjust retraction coordinates to allow a valid exit path.
SiemensAlarm 14011CYCLE3106.spf rapid lift subroutine is missing from NC memory.Spindle retract fails during rapid lift command, and Alarm 14011 halts execution.Missing retraction macro. Upload CYCLE3106.spf to the parts program memory directory.
SiemensAlarm 61800External CNC dialect mode (G291) is called but MD 18800 is disabled.The controller fails to parse ISO commands and triggers Alarm 61800.ISO dialect option is disabled. Set machine parameter MD 18800 to 1 to enable external language interpretation.
MitsubishiProgram Error (P608)Stacking G46 tool nose compensation with Torque Limitation Skip (G160) in the same channel.The control displays Program Error P608, disabling spindle rotation and axis feeds.Compensation stacked with torque limitation. Disable G46 compensation before G160 skip commands.
MitsubishiProgram Error (P35)Tool offset amount programmed via G10 exceeds the range limit defined by Parameter No. 1003.Offset registration fails, displaying Program Error P35 on the screen.Value out of bounds. Adjust the programmed offset value within the limits of Parameter No. 1003.
MitsubishiProgram Error (P169)G46 called with zero offset amount while Parameter No. 1381 is enabled.The program halts immediately with Program Error P169.Zero offset validation failed. Ensure the H or D offset register contains a non-zero value or disable Parameter No. 1381.

Application Note

A tool turret crash into a structural table clamp or a workpiece vise jaw occurs when coordinate shifts are active near physical barriers. When setup operators program G46 on Fanuc or Mitsubishi systems, or use incorrect cutting edge offsets on Siemens controls, any directional sign error stored in the D or H offset registers completely inverts the path trajectory. If the programmed travel distance is smaller than the offset value (such as a 2.50 mm travel move combined with a 3.70 mm offset, which mathematically yields a -1.20 mm incremental move), the tool travels in the opposite direction of the expected contour. Rather than retracting safely, the axis executes an unprogrammed shift, driving the spindle and cutting insert directly into the fixtures. This sudden collision shatters carbide tools, deforms the machine axis guides, and generates severe overload alarms, turning raw stock into scrap. To prevent these mechanical crashes, operators must establish a safety clearance envelope larger than twice the tool nose radius and verify register values in open areas prior to running the cycle.

Related Command Network

  • G45 (Tool Offset Increase): Performs a single increase of programmed travel distance by the offset value, acting as the mathematical counterpart to the G46 decrease command.
  • G47 (Tool Offset Double Increase): Increases the programmed travel distance by twice the offset value stored in the compensation register.
  • G48 (Tool Offset Double Decrease): Decreases the programmed travel distance by twice the offset value stored in the compensation register.
  • G40 (Cutter Compensation Cancel): Terminates active tool nose or cutter radius compensations and must be commanded before executing G46 to prevent path interference alarms.
  • G41 / G42 (Cutter Compensation Left/Right): Computes modal, continuous look-ahead path offsets that replace the need for manual, non-modal G46 block translations.

Practical Takeaways for Safe Offset Programming

Successful implementation of G46 tool offset decrease commands depends on isolating these legacy codes from active modal cutter compensations and maintaining clear clearance zones. Operators must always program G46 shifts in incremental mode (G91) to enable physical movements when using zero-travel values. Verifying that the programmed travel distance is larger than the offset register value and checking register signs in open areas prevents inverted axis travel and protects fixtures from hard collisions.

Frequently Asked Questions

Why does G46 cause the tool to move in the opposite direction of the programmed contour?

When the tool offset value stored in the compensation register is negative, the directional sign logic of G46 is mathematically inverted, translating a decrease command into an increase. Additionally, if the programmed travel distance is smaller than the offset amount, the resulting path subtraction yields a negative coordinate value, forcing the tool to travel backward. Always check the register sign before executing the block, and verify that the travel distance exceeds the offset value.

Can G46 be executed while cutter radius compensation (G41/G42) is active?

Stacking G46 inside active modal cutter compensation is prohibited because it corrupts the preprocessor vector calculations, triggering Alarm PS0041 on Fanuc systems or Program Error P608 on Mitsubishi controls. Program a G40 command to cancel all active radius offsets before executing any G45-G48 position compensation commands.

How do parameter adjustments prevent G46 coordinate errors?

Switching precision settings on Fanuc systems using Parameter No. 5042 scales the offset register values, which can cause dimensional errors if the program does not match the new resolution. To maintain compatibility with older programs, verify the scaling settings and ensure that Parameter No. 5000 Bit 3 (GNI) is set correctly to restore legacy G40 cancellation paths.

Still not resolved?

Ask our AI assistant about this topic in natural language. Grounded in verified sources, no hallucinations.

Ask AI Assistant
Hakan Gündoğdu
Hakan Gündoğdu
  • CNC CARE Co-Founder (May 2025 - Present)
  • Mitsubishi Electric NC Sales & Service Section Manager (2008 - 2025)
  • Reis CNC Service Engineer (2003 - 2008)
  • Ören Kalıp CNC Mold Line Team Leader (1999 - 2002)

With over 25 years of experience working in all areas of the CNC machine industry, I continue my activities as a co-founder of CNC CARE, where we offer brand-independent consulting, engineering, and original spare parts services.

Related Articles

Other articles on this topic