This commit is contained in:
2026-09-12 18:16:27 +08:00
parent b7f55aa631
commit 397a7a8cc4
96 changed files with 1167 additions and 1259 deletions
@@ -217,11 +217,33 @@ radius entered against a tool-centre CAM path that expects wear only)
shows up as an overcut instead of an alarm. The diagnostics built from
this class exist to close that gap; they never change the path.</p>
<p>
Today the gate is meaningful on the XY plane (G17) only: both
compensation engines build the perpendicular as <code>Z × axis</code>
whatever plane is selected, so a G18/G19 region is neither compensated
in its own plane nor checked here — the <code>planeNormalDir</code> parameters
are ready for the day the engines pass the selected plane through.
The gate works on the selected G17/G18/G19 plane: both engines pass
the block's plane through <code>planeNormalDir</code>, and the in-plane
projections below use it (neither engine checks a polar G12.1 block).
Until 2026-09-11 both engines built the perpendicular as
<code>Z × axis</code> whatever plane was selected, so a G18/G19 region was
offset along its normal and could never be judged here.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.RadiusCompPlaneChange.html">RadiusCompPlaneChange</a></dt>
<dd><p>Classifies a plane selection (G17/G18/G19) that arrives while cutter
radius compensation is still active — the case a real control refuses.
Fanuc stops with alarm PS0037 CAN NOT CHANGE PLANE IN CRC, which covers
both a plane code inside the compensation mode and a plane code sharing
its block with the G40 that cancels it; Siemens and Heidenhain have
equivalents. Neither engine can honour such a change: the corner between
the two blocks is built from one block's running axis on the old plane
and the other's on the new one, so the path around the change mixes two
planes — and the block after it is offset on a plane the block before it
never saw. The diagnostics built from this class exist to name that;
they never change the path.</p>
<p>
The check is on the plane actually resolving differently from the
previous block's, so a plane code that re-selects the plane already in
force stays silent, as does the plane code on the block that starts the
region (a control accepts that one — compensation is not active yet).
</p>
</dd>
</dl>