G90 and G91: Absolute vs. Incremental CNC Programming
Master G90 and G91 on Fanuc, Siemens, and Mitsubishi CNC controls. Learn parameter setups, coordinate formats, and error analysis to prevent crashes.
Introduction
A multi-thousand dollar carbide indexable face mill slams directly into a hardened steel vise jaw at rapid traverse, sending shrapnel across the machining enclosure and instantly cracking the spindle housing. This catastrophic hard collision, resulting in weeks of unscheduled machine downtime and thousands of dollars in ruined workpieces, is rarely caused by mechanical failure; instead, it is almost always the direct physical consequence of a single character error in coordinate modal switching. When a CNC controller misinterprets an absolute coordinate command (G90) as an incremental coordinate step (G91), or vice versa, the machine tool loses its reference to the physical workpiece zero. The tool path departs from its mathematically planned trajectory, translating into high-speed spindle plunges into clamps, chucks, or fixtures. In high-volume manufacturing environments, mastering the precise differences between absolute (G90) and incremental (G91) dimensioning is a fundamental safeguard against tool breakage, scrap parts, and severe hardware damage.
Absolute positioning (G90) and incremental positioning (G91) serve as the coordinate translation filters for all automated movement commands. While G90 binds the tool path to a single, unvarying coordinate origin, G91 shifts the coordinate reference dynamically with every line, interpreting targets as distance offsets relative to the tool's active location. Neglecting the modal status of these commands, or misconfiguring system boot parameters that establish their defaults, can cause the tool to shift unpredictably. This guide conducts a rigorous, multi-brand investigation of Fanuc, Siemens, and Mitsubishi controls, detailing their syntax variances, system parameters, alarm codes, and concrete application rules to ensure safe, crash-free execution on the shop floor.
Technical Summary
| Technical Attribute | Specification & Constraints |
|---|---|
| Command Codes | G90 (Absolute Dimensioning), G91 (Incremental Dimensioning) |
| Modal Group | Group 03 / Modal |
| Primary Function | Determines if coordinate commands represent positions relative to active workpiece zero (G90) or incremental distances from current tool location (G91). |
| Supported Brands | Fanuc, Siemens, Mitsubishi |
| Default Boot/Reset Parameters | Fanuc: Parameter 3402 bit 3; Siemens: MD20154 $MC_EXTERN_GCODE_RESET_VALUES[10]; Mitsubishi: Parameter #1073 I_Absm |
| Lathe Exceptions (System A) | Standard System A lathes use parallel coordinate addresses (X/Z for absolute, U/W for incremental) without using modal G90/G91 toggling. |
| Main Programming Constraints | Active modal state changes G10 programmable offset results; Siemens does not allow simultaneous conflicting AC/IC on the same axis; Mitsubishi treats all arc centers (I, J, K) and radius (R) strictly as incremental. |
Quick Read
- Core Interpretation: Toggling between absolute (G90) and incremental (G91) modes dictates whether axis inputs are plotted from the active coordinate origin or treated as relative distance vectors from the current tool position.
- Lathe Address Partitioning: Standard Lathe G-code System A (Fanuc and Mitsubishi) bypasses G90/G91 modal toggles entirely, assigning X, Z, C for absolute and U, W, H for incremental steps to prevent tracking errors.
- Siemens Inline Extensions: Siemens enables simultaneous absolute and incremental motions in a single block using non-modal
AC(...)andIC(...)modifiers directly appended to specific axis words without changing the overall modal state. - Boot-up Defaults: Machine start-up states are parameterized; Fanuc 3402.3, Siemens MD20154, and Mitsubishi #1073 determine whether the system initializes in absolute (G90) or incremental (G91) mode.
- G10 Offset Danger: Executing programmable data input (G10) on Fanuc systems under G90 completely overwrites existing offsets, whereas G91 additively modifies them, making coordinate verification mandatory.
- Arc Center Restrictions: Mitsubishi ignores modal G90 for circular interpolations, evaluating arc centers (I, J, K) and radius (R) strictly as incremental dimensions from the start point.
- Manual Intervention Safety: Manual handle interruptions require extreme caution; recovering a path under G91 can lead to unexpected tool paths if parameters (e.g. Fanuc 7001) force different travel vectors.
Basic Concepts
Both G90 (absolute) and G91 (incremental) commands are modal G-codes belonging to Group 3 that determine whether axis target dimensions are evaluated relative to the active workpiece coordinate system origin (absolute zero) or relative to the current tool physical location. While G90 allows precise positioning relative to a fixed datum, G91 is widely used for subprograms, canned cycles, or simple stepping loops. On machining centers, these modes are typically toggled via standard G90 and G91 commands. On lathes, standard programming may use direct axis address letters (X/Z for absolute, U/W for incremental) without changing modal states, though both Fanuc and Mitsubishi provide configuration parameters to enable milling-style G90/G91 modal switching on their lathe systems. Programmers and operators must maintain constant awareness of the active coordinate mode during mid-cycle manual interventions and setup operations to avoid catastrophic positional errors, ruined workpieces, or severe spindle collisions.
The choice between absolute and incremental programming represents a critical strategic decision during part routing and CNC programming. Absolute coordinates allow programmers to establish a direct, unchanging link to the design print, ensuring that if a specific coordinate is commanded, the tool returns to that exact physical coordinate regardless of where the cycle began. Conversely, incremental programming defines axis paths as discrete jumps from the tool's current location, making it ideal for repetitive geometry patterns (such as arrayed hole patterns or thread milling) since the subprogram can be repeated anywhere on the part simply by shifting the starting position. However, this flexibility introduces high risk: a single forgotten modal switch back to G90 will cause subsequent absolute positions to be read as relative distance jumps, compounding axis movements until the axis reaches its software limit or collides with obstacles. Programmers must exercise caution when switching dimensioning modes while cutter compensation is active. Toggling G90/G91 during active tool nose and cutter radius compensation (G40, G41, G42) can lead to unexpected tool path offsets, causing tool breakage or scrap parts.
Command Structure
In standard CNC programming, command blocks are executed sequentially by the interpreter. When a modal coordinate command like G90 or G91 is read, it changes the internal calculation mode of the controller's trajectory generator. Once G90 is programmed, it remains active for all subsequent movement blocks until a G91 is explicitly commanded, and vice versa. It is vital to note that these commands do not cause axis motion on their own; instead, they act as mathematical filters that dictate how subsequent coordinate words (such as X, Y, Z, A, B, C) are decoded into servo motor rotations.
When designing a CNC program, the integration of these coordinates requires rigid syntax formatting to ensure the control's parser reads the blocks correctly. Spacing, decimal usage, and the presence of duplicate addresses in the same block are evaluated differently across brands. For example, machine centers generally allow G90 and G91 to be specified multiple times or alongside other G-codes, whereas lathe systems may trigger alarm codes if absolute and incremental parameters are combined conflictingly for the same axis. Below is a structured breakdown of the syntax formats and parameter settings that govern these coordinate switches.
Syntax & Addressing Formats
- Fanuc:
- Machining Centers:
G90 X[coordinate] Y[coordinate] Z[coordinate] ;(Absolute) orG91 X[distance] Y[distance] Z[distance] ;(Incremental). - Lathes (G-code System A): Uses parallel axis letters without G90/G91:
X_ Z_ C_ ;for absolute positioning andU_ W_ H_ ;for incremental positioning.
- Machining Centers:
- Siemens:
- Modal Toggle:
G90(Absolute modal state) orG91(Incremental modal state). - Non-modal Inline Modifiers:
<axis>=AC(<value>)forces absolute dimensioning for that axis word in the block, while<axis>=IC(<value>)forces incremental. - Rotary shortest-path/direction (rotary axes only):
<axis>=DC(<value>)(direct/shortest path absolute),<axis>=ACP(<value>)(absolute positive), or<axis>=ACN(<value>)(absolute negative).
- Modal Toggle:
- Mitsubishi:
- Machining Centers:
G90 X_ Y_ Z_ ;(Absolute) orG91 X_ Y_ Z_ ;(Incremental). - Lathes:
X_ Z_ ;(Absolute) andU_ W_ ;(Incremental) by default under Lathe System A, orG190 X_ Z_ ;/G191 X_ Z_ ;(G-code lists 6 and 7).
- Machining Centers:
System Configuration Parameters
| Brand | Parameter | Function & Value Range |
|---|---|---|
| Fanuc | Parameter 3402 Bit 3 (G91) | Controls the modal G-code Group 3 default state at boot-up or reset. 0 = Default to absolute (G90); 1 = Default to incremental (G91). |
| Parameter 3401 Bit 4 (MAB) & Bit 5 (ABS) | Controls coordinate behavior in Manual Data Input (MDI) panel. If MAB=1, ABS=0 forces all MDI to incremental, and ABS=1 forces MDI to absolute. If MAB=0, MDI tracks the active G90/G91 program mode. | |
| Parameter 7001 Bit 1 (ABS) | Determines path recovery behavior after a manual intervention while manual absolute is ON. 0 = Traverses different paths in G90 and G91; 1 = Forces the same absolute path in both modes. | |
| Parameter 5500 Bit 4 (G90) | Determines axis motion for indexing tables. 0 = Evaluates based on active G90/G91 mode; 1 = Indexing axis is permanently fixed to absolute commands. | |
| Siemens | MD20154 $MC_EXTERN_GCODE_RESET_VALUES[10] | Defines the initial state of G-code Group 3 upon system boot or channel reset. Configured directly as G90 or G91. |
| SD42440 $SC_FRAME_OFFSET_INCR_PROG | Governs active work coordinate offset travel during G91 incremental dimensioning. 0 = Only programmed path is traversed; 1 = Work offsets are additively traversed during incremental moves. | |
| SD42442 $SC_TOOL_OFFSET_INCR_PROG | Determines tool length compensation (G43, G44, G49) travel during an incremental axis movement. 0 = Offsets are not traversed concurrently; 1 = Tool length compensation changes are traversed concurrently with G91. | |
| MD30455 $MA_MISC_FUNCTION_MASK (Bit 2) | Configures the exact G90 absolute positioning behavior when executing moves on modulo 360-degree rotary axes. | |
| Mitsubishi | Parameter #1073 I_Absm | Sets the default coordinate mode when the machine power is turned ON or system reset. 0 = Default to incremental (G91); 1 = Default to absolute (G90). |
| Parameter #1076 AbsInc | Configures absolute/incremental axis selection for lathe systems. 0 = Toggles via modal G90/G91 G-codes; 1 = Toggles via distinct axis addresses (X/Z absolute vs. U/W incremental). | |
| Parameter #1126 PB_G90 | Playback G90 parameter. Determines how manual jog amounts are saved during Playback Editing. 0 = Recorded as incremental values; 1 = Recorded as absolute values. |
Brand Applications
Fanuc
Within the Fanuc ecosystem, absolute and incremental programming are governed by parameters that allow deep system customization to prevent operator errors. A key feature is the native bifurcation of coordinate input logic between machining centers (M-series) and lathes (T-series). For M-series machining centers, G90 and G91 are modal toggles that switch how the controller decodes coordinate words. However, T-series lathes under G-code System A bypass modal tracking entirely by explicitly pairing physical axes with distinct absolute (X, Z, C) and incremental (U, W, H) address letters within the exact same block. This eliminates the risk of an active incremental state causing a tool jump during subsequent operations. If a lathe is switched to G-code System B or C via configuration parameters, it acts like a milling machine and relies on modal G90/G91 commands instead.
Fanuc also permits machine builders to completely isolate the Manual Data Input (MDI) panel's coordinate logic from the active program's modal state. By setting Parameter 3401 bit 4 (MAB) and bit 5 (ABS), the controller can force all MDI executions to be strictly absolute or incremental regardless of whether the automatic program was paused in G90 or G91. Furthermore, Parameter 7001 bit 1 (ABS) controls path recovery behavior after an operator performs a manual handle intervention (jogging the tool away to inspect a part). If ABS is set to 0, the CNC may reconstruct different paths for G90 and G91 modes when resuming automatic execution, whereas setting ABS to 1 forces the control to follow the same absolute path, protecting the machine from colliding with workpieces or clamps during mid-cycle returns. For index tables, Parameter 5500 bit 4 (G90) can lock the index axis to interpret commands as strictly absolute, ignoring G91 modes entirely.
Siemens
Siemens controls handle coordinate dimensioning using an advanced, non-modal address extension architecture. In native Siemens Mode (G290) and ISO Dialect B/C (G291), standard G90 and G91 commands toggle the modal coordinate state. In legacy ISO Dialect System A, the G91 command is unavailable, and programmers must use the parallel axis letters U, V, W, and H for incremental steps. However, what sets Siemens apart is its highly unique inline address modifiers. By appending AC(...) (Absolute Coordinate) or IC(...) (Incremental Coordinate) directly to an axis word, programmers can command one axis to move to a strict absolute coordinate while another traverses a relative distance simultaneously within the exact same block (e.g., X=AC(100.0) Z=IC(-5.0)). This eliminates the need to toggle G90 and G91 modes back and forth across multiple blocks, simplifying complex toolpath transitions.
Siemens also features a specialized rotary and spindle dimensioning framework. Regardless of the active G90/G91 mode, operators can program spindle or rotary axis target coordinates using DC(...) (direct approach, taking the shortest path to an angle), ACP(...) (absolute positive direction, rotating clockwise to the target), or ACN(...) (absolute negative direction, rotating counterclockwise to the target). Under the hood, Siemens coordinates incremental programming with active frames. Machine data setting SD42440 $SC_FRAME_OFFSET_INCR_PROG controls whether active zero offsets are additively evaluated and traversed during a G91 incremental move, and SD42442 $SC_TOOL_OFFSET_INCR_PROG determines if changed tool length compensations are traversed concurrently during G91 moves, providing developers with extensive background kinematic customization.
Mitsubishi
Mitsubishi CNC controls offer fluid coordinate targeting, highlighted by the unique ability to process multiple G90 and G91 modes within the exact same block (e.g., G90 X300. G91 Y100. ;). This allows programmers to simultaneously drive one axis to an absolute coordinate while stepping another by a relative distance without writing separate lines. Standard milling systems use G90 and G91 modal commands, while lathe systems use distinct alphabetical addresses (X/Z absolute, U/W incremental) by default. However, Mitsubishi provides Parameter #1076 AbsInc to decouple this lathe address restriction; setting #1076 to 0 allows standard lathe controls to toggle coordinates via modal G90/G91 G-codes instead. In lathe configurations running G-code lists 6 or 7, the commands G190 and G191 replace G90/G91, and using standard G90/G91 in these lists will trigger a P34 program error alarm.
Another notable Mitsubishi feature is Parameter #1126 PB_G90 (Playback G90). This parameter determines how manual axes jog coordinates are recorded during Playback Editing. If set to 1, jog movements are recorded as absolute coordinates; if set to 0, they are recorded as incremental distances, accelerating manual teach-in cycles on the shop floor. Despite this versatility, Mitsubishi implements a strict rule for circular interpolation: all arc centers (I, J, K) and arc radius (R) are evaluated as strictly incremental values from the start point of the arc, even if G90 absolute mode is active. Attempting to program absolute coordinates for arc centers will distort the toolpath and scrap the part. Additionally, when using advanced cycles like G54.4 (Workpiece Installation Error Compensation), operators must immediately program a G90 absolute command in the first travel block; a G91 incremental command issued right after G54.4 causes the machine to plunge relative to the uncompensated physical location, causing tool crashes.
Brand Comparison
| Feature | Fanuc | Siemens | Mitsubishi |
|---|---|---|---|
| Syntax & Coordinate Switching | Modal G90/G91 on M-series. T-series lathe uses absolute (X/Z/C) vs. incremental (U/W/H) addresses. | Modal G90/G91 in native/ISO modes. Supports non-modal inline extensions AC(...), IC(...), DC(...), ACP(...), and ACN(...). | Modal G90/G91 on M-series. Lathes use address codes (X/Z vs. U/W) or modal G90/G91 via parameter #1076. Lathe G-code lists 6/7 use G190/G191. |
| Mixed Blocks (ABS & INC in Same Block) | Unsupported on machining centers. Supported on lathes via distinct X/Z and U/W address letters. | Natively supported using inline non-modal AC(...) / IC(...) modifiers on specific axes. | Natively supported by allowing multiple modal G90 and G91 coordinate definitions in one block. |
| Arc Center & Radius Interpretation | Interpreted based on active G90/G91 mode or system configuration. | Interpreted based on programming style; supports inline AC and IC modifiers for arc centers. | Strictly evaluated as incremental values (I, J, K, R), regardless of whether G90 is active. |
| Rotary & Spindle Positioning | Based on modal G90/G91, or permanently locked to absolute via Parameter 5500 bit 4. | Shortest-path absolute (DC), positive absolute (ACP), and negative absolute (ACN) are natively supported. | G90 moves on indexing axes must align with the preset indexing increment parameter to avoid alarms. |
| Playback Jog Recording | — (no source) | — (no source) | Configurable via Parameter #1126 (0 = recorded as incremental, 1 = recorded as absolute). |
| MDI Mode Coordinate Lock | Supported via Parameter 3401 (MAB/ABS bits) to force MDI to run as absolute or incremental. | — (no source) | — (no source) |
Technical Analysis
An analytical evaluation of Fanuc, Siemens, and Mitsubishi controllers reveals diverging architectural philosophies in coordinate management. Fanuc emphasizes robust safety margins and physical isolation. By locking lathe G-code System A to distinct address letters (X/Z/C vs. U/W/H) and allowing MDI panel overrides via Parameter 3401, Fanuc prioritizes structural prevention of operator error, ensuring that manual entries and active programs remain mathematically isolated. In contrast, Siemens delivers unparalleled programming density and kinematic flexibility. By embedding non-modal modifiers (AC and IC) directly into the base interpreter, Siemens eliminates the need to toggle G90 and G91 modes, allowing programmers to execute complex spatial transitions (such as ramp-down entries) in a single compact line of code. Additionally, Siemens' unique spindle and modulo rotary axis positioning (via DC, ACP, ACN) provides deep kinematic control without altering the main program's coordinate state.
Mitsubishi occupies a highly versatile middle ground, blending the absolute/incremental syntax of both Fanuc and Siemens while offering its own fluid solutions. Mitsubishi is unique in allowing multiple modal definitions within the exact same block (e.g. G90 X... G91 Y...), matching Siemens' mixed-coordinate capability but using standard G-codes rather than inline functions. However, Mitsubishi imposes strict mathematical constraints, such as treating arc center dimensions (I, J, K) and arc radius (R) as permanently incremental. This is a crucial difference from Fanuc and Siemens, where arc center interpolation can track the active absolute coordinate mode depending on parameters. Mitsubishi also incorporates specialized shop-floor tools like Parameter #1126, which determines how manual jog movements are saved during conversational playback editing, providing a high degree of adaptability for manual setup setups.
Program Examples
Fanuc Programming Example
O1001 (FANUC MILLING DEMO) ;
G90 G54 G00 X0. Y0. Z10. ; (Absolute positioning relative to G54 Work Zero)
G43 H01 Z2. ; (Apply tool length compensation)
G01 Z-5. F200 ; (Linear plunge in G90 Absolute mode)
G91 X50. Y30. ; (Toggle to Incremental; moves X+50mm, Y+30mm from current position)
X20. ; (Incremental step; moves another X+20mm)
G90 X100. Y50. ; (Return to Absolute; tool moves directly to coordinate X100.0, Y50.0)
G00 Z10. ; (Retract tool to Z10.0 in Absolute)
M30 ;
Fanuc Dry Run Path Analysis
- Block 2 (G90 G54 G00 X0. Y0. Z10.): The interpreter establishes absolute programming. The axes rapid travel to coordinates X = 0.0, Y = 0.0, Z = 10.0, relative to the active work coordinate system (G54) datum.
- Block 3 (G43 H01 Z2.): Activates tool length compensation (G43) utilizing the offset value stored in register H01, positioning the spindle face safely at Z = 2.0.
- Block 4 (G01 Z-5. F200): Spindle feeds linearly to a depth of exactly -5.0 mm below workpiece zero at a feedrate of 200 mm/min.
- Block 5 (G91 X50. Y30.): Toggles coordinate interpretation to incremental. The tool traverses X+50.0 mm and Y+30.0 mm from its current position, reaching absolute coordinates X = 50.0, Y = 30.0.
- Block 6 (X20.): Still in G91 modal state. The tool steps another X+20.0 mm, arriving at absolute coordinates X = 70.0, Y = 30.0.
- Block 7 (G90 X100. Y50.): Toggles coordinates back to G90 absolute mode. The tool travels directly to physical coordinate X = 100.0, Y = 50.0.
- Block 8 (G00 Z10.): Rapids vertically to coordinate Z = 10.0, safely clearing the workpiece.
Siemens Programming Example
N10 G290 (Switch to Siemens native mode)
N20 G90 G00 G54 X0 Y0 Z10 T1 D1 S2500 M03 (Modal Absolute positioning, activate work zero and tool offsets)
N30 G01 Z2 F500 (Feed to Z2 absolute)
N40 X50 Y50 (Linear feed to coordinate X50, Y50)
N50 X=IC(30) Y=AC(80) (Mix absolute and incremental in one block: X moves relative +30mm, Y moves to absolute 80mm)
N60 G91 X20 Y10 (Modal change to Incremental: X moves +20mm, Y moves +10mm)
N70 G90 Z50 (Modal change to Absolute: Z retracts to absolute coordinate 50mm)
N80 M30
Siemens Dry Run Path Analysis
- Block N20 (G90 G00 G54 X0 Y0 Z10): The interpreter activates modal absolute positioning (
G90) and selects the workpiece origin using work coordinate systems (G54). The spindle rapid-traverses to coordinate positions X = 0.0, Y = 0.0, Z = 10.0. - Block N30 (G01 Z2 F500): Spindle feeds linearly to absolute depth Z = 2.0 at 500 mm/min.
- Block N40 (X50 Y50): The tool feeds to absolute coordinates X = 50.0, Y = 50.0.
- Block N50 (X=IC(30) Y=AC(80)): A non-modal mixed dimensioning block. The X-axis travels an incremental distance of +30.0 mm from its current position, arriving at absolute coordinate X = 80.0. Simultaneously, the Y-axis travels to the absolute coordinate position Y = 80.0. The overarching
G90modal state is unaffected. - Block N60 (G91 X20 Y10): The modal state switches to incremental
G91. The tool travels relative distances of X+20.0 mm and Y+10.0 mm, reaching absolute coordinates X = 100.0, Y = 90.0. - Block N70 (G90 Z50): The coordinate interpretation returns to modal absolute
G90. The Z-axis retracts directly to the absolute target coordinate Z = 50.0.
Mitsubishi Programming Example
% (MITSUBISHI MIXED DEMO)
N10 G90 G00 G54 X0. Y0. Z20. S2000 M03 ; (Absolute rapid to G54 Work Zero)
N20 G01 Z2. F600 ; (Feed to Z2.0 absolute)
N30 G90 X200. G91 Y50. ; (Simultaneous Absolute X and Incremental Y in same block)
N40 X10. G90 Y150. ; (Command conflict resolution: X is incremental 10mm, Y is absolute 150mm)
N50 G90 G00 Z20. ; (Absolute retract to Z20.0)
N60 M30 ;
%
Mitsubishi Dry Run Path Analysis
- Block N10 (G90 G00 G54 X0. Y0. Z20.): Activates G90 absolute mode, positioning the tool relative to the work coordinate system (G54) datum. Spindle rapids to coordinate positions X = 0.0, Y = 0.0, Z = 20.0.
- Block N20 (G01 Z2. F600): Spindle feeds linearly to absolute target depth Z = 2.0 at 600 mm/min.
- Block N30 (G90 X200. G91 Y50.): Processes multiple coordinate commands. The X-axis travels directly to the absolute coordinate position X = 200.0. Concurrently, the Y-axis traverses an incremental distance of +50.0 mm relative to its starting location (Y = 0.0), reaching absolute coordinate Y = 50.0.
- Block N40 (X10. G90 Y150.): Since G91 was the trailing command in Block N30, the active modal state is G91 incremental. The X-axis traverses an incremental distance of +10.0 mm (reaching X = 210.0). Concurrently, the inline
G90command forces the Y-axis to travel directly to the absolute coordinate position Y = 150.0. - Block N50 (G90 G00 Z20.): Re-establishes modal absolute G90. Spindle rapids vertically to absolute coordinate Z = 20.0.
Error Analysis
| Brand & Alarm Code | Trigger Condition | Operator Symptom | Root Cause / Fix |
|---|---|---|---|
| Fanuc: PS5074 | Duplicate absolute and incremental addresses programmed for the exact same axis within the same lathe block under G-code System A (e.g., programming both X and U in one line). | Immediate cycle stop; machine control displays alarm message "ADDRESS DUPLICATION ERROR". | Program absolute and incremental moves in separate blocks. Ensure that lathe programs do not mix address characters (such as X and U) on a single coordinates line. |
| Fanuc: PS1090 / SR1090 | Program formatting error where parameter ESL is set to 0 and blocks are commanded without proper spacing or decimal points. | Interpreter stops reading the NC program and displays "PROGRAM FORMAT ERROR". | Correct format syntax by adding required spacing and explicit decimal points (e.g., write G90 G01 X100.0 Y50.0 ; instead of G90G01X100y50 ;). |
| Siemens: Alarm 61805 | An axis coordinate word receives conflicting absolute and incremental modifiers simultaneously in the same block (e.g., programming X=AC(100) and X=IC(10)). | NC Start is disabled; cycle stops immediately with the alarm "Value programmed absolute and incremental". | Identify and remove duplicate or conflicting address modifiers from the axis block. Ensure only one absolute or incremental modifier is active per axis word. |
| Siemens: Alarm 10255 / 15100 | Invoking continuous machining cycles (like G71 roughing) under ISO Dialect mode without inserting standard transition codes G00/G01 and G90/G94. | Cycle aborts during execution; controller displays coordinate transition or dialect formatting error. | Insert correct transitional motion (G00/G01) and coordinate (G90) commands in the NC lines immediately preceding the cycle call. |
| Mitsubishi: Indexing Increment Error | A G90 absolute command directs an indexing table axis to a coordinate that is not an integer multiple of the predefined indexing increment parameter. | The program halts immediately during execution; display shows a program error message. | Modify the programmed coordinate to mathematically align with the system's indexing increment parameter (e.g. aligning axis target with 2-degree or 5-degree increments). |
| Mitsubishi: Alarm P34 | Programmer commands G90, G91, G190, or G191 on a machine configuration whose active G-code list standard does not support that command format. | Immediate block skip or cycle halt; screen displays "P34 Program Error". | Verify and program the correct coordinate switching code compatible with the machine's active G-code list (e.g. utilizing G190/G191 instead of G90/G91 on lathe lists 6/7). |
Application Note
When executing manual interruptions or configuring compensation cycles, the active coordinate mode can trigger catastrophic tool paths if background parameters are not meticulously managed. A prominent example is the manual handle interruption on Fanuc controls: if an operator pauses an automatic program to jog the spindle away for a quick inspection, the path recovery behavior depends entirely on Parameter 7001 bit 1 (ABS). If this parameter is set to 0, the CNC will reconstruct entirely different motion vectors depending on whether G90 or G91 was active when paused. When the operator clears the manual override and hits cycle start, the tool does not return on a predictable straight line; instead, it executes an unexpected mathematical path, plunging the spindle physical head directly into a rotating chuck or secure fixture clamp. The operator sees a rapid, uncontrolled move before a massive hard collision occurs, fracturing the carbide tool, bending the spindle axis, and generating an expensive scrap part. To eliminate this production risk, Parameter 7001 should be locked to 1, forcing identical absolute return paths in both modes, and standard operating procedures must mandate checking the active coordinate mode before resuming automated runs.
A similar catastrophic failure chain occurs on Mitsubishi systems when combining advanced zero compensations like G54.4 (Workpiece Installation Error Compensation) with G91 incremental commands. Because the G54.4 block updates the coordinate grid offset without initiating physical axis movement, commanding a G91 relative step in the next block instructs the tool to plunge from its current, uncompensated coordinate location rather than from the newly shifted coordinate system. The tool departs from the programmed path, causing the spindle to slam into a workholding vise jaw or secured clamp, destroying the spindle bearings and scrapping the part. Standardizing coordinate resets, verifying parameters like Fanuc's 3402 and Mitsubishi's #1073, and forcing a G90 command immediately following any compensation call are essential baseline practices to ensure shop-floor safety.
Related Command Network
- G54 to G59 (Work Coordinate Systems): Selects the workpiece coordinate system origin that absolute commands (G90) reference to plot axis coordinates.
- G10 (Programmable Data Input): Dynamically updates work and tool offset registers, overwriting values completely in G90 absolute mode or additively modifying them in G91 incremental mode.
- G92 (Work Coordinate System Setting / Spindle Speed Clamp): Manually shifts the active workpiece coordinate origin without physical axis travel, directly changing subsequent G90 coordinate targets.
- G00 and G01 (Rapid / Linear Interpolation): Movement commands whose axis coordinate arguments are interpreted as absolute target coordinates or incremental distance vectors based on the active modal state.
- G290 and G291 (Siemens/ISO Language Mode Toggle): Dictates how the Siemens interpreter decodes modal G90/G91 commands and associated ISO dialect parallel addresses (like U, V, W).
Conclusion
To maintain maximum uptime and eliminate expensive hardware damage, CNC shops must establish standard operating procedures that explicitly manage G90 and G91 coordinate states. The active modal state should always be declared explicitly in the program safety header blocks (e.g. G90 G17 G21 G40 G49 G80) and restated immediately following any subprogram return, manual handle interrupt, or zero offset shift. Programmers must ensure that parameters dictating boot-up defaults and MDI overrides are standardized across identical machine controls, so operators experience uniform, predictable behaviors when entering manual commands. By treating G90 and G91 not merely as simple toggle codes but as fundamental filters for the CNC interpreter, machine shops can significantly reduce scrap rates, optimize cycle times, and preserve spindle longevity.
Frequently Asked Questions
How does G90 absolute programming affect the active G54 workpiece offset?
G90 commands instruct the CNC interpreter to plot all target coordinates relative to the origin of the active work coordinate system (such as G54). If you change the G54 coordinate values on the control, all subsequent G90 moves automatically shift in space to maintain their precise dimensions relative to that new origin. To ensure part accuracy, always verify work offsets before running a G90 program, and use tool path simulations to check for interference zones.
Why does a G10 offset change behave differently in G90 and G91 modes on Fanuc?
The G10 command uses the active coordinate mode as an instruction filter: in G90 absolute mode, the value in the G10 block completely replaces the existing register offset, whereas in G91 incremental mode, it mathematically adds to the current register offset. Failing to verify the active modal state before executing G10 is a common source of crashes. Programmers should explicitly declare G90 or G91 inside the G10 block itself (e.g. G90 G10 L2 P1 X...) to force the correct behavior regardless of the active program mode.
How can absolute and incremental movements be mixed in a single block on Siemens?
Siemens supports non-modal inline coordinate extensions AC(...) and IC(...) which can be appended directly to specific axis words. This allows programmers to command individual axes to travel to absolute positions and incremental distances simultaneously (for example, X=AC(50.0) Z=IC(-5.0)) without changing the overall modal coordinate mode. Use this feature to write clean, dense code for complex entry vectors, eliminating excessive modal toggling lines.
What parameter determines if a lathe uses U/W addresses or G90/G91 modal toggles?
On Mitsubishi lathe systems, Parameter #1076 AbsInc determines the coordinate selection format; setting it to 1 configures the machine to use parallel addresses (X/Z for absolute, U/W for incremental), whereas setting it to 0 enables modal G90/G91 switching. On Fanuc systems, this behavior is determined by the active G-code system (System A uses parallel addresses, while System B/C uses G90/G91). Shops should match this parameter across all lathe units on the floor to maintain a consistent programming standard and prevent operator confusion.
Still not resolved?
Ask our AI assistant about this topic in natural language. Grounded in verified sources, no hallucinations.

- CNC CARE Co-Founder (May 2025 - Present)
- Mitsubishi Electric NC Sales & Service Section Manager (2008 - 2025)
- Reis CNC Service Engineer (2003 - 2005)
- Ö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
Siemens CYCLE800 G-Code: Swivel Planes & Tool Alignment
Master Siemens CYCLE800 for 3+2 axis machining. Learn plane swiveling, tool alignment, parameter setup, and how to troubleshoot Alarm 61190 and 61153.
Siemens CYCLE72 Contour Milling: Guide to Sinumerik Path Milling
Master Siemens CYCLE72 for contour milling on Sinumerik CNC controls. Learn parameter setup, avoid simulation alarm 61123, and prevent machine collisions.
Siemens CYCLE952 Contour Turning Cycle Programming Guide
Master Siemens CYCLE952 contour turning on Sinumerik CNC controls. Learn parameter lists, resolve Alarm 61051, and configure balance cutting.
Siemens SLOT1 and SLOT2 Slot Milling Cycles Programming Guide
Master slot milling on Siemens Sinumerik controls using SLOT1 and SLOT2 cycles. Learn parameter configurations, alarm 61000 prevention, and optimal tool paths.