## Why this update
A user reported to us that the simulator was rejecting a correctly written G71 roughing cycle, flagging as missing a parameter that was actually present in the line. They were right. We checked the case, then extended the check to all lathe fixed cycles with a systematic testing campaign: for each cycle we took the syntax variants found in Fanuc manuals
(0T/6T/10T/11T/15T series and 0i/16i/18i/21i/31i series) and in textbooks, and ran them one by one in the simulator, checking what happened.
The result is a series of corrections that make the interpreter faithful to the behavior of the real control: syntax that works on the shop floor must also work in the simulator, and when a line is genuinely wrong, the alarm must say what's actually missing, not something else.
The corrections concern the interpretation engine, which is the same across all platforms: they are therefore active on desktop (Windows, macOS, Linux), tablet, and smartphone with the same version.
---
## G71 / G72 — Longitudinal and Facing Roughing Cycles
**Before.** The first block of the cycle was only recognized if it contained both the depth of cut (U for G71, W for G72) and the retraction R. A `G71 U2` without R — valid syntax on Fanuc, where R is optional and the retraction comes from parameter 5133 — was not recognized: on the next block the simulator would report "missing U parameter," with U clearly written in the line. The same happened with the single-line format `G71 P.. Q.. U.. W.. D.. F..` used on older Fanuc controls and many textbooks, where D is the depth of cut.
**Now.**
- Block 1 is recognized with U alone (or W for G72); R is optional, with a default retraction of 0.5 mm when missing.
- The single-line format with D is accepted. D without a decimal point is in microns (`D2000` = 2 mm), with a decimal point it's in millimeters (`D2.0` = 2 mm), as on the control.
- If block 1 is genuinely missing, the alarm states it clearly: "block 1 of G71 is missing (G71 U.. R..) before G71 P.. Q.., or the depth D in the single-line format."
- Added check: D must be greater than zero.
Verified with parity tests: the three syntax variants (two blocks with R, two blocks without R, single line) leave the same profile on the workpiece, point by point, on both channel 1 and the sub-spindle.
---
## G76 — Threading Cycle
Here the problems were more serious, because in some cases the simulator gave no warning at all and simply didn't execute the thread.
**Before.** The two blocks were recognized with a rigid comparison of the entire line: `G76 P Q R` and `G76 X Z P Q F` in this exact order, with all parameters mandatory.
- Block 1 without R, with R before Q, or with Q written with a decimal point: alarm "P must be 6 digits, found P010060," with a perfectly correct P.
- Block 2 with F before P and Q, with the taper R, with incremental U/W, with Z before X, with Q before P, with P and Q in millimeters, or in the single-line format `G76 X Z K D F A` used on Fanuc 0T/10T: no alarm and no cycle. The thread wasn't cut.
- Block 2 without Z: correct alarm, but the cycle started anyway.
**Now.**
- Words can be in any order, with or without spaces, uppercase or lowercase.
- Block 1: `G76 P{mmrraa} [Q..] [R..]`. Q and R are optional. P must have 6 digits and is read as written, including leading zeros.
- Block 2: `G76 X|U.. Z|W.. P|K.. Q|D.. F|E.. [R|I..] [A..]`. Both the two-block format from the 0i/31i series (P thread height, Q first pass) and the single-line format from the 0T/10T/15T series (K height, D first pass, A angle) are accepted. E is accepted as the precision pitch.
- P, Q, K, D without a decimal point are in microns (`P920` = 0.92 mm), with a decimal point in millimeters.
- Incremental U and W are resolved from the tool's current position.
- If the target axis, the pitch, the thread height, or the first pass is missing, the alarm indicates the missing parameter and the cycle doesn't start.
- Taper (R in the two-block format, I in the single-line format) is read but not yet simulated: the thread is executed as cylindrical.
Verified with parity tests: eight different syntax variants of block 2 and three of block 1 produce the same M48×3 thread, sampled every 0.25 mm, on both channels.
---
## G74, G75, G83, G84, G85, G88, G89 — Drilling, Grooving, Tapping, Boring Cycles
**Before.**
- Block 2 only accepted absolute X and Z coordinates. With incremental U or W the cycle didn't start, and the line was executed as a linear feed move, with no alarm.
- The words P and Q were always interpreted in microns: a `Q5.0` written in millimeters became a 0.005 mm pecking depth.
- G89 (radial boring on diameter) was implemented but did not appear among the recognized codes, triggering the "unsupported G code" alarm.
**Now.**
- U and W are accepted in block 2 of all these cycles and resolved absolutely from the current position of the tool tip, on the active channel.
- P and Q follow a single rule: without a decimal point, microns; with a decimal point, millimeters. The rule is the same for all cycles (G71, G72, G74, G75, G76, G83).
- G89 is recognized.
Verified with parity tests: G83 drilling with `Z-30`, with `W-35` from Z5 position, and with `Q10.0` produces the same hole; G75 grooving with `X80 Z-20` and with `U-24 W-10` from X104 Z-10 position produces the same groove.
---
## G-code Parser — Numbers with a Leading Decimal Point
Values written without the leading zero before the decimal point, such as `X.5`, `R.05`, or `U-.2`, are valid on Fanuc, but the parser wasn't reading them and treated them as zero. They are now read correctly, for all words.
---
## What DOESN'T Change
- The calculation logic of the cycles (passes, depths, retractions, thread discipline) is the same as before. The corrections concern syntax recognition and the quality of the alarms.
- Programs already written in the standard two-block format continue to work identically.
---
## In Progress
The fixed cycles of Fanuc lathe **G-code System A** (G90 turning cycle, G92 threading cycle, G94 facing cycle), widely used in teaching, are not yet simulated. They are next on the roadmap.
---
## How to Report an Issue
If you find a program line that the simulator rejects or executes differently from the real control, open a report through the in-app support (Support menu, open ticket), attaching the program: we use it directly as a test case. Every cycle fixed in this update started out that way.

# CNC Code — Fixes to Lathe Fixed Cycles (September 2026)
Related Articles
Continue reading similar content



