fix SoftNcRunner GM code normalization.

This commit is contained in:
2026-05-06 13:21:19 +08:00
parent 0fe9497552
commit 2f57932000
1238 changed files with 69405 additions and 22511 deletions
@@ -94,6 +94,14 @@
<h3 id="classes">
Classes
</h3>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.CncBrandDependency.html">CncBrandDependency</a></dt>
<dd><p>Explicit CNC controller brand identifier carried in
<a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_NcDependencyList">NcDependencyList</a>.
Use <code>ncDependencyList.OfType&lt;CncBrandDependency&gt;().FirstOrDefault()</code>
to retrieve the brand.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.ControllerParameterTableBase.html">ControllerParameterTableBase</a></dt>
<dd><p>Base class for brand-specific controller parameter tables.
@@ -111,11 +119,54 @@ and derived convenience properties.</li>
CYCL DEF 247 Q339=N reads from <a class="xref" href="Hi.NcParsers.Dependencys.HeidenhainDatumTable.html#Hi_NcParsers_Dependencys_HeidenhainDatumTable_DatumPresetTable">DatumPresetTable</a>,
CYCL DEF 7 #N reads from <a class="xref" href="Hi.NcParsers.Dependencys.HeidenhainDatumTable.html#Hi_NcParsers_Dependencys_HeidenhainDatumTable_DatumShiftTable">DatumShiftTable</a>.
Each table maps an integer ID (120) to a Vec3d offset.</p>
<p>
On real Heidenhain controllers, preset and datum tables are separate
disk files (e.g. <code>TNC:\table\preset.pr</code>, <code>*.d</code>) — distinct
from MP-prefixed Machine Parameters (held by
<a class="xref" href="Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTable.html">HeidenhainParameterTable</a>). HiNC mirrors that separation
by keeping this dependency independent of <code>HeidenhainParameterTable</code>.
</p>
<p>
Implements <a class="xref" href="Hi.NcParsers.Dependencys.IIsoCoordinateConfig.html">IIsoCoordinateConfig</a> by mapping the ISO/DIN
G54G59 codes to preset rows 16, the conventional Heidenhain
compatibility mapping for ISO/DIN programs running on a Heidenhain.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.IsoCoordinateAddressMap.html">IsoCoordinateAddressMap</a></dt>
<dd><p>Fanuc-style ISO coordinate parameter address mapping.
G54G59 → #5221+ (stride 20, three consecutive numbers per entry for X/Y/Z),
G54.1 P1P48 → #7001+ (stride 20).
Shared between <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html">FanucParameterTable</a> (which calls these
&ldquo;ParamId&rdquo;) and <a class="xref" href="Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.html">SyntecParameterTable</a> (which calls them
&ldquo;PrId&rdquo;) because both follow the same numeric scheme.</p>
</dd>
</dl>
<h3 id="interfaces">
Interfaces
</h3>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.IBlockSkipConfig.html">IBlockSkipConfig</a></dt>
<dd><p>Runtime state of the controller's Block Delete / Block Skip switches.
Present in <a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_NcDependencyList">NcDependencyList</a> exposes this to
the runner so that blocks whose head carries <code>/</code> or <code>/N</code>
(parsed by <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.BlockSkipSyntax.html">BlockSkipSyntax</a> into
<a class="xref" href="Hi.NcParsers.Keywords.BlockSkip.html">BlockSkip</a>) are skipped at semantic time.</p>
<p>
Layers are 1..9; Layer 1 corresponds to the bare <code>/</code> prefix.
Controllers (Fanuc / Syntec / Mazak / Siemens) let each layer be
toggled independently via panel switches or system parameters.
</p>
<p>
When this dependency is absent from
<a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_NcDependencyList">NcDependencyList</a>, no block is skipped
(safest default: simulate the full machining). The syntax still
consumes the <code>/</code> prefix so no <code>UnparsedText--Remaining</code>
diagnostic is produced.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.ICannedCycleConfig.html">ICannedCycleConfig</a></dt>
<dd><p>Canned cycle configuration parameters.
@@ -134,6 +185,22 @@ the default value in those cases.
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.IHomeMcConfig.html">IHomeMcConfig</a></dt>
<dd><p>G28 first reference position (home machine coordinate) per axis.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.IIsoCoordinateConfig.html">IIsoCoordinateConfig</a></dt>
<dd><p>ISO work coordinate offset provider.
Maps a G-code work coordinate id (e.g. &ldquo;G54&rdquo;, &ldquo;G59.2&rdquo;, &ldquo;G54.1P1&rdquo;)
to a machine-coordinate offset Vec3d.</p>
<p>
Implementations include
<a class="xref" href="Hi.NcParsers.Dependencys.Generic.IsoCoordinateTable.html">IsoCoordinateTable</a> (brand-agnostic standalone storage),
<a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html">FanucParameterTable</a> / <a class="xref" href="Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.html">SyntecParameterTable</a>
(parameter-table integration via real Fanuc/Syntec parameter numbers
#5221+ for G54G59 and #7001+ for G54.1 P1P48),
<a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html">SiemensFrameTable</a> (Sinumerik <code>$P_UIFR</code> frames),
and <a class="xref" href="Hi.NcParsers.Dependencys.HeidenhainDatumTable.html">HeidenhainDatumTable</a> (Heidenhain preset rows).
</p>
</dd>
</dl>
<dl class="jumplist">
@@ -146,12 +213,36 @@ Compatible with Fanuc, Siemens, Heidenhain, Mazak, Okuma.</p>
<dt><a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a></dt>
<dd></dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.IPowerResettable.html">IPowerResettable</a></dt>
<dd><p>Marks an <a class="xref" href="Hi.NcParsers.Dependencys.INcDependency.html">INcDependency</a> that holds volatile state which must be cleared
when the controller performs a power reset (power off then on).</p>
<p>
Implementers should clear only the volatile subset they own (e.g. Fanuc common volatile
macro variables <code>#100-#499</code>), and leave persistent state untouched
(e.g. <code>#500-#999</code>, controller parameters).
</p>
<p>
Call-frame local state (Fanuc <code>#1-#33</code>, Heidenhain <code>Q200-Q1199</code>) is NOT in scope —
that lives in the <code>SyntaxPiece</code> JSON dataflow and is bounded by call activation, not power cycle.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.IRapidFeedrateConfig.html">IRapidFeedrateConfig</a></dt>
<dd><p>Provides per-axis rapid traverse feedrate for motion semantics.
Implemented by <a class="xref" href="Hi.NcParsers.Dependencys.ControllerParameterTableBase.html">ControllerParameterTableBase</a> using
brand-specific parameter numbers (e.g., Fanuc #1420, Siemens MD32000,
Heidenhain MP1010).</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.IStrokeLimitConfig.html">IStrokeLimitConfig</a></dt>
<dd><p>Per-axis stroke (travel) limits.
Unit is mm for linear axes, deg for rotary axes.
Implemented by <a class="xref" href="Hi.NcParsers.Dependencys.ControllerParameterTableBase.html">ControllerParameterTableBase</a> using
brand-specific parameter numbers (e.g., Fanuc #1300/#1320,
Siemens MD36100/MD36110, Heidenhain MP420/MP430).</p>
</dd>
</dl>
<dl class="jumplist">