deploy.
This commit is contained in:
@@ -87,7 +87,68 @@
|
||||
<article data-uid="">
|
||||
<h1 id="release-note">Release Note</h1>
|
||||
|
||||
<h2 id="hinc-packages-32">HiNc Packages 3.2</h2>
|
||||
<h2 id="hinc-packages-version-3224">HiNc Packages Version 3.2.24</h2>
|
||||
<p>Correctness and coverage that landed after 3.2.7. The 3.1.175 → 3.2 line jump is the
|
||||
3.2.7 entry below; the long form is still
|
||||
<a href="upgrading-to-3.2/index.html">Upgrading from 3.1.175 to 3.2</a>.</p>
|
||||
<div class="IMPORTANT">
|
||||
<h5>Important</h5>
|
||||
<p><strong>Adoption status.</strong> Verification is still in progress across most areas.</p>
|
||||
<p><strong>Do not put 3.2 NC optimization into production.</strong> It is not finished on this line.
|
||||
Work that depends on optimization should stay on the 3.1 line, serviced as
|
||||
<code>3.1.175.<patch></code>. The Blazor front end tracks the 3.2 packages, so it is not a way
|
||||
to stay on the 3.1 behaviour.</p>
|
||||
<p><strong>Do not put SoftNc canned-cycle indexing with rotary words into production.</strong> SoftNc is
|
||||
the default engine, and its G81–G89 family does not take A / B / C words on a repeat
|
||||
block: a rotary-only repeat does not fire the cycle, a mixed block drops the rotary
|
||||
word, and under G68.2 the hole follows the table. Programs that index a rotary axis that
|
||||
way should run with
|
||||
<a class="xref" href="../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_EnableSoftNcRunner">EnableSoftNcRunner</a> set <code>false</code> — the
|
||||
HardNc fallback indexes those blocks the way a control does. See
|
||||
<a href="upgrading-to-3.2/brand-nc-language-coverage.html#fanuc-and-iso-common">Brand NC language coverage</a>.</p>
|
||||
</div>
|
||||
<ul>
|
||||
<li><strong>Whole-program throughput against the last 3.1 set is 2.5×–18.8×</strong> in steps per
|
||||
second (paired on one 32-logical-processor Linux workstation; the ratio grows with
|
||||
program length and mesh fineness). The six-core ceiling that used to cap the 3.1
|
||||
pipeline is about 6% of that gap. Figures and conditions:
|
||||
<a href="upgrading-to-3.2/performance-and-footprint.html">Performance and footprint</a></li>
|
||||
<li><strong><code>M02</code> / <code>M30</code> / <code>END PGM</code> is a reset edge on SoftNc.</strong> Tool-length compensation
|
||||
(including TCP), tilt, cutter-radius compensation and canned cycles cancel on the <em>next</em>
|
||||
block; the end-of-program block itself still runs under the modal state it executed with.
|
||||
HardNc still carries <code>G43.4</code> across <code>M02</code>. See
|
||||
<a href="upgrading-to-3.2/results-that-change-on-upgrade.html">Results that change on upgrade</a></li>
|
||||
<li><strong>An omitted H is no longer a silent zero</strong> — it takes the equipped tool's offset row
|
||||
first, then warns <code>Comp-ToolHeight--NoToolForOmittedH</code> / <code>--NoToolForOmittedHRtcp</code>. A
|
||||
vacant table row warns <code>Comp-ToolHeight--RowMissing</code></li>
|
||||
<li><strong>Cutter-radius compensation runs in the selected G17 / G18 / G19 plane.</strong> An
|
||||
interference path that used to swap sides silently now reports
|
||||
<code>RadiusComp--Interference</code></li>
|
||||
<li><strong>Siemens <code>ROTS</code> / <code>AROTS</code> are simulated</strong> into the tilt chain in Sinumerik RPY order.
|
||||
<code>SCALE</code> / <code>MIRROR</code> / <code>CROTS</code> remain recognized, not simulated</li>
|
||||
<li><strong>Heidenhain <code>LN</code> vector blocks</strong> resolve into rotary axes through
|
||||
<a class="xref" href="../api/Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainLnOrientationSyntax.html">HeidenhainLnOrientationSyntax</a></li>
|
||||
<li><strong>Fanuc <code>G54.1 Pn</code> (also written <code>G54 Pn</code>) and <code>G59.1</code>–<code>G59.9</code></strong> resolve additional work
|
||||
offsets. A selected row nobody has entered reports <code>Coord-WorkOffset--AdditionalZero</code></li>
|
||||
<li><strong>Runner feedrate members rename to <code>CommandedClFeedrate_mmds</code>.</strong> Physics follows the
|
||||
equipped tool's tip via
|
||||
<a class="xref" href="../api/Hi.MachiningSteps.MachineMotionStep.html#Hi_MachiningSteps_MachineMotionStep_ActualTipFeedrate_mmds">ActualTipFeedrate_mmds</a>. A project-level
|
||||
<a class="xref" href="../api/Hi.NcParsers.Dependencys.Generic.RadiusOffsetBasis.html">RadiusOffsetBasis</a> decides what a tool-house
|
||||
refresh writes into the D column — see
|
||||
<a href="../anatomy/general-setup/controller/program-data/tool-offsets.html#the-radius-basis">Tool Offsets</a></li>
|
||||
<li><strong><code>GetMillingEquipment</code> → <code>GetMachiningEquipment</code>.</strong> <code>CodeXyzabcMachineTool</code> is absorbed
|
||||
into <a class="xref" href="../api/Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html">GeneralXyzabcMachineTool</a> (the old XML name still loads). The
|
||||
equipment splits into authored
|
||||
<a class="xref" href="../api/Hi.Machining.MachiningEquipmentUtils.SetupEquipment.html">SetupEquipment</a> and runtime
|
||||
<a class="xref" href="../api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html">MachiningEquipment</a></li>
|
||||
<li><strong>Close joins the <a class="xref" href="../api/Hi.MachiningProcs.ProjectFileBusyException.html">ProjectFileBusyException</a> gate.</strong>
|
||||
<a class="xref" href="../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_LoadProject_">LoadProject</a> and
|
||||
<a class="xref" href="../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_ReloadProject_">ReloadProject</a> take a message sink for
|
||||
load-time diagnostics</li>
|
||||
<li><strong><a class="xref" href="../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_OmitLeadingZero">OmitLeadingZero</a></strong> is an output style the project can pin
|
||||
(<code>.5</code> vs <code>0.5</code>)</li>
|
||||
</ul>
|
||||
<h2 id="hinc-packages-version-327">HiNc Packages Version 3.2.7</h2>
|
||||
<h3 id="at-a-glance">At a glance</h3>
|
||||
<p>3.2 is largely one piece of work: the NC interpreter that reads a controller program is now composed
|
||||
from configurable parts rather than written into one class, and most of this release is the brand
|
||||
@@ -152,7 +213,7 @@ depends on optimization should stay on the 3.1 line, which is serviced as <code>
|
||||
Blazor front end tracks the 3.2 packages, so it is not a way to stay on the 3.1 behaviour.</p>
|
||||
</div>
|
||||
<h3 id="what-changed">What changed</h3>
|
||||
<p><strong>This one entry covers everything since 3.1.175.</strong> The 3.1 line is closed at the 3.1.175 package
|
||||
<p><strong>This 3.2.7 entry covers everything since 3.1.175.</strong> The 3.1 line is closed at the 3.1.175 package
|
||||
set and is serviced only as <code>3.1.175.<patch></code>; <code>master</code> moved all ten packages onto the <strong>3.2</strong> line
|
||||
on 2026-08-24 and restarted their build counters. So a 3.2 build number starts low, the two
|
||||
counters are not comparable, and the gap between the last 3.1 number a feed served and the first
|
||||
|
||||
+36
-8
@@ -107,11 +107,13 @@ data, <code>DEF REAL/INT</code> declarations lower into assignments, and <code>$
|
||||
to <a class="xref" href="../../api/Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html">SiemensFrameTable</a>. Any other <code>$</code>-variable is recorded
|
||||
with an unsupported note rather than dropped.</li>
|
||||
<li><strong>Five axis</strong> — <a class="xref" href="../../api/Hi.NcParsers.LogicSyntaxs.Siemens.SiemensProgrammableFrameSyntax.html">SiemensProgrammableFrameSyntax</a> simulates
|
||||
<code>TRANS</code> / <code>ATRANS</code> / <code>ROT</code> / <code>AROT</code> (with <code>RPL=</code>) into the tilt-transform chain in Sinumerik RPY
|
||||
order; <a class="xref" href="../../api/Hi.NcParsers.LogicSyntaxs.Siemens.SiemensTraoriSyntax.html">SiemensTraoriSyntax</a> makes <code>TRAORI</code> a real RTCP mode,
|
||||
the sibling of ISO G43.4, with <code>TRAFOOF</code> handing the offset back;
|
||||
<code>TRANS</code> / <code>ATRANS</code> / <code>ROT</code> / <code>AROT</code> (with <code>RPL=</code>) and the solid-angle forms <code>ROTS</code> / <code>AROTS</code> into the
|
||||
tilt-transform chain in Sinumerik RPY order (<code>ROTS</code> / <code>AROTS</code> behave as <code>ROT</code> / <code>AROT</code>: at most two
|
||||
angles, first-named axis first); <a class="xref" href="../../api/Hi.NcParsers.LogicSyntaxs.Siemens.SiemensTraoriSyntax.html">SiemensTraoriSyntax</a> makes
|
||||
<code>TRAORI</code> a real RTCP mode, the sibling of ISO G43.4, with <code>TRAFOOF</code> handing the offset back;
|
||||
<a class="xref" href="../../api/Hi.NcParsers.LogicSyntaxs.Siemens.SiemensCycle800TiltSyntax.html">SiemensCycle800TiltSyntax</a> decodes <code>CYCLE800</code>'s MODE bits for
|
||||
all four swivel modes. <code>ROTS</code> / <code>SCALE</code> / <code>MIRROR</code> are recognized and reported, not simulated.</li>
|
||||
all four swivel modes. <code>SCALE</code> / <code>MIRROR</code> / <code>CROTS</code> are recognized and reported
|
||||
(<code>SiemensFrame--Unsupported</code>), not simulated.</li>
|
||||
<li><strong>Calls</strong> — L-prefixed and named subprogram calls resolve against
|
||||
<a class="xref" href="../../api/Hi.NcParsers.Dependencys.Generic.SubProgramFolderConfig.html">SubProgramFolderConfig</a> (<code>{name}.SPF</code>, then <code>.MPF</code>, then the
|
||||
bare name) and inline with their <code>P</code> repetition count; <code>M17</code> / <code>RET</code> pop a frame; <code>REPEAT</code> re-runs a
|
||||
@@ -155,9 +157,13 @@ and <code>DL</code>. Datum handling follows TNC semantics: <code>CYCL DEF 247</c
|
||||
<em>additive</em> shift on top of it, composing as separate transform-chain entries instead of replacing
|
||||
each other, resolved against <a class="xref" href="../../api/Hi.NcParsers.Dependencys.HeidenhainDatumTable.html">HeidenhainDatumTable</a>. Arcs (<code>CC</code> pole
|
||||
plus <code>C</code> statement, <code>DR-</code> = CW, closed arc = full circle), <code>RL</code> / <code>RR</code> / <code>R0</code> radius compensation,
|
||||
the <code>M126</code> / <code>M127</code> rotary-wrap state, <code>M140 MB</code> retract, and <code>CYCL DEF 32 TOLERANCE</code>. A <code>C</code> block
|
||||
never states its own centre: each in-plane component comes from the <code>CC</code> block's own axis word,
|
||||
else from the previous <code>CC</code> section's same axis, else from the arc's own start point. A bare <code>CC</code>
|
||||
the <code>M126</code> / <code>M127</code> rotary-wrap state, <code>M140 MB</code> retract, and <code>CYCL DEF 32 TOLERANCE</code>.
|
||||
<a class="xref" href="../../api/Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainLnOrientationSyntax.html">HeidenhainLnOrientationSyntax</a> resolves an <code>LN</code> vector
|
||||
block into rotary axes through the same RTCP machinery the rotary-word programs use: <code>T</code> present
|
||||
plus <code>M128</code> / <code>FUNCTION TCPM</code> keeps the tool on T; <code>T</code> absent plus RTCP holds the tool on the
|
||||
surface normal N; RTCP inactive ignores T (<code>Orientation-Vector--IgnoredNoTcpm</code>), as the control
|
||||
does. A <code>C</code> block never states its own centre: each in-plane component comes from the <code>CC</code> block's
|
||||
own axis word, else from the previous <code>CC</code> section's same axis, else from the arc's own start point. A bare <code>CC</code>
|
||||
is the one spelling that states all of them at once — it takes the last programmed position, read
|
||||
at the <code>CC</code> block, and replaces the modal centre rather than inheriting it. A centre that lands on
|
||||
the arc's own start point leaves the block with no radius, so it warns
|
||||
@@ -204,7 +210,9 @@ fabricated value. <strong>FN 9–12 conditional jumps execute</strong>, with a (
|
||||
<code>STAY</code> / <code>MOVE</code> / <code>TURN</code> positioning; VECTOR structurally captured; EULER / POINTS / RELATIV /
|
||||
AXIAL / PROJECTED consumed and warned with the previous tilt retained, so a <code>PLANE AXIAL B+45</code> B
|
||||
word can never be mistaken for a rotary axis command), <code>FUNCTION TCPM</code>, and real <code>M128</code> / <code>M129</code>
|
||||
tool-centre-point control.</li>
|
||||
tool-centre-point control. A centre-referenced <code>FUNCTION TCPM REFPNT</code> (<code>TIP-CENTER</code> /
|
||||
<code>CENTER-CENTER</code>) is recorded and reported (<code>Orientation-RefPoint--CntNotSimulated</code>) rather than
|
||||
silently read as TIP-TIP.</li>
|
||||
<li><strong>Cycles and calls</strong> — <code>CYCL DEF 2xx</code> bodies with their Q parameters mirrored into the block
|
||||
assignments, cycles 200 / 232 / 251 / 252 / 253 mapped onto the shared G81 / G82 / G83 slots,
|
||||
<code>CYCL CALL</code> / <code>CYCL CALL POS</code> / <code>M99</code> / <code>M89</code> splitting call-once from modal firing, <code>CALL LBL</code>
|
||||
@@ -241,6 +249,20 @@ codes before the mode syntaxes consume them.</li>
|
||||
<code>WHILE[..]DO m / END m</code> with a bounded-loop watchdog, and position and tool-offset system variables.
|
||||
<code>M98 P_ L_</code>, <code>M198</code> external call, <code>M99</code> return and <code>M99 P{seq}</code> early return; <code>G65</code> one-shot macro
|
||||
call with A–Z → <code>#1</code>–<code>#26</code> argument binding, and <code>G66</code> / <code>G67</code> modal macro.</li>
|
||||
<li><strong>Additional work coordinate systems</strong> — <code>G54.1 Pn</code>, also written <code>G54 Pn</code>, resolves against the
|
||||
extended table (P1–P48). A selected row nobody has entered reports <code>Coord-WorkOffset--AdditionalZero</code>.
|
||||
<code>G59.1</code>–<code>G59.9</code> have a provider on the Fanuc, Mazak and Syntec presets. See
|
||||
<a href="../../anatomy/general-setup/controller/program-data/work-coordinates.html">Work Coordinates</a> and
|
||||
<a href="../../technique/nc-dialects/controller-iso.html">ISO core</a>.</li>
|
||||
<li><strong>Fanuc / Syntec unit codes and G05.</strong> <code>G71</code> is the metric spelling of <code>G21</code>; <code>G70</code> is the inch
|
||||
spelling of <code>G20</code> and reports <code>Unit--InchNotSupported</code> rather than silently switching units.
|
||||
<code>G05.1 Q1</code> / <code>Q0</code> is AICC / Nano Smoothing (recognized). Bare <code>G05 P{n}</code> is a different feature
|
||||
(HPCC) and is consumed without changing programmed coordinates, reported under the <code>Hpcc--*</code> ids.</li>
|
||||
<li><strong>Canned-cycle repeats do not take rotary words on SoftNc.</strong> The G73–G89 family expands XYZ / R /
|
||||
Q / F / P / K strokes. An A / B / C word on a repeat is not taken: a rotary-only repeat does not
|
||||
fire the cycle, a mixed block drops the rotary word, and under G68.2 the hole follows the table.
|
||||
<em>Not finished on this line, see Adoption status on the <a href="../index.html">release-note page</a>.</em> The
|
||||
HardNc fallback indexes those blocks the way a control does.</li>
|
||||
</ul>
|
||||
<h2 id="cross-brand">Cross-brand</h2>
|
||||
<ul>
|
||||
@@ -304,6 +326,12 @@ re-read the host file by that path — the existence check always failed, so loo
|
||||
without looping. <code>RunNc</code> now registers the raw lines on
|
||||
<a class="xref" href="../../api/Hi.NcParsers.Dependencys.SystemWired.NcLineSourceDependency.html">NcLineSourceDependency</a> and
|
||||
<a class="xref" href="../../api/Hi.NcParsers.EvaluationSyntaxs.LabelScanUtil.html">LabelScanUtil</a> reads memory first, disk second.</li>
|
||||
<li><strong><code>M02</code> / <code>M30</code> / <code>END PGM</code> is a reset edge.</strong> SoftNc models program-end as the edge <em>between</em> that
|
||||
block and the next, so a concatenated multi-program file does not keep TCP, tilt, CRC or a canned
|
||||
cycle alive into the next program. Each modal owner writes an explicit cancel section on the
|
||||
successor (G49 / G69 / G40 / G80); the end-of-program block itself still runs under the modal state
|
||||
it executed with. HardNc still carries G43.4 across <code>M02</code> — see
|
||||
<a href="results-that-change-on-upgrade.html">Results that change on upgrade</a>.</li>
|
||||
</ul>
|
||||
|
||||
</article>
|
||||
|
||||
@@ -225,6 +225,14 @@ everything else falls back to brand G-code, so an exotic brand extension can nev
|
||||
<td><code>StateActRunner.Feedrate_mmds</code> / <code>Feedrate_mmdmin</code>, <code>ActFeedrate.Feedrate_mmds</code> / <code>Feedrate_mmdmin</code> (and <code>ActRapid</code>), <code>MachineMotionStep.Feedrate_mmds</code>, the <code>MachineMotionStep</code> constructor's <code>feedrate_mmds</code> parameter</td>
|
||||
<td><a class="xref" href="../../api/Hi.Numerical.Acts.StateActRunner.html#Hi_Numerical_Acts_StateActRunner_CommandedClFeedrate_mmds">CommandedClFeedrate_mmds</a> / <a class="xref" href="../../api/Hi.Numerical.Acts.StateActRunner.html#Hi_Numerical_Acts_StateActRunner_CommandedClFeedrate_mmdmin">CommandedClFeedrate_mmdmin</a>, <a class="xref" href="../../api/Hi.Numerical.Acts.ActFeedrate.html#Hi_Numerical_Acts_ActFeedrate_CommandedClFeedrate_mmds">CommandedClFeedrate_mmds</a> / <a class="xref" href="../../api/Hi.Numerical.Acts.ActFeedrate.html#Hi_Numerical_Acts_ActFeedrate_CommandedClFeedrate_mmdmin">CommandedClFeedrate_mmdmin</a>, <a class="xref" href="../../api/Hi.MachiningSteps.MachineMotionStep.html#Hi_MachiningSteps_MachineMotionStep_CommandedClFeedrate_mmds">CommandedClFeedrate_mmds</a>, <code>commandedClFeedrate_mmds</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>GetMillingEquipment</code></td>
|
||||
<td><a class="xref" href="../../api/Hi.Machining.MachiningEquipmentUtils.IGetMachiningEquipment.html#Hi_Machining_MachiningEquipmentUtils_IGetMachiningEquipment_GetMachiningEquipment_">GetMachiningEquipment</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>CodeXyzabcMachineTool</code> / <code>CodeXyzabcMachineToolUri</code></td>
|
||||
<td><a class="xref" href="../../api/Hi.NcMech.Xyzabc.GeneralXyzabcMachineTool.html">GeneralXyzabcMachineTool</a> (the old XML names still load)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>Four notes on that table.</p>
|
||||
@@ -371,6 +379,13 @@ updated in lockstep.</li>
|
||||
It is a public <code>const</code>, so an assembly compiled against 3.1.175 already carries the old literal and
|
||||
keeps passing it — <code>Init</code> still accepts it — but a rebuild changes what it passes, and no font file
|
||||
is extracted to the working directory any more.</li>
|
||||
<li>The equipment splits into two faces. <a class="xref" href="../../api/Hi.Machining.MachiningEquipmentUtils.SetupEquipment.html">SetupEquipment</a> is
|
||||
the authored one — the only face a project file persists, reached as
|
||||
<a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_SetupEquipment">SetupEquipment</a>.
|
||||
<a class="xref" href="../../api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html">MachiningEquipment</a> is the runtime face the runner,
|
||||
physics, collision and execution display read; it is rebuilt from the authored face at project
|
||||
assignment and at session boundaries, so a value written onto it is discarded rather than saved.
|
||||
See <a href="../../technique/api-foundations/getting-started.html">Getting started</a>.</li>
|
||||
</ul>
|
||||
<h2 id="8-defaults-and-gates-that-changed">8. Defaults and gates that changed</h2>
|
||||
<ul>
|
||||
@@ -393,6 +408,13 @@ and scripts are skipped with <code>Script--NotLicensed</code>. An unlicensed ins
|
||||
<em>different simulation</em>, not an error. Calling the public API from your own application or session
|
||||
script needs no extra licence; composing the interpretation pipeline does. See
|
||||
<a class="xref" href="../../technique/nc-dialects/nc-parsing.html">NC Parsing Engine</a>.</li>
|
||||
<li><strong><a class="xref" href="../../api/Hi.MachiningProcs.MachiningActRunnerConfig.html#Hi_MachiningProcs_MachiningActRunnerConfig_RadiusOffsetBasis">RadiusOffsetBasis</a></strong> decides what a tool-house
|
||||
refresh writes into the D column:
|
||||
<a class="xref" href="../../api/Hi.NcParsers.Dependencys.Generic.RadiusOffsetBasis.html#Hi_NcParsers_Dependencys_Generic_RadiusOffsetBasis_CutterRadius">CutterRadius</a> (default — geometry plus wear,
|
||||
the only behaviour before the basis existed) or
|
||||
<a class="xref" href="../../api/Hi.NcParsers.Dependencys.Generic.RadiusOffsetBasis.html#Hi_NcParsers_Dependencys_Generic_RadiusOffsetBasis_ZeroBased">ZeroBased</a> (wear only, for a tool-centre
|
||||
CAM path). An older project refreshes exactly as before until the basis is changed. See
|
||||
<a href="../../anatomy/general-setup/controller/program-data/tool-offsets.html#the-radius-basis">Tool Offsets</a>.</li>
|
||||
<li>The four <code>SnapshotSyntax</code> entries in the Fanuc preset default to <code>IsEnabled = false</code>, so projects
|
||||
stop serializing enabled debug snapshots. A project saved by an earlier build keeps what it
|
||||
serialized until its pipeline list is refreshed from the current preset.</li>
|
||||
|
||||
@@ -87,7 +87,8 @@
|
||||
<article data-uid="Release-Upgrading-To-3.2">
|
||||
<h1 id="upgrading-from-31175-to-32">Upgrading from 3.1.175 to 3.2</h1>
|
||||
|
||||
<p>These pages are the long form of the <a href="../index.html">3.2 release-note entry</a>. They exist because 3.2 is not
|
||||
<p>These pages are the long form of the 3.1.175 → 3.2 line — the 3.2.7 entry and the
|
||||
<a href="../index.html">3.2.24</a> incremental drop. They exist because 3.2 is not
|
||||
an increment on the last release most callers hold — it is the accumulation of everything that
|
||||
landed after the 3.1.175 package set, delivered in one step.</p>
|
||||
<p>Read them in order the first time. The two sections that decide whether an upgrade is a recompile or
|
||||
@@ -98,8 +99,9 @@ capability you can adopt when you need it.</p>
|
||||
<h5>Important</h5>
|
||||
<p>Read the <strong>Adoption status</strong> note on the <a href="../index.html">release-note page</a> before planning around this.
|
||||
The short version: 3.2 is published for review, verification is still in progress across most
|
||||
areas, and <strong>NC optimization is not finished on this line</strong> — work that depends on it should stay
|
||||
on 3.1, serviced as <code>3.1.175.<patch></code>.</p>
|
||||
areas, <strong>NC optimization is not finished on this line</strong>, and <strong>SoftNc canned-cycle indexing
|
||||
with rotary A/B/C words is not finished</strong> — work that depends on either should stay on 3.1,
|
||||
serviced as <code>3.1.175.<patch></code>, or run with SoftNc off for the rotary-cycle case.</p>
|
||||
</div>
|
||||
<h2 id="pages">Pages</h2>
|
||||
<p>Ordered the way to read them: what the package numbers mean, then the two sections that decide whether the upgrade is a recompile or an afternoon, then the new capability, adopted when needed.</p>
|
||||
|
||||
+5
@@ -142,6 +142,11 @@ fourth — an alarm on controllers strict about their least input increment. Dig
|
||||
scanned per word family over the played source texts with comment spans masked, floored at 3/3/0 and
|
||||
capped at 9, and threaded through the whole write path. The word-suppression tolerances and the F
|
||||
comparison grid derive from the resolved digits instead of the old fixed literals.</li>
|
||||
<li><strong>Leading zeros follow the source, and the project can pin the spelling.</strong>
|
||||
<a class="xref" href="../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_OmitLeadingZero">OmitLeadingZero</a> is an output style: on, the writer drops a leading
|
||||
zero before the decimal (<code>.5</code> rather than <code>0.5</code>); off, it writes the zero. The option is carried on
|
||||
the project so two machines produce the same bytes, and a report names which style the source
|
||||
itself used.</li>
|
||||
<li><strong>Optimized NC is written back in the source file's encoding.</strong> NC play reads and optimized writes go
|
||||
through <a class="xref" href="../../api/Hi.Common.FileLines.FileUtil.html#Hi_Common_FileLines_FileUtil_DetectRoundTripEncoding_">DetectRoundTripEncoding</a> — BOM, then strict UTF-8, then
|
||||
Latin-1 — so an ANSI-family file (GBK, Big5, Shift-JIS) re-encodes to its original bytes instead of
|
||||
|
||||
@@ -134,6 +134,22 @@ they are the fastest way to find out what a run actually did.</p>
|
||||
<td>a G43.4 H word could not be resolved</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>Comp-ToolHeight--NoToolForOmittedH</code> / <code>--NoToolForOmittedHRtcp</code></td>
|
||||
<td>a G43 / G43.4 with no H, no equipped tool number and no non-zero modal offset id</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>Comp-ToolHeight--RowMissing</code></td>
|
||||
<td>the resolved offset id has no table row</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>Comp-ToolHeight--RtcpOutlivesToolChange</code></td>
|
||||
<td>a tool change left <code>G43.4 Hm</code> alive for a different tool; the new tool keeps the previous tool's length</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>StrokeLimit--Unconfigured</code></td>
|
||||
<td>stroke-limit checking is on but the chain's linear axes carry no travel limit; once per session at BeginSession</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>RadiusComp--Interference</code></td>
|
||||
<td>a G41/G42 block whose compensated path runs against the programmed direction (an inner arc or groove smaller than the offset radius); a real control stops there with an interference alarm (Fanuc PS0041) while the simulation continues on the swapped-side path — on a tool-centre CAM path the radius offset row (D row) must hold the wear only, not the tool radius</td>
|
||||
</tr>
|
||||
@@ -210,6 +226,22 @@ they are the fastest way to find out what a run actually did.</p>
|
||||
<td>the construct is recognized and consumed safely, but not simulated</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>HeidenhainCyclCall--IncrementalNoReference</code> / <code>--IncrementalAfterMove</code></td>
|
||||
<td>a klartext <code>CYCL CALL POS</code> <code>I</code>-prefixed word has no previous call to measure from, or the tool moved between the two calls</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>Orientation-RefPoint--CntNotSimulated</code></td>
|
||||
<td><code>FUNCTION TCPM REFPNT</code> with a centre-referenced tool point is not simulated — coordinates are read as TIP-TIP</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>Orientation-Vector--IgnoredNoTcpm</code></td>
|
||||
<td>an <code>LN</code> tool vector arrived with RTCP inactive and was ignored, as the control ignores it</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>Hpcc--NoOp</code> / <code>--HighSpeedCycleIgnored</code> / <code>--UnsupportedFunction</code> / <code>--UnevaluatedFunction</code> / <code>--MissingFunctionWord</code></td>
|
||||
<td>a bare <code>G05 P</code> HPCC selection; the programmed coordinates are unchanged, except <code>P10001</code>–<code>P10999</code> which is real machining the simulation cannot see</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>DeclaredMCode--UnmodeledEffects</code></td>
|
||||
<td>a machine-declared OEM M-code occurred; no effects are simulated for it</td>
|
||||
</tr>
|
||||
|
||||
+22
-5
@@ -91,6 +91,23 @@
|
||||
correctness that is said too. Read the ratios rather than the absolute times: several campaigns were
|
||||
run on Debug builds or on small machines, deliberately, because a paired A/B on one machine answers
|
||||
“did this get faster” far more reliably than an unpaired Release number on a fast one.</p>
|
||||
<h2 id="against-the-last-31-set">Against the last 3.1 set</h2>
|
||||
<p>Paired on one 32-logical-processor Linux workstation, deployed stacks, <strong>whole</strong> NC programs, steps per
|
||||
second. The 3.1 side is HardNc (the 3.1 default); the 3.2 side is SoftNc (the 3.2 default). Throughput
|
||||
on this line is <strong>2.5×–18.8×</strong>; the ratio grows with program length and mesh fineness. Memory is mixed:
|
||||
a cutting-dominated long program peaked higher on 3.2, a large-surface short-NC job peaked lower.</p>
|
||||
<p>The six-core ceiling that used to cap the 3.1 pipeline is <strong>not</strong> where that gap comes from. On the
|
||||
same workstation, pinning 3.2's worker counts to the products of that ceiling moved a ~193,000-step
|
||||
play from 15.0 s to 15.9 s (+6%); at six available cores the version advantage is still 2.8×–3.8×,
|
||||
and at two cores 2.73×. 3.1 saturates from eight cores; 3.2 from twelve. On that fixture, 3.1 allocated
|
||||
6–8× more managed memory, and the 3.1 allocation climbed as the mesh got finer while 3.2 stayed
|
||||
almost flat.</p>
|
||||
<blockquote>
|
||||
<p><strong>Conditions.</strong> Deployed x64 stacks, one machine, whole programs, steps/s (not wall-clock — a
|
||||
defect that inflated 3.2 step counts on an earlier drop is fixed on this line). Core-count figures
|
||||
used <code>DOTNET_PROCESSOR_COUNT</code> plus CPU affinity, so they are “restricted cores on a large machine”,
|
||||
not a small one: memory bandwidth and cache stay those of the 32-LP host.</p>
|
||||
</blockquote>
|
||||
<h2 id="milling-physics-in-the-native-kernel">Milling physics in the native kernel</h2>
|
||||
<p>The per-step physics moved into <code>core.dll</code> in stages — engagement scan conversion, the force kernel,
|
||||
then the sequential temperature and wear chain. Measured as a same-day paired A/B, managed leg
|
||||
@@ -166,11 +183,11 @@ parallel physics stage is about 3.3% of wall time</strong>, while the <strong>si
|
||||
about 77%</strong> — and that subtraction is single-worker as a correctness requirement, not as an
|
||||
oversight. Raising the force-worker count therefore buys nothing on any machine; the bottleneck
|
||||
moved rather than disappearing.</p>
|
||||
<p>What did change in the worker derivation is narrower than it sounds. An unmeasured six-core ceiling
|
||||
was removed, but it only ever governed the sweep workers, and only machines with <strong>nine or more
|
||||
logical processors</strong> see a different count; force workers are unchanged everywhere. The throughput
|
||||
benefit on such a machine has <strong>not</strong> been measured — the development machines are smaller — so this
|
||||
is a ceiling removal, not a claimed speedup.</p>
|
||||
<p>What did change in the worker derivation is narrower than it sounds. The six-core ceiling
|
||||
was removed, and on a 32-logical-processor machine that is about <strong>6%</strong> of the 3.1→3.2 wall-time gap
|
||||
measured above — force workers are unchanged everywhere, and the sweep-worker count only differs on
|
||||
machines with <strong>nine or more</strong> logical processors. The rest of the gap is allocation and the rest of
|
||||
the pipeline, not the extra cores.</p>
|
||||
<p>Queue depths became fixed item budgets (120 geometry, 3840 physics) rather than scaling with the core
|
||||
count, because those queues bound per-item memory: uncapped, a 64-core machine would have been handed
|
||||
40,960-deep physics queues. On machines with fewer than six cores this is a small <em>increase</em> in
|
||||
|
||||
+36
-6
@@ -114,8 +114,29 @@ pieces now carry the positioning section forward like every other modal syntax.<
|
||||
program machined one tool length low. The read point now falls back to the generic tool-number-keyed
|
||||
height and emits <code>SiemensToolOffset--TcdpRowMissing</code>.</li>
|
||||
<li><strong>G43.4 with an unresolvable H word activated RTCP with a zero-length tool.</strong> It now reports
|
||||
<code>Comp-ToolHeight--001</code> as a warning and keeps processing the block. An absent H stays silent —
|
||||
re-activating G43.4 on the modal offset id is legitimate input.</li>
|
||||
<code>Comp-ToolHeight--001</code> as a warning and keeps processing the block. An omitted H is no longer a
|
||||
silent zero: it takes the equipped tool's own offset row first (HardNc parity), then a non-zero
|
||||
modal id, and only then warns <code>Comp-ToolHeight--NoToolForOmittedH</code> (plain G43) or
|
||||
<code>Comp-ToolHeight--NoToolForOmittedHRtcp</code> (G43.4). A vacant table row warns
|
||||
<code>Comp-ToolHeight--RowMissing</code> instead of compensating a zero length.</li>
|
||||
<li><strong><code>G43.4</code> survived <code>M02</code> / <code>M30</code> and a rotary-only <code>G53</code> still coupled through RTCP.</strong> A sequence
|
||||
that ended one program with <code>M02</code> and started the next with a rotary rapid — without a <code>G49</code> —
|
||||
kept tool-centre-point control on, pinned the tip, and dragged machine XYZ through the stock. On
|
||||
SoftNc the program-end block is a <strong>reset edge</strong>: tool-length compensation (G43 / G44 / G43.4,
|
||||
Siemens <code>TRAORI</code>, Heidenhain <code>M128</code>), tilt (G68 / G68.2 / CYCLE800 / <code>PLANE</code> / TRANS), G41/G42 and
|
||||
G81–G89 cancel on the <em>next</em> block, written as explicit cancel sections so modal carry cannot copy
|
||||
the previous state. The <code>M02</code> block itself still runs under the modal state it executed with, so a
|
||||
retract on the same line as <code>M30</code> still carries tool length. A rotary-only <code>G53</code> under active
|
||||
RTCP now holds the linear axes at the previous machine position and stays McLinear, which is what
|
||||
G53 does on a control (no compensation). <strong>HardNc still carries G43.4 across <code>M02</code></strong> — the two
|
||||
engines are deliberately divergent on that edge; 3.2's default is SoftNc. A tool change that
|
||||
leaves <code>G43.4 Hm</code> alive for a different tool warns
|
||||
<code>Comp-ToolHeight--RtcpOutlivesToolChange</code> on the change block.</li>
|
||||
<li><strong>Fanuc <code>G54.1 Pn</code> (also written <code>G54 Pn</code>) was not resolved.</strong> Additional work coordinate systems
|
||||
now resolve against the extended table; a selected row nobody has entered reports
|
||||
<code>Coord-WorkOffset--AdditionalZero</code> and runs on the machine origin. <code>G59.1</code>–<code>G59.9</code> have a
|
||||
provider on the ISO presets. See
|
||||
<a href="../../anatomy/general-setup/controller/program-data/work-coordinates.html">Work Coordinates</a>.</li>
|
||||
<li><strong>Heidenhain DIN/ISO arc centres.</strong> <code>I</code> / <code>J</code> / <code>K</code> are <strong>absolute</strong> circle centres on Heidenhain —
|
||||
the ISO face of the klartext <code>CC</code> pole — not start-to-centre offsets. Reading them incrementally
|
||||
turned arcs into near-full phantom circles. Fixed in all three engines: the HardNc reader
|
||||
@@ -132,10 +153,19 @@ to the workpiece over the step duration. On XYZ moves, CL files and RTCP with th
|
||||
offset the two agree (the recomputation moves forces by at most about 1e-4 relative, from the
|
||||
<code>TimeSpan</code>-quantised step duration); they part under RTCP with a tool-length offset that does not
|
||||
describe the equipped tool, on rotary-axis-limited simultaneous five-axis blocks (the tip is slower
|
||||
than F, up to a few percent), and wherever the commanded value was stale. One such stale case is
|
||||
fixed alongside: a feed block that repeats the current position (<code>X.. Y.. Z.. F1600.</code> right after
|
||||
the same point at <code>F800.</code>) lost its F word, so every following block showed and cut at the old
|
||||
feed; its <code>ActFeedrate</code> now lands.</li>
|
||||
than F, up to a few percent), and wherever the commanded value was stale.</li>
|
||||
<li><strong>A feed block that does not move lost its F word.</strong> A block that repeats the current position
|
||||
(<code>X.. Y.. Z.. F1600.</code> right after the same point at <code>F800.</code>, a common CAM habit) returned on
|
||||
zero distance before emitting anything, so every following block showed and cut at the old
|
||||
feed. Its <code>ActFeedrate</code> now lands on a zero-length linear, arc or polar block alike. The same
|
||||
stale commanded value is one of the cases the tip-feedrate split above parts on.</li>
|
||||
<li><strong>A rotary-bearing act mixed tip travel with the commanded CL feed resolution.</strong> On a pure RTCP
|
||||
rapid swing the CL point stands still, the commanded feed is ~0, and dividing the equipped tool's
|
||||
tip sweep by that resolution saturated the step count (the play appeared to hang on one line). A
|
||||
rotary-bearing act now splits by posture change (each rotary-axis delta over the rotary
|
||||
resolution) and by spindle cycles when the spindle turns — never by tip travel over the CL-feed
|
||||
resolution. Step counts of existing five-axis projects therefore shift on non-RTCP rotary
|
||||
blocks; XYZ-only programs are unaffected.</li>
|
||||
<li><strong>A <code>K0</code> word on a HardNc G02/G03 saturated the turn count.</strong> Under the default G17 plane a
|
||||
written-but-zero plane-normal word divided the axial travel by zero, the additional-turn count
|
||||
saturated to <code>int.MaxValue</code>, and one arc block became a spiral act of roughly 302 simulated years —
|
||||
|
||||
+10
-2
@@ -169,8 +169,16 @@ converting after a switch to a CL device; and
|
||||
<a class="xref" href="../../api/Hi.NcMech.Workpieces.WorkpieceService.html#Hi_NcMech_Workpieces_WorkpieceService_ClearIdealGeomCache_">ClearIdealGeomCache</a>, so loading another project stops
|
||||
rendering the previous project's target geometry.</li>
|
||||
<li><strong>Project-file operations are serialized through a zero-wait gate.</strong> A New / Load / Save / Reload
|
||||
arriving while another is in progress throws <a class="xref" href="../../api/Hi.MachiningProcs.ProjectFileBusyException.html">ProjectFileBusyException</a>
|
||||
immediately instead of racing into a file-in-use <code>IOException</code>.</li>
|
||||
/ Close arriving while another is in progress throws
|
||||
<a class="xref" href="../../api/Hi.MachiningProcs.ProjectFileBusyException.html">ProjectFileBusyException</a> immediately instead of racing into a file-in-use
|
||||
<code>IOException</code>. Close was the one operation left outside the gate, so a Close arriving during a Save
|
||||
could let the Save finish without writing and still return 200; it now refuses with the same 409
|
||||
the other five ops already used.</li>
|
||||
<li><strong><a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_LoadProject_">LoadProject</a> and
|
||||
<a class="xref" href="../../api/Hi.MachiningProcs.LocalProjectService.html#Hi_MachiningProcs_LocalProjectService_ReloadProject_">ReloadProject</a> take a message sink</strong> for load-time
|
||||
diagnostics (a referenced STL missing on disk, a child XML that will not deserialize). A load-time
|
||||
diagnostic does not fail the load; passing no sink leaves the application log as the only witness.
|
||||
See <a class="xref" href="../../technique/api-foundations/message-management.html">Message Management</a>.</li>
|
||||
<li><strong><a class="xref" href="../../api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipmentUtil_AlignWorkpieceProgramZeroToIso_">AlignWorkpieceProgramZeroToIso</a>
|
||||
computes in the machine-zero state.</strong> It reflects the assembly and zeroes every dynamic axis before
|
||||
querying displacements, so the alignment is correct even when the live machine's axes are
|
||||
|
||||
@@ -109,8 +109,9 @@ own, so the set is quoted as <code>3.1.175.<patch></code> after its HiNc p
|
||||
it publish under their own frozen builds — looking on the feed for every package at <code>3.1.175.x</code>
|
||||
finds only HiNc. A reference left on that set receives correctness fixes for it and none of the
|
||||
capability on this page. The 3.1 builds above 3.1.175 were never published as a release set —
|
||||
which is why the release note carries one 3.2 entry where it might have carried a dozen: for a
|
||||
caller moving off 3.1.175, they were never separate releases.</li>
|
||||
which is why <strong>3.2.7</strong> is the first numbered 3.2 drop and absorbs what a caller moving off
|
||||
3.1.175 has not seen as a published set. Later 3.2 builds are incremental, the same way
|
||||
3.1.175 / 3.1.173 / … were.</li>
|
||||
</ul>
|
||||
|
||||
</article>
|
||||
|
||||
Reference in New Issue
Block a user