Skip to main content
CNC.wikiCNC.wiki

CNC G94 and G95: Feed Rate Modes (mm/min and mm/rev) Guide

Master G94 and G95 feed rate modes on Fanuc, Siemens, and Mitsubishi. Learn parameter configurations, active alarms, and safety protocols to prevent crashes.

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

CNC CARE Co-founder

Introduction to Feed Rate Modes

Omitting a new F-code when transitioning from G94 (feed per minute) to G95 (feed per revolution) is one of the most common ways to cause a catastrophic hard collision on a CNC machine. Because the feedrate parameter is fully modal, a linear velocity of F500.0 (500 mm/min) programmed in G94 will be instantly re-evaluated by the control as 500 mm/rev upon entering G95. At standard operating spindle speeds, this severe programming oversight will cause the cutting tool to violently plunge at rapid-traverse speeds directly into the workpiece, a stationary vise jaw, or the rotating chuck. This extreme force is guaranteed to scrap the part, shatter the solid carbide tool, destroy the indexing turret alignment, and trigger immediate servo overload alarm codes.

Asynchronous feed (G94) and synchronous feed (G95) serve as the foundation for path velocity regulation across turning and milling centers. While G94 regulates travel distance over a fixed interval of time, G95 locks axis movement directly to the angular displacement of the spindle encoder. 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 of G94 and G95

Technical AttributeSpecification Details
Command CodesG94 (Feed per Minute) / G95 (Feed per Revolution); G98 / G99 under legacy lathe configurations.
Modal GroupGroup 05 (Fanuc / Siemens / Mitsubishi), modal state.
Supported BrandsFanuc, Siemens, Mitsubishi.
Critical ParametersParameter 3402 (Fanuc default), Parameter 13450 (Fanuc MFC), Parameter #1074 (Mitsubishi I_Sync), Parameter #1268 (Mitsubishi tapping), $TC_DPNT (Siemens tooth count).
Main ConstraintThe active master spindle speed must be non-zero (rotating) during G95 execution to provide encoder feedback pulses for axis movement calculation.

Quick Read: Key Decisions and Constraints

  • Always explicitly declare a new F-value in the same block when transitioning from G94 (feed per minute) to G95 (feed per revolution) to prevent the control from inheriting an astronomically high modal feedrate value.
  • Ensure the spindle is actively rotating (M03 or M04 command with an active S-code) before executing any G95 cutting moves, or the axes will remain motionless or trigger a stopped spindle alarm.
  • Understand that using constant surface speed (G96) with G95 causes the axis feedrate to violently accelerate in real-time as the tool moves closer to the spindle center, requiring careful setup of G92/G50 spindle speed clamps.
  • Verify parameter settings like Fanuc 13450 bit 4 (MFC) which can be enabled to automatically issue a PS0011 alarm and stop the machine if an F-code is omitted during a feed mode transition.
  • Utilize dry run graphics or simulation screens to verify synchronization vectors, keeping in mind that physical dry run activation (Dry Run switch) typically overrides G95 and runs axes at manual jog rates.
  • For multi-spindle environments, verify that the master spindle assignment is correctly routed so the feedrate is synchronized to the active physical chuck holding the workpiece.

Basic Concepts: Feed per Minute vs. Feed per Revolution

The primary operational distinction between feedrate modes is how the CNC interpreter scales the relative path velocity of the tool. Under G94 (asynchronous feed or feed per minute), the control establishes a strict time-based linear speed. The tool advances at a constant rate (such as millimeters or inches per minute) regardless of how fast or slow the spindle is rotating. This constant linear progression is the fundamental requirement for milling, routing, and positioning operations, where cutter chip load depends on maintaining a steady path speed along a multi-axis contour. When setting up machining operations, understanding the baseline coordination between different modal commands is key. Similar to toggling between absolute and incremental dimensioning (G90 and G91), managing feedrate modes requires consistent tracking of the active modal state to prevent programming errors.

In contrast, G95 (synchronous feed or feed per revolution) locks the tool's linear advance directly to the physical rotation of the master spindle. Every full 360-degree rotation of the spindle results in a precise, physical advancement of the axis by the commanded F-value (such as mm/rev or inch/rev). This synchronization is critical for turning, threading, and deep-hole drilling because it mathematically guarantees a constant chip load per spindle revolution. If the spindle speed fluctuates or slows down under a heavy torque load, the feed axes slow down in perfect lockstep, preventing tool breakage and ensuring consistent surface finish.

G94 and G95 Command Structure and Syntax

Programming feedrate modes relies on establishing the active modal command first, then declaring the corresponding F-value. Since these commands are modal, once a mode is established, it remains active until the opposing code or an overriding cycle (like G93 inverse time feed) is programmed. Setting the correct mode before executing any interpolation is essential for safe operation. Just as configuring work coordinate systems (G54 to G59) aligns the geometry zero, declaring G94 or G95 establishes the mathematical rate zero for axis travel vectors.

When writing programs for turning systems, developers must identify which G-code system the controller is running. Standard milling environments natively use G94 and G95, whereas turning environments often map these behaviors to G98 and G99. Machine builders configure default startup modes and mathematical increment precision through internal system variables and parameters.

; Feed per Minute Mode (Milling and standard systems)
G94 F_ ;

; Feed per Revolution Mode (Milling and standard systems) G95 F_ ;

; Legacy Lathe G-code System A (Feed per Minute) G98 F_ ;

; Legacy Lathe G-code System A (Feed per Revolution) G99 F_ ;

Parameter / AddressFunction and UnitsStandard Value Range
FIn G94: Feed rate in mm/min, inch/min, or degrees/min. In G95: Feed rate in mm/rev or inch/rev.Siemens: 0.001 to 999999.999 mm/min. Mitsubishi: 0.001 to 1000000.000 mm/min (G94), 0.001 to 999.999 mm/rev (G95).
FZTooth feedrate (Siemens native extension). Specifies feed rate in mm/tooth or inch/tooth.Calculated dynamically based on active tool data offset.
SSpindle speed command in RPM. Direct input for G95 calculation.Integer value representing spindle revolutions per minute.

CNC Brand Applications and Control Parameters

Fanuc

On Fanuc controls, the default feedrate behavior at power-on is defined by Parameter 3402 bit 4 (FPM). System administrators can configure Parameter 13450 bit 4 (MFC) to determine whether the control inherits a previous feedrate value during mode changes or halts with a safety alarm.

The standard programming format uses G94 for linear feed per minute and G95 for synchronous feed per revolution, which is represented by the following code: G95 G01 Z-50.0 F0.2 S1000 M03;.

System CategoryControl Element / SettingTechnical Description and Value Range
ParametersParameter 3402 bit 4 (FPM)Initial modal feed state. 0 = G95/G99 (Feed per revolution), 1 = G94/G98 (Feed per minute).
ParametersParameter 13450 bit 4 (MFC)Inheritance of F-value after mode switch. 0 = inherit modal F, 1 = trigger alarm.
ParametersParameter 1403 bit 0 (MIF)Increment system for integer F command in G94 mode. 0 = 1 mm/min, 1 = 0.001 mm/min.
ParametersParameter 1405 bit 1 (FR3)Increment system for integer F command in G95 mode. 0 = 0.01 mm/rev, 1 = 0.001 mm/rev.
AlarmsPS0011FEED ZERO COMMAND. Occurs if cutting feed is executed without a specified feedrate after a Group 05 switch (when MFC = 1).
AlarmsPS0187Axis motion commanded in G95 mode while commanded spindle speed is zero (S0).
VersionsM-Series vs. T-SeriesMachining centers (M-series) natively use G94/G95. Lathes (T-series) running legacy G-code System A use G98 (feed per minute) and G99 (feed per revolution).

Warning: When executing G95 mode under G96 (Constant Surface Speed), operators must configure G92/G50 spindle clamps to prevent runaway axis acceleration near the center of rotation, which can cause sudden collisions with the chuck or turret.

Siemens

Siemens controllers allow deep integration of revolutional feedrate behaviors, managing manual movements via setting data SD41100 ($SN_JOG_REV_IS_ACTIVE). Axis-specific default speeds in G95 mode are configured through machine data MD32050 ($MA_JOG_REV_VELO).

Siemens supports native tooth-based feedrate syntax using the FZ command address in a movement block: N30 G1 G95 FZ=0.02.

System CategoryControl Element / SettingTechnical Description and Value Range
Parameters$TC_DPNTTool offset data parameter defining the active tool's tooth count for FZ calculations.
ParametersSD41100 $SN_JOG_REV_IS_ACTIVESetting data to enable revolutional feedrate (G95) in manual JOG mode.
ParametersMD32050 $MA_JOG_REV_VELODefault revolutional feedrate in JOG mode when G95 is active.
ParametersMD $MC_EXTERN_FUNCTION_MASK bit 9ISO Dialect mode scale configuration. 0 = G95 F-value multiplied by 0.01 mm, 1 = G95 F-value multiplied by 0.001 mm.
AlarmsAlarm 14800Programmed path velocity less than or equal to zero. Triggered when F0 is programmed in G94/G95.
AlarmsAlarm 10861Velocity of positioning axis is zero. Triggered when zero or negative F or FZ is programmed. Halts control.
VersionsNative vs. ISO Dialect TNative mode (G290), ISO Dialect M, and ISO Dialect T System C use G94/G95. Legacy ISO Dialect T System A uses G98/G99.

Warning: Running G95 on Siemens while the spindle is stationary (M05) will leave the axes motionless without generating an explaining alarm code, requiring operators to manually verify spindle encoder activity.

Mitsubishi

Mitsubishi CNC systems allow custom startup states through the parameter #1074 I_Sync, enabling shops to unify booting defaults, resolving the classic division between lathe and milling setups. Tapping cycle behaviors can be dynamically altered using parameter #1268 ext04/bit2.

Mitsubishi turning blocks can be easily configured to toggle feed rates modal states, as shown in this syntax line: G95 G01 Z-50. F0.2 ;.

System CategoryControl Element / SettingTechnical Description and Value Range
ParametersParameter #1074 I_SyncInitial synchronous feed setting at power-on/reset. 0 = Asynchronous (G94), 1 = Synchronous (G95).
ParametersParameter #1268 ext04/bit2Synchronous tapping feed mode execution flag. 0 = rigid tapping is G95 mm/rev, 1 = allows tapping G94 mm/min.
ParametersParameter #1292 ext28/bit1Synchronous tapping and feedrate configuration parameter.
AlarmsM01 0105 (Operation error)Triggered if spindle speed is zero during G95 synchronous feed movement.
AlarmsP32 (Address error)Occurs if E address (threads per inch) is programmed while in G94 modal state.
AlarmsP62 (No F command)Triggered if G12.1 polar interpolation starts in G95, forcing a switch to G94 without a declared F-code.
VersionsM vs. L SystemsStandard systems use G94/G95. L systems running legacy G-code System A use G98 (feed per minute) and G99 (feed per revolution).

Warning: Running a physical Dry Run bypasses G95 modal states entirely and applies standard G94 rules, causing axes to move at the configured manual jog velocity instead of spindle-synchronized speeds.

Cross-Brand Comparison Table

Comparison FeatureFanucSiemensMitsubishi
Milling & Turning SyntaxStandard milling: G94 (feed/min), G95 (feed/rev). Standard legacy turning: G98 (feed/min), G99 (feed/rev).Standard native mode: G94 (linear feed), G95 (revolutional feed). ISO Dialect T System A: G98/G99.Standard systems: G94 (asynchronous feed), G95 (synchronous feed). Legacy G-code System A: G98/G99.
Tooth-Based Feedrate (FZ)— (no source)Supported natively using G95 FZ=... and references tool data parameter $TC_DPNT.— (no source)
Spindle/Axis Synchronization Selection— (no source)Supported dynamically via FPR(...) instruction to derive feedrate from any spindle/axis.— (no source)
Manual JOG Integration— (no source)Supported via SD41100 to enable spindle-synchronized contour manual dial movements.— (no source)
Default Power-On ParametersManaged by Parameter 3402 bit 4 (FPM) (0 = G95, 1 = G94).— (no source)Managed by Parameter #1074 I_Sync (0 = G94, 1 = G95).
Tapping Cycle Flexibility— (no source)— (no source)Allows time-based G94 commands during tapping via Parameter #1268 ext04/bit2.
Dry Run Override Rules— (no source)— (no source)Bypasses G95, forcing G94 time-based velocity scaling at manual jog feedrate.

Technical Analysis of Brand Architectures

Analyzing the architectural implementations of these three brands reveals distinct engineering philosophies. Fanuc emphasizes deep backward compatibility and hardware-level parameterization. By isolating its precision scaling directly into parameters such as 1403 (MIF) and 1405 (FR3), machine builders can modify decimal increment behaviors in memory without requiring a full CAM post-processor overhaul. This ensures older programs run seamlessly across decades of legacy Fanuc platforms, but requires manual parameter management to prevent feedrate scaling mismatches.

Siemens diverges sharply toward software flexibility and dynamic multi-axis interpolation. The inclusion of tooth-based programming (FZ) and active tool tooth offset tracking ($TC_DPNT) eliminates offline math, moving calculations entirely inside the CNC kernel. By providing the FPR instruction, Siemens enables spindle-synchronized feedrates to scale against any active sub-spindle or rotating axis, a capability that represents a massive operational advantage in complex multi-tasking mill-turn centers. Furthermore, integrating revolutional feedrate directly into manual handwheels (SD41100) reflects a focus on operator contouring control.

Mitsubishi balances this syntax flexibility by providing robust safety overrides and custom administrative defaults. The #1074 I_Sync parameter allows shops to unify booting defaults, resolving the classic division between lathe and milling setups. Safety behaviors during polar coordinate interpolation (G12.1) are actively managed, as the control forcibly shifts back to asynchronous feed and demands a new F command to protect physical geometries. Similarly, letting G94 feed-per-minute declarations govern synchronous tapping cycles via parameter #1268 provides high backward compatibility for legacy CAM setups.

Practical Program Examples and Dry Runs

Fanuc Programming Example

; Fanuc Mill-Turn Profile
G90 G21 G40 ; Absolute metric mode, cancel comp
G95 G01 Z-50.0 F0.2 S1000 M03 ; Switch to feed per revolution, feed to depth at 0.2 mm/rev with spindle running clockwise at 1000 RPM
G94 G01 X100.0 F250.0 ; Switch back to feed per minute, linear feed at 250 mm/min

Fanuc Dry Run Path Analysis

Dry run validation: In the first block, the controller sets standard absolute positioning. In the second block, G95 establishes synchronous feed per revolution, locking the Z-axis travel to the rotating spindle. With the spindle running clockwise at 1000 RPM and a feed rate of 0.2 mm/rev, the Z-axis feeds linearly at a calculated velocity of 200 mm/min. In the third block, G94 immediately changes the state to asynchronous feed per minute, driving the X-axis at a strict time-based rate of 250 mm/min, entirely ignoring spindle RPM fluctuations.

Siemens Programming Example

N10 G290 (Switch to Siemens native mode)
N20 G95 FZ=0.02 S1200 M3 (Spindle 1200 RPM, feed per tooth at 0.02 mm/tooth using active tool offset tooth count)
N30 G1 Z-35.0 (Interpolate linearly along Z-axis)
N40 G94 F350 (Switch to linear feed rate 350 mm/min for rapid tool retract)

Siemens Dry Run Path Analysis

Dry run validation: Block N10 sets native Siemens command syntax. In block N20, G95 activates revolutional feedrate, but specifically uses the tooth feedrate parameter FZ=0.02. The Siemens interpreter accesses the tool database, reads the active tool's tooth parameter ($TC_DPNT, e.g., 4 teeth), and dynamically calculates an equivalent revolutional feedrate of 0.08 mm/rev (0.02 mm/tooth × 4 teeth). The tool advances along the Z-axis at 0.08 mm/rev. In N40, G94 cancels the synchronized state, forcing the axis to retract at 350 mm/min independent of the spindle.

Mitsubishi Programming Example

; Mitsubishi Lathe Threading Preparation
G90 G21 G95 ; Absolute programming, metric system, synchronous feed per revolution
G01 Z-40. F0.15 S800 M03 ; Linear cut at 0.15 mm/rev under spindle rotation of 800 RPM
G94 G04 X4.0 ; Switch to asynchronous feed to execute a time-based dwell of 4.0 seconds

Mitsubishi Dry Run Path Analysis

Dry run validation: In the first block, G95 establishes synchronous feed per revolution. The second block commands a linear movement along Z-axis. With the spindle rotating at 800 RPM and a feedrate of 0.15 mm/rev, the tool advances at a rate of 120 mm/min. In the third block, the programmer switches to G94 feed per minute before commanding a dwell (G04). Under G94, the X4.0 command forces the machine to dwell for exactly 4.0 seconds; if the control were left in G95, the dwell would be calculated based on spindle revolutions instead of a strict time delay.

Common Alarms and Error Analysis

BrandAlarm CodeTrigger ConditionOperator SymptomRoot Cause & Resolution
FanucPS0011Omitting a new F-code immediately after switching Group 05 modal feed modes (MFC parameter set to 1).Execution halts instantly on the transition block, and a FEED ZERO COMMAND alarm is displayed.Configure Parameter 13450 bit 4 (MFC) to 1 for safety, and program a new F-value in the block containing the G94/G95 switch.
FanucPS0187Commanding an axis movement in G95 mode while the spindle is commanded to zero speed (S0) or stopped.The axis remains completely locked in place, and a spindle-synchronized velocity error is thrown.Program a valid spindle speed (S-value) and ensure the spindle is actively rotating (M03/M04) before executing G95.
SiemensAlarm 14800Programmed feedrate F0 is entered in G94/G95 modes without an overriding fixed feedrate.The program execution halts with a "Programmed path velocity less than or equal to zero" message.Declare a non-zero, positive F or FZ feedrate value in the active block.
SiemensAlarm 10861Zero or negative F or FZ programmed on a positioning axis under G94, G95, or G96.The controller halts execution, axes lock up, and a "velocity of positioning axis is zero" error displays.Inspect tool offsets and program data; declare a positive, non-zero feedrate. Requires a full system reset.
MitsubishiM01 0105Spindle rotation is zero when executing a synchronous movement block in G95 mode.Axes stall indefinitely during interpolations, displaying an active Operation Error code.Verify spindle is active and encoder is transmitting pulses. Program an active S-code and M03/M04 preceding G95.
MitsubishiP32Programmed screw threading pitch E address while control is modal in G94 (feed per minute).Operation stops instantly, displaying a P32 Address Error alarm.Transition back to G95 synchronous feed mode before declaring the E threading pitch address.
MitsubishiP62Initiating polar coordinate interpolation (G12.1/G112) in G95 without declaring a new F-code.The control automatically switches feed states to G94, halts, and throws a No F Command error.Declare a new F feedrate command immediately inside the polar coordinate initiation block.

Professional Application Note and Safety Synthesis

Catastrophic chuck collisions, shattered turret assemblies, and severely damaged scrap parts represent the direct physical consequences of a feedrate mode mismatch. When operators approach machining contours under G95 (feed per revolution) while using constant surface speed (G96), the axis travel speed is governed by the formula: FC = F × N × OVR. As the cutting tool approaches the center of rotation on a workpiece, the spindle speed rapidly accelerates to maintain constant surface speed, causing the linear axes to violently surge. If spindle clamping values (G92 or G50) are not properly programmed, this sudden surge drives the tool directly into a stationary vise jaw, a fixture clamp, or the rotating chuck. This excessive kinetic force shatters the solid carbide cutter, knocks the tool indexer out of alignment, and triggers immediate servo overload alarms. In many milling operations, incorrect feedrate modes interact destructively with tool length offsets. For instance, when tool length compensation (G43, G44, or G49) is active, a sudden G95 speed surge can amplify path deviation errors, causing immediate hard collisions.

Related Commands in the G-Code Network

  • G93 (Inverse Time Feedrate): Overrides both G94 and G95, specifying the reciprocal of the time in minutes required to complete the movement block, which is standard for multi-axis simultaneous milling.
  • G96 (Constant Surface Speed ON): Intrinsically relies on and defaults to G95 revolutional feed rate behaviors on lathes to ensure spindle-synchronized surface velocity.
  • G97 (Constant Spindle Speed ON/OFF): Cancels G96, locking the spindle to a constant RPM, which directly stabilizes G95 axis travel rates during long linear cuts.
  • G12.1 / G112 (Polar Coordinate Interpolation): A complex interpolation mode that forcibly overrides G95 states on Mitsubishi and other controls, shifting the system to asynchronous G94 and requiring a new F-code declaration to protect geometry.
  • FPR (Siemens Master Spindle Designation): Dynamically assigns which rotary axis or secondary spindle is used as the feedback encoder source for calculating G95 revolutional path movements.

Conclusion and Actionable Takeaways

Mitigating feedrate mode failures requires programmers and operators to establish a rigid programming protocol. Always write a new F-value in any block containing a G94 or G95 transition, verify spindle rotation states before G95 moves, and check active parameter settings like Fanuc's MFC or Mitsubishi's I_Sync. Utilizing graphic simulation tools and validating feed calculations against spindle clamping speeds will prevent catastrophic tool collisions and protect expensive indexing turrets.

Frequently Asked Questions (FAQ)

Why does my CNC machine remain completely motionless without throwing an alarm in G95 mode?

This state occurs because the controller is waiting for spindle encoder pulses to calculate the path velocity vector. If the spindle is stopped (M05) or running at zero speed (S0), the physical feed rate evaluates to zero, meaning no axis motion can occur. To resolve this, always ensure an active spindle speed (S-code) and rotation command (M03 or M04) are executed prior to the G95 block.

How does parameter 13450 bit 4 protect Fanuc machines from catastrophic crashes?

This parameter governs the feedrate inheritance behavior (MFC) when changing modal feed modes without a new F-value. If set to 0, the control inherits the previous feedrate (e.g., F250.0 mm/min becomes F250.0 mm/rev, leading to a major collision). Setting parameter 13450 bit 4 to 1 forces the control to trap the omission and trigger a PS0011 (FEED ZERO COMMAND) alarm, safely halting the program before the tool strikes the chuck or workpiece.

Can I program tooth-based feed rates (feed per tooth) on controllers other than Siemens?

Siemens natively supports tooth-based programming directly using the G95 FZ=... address and the active tool's tooth offset ($TC_DPNT). Fanuc and Mitsubishi do not natively support an FZ address in their standard configurations. For Fanuc and Mitsubishi, you must mathematically calculate the feed rate per revolution (feed per tooth × number of cutter teeth) in your CAM post-processor and output it as a standard G95 F-value.

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 - 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