Archived
deploy.
This commit is contained in:
@@ -655,9 +655,18 @@ active frame for one block; in this pipeline all of those reduce to
|
||||
which the ProgramXyz back-derivation below already models). The
|
||||
matched code is stamped verbatim into
|
||||
<a class="xref" href="Hi.NcParsers.Keywords.IMotionEventDef.html#Hi_NcParsers_Keywords_IMotionEventDef_Term">Term</a> for bidirectional source recovery.
|
||||
Rotary words on the same block (e.g. <code>SUPA G0 B0</code>) are left to
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html">McAbcSyntax</a> — same behavior as ISO G53, where rotary
|
||||
axes flow through the normal rotary path.
|
||||
Rotary words on the same block (e.g. <code>SUPA G0 B0</code>,
|
||||
<code>G53 A0 C0</code>) are consumed by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html">McAbcSyntax</a> ahead of
|
||||
this syntax — machine and program rotary coincide while no rotary
|
||||
offsets are modeled — and the block is still a machine-coordinate
|
||||
positioning: the linear axes <b>hold their machine position</b>
|
||||
when no X/Y/Z word is given, and the motion is always
|
||||
<a class="xref" href="Hi.NcParsers.Keywords.Generic.MotionForm.html#Hi_NcParsers_Keywords_Generic_MotionForm_McLinear">McLinear</a>. A machine-coordinate block never
|
||||
takes the RTCP tool-center-point linkage: on a real controller G53
|
||||
applies no compensation, so a rotary swing commanded through it
|
||||
turns the axis in place instead of dragging X/Y/Z to pin the tool
|
||||
tip (the tip's post-swing program coordinate is what the
|
||||
back-derivation reports).
|
||||
</p>
|
||||
<p>
|
||||
Must be placed <b>before</b> <a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a>
|
||||
@@ -1138,6 +1147,40 @@ Downstream syntaxes that need to reset modal state on program end
|
||||
should read the <a class="xref" href="Hi.NcParsers.Keywords.ProgramEnd.html">ProgramEnd</a> section rather than
|
||||
scanning for M30 in Flags directly.
|
||||
</p>
|
||||
<p>
|
||||
<b>The program-end edge.</b> On a real controller M02/M30 ends the
|
||||
program and enters the reset state: the modal G codes return to their
|
||||
power-on defaults — tool length compensation is cancelled (G49, which
|
||||
also ends tool-center-point control: Fanuc TCP is cancelled by G49 or
|
||||
reset), the tilted work plane and coordinate rotation are cancelled
|
||||
(G69), cutter radius compensation is cancelled (G40), the canned cycle
|
||||
is cancelled (G80). A simulator that plays a file with several
|
||||
programs chained by M02 must keep playing, so the reset is modelled as
|
||||
an <i>edge</i> between the program-end block and its successor: the
|
||||
program-end block itself keeps the modal state it executed under (its
|
||||
own motion — <code>G0 Z100. M30</code> — still sees the compensation), and
|
||||
the successor starts from the reset defaults. Each modal owner tests
|
||||
the edge with <a class="xref" href="Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html#Hi_NcParsers_LogicSyntaxs_ProgramEndSyntax_IsResetEdge_Hi_Common_Collections_LazyLinkedListNode_Hi_NcParsers_Syntaxs_SyntaxPiece__">IsResetEdge(LazyLinkedListNode<SyntaxPiece>)</a> in its single-step
|
||||
<code>node.Previous</code> lookback and writes its cancel state on the
|
||||
successor instead of carrying: <a class="xref" href="Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html">ToolHeightOffsetSyntax</a>
|
||||
(G43/G44 → G49), <a class="xref" href="Hi.NcParsers.LogicSyntaxs.G43p4RtcpSyntax.html">G43p4RtcpSyntax</a> (G43.4 → G49),
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.Siemens.SiemensTraoriSyntax.html">SiemensTraoriSyntax</a> (TRAORI → TRAFOOF, the
|
||||
D compensation itself stays — Siemens retains the active tool on
|
||||
reset), <a class="xref" href="Hi.NcParsers.LogicSyntaxs.Heidenhain.HeidenhainRtcpSyntax.html">HeidenhainRtcpSyntax</a> (M128 / TCPM
|
||||
→ off, TOOL CALL compensation stays), <a class="xref" href="Hi.NcParsers.LogicSyntaxs.TiltTransformUtil.html">TiltTransformUtil</a>
|
||||
(every tilt / rotation / frame term → G69),
|
||||
<a class="xref" href="Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html">RadiusCompensationSyntax</a> (G41/G42 →
|
||||
G40, the modal D is kept) and <a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html">CannedCycleResolveSyntax</a>
|
||||
(→ G80). Deliberately not reset: G00/G01, G90/G91, G17–G19, G94/G95,
|
||||
the work offset (G54–G59) and the path-smoothing mode — their reset
|
||||
defaults are controller-parameter dependent and they do not enter the
|
||||
program→machine transform chain; G20/G21 is retained by the controller
|
||||
itself. G52 keeps its existing behaviour of clearing on the
|
||||
program-end block (HardNc parity). A block right after the edge that
|
||||
has no words at all (a comment line) is still the edge — every owner
|
||||
handles it before any "no Parsing" early return, or the modal carry
|
||||
would clone the active section across it.
|
||||
</p>
|
||||
Must be placed before syntaxes that depend on the ProgramEnd section.
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
Reference in New Issue
Block a user