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 Aused 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.0written 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.




