This commit is contained in:
2026-09-16 00:00:49 +08:00
parent 1a75503105
commit bfa3106a69
60 changed files with 696 additions and 268 deletions
@@ -242,6 +242,31 @@ them on the bench fixtures); the largest moves are floors that used to register
whole bottom disc dropped out — and side ranges that were fragmented into pieces separated by
phantom 1° gaps. Coefficient sets trained before this change embed the old engagement of their
training program; retrain on a replay if that fit matters.</li>
<li><strong>SoftNc canned cycles index a rotary axis.</strong> A G81–G89 repeat block carrying an A / B / C word
used to skip the hole (rotary-only repeat), drill it at the previous angle (mixed block) or let it
follow the table under <code>G68.2</code>. It now indexes the table and drills again, pre-positioning XYZ and
the table in one move, and under <code>G68.2</code> without RTCP the feature frame stays pinned in machine
space. Under <code>G91</code> only the words the block itself spoke are increments — an X-pitch repeat used
to add the previous cycle's Y a second time and drill upward. A bolt-circle program that ran
short of holes, or drilled them in the wrong place, now matches the HardNc replay.</li>
<li><strong>A rotary word under modal <code>G91</code> is an increment.</strong> <code>G91 … C20.</code> then <code>C20.</code> left the table at
20; it is 40 now. A spoken <code>G91 B270.</code> stays a +270° traverse instead of folding to −90°, and a
<code>G91 G28</code> rotary intermediate anchors on the previous modal angle instead of on zero (<code>G91 G28 C0</code> from C90 now holds the table and returns home instead of swinging to 0 first). Per-word
directives (<code>C=AC(90)</code>, <code>ACP</code> / <code>ACN</code>, <code>IC()</code>) are unchanged. HardNc keeps its absolute reading
and warns.</li>
<li><strong>Rotary IK from a pole seed.</strong> Every solve attempt now runs coarse then polish, so a small tilt
with a large azimuth that ran out of iterations a few milliradians short — and was refused by
<code>G53.1</code>, leaving the table at A = C = 0 with the tilt active and the path rotated off the part —
now solves to 1e-8 rad. On a Fanuc IJK grid from the pole seed 54 / 69 failures per A/C chain
become 0; a CL program goes from 44 dropped endpoints of 536 to 0.</li>
<li><strong>The rotary branch inside the travel wins.</strong> When the nearest IK solution lies outside an axis'
configured travel, <code>G53.1</code>, <code>G68.2</code>, <code>CYCLE800</code>, <code>PLANE SPATIAL</code> and <code>LN</code> now take the admissible
branch nearest the entry (sign, half-turn and supplement combinations are searched); a posture
the cradle cannot take is no longer commanded silently. This needs the travel to be known, and
it now is on every project: stroke limits declared only in the legacy machine-limits boxes are
copied into the controller parameter table on load for the axes carrying no end there, where they
used to be checked against nothing on SoftNc. An axis parked exactly on its limit is no longer
reported (<a class="xref" href="../../api/Hi.NcParsers.Dependencys.StrokeLimitUtil.html#Hi_NcParsers_Dependencys_StrokeLimitUtil_Tolerance">Tolerance</a>).</li>
<li>The SoftNc pipeline is the default engine.</li>
<li>Executed <code>SyntaxPiece</code>s freeze to UTF-8 (below), so their <code>JsonObject</code> is a fresh read-only snapshot
per call rather than a retained live graph.</li>