Skip to content

Commit 855bc0b

Browse files
SINUMERIK ISO-M & Multi-Axis Stability
1 parent cc532ae commit 855bc0b

47 files changed

Lines changed: 16935 additions & 13620 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎CHANGELOG.md‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
11
# Changelog
22

3+
## 1.7.2 - 2026-10-01
4+
5+
- Fixed G53.1 table indexing after G68.2: retain machine XYZ while rotating the displayed tip, then rebase into the tilted plane. The first XY-only approach preserves retracted clearance instead of starting near the WCS centre. Added cube approach and rendered-segment regressions for both angled AC/BC tables.
6+
- Added SINUMERIK 840D MPF/SPF source detection and G290/G291 mode handling. G291 ISO Dialect M runs through the milling kernel with one integer-code whitelist, modeled unit aliases and `G54 P1..P48` work offsets; native Siemens execution, SINUMERIK ISO-T, Macro B flow and unsupported ISO functions stop with diagnostics.
7+
- Added MPF/SPF support to GUI file filters and batch scanning. Content-aware SINUMERIK detection is shared by GUI and CLI; ordinary FANUC code in an MPF/SPF file stays in FANUC mode.
8+
- Allowed ordinary G91 incremental positioning in SINUMERIK ISO-M and applied dialect modal state once in the shared milling kernel. Restricted G68 to its standalone active-plane 2D form without extra words or I/J/K; only G68 while G91 is active is rejected. G69 remains supported.
9+
- Made Full Program conversion preserve source blocks while adding or removing a standalone G291 switch. Conversion validates target motion geometry and machine signals, and rejects unverified cutter compensation for a SINUMERIK target. Expanded Execution is not a dialect-conversion mode. Added CLI and batch full-program conversion.
10+
- Restricted SINUMERIK ISO export to the verified three-axis subset. Rotary 4-axis and 5-axis/TCP/TWP conversions fail before NC is written in core, CLI, batch and GUI paths; removed automatic `G43.4` to `TRAORI` conversion and FANUC-surrogate validation. FANUC multi-axis analysis remains supported; selected 4/5-axis profiles also block SINUMERIK export for XYZ-only source. G28/G53 reference returns use the current rotary frame instead of an implicit ABC=0 frame; preserve ABC and trace continuity with TCP active or after G49. Added rotary-frame retract regressions, including B180 returning toward negative global Z.
11+
- Restored indexed table XYZ retention, including five-axis profiles with TCP off, so approaches after G28/G53 start on the current table side. Reference Z returns crossing the WCS centre plane stop execution. Multi-axis reference returns may end a trace run without a connector to the next indexed approach; three-axis continuity remains required.
12+
- Restricted SINUMERIK dialect conversion to Full Program mode; batch conversion writes target `.mpf` files.
13+
314
## 1.7.1 - 2026-09-30
415

516
- Added a bilingual prompt to reload the open document after another program changes it on disk. Declining keeps editor changes; accepting reloads the file and warns before discarding unsaved edits.

‎FAQ.md‎

Lines changed: 57 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Easy G-Code Plot FAQ
22

3-
This document is the detailed user and developer reference for Easy G-Code Plot. It reflects the current 1.7.0 tree and explains the GUI, deterministic FANUC execution kernel, Macro B runtime, turning and milling cycles, indexed rotary behavior, diagnostics, CLI, batch analysis and export behavior.
3+
This document is the detailed user and developer reference for Easy G-Code Plot. It reflects the current 1.7.2 tree and explains the GUI, FANUC execution kernel, the supported SINUMERIK ISO-M subset, Macro B runtime, turning and milling cycles, indexed rotary behavior, diagnostics, CLI, batch analysis and export behavior.
44

55
The same FAQ can be packaged for offline use in **Help → FAQ**.
66

@@ -109,7 +109,7 @@ The same FAQ can be packaged for offline use in **Help → FAQ**.
109109
- [Which milling G functions are recognized?](#which-milling-g-functions-are-recognized)
110110
- [Which milling M functions are recognized?](#which-milling-m-functions-are-recognized)
111111
- [What basic milling motion is modeled?](#what-basic-milling-motion-is-modeled)
112-
- [How is indexed rotary milling handled in 1.6.7?](#how-is-indexed-rotary-milling-handled-in-167)
112+
- [How is indexed rotary milling handled?](#how-is-indexed-rotary-milling-handled)
113113
- [Which rotary profiles have been checked?](#which-rotary-profiles-have-been-checked)
114114
- [What happens when indexed geometry cannot be resolved?](#what-happens-when-indexed-geometry-cannot-be-resolved)
115115
- [Which milling canned cycles are modeled?](#which-milling-canned-cycles-are-modeled)
@@ -209,6 +209,10 @@ The same FAQ can be packaged for offline use in **Help → FAQ**.
209209
- [Can comments be removed from export?](#can-comments-be-removed-from-export)
210210
- [Are exports written atomically by the CLI service?](#are-exports-written-atomically-by-the-cli-service)
211211
- [Can CLI export overwrite the source file?](#can-cli-export-overwrite-the-source-file)
212+
- [SINUMERIK 840D input](#sinumerik-840d-input)
213+
- [What SINUMERIK support is included?](#what-sinumerik-support-is-included)
214+
- [How are MPF and SPF files detected?](#how-are-mpf-and-spf-files-detected)
215+
- [Can FANUC milling programs be converted to SINUMERIK?](#can-fanuc-milling-programs-be-converted-to-sinumerik)
212216
- [CLI](#cli)
213217
- [Does the CLI use the same kernel as the GUI?](#does-the-cli-use-the-same-kernel-as-the-gui)
214218
- [Which commands exist?](#which-commands-exist)
@@ -1271,7 +1275,7 @@ The milling kernel supports XYZ rapid, linear and circular/helical motion in the
12711275

12721276
Resolved `TraceMotion` is full 3D geometry even though many CNC constructs are planar.
12731277

1274-
### How is indexed rotary milling handled in 1.6.7?
1278+
### How is indexed rotary milling handled?
12751279

12761280
Select a profile in **Settings → Rotary kinematics** or pass `--kinematics PROFILE_ID` with `--lang fanuc_mill` in the CLI. The GUI selection is stored as `CNC/ROTARY_KINEMATICS`. The profile maps programmed A/B/C addresses to signed rotary axes. G90 assigns an absolute rotary angle; G91 adds an increment. For the checked table profiles, later XYZ motions, resolved arcs and milling cycles are transformed into the fixed WCS display frame, and playback orients the tool preview at the resolved tool-tip point. WCS axes themselves do not rotate.
12771281

@@ -1291,7 +1295,7 @@ If the user profile file is damaged or invalid, the GUI opens with the installed
12911295

12921296
### What happens when indexed geometry cannot be resolved?
12931297

1294-
A changed A/B/C address without a selected profile or an address absent from the selected profile stops milling execution with an explicit diagnostic. Simultaneous rotary/XYZ movement and non-rapid rotary interpolation also stop for the indexed A/B profiles; the checked `4ax_table_c` planar X/C feed contour is the exception. This is the present 1.6.7 implementation, not a general FANUC restriction. A/B/C with an unsupported position-changing G-code also stops execution. Unknown M-codes and G41/G42 that cannot be verified because of missing tool or unsupported contour data produce warnings and let execution continue. G30 is not modeled as G28: its controller-specific second reference point is not inferred from the configured G28 home.
1298+
A changed A/B/C address without a selected profile or an address absent from the selected profile stops milling execution with an explicit diagnostic. Simultaneous rotary/XYZ movement and non-rapid rotary interpolation also stop for the indexed A/B profiles; the checked `4ax_table_c` planar X/C feed contour is the exception. This is the current implementation, not a general FANUC restriction. A/B/C with an unsupported position-changing G-code also stops execution. Unknown M-codes and G41/G42 that cannot be verified because of missing tool or unsupported contour data produce warnings and let execution continue. G30 is not modeled as G28: its controller-specific second reference point is not inferred from the configured G28 home.
12951299

12961300
For `4ax_table_c`, G41/G42 cutter compensation is unsupported. Execution continues, but the X/C plot shows the programmed tool-tip path without cutter-radius offset and reports `UNSUPPORTED_TABLE_C_CUTTER_COMPENSATION`. G40 cancels the modal request. Do not treat this plot as a verified compensated contour.
12971301

@@ -1366,6 +1370,8 @@ For runtime work-offset programming, incremental mode updates the existing selec
13661370

13671371
G68 enables coordinate rotation around the programmed center in the active plane. G69 cancels the rotation.
13681372

1373+
In SINUMERIK ISO-M mode (`G291`), the modeled `G68` subset requires `G90` and has no `I/J/K` vector. `G68` with `G91` angle semantics or with any `I/J/K` 3D rotation vector is recognized but unsupported. `G69` remains supported.
1374+
13691375
The active transform applies to later endpoints and I/J/K arc vectors. Enabling or cancelling the transform does not itself create a motion segment.
13701376

13711377
G68.2 X/Y/Z I/J/K defines a 3+2 tilted working plane with Z-X-Z Euler angles. Select a kinematics profile with two distinct rotary axes first; supported topologies include table-table, head-head and head-table. G53.1 must be the next standalone block: it solves the selected profile's rotary angles to align the physical tool axis with functional +Z. An unreachable orientation stops with a diagnostic. G69 cancels the plane while retaining the indexed rotary position. This model applies only to `fanuc_mill`. Explicit A/B/C addresses during the tilted plane and simultaneous G68 rotation are unsupported. G53 and G28 reference motions use machine coordinates. Expanded NC export is unavailable for these programs; Full Program preserves the source.
@@ -1379,6 +1385,8 @@ Milling G51 supports:
13791385

13801386
G50 cancels milling scaling.
13811387

1388+
For SINUMERIK ISO-M, `G51` uses the modeled 0.001 scale-factor weighting (`P2000` means a factor of 2.0). Machine-specific alternative weighting is not modeled.
1389+
13821390
The scaling center is interpreted as absolute coordinates even under G91, and omitted center axes use the current position.
13831391

13841392
Axis-specific scaling of an arc can turn a circle into non-circular geometry. The kernel reports that unsupported case instead of approximating it as a circle.
@@ -1391,9 +1399,13 @@ Yes. G53 is non-modal machine-coordinate motion. It does not overwrite the activ
13911399

13921400
Yes. The configured reference-return path is resolved through the execution kernel rather than handled only by the GUI. For indexed milling, the intermediate and home targets are resolved on machine axes before their trace points are transformed for display. `G91 G28 Z0` returns the Z axis to the configured home Z.
13931401

1402+
With 4/5-axis table kinematics, G28/G53 use the current table orientation without resetting ABC. For example, with home Z=500 and zero WCS offset, a B-table return targets global Z=500 at B0 and Z=-500 at B180. A Z-only reference segment that crosses the WCS centre plane stops execution with an error; check machine home Z and the WCS offset. This check does not detect collisions with a part model.
1403+
1404+
After G28/G53 in a 4/5-axis program, the next approach can start a separate trace segment in the new table orientation. No connecting line is drawn between those segments. Ordinary three-axis paths remain continuous, including reference returns.
1405+
13941406
### Is continuous five-axis TCP (`G43.4`) supported?
13951407

1396-
For `fanuc_mill`, continuous `G0/G1` tool-center motion with simultaneous linear and rotary axes is supported on the angled AC and BC table profiles. Activating TCP and indexing rotary axes preserve the current physical point in the plotted trace. `G2/G3` rotary TCP motion and combining TCP with `G68.2` are unsupported. This is toolpath interpretation, not a complete machine or collision simulation.
1408+
For `fanuc_mill`, continuous `G0/G1` tool-center motion with simultaneous linear and rotary axes is supported on the angled AC and BC table profiles. Activating TCP preserves the current physical point in the plotted trace. With TCP off, indexing retains programmed XYZ and changes the displayed table frame. `G2/G3` rotary TCP motion and combining TCP with `G68.2` are unsupported. This is toolpath interpretation, not a complete machine or collision simulation.
13971409

13981410
### How are milling arcs programmed?
13991411

@@ -1958,6 +1970,41 @@ No. Source and output must be different paths.
19581970

19591971
---
19601972

1973+
## SINUMERIK 840D input
1974+
1975+
### What SINUMERIK support is included?
1976+
1977+
The application supports a bounded subset of SINUMERIK 840D ISO Dialect M. It routes supported G291 blocks through the milling execution kernel; it is not a native Siemens-language interpreter or a complete 840D controller model. SINUMERIK ISO Dialect T is not supported.
1978+
1979+
In `G291`, common integer milling G codes, unit selection, coordinate systems, selected canned cycles and `G50/G51` are accepted. Extended work offsets use `G54 P1..P48`; source `G54.1` and other decimal G codes are rejected, though `G54 Pn` is normalized internally to the milling kernel's `G54.1 Pn` form. Ordinary `G91` incremental positioning is supported. G68 is limited to a standalone 2D form with `G90` active, only the center axes of the active plane and `R`, and no `I/J/K`; incremental-angle and 3D-vector forms are rejected. `G69` is supported. Macro B flow and unsupported ISO functions stop with diagnostics. `G51` uses the modeled `P/1000` scale weighting; machine-specific alternative weighting is not modeled.
1980+
1981+
`G290` selects native Siemens language. The current application can skip MPF/SPF headers and comments in that mode, but executable native Siemens commands stop with `UNSUPPORTED_SINUMERIK_MODE`. A program must switch to `G291` before ISO-M motion can be analyzed.
1982+
1983+
### How are MPF and SPF files detected?
1984+
1985+
The GUI Open/Save filters include `.mpf` and `.spf`. The CLI and batch scanner include both extensions by default and select the SINUMERIK source dialect when a file contains G290/G291 or recognizable native Siemens syntax. Use `--lang fanuc_mill` for milling analysis; the language option selects the milling geometry model and does not turn on full Siemens support. Mixed folders can still use `--extensions` to control discovery.
1986+
1987+
### Can FANUC milling programs be converted to SINUMERIK?
1988+
1989+
Yes. Set `--lang fanuc_mill` for the milling interpreter and `--target-dialect sinumerik840d` for FANUC-to-SINUMERIK conversion. Conversion is available only with `--mode full`: it preserves every source block and adds a standalone `G291`. Converting an ISO-M `.mpf`/`.spf` to FANUC with `--mode full` removes the standalone `G291`. Only the verified three-axis ISO-M subset is supported. Programs using rotary axes with `4ax_table_a/b/c`, indexed or simultaneous 5-axis motion, TCP (`G43.4`) or tilted working-plane transforms are rejected before writing NC. The converter uses kernel execution facts and the selected kinematics, not inferred command equivalents; it never generates `TRAORI`, `TRAFOOF`, `CYCLE800` or Siemens/ISO switching sequences. Selecting a 4-axis or 5-axis profile blocks SINUMERIK ISO conversion, including XYZ-only programs. Validation runs in the actual target ISO dialect, without a FANUC surrogate. FANUC multi-axis execution and plotting remain supported. SINUMERIK-target conversion is rejected when cutter compensation is unverified. `batch-export` follows the same full-program conversion and writes `.mpf` files for a SINUMERIK target.
1990+
1991+
In the GUI, open **File → Export**, select **MILL FULL PROGRAM**, then choose **FANUC milling** or **SINUMERIK 840D ISO-M (G291)** in **Target CNC**. Sequence numbering, word spacing and Leading Zero are applied to the preserved source blocks, then the formatted program is validated before writing. Start Program Text, End Program Text and Safety Line are also checked in the final output; changes to resolved motion geometry or machine signals prevent export.
1992+
1993+
For example:
1994+
1995+
```powershell
1996+
.\easy_gcode_plot_cli.exe analyze part.mpf --lang fanuc_mill
1997+
.\easy_gcode_plot_cli.exe export fanuc_part.nc --lang fanuc_mill --target-dialect sinumerik840d --mode full -o part.mpf
1998+
.\easy_gcode_plot_cli.exe export part.mpf --lang fanuc_mill --mode full -o part_fanuc.nc
1999+
.\easy_gcode_plot_cli.exe batch-export C:\Fanuc --lang fanuc_mill --target-dialect sinumerik840d --mode full -o C:\Siemens
2000+
```
2001+
2002+
This full-program conversion changes only the standalone dialect switch; it does not translate controller-specific commands or validate machine configuration. It fails if target-dialect analysis reports diagnostics, changes the resolved motion trace or machine signals, or cutter compensation cannot be verified. Review and verify the result on the target control before machining. Expanded Execution remains available for trace export, but it is not the dialect converter.
2003+
2004+
For SINUMERIK input, `export --mode full` removes the standalone `G291` switch to produce a FANUC milling program after target-dialect validation. DXF exports resolved geometry. The converter does not translate FANUC turning or emit arbitrary native Siemens cycles and machine-specific commands; successful analysis is not machine validation.
2005+
2006+
---
2007+
19612008
## CLI
19622009

19632010
### Does the CLI use the same kernel as the GUI?
@@ -2044,6 +2091,8 @@ fanuc_turn
20442091
fanuc_mill
20452092
```
20462093

2094+
There is no separate `sinumerik` `--lang` value. SINUMERIK MPF/SPF input is detected from its extension and source signature, then the milling kernel is selected with `--lang fanuc_mill`.
2095+
20472096
### What are the exit codes?
20482097

20492098
Normal successful/acceptable CLI execution returns zero. Failed/incomplete single execution, batch `ERRORS`, batch `NO_FILES` and export failures return a nonzero code (currently 2 for the command-level error states).
@@ -2108,6 +2157,8 @@ NO_FILES
21082157
.nc
21092158
.cnc
21102159
.ptp
2160+
.mpf
2161+
.spf
21112162
.tap
21122163
.txt
21132164
```
@@ -2309,7 +2360,7 @@ No. Explicit sequence start, increment or spacing requires `--sequence-numbers`.
23092360

23102361
### Are there preset batch-export scripts?
23112362

2312-
The 1.6.7 development tree includes Windows/Linux batch-export presets for milling and turning under the same `scripts/ps1/batch` and `scripts/sh/batch` areas as batch analysis.
2363+
The development tree includes Windows/Linux batch-export presets for milling and turning under the same `scripts/ps1/batch` and `scripts/sh/batch` areas as batch analysis.
23132364

23142365
They are intended to run the built CLI, not to rebuild the application.
23152366

0 commit comments

Comments
 (0)