This commit is contained in:
2026-09-09 17:35:23 +08:00
parent 2a98ae7556
commit 161af68fe3
1271 changed files with 58251 additions and 98639 deletions
@@ -119,7 +119,15 @@ sub-section on this block, which
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html">CannedCycleResolveSyntax</a> resolves and the shared cycle
syntaxes expand into a <a class="xref" href="Hi.NcParsers.Keywords.CompoundMotion.html">CompoundMotion</a>. POS coordinates
override the stored X/Y; the POS Z is a pre-position, recorded but
never fed into the hole-bottom slot. The ISO modal-lookback branch is
never fed into the hole-bottom slot. Words carrying the klartext
incremental stamp — POS words (<code>CYCL CALL POS IX+20</code>) and root
words on the M99/M89 forms (<code>L IX+20 R0 FMAX M99</code> — the
manual's hole-group shape), see
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainIncrementalAxisWordUtil.html">HeidenhainIncrementalAxisWordUtil</a> — are resolved
against the last programmed position here, on the spot: this syntax
runs ahead of the shared <a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a> and
consumes the words, so the per-word override would otherwise be lost
and the hole drilled at the raw distance. The ISO modal-lookback branch is
deliberately bypassed: it has no positioning gate, so an armed
<a class="xref" href="Hi.NcParsers.Keywords.CannedCycle.html">CannedCycle</a> would re-execute on flag-only blocks —
wrong for klartext.</li><li><b>Modal</b> (<code>M89</code>): sets <a class="xref" href="Hi.NcParsers.Keywords.Heidenhain.MachiningCycleDef.html#Hi_NcParsers_Keywords_Heidenhain_MachiningCycleDef_Modal">Modal</a>;
@@ -136,7 +144,10 @@ Known divergences (recorded, corpus-benign): the cycle's mapped feed
enters the modal <a class="xref" href="Hi.NcParsers.Keywords.Feedrate.html">Feedrate</a> section during expansion (ISO
semantics; the Siemens MCALL precedent accepts the same leak); the
final retract plane is the ISO G98 initial level, not Q204's second
set-up clearance (Q204 is recorded in the definition store only).
set-up clearance (Q204 is recorded in the definition store only) —
and an incremental Z word chained off a cycle end (<code>L IZ..</code>,
<code>CYCL CALL POS IZ..</code>) inherits that gap, since it adds to the
simulated end plane.
</p>
Must run after the tilt/RTCP family and immediately before
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html">CannedCycleResolveSyntax</a>.
@@ -151,6 +162,15 @@ program coordinates). Self-carrying every block (PlaneSelect pattern
works without ModalCarry involvement; a CC with partial axes merges
the missing components from the previous center. Must run before
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCircularMotionSyntax.html">HeidenhainCircularMotionSyntax</a>.</p>
<p>
A <code>CC</code> stating no coordinates
(<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainCcSyntax.html#Hi_NcParsers_ParsingSyntaxs_Heidenhain_HeidenhainCcSyntax_BareKey">BareKey</a>) takes the last programmed
position, read at THIS block and frozen into the section — the
documented klartext form whose purpose is that the tool moves away
before the arc, so a later read at the arc block would take the arc's
own start point instead. Being a definition, it replaces the modal
center rather than inheriting the previous one's axes.
</p>
</dd>
</dl>
<dl class="jumplist">
@@ -165,12 +185,20 @@ the reverse) and both honor the single Group 01
Gated by the <code>Parsing.C</code> statement marker (klartext arcs
carry no G02/G03 and no modal arc continuation): the endpoint comes
from the block's resolved <code>ProgramXyz</code>, the center from the
modal <a class="xref" href="Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCircleCenterSyntax.html">HeidenhainCircleCenterSyntax</a> section (implicit
center = current position when no CC was ever given), and the
modal <a class="xref" href="Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainCircleCenterSyntax.html">HeidenhainCircleCenterSyntax</a> section, and the
direction from <code>DR-</code> (CW → G02) / <code>DR+</code> (CCW → G03). A
closed arc on the active plane is a full circle. A missing DR warns
(<code>Arc-DR&ndash;Missing</code>) and degrades to the modal linear move to the
endpoint (chord).</p>
closed arc on the active plane is a full circle. Two malformed shapes
warn and degrade to the modal linear move to the endpoint (chord): a
missing DR (<code>Arc-DR&ndash;Missing</code>), and a center sitting on the arc's
own start point (<code>Arc-CircleCenter&ndash;OnStartPoint</code>) — a zero begin
radius that emits no motion act at all while the endpoint still
advances the modal position. A CC that states only ONE in-plane
coordinate is not degraded: that arc has real geometry, and only the
optimizer's splition refuses it (see below). The event is stamped with its
<a class="xref" href="Hi.NcParsers.Keywords.IArcMotionDef.html#Hi_NcParsers_Keywords_IArcMotionDef_CenterSource">CenterSource</a>
(<a class="xref" href="Hi.NcParsers.Keywords.Generic.ArcCenterSource.html#Hi_NcParsers_Keywords_Generic_ArcCenterSource_ModalCircleCenter">ModalCircleCenter</a> /
<a class="xref" href="Hi.NcParsers.Keywords.Generic.ArcCenterSource.html#Hi_NcParsers_Keywords_Generic_ArcCenterSource_StartPoint">StartPoint</a>) because a C block never
states its center — the NcOpt splition write-back reads it.</p>
</dd>
</dl>
<dl class="jumplist">
@@ -193,7 +221,15 @@ in the transform chain instead of replacing each other. The shift is
carried modally by this syntax itself: on blocks without a CYCL DEF,
a numbered row re-resolves from the table and a direct shift carries
its values forward. Cancelling is a zero shift
(<code>CYCL DEF 7.1 X+0 Y+0 Z+0</code>).
(<code>CYCL DEF 7.1 X+0 Y+0 Z+0</code>). A klartext I-prefixed word
(<code>CYCL DEF 7.2 IY+5</code>, kept under its prefixed key in the record
by the parser) shifts BY the value on top of the shift active on the
previous block — the manual's "incremental values are always
referenced to the datum which was last valid, this can be a datum
which has already been shifted" — never a distance from the tool
position, which is why it bypasses the
<a class="xref" href="Hi.NcParsers.Keywords.PositioningOverride.html">PositioningOverride</a> /
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a> route entirely.
</p>
For DIN/ISO compatibility (G54–G59), use <a class="xref" href="Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html">IsoCoordinateOffsetSyntax</a>
in addition to this syntax in the Heidenhain syntax list.
@@ -248,6 +284,46 @@ unchanged, so a fail-soft call never silently drops the retract.</li></ul>
Must run after the shared cycle syntaxes
(<a class="xref" href="Hi.NcParsers.LogicSyntaxs.DrillingCycleSyntax.html">DrillingCycleSyntax</a>/<a class="xref" href="Hi.NcParsers.LogicSyntaxs.PeckDrillingCycleSyntax.html">PeckDrillingCycleSyntax</a>)
and before <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html">McXyzSyntax</a>.
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainLnOrientationSyntax.html">HeidenhainLnOrientationSyntax</a></dt>
<dd><p>Heidenhain LN posture rules — the brand adapter between the
<code>Parsing.LN</code> vector record (<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainLnSyntax.html">HeidenhainLnSyntax</a>)
and the shared <a class="xref" href="Hi.NcParsers.LogicSyntaxs.OrientationVectorResolveSyntax.html">OrientationVectorResolveSyntax</a>. Applies
the TNC640/TNC7 manual's rules verbatim:</p>
<ul><li>T vector present + M128/FUNCTION TCPM active → the tool axis
is T ("Tool keeps the set tool orientation").</li><li>T absent + RTCP active → the tool axis is the surface normal
N ("the control maintains the tool perpendicular to the workpiece
contour").</li><li>RTCP inactive → the T vector is ignored, exactly like the
control ("the control ignores the direction vector T, even if it is
defined in the LN block") — diagnosed as
<code>Orientation-Vector--IgnoredNoTcpm</code>, posture untouched.</li></ul>
The chosen vector is written (verbatim within the unit-length
tolerance; normalized with a diagnostic beyond it) to the brand-agnostic
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.OrientationVectorResolveSyntax.html#Hi_NcParsers_LogicSyntaxs_OrientationVectorResolveSyntax_ToolOrientationKey">ToolOrientationKey</a>
section; the surface normal is always carried on
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.OrientationVectorResolveSyntax.html#Hi_NcParsers_LogicSyntaxs_OrientationVectorResolveSyntax_SurfaceNormalKey">SurfaceNormalKey</a> —
compensation along it (DR2 / 3D-ToolComp) is recognized, not
simulated (<code>SurfaceNormal--CompNotSimulated</code>, first LN block of
a run only).
<p>
RTCP activity is judged dual-source — the same-block Parsing words
(M128 / FUNCTION TCPM, before <a class="xref" href="Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainRtcpSyntax.html">HeidenhainRtcpSyntax</a>
consumes them; the same-block on+off contradiction resolves off, the
P1 rule) OR the most recent
<a class="xref" href="Hi.NcParsers.Keywords.IToolHeightCompensationDef.html">IToolHeightCompensationDef</a> owner term — so an LN block
that itself activates RTCP is not silently skipped.
</p>
<p>
Must run <b>after</b> <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html">McAbcSyntax</a> and <b>before</b>
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.OrientationVectorResolveSyntax.html">OrientationVectorResolveSyntax</a> (the producer/consumer
order) and before <a class="xref" href="Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainRtcpSyntax.html">HeidenhainRtcpSyntax</a> (which reads
the resolved endpoint ABC for its Dynamic/Static marking).
The vector is interpreted in the untilted program frame; combining
LN with an active PLANE tilt is diagnosed
(<code>Orientation-Vector--TiltedFrameAssumed</code>), not remapped.
</p>
</dd>
</dl>
<dl class="jumplist">