708 lines
42 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Namespace Hi.NcParsers.Keywords | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Namespace Hi.NcParsers.Keywords | HiAPI-C# 2025 ">
<link rel="icon" href="../img/HiAPI.favicon.ico">
<link rel="stylesheet" href="../public/docfx.min.css">
<link rel="stylesheet" href="../public/main.css">
<meta name="docfx:navrel" content="../toc.html">
<meta name="docfx:tocrel" content="toc.html">
<meta name="docfx:rel" content="../">
<meta name="loc:inThisArticle" content="In this article">
<meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.NcParsers.Keywords">
<h1 id="Hi_NcParsers_Keywords" data-uid="Hi.NcParsers.Keywords" class="text-break">Namespace Hi.NcParsers.Keywords</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>
<div class="markdown level0 remarks"></div>
<h3 id="classes">
Classes
</h3>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.BlockSkip.html">BlockSkip</a></dt>
<dd><p>Optional block skip marker extracted from the head of an NC block.
ISO 6983 / Fanuc calls this feature <i>Block Delete</i> (BDT switch);
Siemens / Syntec / Mazak use the same <code>/</code> prefix with matching
behaviour.</p>
<p>
The section is only present on blocks that carry a <code>/</code> prefix.
Whether the block's NC commands are actually skipped at runtime
depends on <a class="xref" href="Hi.NcParsers.Dependencys.IBlockSkipConfig.html">IBlockSkipConfig</a>:
<ul><li>Config absent or the <a class="xref" href="Hi.NcParsers.Keywords.BlockSkip.html#Hi_NcParsers_Keywords_BlockSkip_Layer">Layer</a> bit OFF → the <code>/</code>
prefix is consumed, <a class="xref" href="Hi.NcParsers.Keywords.BlockSkip.html#Hi_NcParsers_Keywords_BlockSkip_Body">Body</a> is left null, and the rest of
the line parses as a regular NC block (comments still take effect).</li><li>Config present and the <a class="xref" href="Hi.NcParsers.Keywords.BlockSkip.html#Hi_NcParsers_Keywords_BlockSkip_Layer">Layer</a> bit ON → the rest
of the line is moved into <a class="xref" href="Hi.NcParsers.Keywords.BlockSkip.html#Hi_NcParsers_Keywords_BlockSkip_Body">Body</a> and cleared from
<code>UnparsedText</code>, so downstream parsing syntaxes see nothing and
no NC action is emitted. Comment syntaxes run before this one so
comments (and any embedded CsScript) still take effect.</li></ul>
Not a comment: a comment is static metadata, block skip is a runtime
toggle that can change per machine/operator setting.
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.CannedCycle.html">CannedCycle</a></dt>
<dd><p>Section key holder + concrete implementation for <a class="xref" href="Hi.NcParsers.Keywords.ICannedCycleDef.html">ICannedCycleDef</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.Comment.html">Comment</a></dt>
<dd><p>Comment extracted from an NC block.
<a class="xref" href="Hi.NcParsers.Keywords.Comment.html#Hi_NcParsers_Keywords_Comment_Symbol">Symbol</a> identifies the comment style;
<a class="xref" href="Hi.NcParsers.Keywords.Comment.html#Hi_NcParsers_Keywords_Comment_Text">Text</a> holds the content without the symbol.
Downstream syntaxes (e.g., <a class="xref" href="Hi.NcParsers.Keywords.CsScript.html">CsScript</a>) may
further trim <a class="xref" href="Hi.NcParsers.Keywords.Comment.html#Hi_NcParsers_Keywords_Comment_Text">Text</a> after extracting embedded markers.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.CompoundMotion.html">CompoundMotion</a></dt>
<dd><p>Section key holder + concrete implementation for <a class="xref" href="Hi.NcParsers.Keywords.ICompoundMotionDef.html">ICompoundMotionDef</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.Coolant.html">Coolant</a></dt>
<dd><p>Section key holder + concrete implementation for <a class="xref" href="Hi.NcParsers.Keywords.ICoolantDef.html">ICoolantDef</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.CoordinateOffset.html">CoordinateOffset</a></dt>
<dd><p>Work coordinate offset state written by
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IsoCoordinateOffsetSyntax.html">IsoCoordinateOffsetSyntax</a>.
Property names are used as JSON keys via <code>nameof</code>.</p>
<p>
Managed commands (ISO): G54, G55, G56, G57, G58, G59, G59.1G59.9.
Siemens: G54G57 + G505G599 (extended), G500 to cancel.
Heidenhain: CYCL DEF 247 (Datum Preset) / CYCL DEF 7 (Datum Shift).
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.CsScript.html">CsScript</a></dt>
<dd><p>Section-key holder for inline C# scripts attached to an NC block. Carries
<a class="xref" href="Hi.NcParsers.Keywords.CsScript.html#Hi_NcParsers_Keywords_CsScript_BeginScript">BeginScript</a> (run before the block's acts) and
<a class="xref" href="Hi.NcParsers.Keywords.CsScript.html#Hi_NcParsers_Keywords_CsScript_EndScript">EndScript</a> (run after). Resolved by
<a class="xref" href="Hi.NcParsers.Semantics.CsScriptBeginSemantic.html">CsScriptBeginSemantic</a> and
<a class="xref" href="Hi.NcParsers.Semantics.CsScriptEndSemantic.html">CsScriptEndSemantic</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.Dwell.html">Dwell</a></dt>
<dd><p>Section key holder + concrete implementation for <a class="xref" href="Hi.NcParsers.Keywords.IDwellDef.html">IDwellDef</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.FanucPathSmoothing.html">FanucPathSmoothing</a></dt>
<dd><p>Section data holder for <a class="xref" href="Hi.NcParsers.Keywords.IFanucPathSmoothingDef.html">IFanucPathSmoothingDef</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.FanucProgramNumber.html">FanucProgramNumber</a></dt>
<dd><p>Fanuc-family program identifier header that follows a
<a class="xref" href="Hi.NcParsers.Keywords.TapeBoundary.html">TapeBoundary</a> line — e.g. <code>O1234</code> or
<code>&lt;O1234&gt;</code>. <a class="xref" href="Hi.NcParsers.Keywords.FanucProgramNumber.html#Hi_NcParsers_Keywords_FanucProgramNumber_Wrapper">Wrapper</a> records the surface form
so a parsed block can be emitted back to the original notation.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.Feedrate.html">Feedrate</a></dt>
<dd><p>Section key holder + concrete implementation for <a class="xref" href="Hi.NcParsers.Keywords.IFeedrateDef.html">IFeedrateDef</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.IndexNote.html">IndexNote</a></dt>
<dd><p>JSON-section data shape pairing a single-character address symbol
(e.g. <code>&lsquo;O&rsquo;</code>, <code>&lsquo;N&rsquo;</code>) with its numeric index, used to annotate
program/sequence numbers on an NC block.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.IsoLocalCoordinateOffset.html">IsoLocalCoordinateOffset</a></dt>
<dd><p>ISO/Fanuc-family local coordinate offset state (G52) written by
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html">IsoLocalCoordinateOffsetSyntax</a>.
Property names are used as JSON keys via <code>nameof</code>.</p>
<p>
G52 X Y Z installs a local coordinate-system shift that stacks on top of
the active G54-G59 work offset. The cancel mechanism is to write
<code>G52 X0 Y0 Z0</code> (or hit M30 / reset) — there is no separate G code
for "cancel". The offset vector is therefore always modal: zero is a
valid modal value, not a "disabled" state, so the section is recorded
on every block.
</p>
<p>
Brand-specific kin: Siemens <code>TRANS</code>/<code>ATRANS</code> (which can also
carry rotation/scale/mirror) and Heidenhain <code>TRANS DATUM</code> are
handled by their own syntaxes and write to their own sections — they
do not share this key, because their data shapes are richer.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.MachineCoordinateState.html">MachineCoordinateState</a></dt>
<dd><p>Section key holder for <a class="xref" href="Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html">IMachineCoordinateStateDef</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.MotionEvent.html">MotionEvent</a></dt>
<dd><p>Section key holder + concrete implementation for <a class="xref" href="Hi.NcParsers.Keywords.IMotionEventDef.html">IMotionEventDef</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.MotionState.html">MotionState</a></dt>
<dd><p>Section key holder + concrete implementation for <a class="xref" href="Hi.NcParsers.Keywords.IMotionStateDef.html">IMotionStateDef</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.PathSmoothing.html">PathSmoothing</a></dt>
<dd><p>Section key holder for <a class="xref" href="Hi.NcParsers.Keywords.IPathSmoothingDef.html">IPathSmoothingDef</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.PlaneSelect.html">PlaneSelect</a></dt>
<dd><p>Section key holder for <a class="xref" href="Hi.NcParsers.Keywords.IPlaneSelectDef.html">IPlaneSelectDef</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.Positioning.html">Positioning</a></dt>
<dd><p>Section key holder + concrete implementation for <a class="xref" href="Hi.NcParsers.Keywords.IPositioningDef.html">IPositioningDef</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.ProgramEnd.html">ProgramEnd</a></dt>
<dd><p>Section key holder for <a class="xref" href="Hi.NcParsers.Keywords.IProgramEndDef.html">IProgramEndDef</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.ProgramStop.html">ProgramStop</a></dt>
<dd><p>Section key holder + concrete implementation for <a class="xref" href="Hi.NcParsers.Keywords.IProgramStopDef.html">IProgramStopDef</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.RadiusCompensation.html">RadiusCompensation</a></dt>
<dd><p>Section key holder + concrete implementation for <a class="xref" href="Hi.NcParsers.Keywords.IRadiusCompensationDef.html">IRadiusCompensationDef</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.SpindleControl.html">SpindleControl</a></dt>
<dd><p>Section key holder + concrete implementation for <a class="xref" href="Hi.NcParsers.Keywords.ISpindleControlDef.html">ISpindleControlDef</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.SpindleOrientation.html">SpindleOrientation</a></dt>
<dd><p>Section key holder + concrete implementation for <a class="xref" href="Hi.NcParsers.Keywords.ISpindleOrientationDef.html">ISpindleOrientationDef</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.SpindleSpeed.html">SpindleSpeed</a></dt>
<dd><p>Section key holder + concrete implementation for <a class="xref" href="Hi.NcParsers.Keywords.ISpindleSpeedDef.html">ISpindleSpeedDef</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.SubProgramCall.html">SubProgramCall</a></dt>
<dd><p>Subprogram call record left on the M98 / M198 host block by
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.SubProgramCallSyntax.html">SubProgramCallSyntax</a> after the subprogram
file has been inlined into the source layer. The call itself emits no
motion act; this section is bookkeeping so cache dumps and diagnostic
readers can see &quot;this block triggered an inline of file <code>File</code>&quot;.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.SubProgramReturn.html">SubProgramReturn</a></dt>
<dd><p>Subprogram return record left on the M99 host block by
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.SubProgramReturnSyntax.html">SubProgramReturnSyntax</a>. Return blocks
produce no motion acts; this section makes the consumed M99 visible
in cache dumps and reserves a slot for future <code>M99 P{seq}</code>
(return-to-sequence-number) support.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.TapeBoundary.html">TapeBoundary</a></dt>
<dd><p>Tape leader / trailer line — the literal <code>%</code> that historically
marked the start and end of a punched paper-tape program. ISO-style
controllers (Fanuc, Mazak, Syntec, Siemens) all preserve it as a
file-level boundary marker. Distinct from a comment: the controller
uses it as a tape/file delimiter, not as embedded operator text.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.TiltTransform.html">TiltTransform</a></dt>
<dd><p>Concrete class for <a class="xref" href="Hi.NcParsers.Keywords.ITiltTransformDef.html">ITiltTransformDef</a> section serialization.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.ToolHeightCompensation.html">ToolHeightCompensation</a></dt>
<dd><p>Section key holder for <a class="xref" href="Hi.NcParsers.Keywords.IToolHeightCompensationDef.html">IToolHeightCompensationDef</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.Unit.html">Unit</a></dt>
<dd><p>Section key holder + concrete implementation for <a class="xref" href="Hi.NcParsers.Keywords.IUnitDef.html">IUnitDef</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.Vars.html">Vars</a></dt>
<dd><p>JSON section schema for per-block variable storage. Each sub-property
names a sub-section that holds a <code>{ &ldquo;#nnn&rdquo;: value }</code> dictionary
keyed by Fanuc-style variable id.</p>
<p>
The sub-sections partition the variable space by lifetime:
</p>
<ul><li><a class="xref" href="Hi.NcParsers.Keywords.Vars.html#Hi_NcParsers_Keywords_Vars_Local">Local</a><code>#1-#33</code>, scope: macro call frame
(pushed/popped by G65 / G66 / M99).</li><li><a class="xref" href="Hi.NcParsers.Keywords.Vars.html#Hi_NcParsers_Keywords_Vars_Volatile">Volatile</a><code>#100-#499</code>, non-retained common;
carries block-to-block, cleared by <code>ProgramEndCleanSyntax</code> on M02 / M30.</li><li><a class="xref" href="Hi.NcParsers.Keywords.Vars.html#Hi_NcParsers_Keywords_Vars_SystemControl">SystemControl</a><code>#3000-#3999</code>, controller-side
system variables; offline-only round-trip record (real controller
effects such as clock reset / alarm trigger / message pause are not
simulated).</li></ul>
<p>
The property types are <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonobject">JsonObject</a> rather than strongly-typed
dictionaries because each sub-section's keys are dynamic Fanuc variable
ids (<code>#100</code>, <code>#5001</code>, …) discovered at parse time, not a fixed
schema. This class exists solely to give the section name and sub-keys
stable <code>nameof()</code> targets — instances are never constructed at
runtime.
</p>
</dd>
</dl>
<h3 id="interfaces">
Interfaces
</h3>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.IArcMotionDef.html">IArcMotionDef</a></dt>
<dd><p>Arc motion data written by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html">CircularMotionSyntax</a>.
Stored under the <a class="xref" href="Hi.Motion.html">Hi.Motion</a> JSON section alongside
<a class="xref" href="Hi.NcParsers.Keywords.IMotionEventDef.html">IMotionEventDef</a> properties.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.ICannedCycleDef.html">ICannedCycleDef</a></dt>
<dd><p>Canned cycle modal state (Group 09). Captures which cycle is
currently active, its return mode (G98/G99), and the resolved
absolute parameter set used for modal lookback.</p>
<p>
Written by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.CannedCycleResolveSyntax.html">CannedCycleResolveSyntax</a> on
every block that belongs to the canned-cycle group:
cycle code present (G81/G82/G83/G73/G84/G74/G85/G86/G89/G76/G87),
modal repeat (cycle still active, only coordinates given), or
explicit cancel (<a class="xref" href="Hi.NcParsers.Keywords.Generic.IsoKeywords.html#Hi_NcParsers_Keywords_Generic_IsoKeywords_G80">G80</a>).
</p>
<p>
<a class="xref" href="Hi.NcParsers.Keywords.ICannedCycleDef.html#Hi_NcParsers_Keywords_ICannedCycleDef_Term">Term</a> = <code>"G80"</code> is the explicit-cancel sentinel
used by <a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html">FindPreviousActiveCycle(LazyLinkedListNode&lt;SyntaxPiece&gt;, string[])</a>
to terminate modal lookback without ambiguity; regular blocks
(e.g. <code>G00 X.. Y..</code>) simply omit the section entirely.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.ICompoundMotionDef.html">ICompoundMotionDef</a></dt>
<dd><p>Compound motion section definition for commands that produce
multiple sub-operations (G28, G53.1, G81, G82, etc.).
Contains a <a class="xref" href="Hi.NcParsers.Keywords.CompoundMotion.html#Hi_NcParsers_Keywords_CompoundMotion_ItemsKey">ItemsKey</a> array resolved by
<span class="xref">Hi.NcParsers.Semantics.CompoundMotionSemanticUtil</span>.</p>
<p>Item types (discriminated by key presence):</p>
<ul><li><a class="xref" href="Hi.Motion.html">Hi.Motion</a> — rapid/feed linear motion
(<a class="xref" href="Hi.NcParsers.Keywords.IMotionEventDef.html">IMotionEventDef</a> + <a class="xref" href="Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html">IMachineCoordinateStateDef</a>)</li><li><a class="xref" href="Hi.NcParsers.Keywords.Dwell.html">Dwell</a> — pause (<a class="xref" href="Hi.NcParsers.Keywords.IDwellDef.html#Hi_NcParsers_Keywords_IDwellDef_Time">Time</a> in seconds)</li><li><a class="xref" href="Hi.NcParsers.Keywords.SpindleControl.html">SpindleControl</a> — spindle direction change
(<a class="xref" href="Hi.NcParsers.Keywords.ISpindleControlDef.html#Hi_NcParsers_Keywords_ISpindleControlDef_Direction">Direction</a>)</li><li><a class="xref" href="Hi.NcParsers.Keywords.SpindleOrientation.html">SpindleOrientation</a> — oriented spindle stop (OSS)
(<a class="xref" href="Hi.NcParsers.Keywords.ISpindleOrientationDef.html#Hi_NcParsers_Keywords_ISpindleOrientationDef_Angle_deg">Angle_deg</a>)</li></ul>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.ICoolantDef.html">ICoolantDef</a></dt>
<dd><p>Coolant state (M07 mist / M08 flood / M09 off).
Written by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.CoolantSyntax.html">CoolantSyntax</a>.
Modal — persists until changed.</p>
<p>
<a class="xref" href="Hi.NcParsers.Keywords.ICoolantDef.html#Hi_NcParsers_Keywords_ICoolantDef_IsOn">IsOn</a> is the on/off convenience flag (true for M07 and
M08, false for M09). <a class="xref" href="Hi.NcParsers.Keywords.ICoolantDef.html#Hi_NcParsers_Keywords_ICoolantDef_Mode">Mode</a> carries the abstract kind
(<a class="xref" href="Hi.NcParsers.Keywords.Coolant.html#Hi_NcParsers_Keywords_Coolant_Flood">Flood</a> / <a class="xref" href="Hi.NcParsers.Keywords.Coolant.html#Hi_NcParsers_Keywords_Coolant_Mist">Mist</a> /
<a class="xref" href="Hi.NcParsers.Keywords.Coolant.html#Hi_NcParsers_Keywords_Coolant_Off">Off</a>) for consumers that need to distinguish
flood vs mist.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.IDwellDef.html">IDwellDef</a></dt>
<dd><p>Dwell/pause section definition for use inside Sequence items.
Resolved by <span class="xref">Hi.NcParsers.Semantics.CompoundMotionSemanticUtil</span> into
<a class="xref" href="Hi.Numerical.Acts.ActDelay.html">ActDelay</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.IFanucPathSmoothingDef.html">IFanucPathSmoothingDef</a></dt>
<dd><p>Fanuc-specific path smoothing state written by
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html">FanucPathSmoothingSyntax</a>.</p>
<p>
Extends <a class="xref" href="Hi.NcParsers.Keywords.IPathSmoothingDef.html">IPathSmoothingDef</a> with the Fanuc G05.1 R argument
(precision / smoothness level number, R1..R10 mapping to controller-internal
tuning macro variables). Q is binary in current Fanuc firmware (Q0 disable /
Q1 enable), so <a class="xref" href="Hi.NcParsers.Keywords.IPathSmoothingDef.html#Hi_NcParsers_Keywords_IPathSmoothingDef_IsEnabled">IsEnabled</a> covers it directly
— no raw Q field is stored.
</p>
<p>
JSON section key remains <code>nameof(PathSmoothing)</code> so generic readers
(cache dumps, modal carry, UI) can cast to <a class="xref" href="Hi.NcParsers.Keywords.IPathSmoothingDef.html">IPathSmoothingDef</a>
across all controller brands; brand-specific readers cast to
<a class="xref" href="Hi.NcParsers.Keywords.IFanucPathSmoothingDef.html">IFanucPathSmoothingDef</a> for the extra fields.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.IFeedrateDef.html">IFeedrateDef</a></dt>
<dd><p>Feedrate state written by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.FeedrateSyntax.html">FeedrateSyntax</a>.
Property names are used as JSON keys via <code>nameof</code>.</p>
<p>
ISO standard: F command + G94 (per minute) / G95 (per revolution).
Supported by all major CNC brands.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.IFlagsDef.html">IFlagsDef</a></dt>
<dd><p>JSON section schema describing the modal/non-modal flags that take effect
on an NC block. Each entry in <a class="xref" href="Hi.NcParsers.Keywords.IFlagsDef.html#Hi_NcParsers_Keywords_IFlagsDef_Flags">Flags</a> is a brand-specific
keyword recognized by the soft-NC runtime.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html">IMachineCoordinateStateDef</a></dt>
<dd><p>Modal machine-coordinate state — absolute six-axis machine position
after the block has executed. Written on every block by motion-related
LogicSyntaxs (<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html">McAbcSyntax</a>,
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcXyzFallbackSyntax.html">McAbcXyzFallbackSyntax</a>,
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.McXyzSyntax.html">McXyzSyntax</a>,
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html">MachineCoordSelectSyntax</a>,
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.G53p1RotaryPositionSyntax.html">G53p1RotaryPositionSyntax</a>,
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.ReferenceReturnSyntax.html">ReferenceReturnSyntax</a>); seeded on the init
block by <a class="xref" href="Hi.NcParsers.Initializers.HomeMcInitializer.html">HomeMcInitializer</a>; carried across
non-motion blocks by <a class="xref" href="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html">ModalCarrySyntax</a>.</p>
<p>
Only configured axes appear as keys (X/Y/Z/A/B/C). Non-existent axes
(e.g., A/B/C on a 3-axis machine) are <b>omitted</b> rather than written
as NaN sentinels.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.IMotionEventDef.html">IMotionEventDef</a></dt>
<dd><p>One-shot motion event — present only on blocks that actually issue a
motion command. Used by motion semantics (<a class="xref" href="Hi.NcParsers.Semantics.McLinearMotionSemantic.html">McLinearMotionSemantic</a>,
<a class="xref" href="Hi.NcParsers.Semantics.McArcMotionSemantic.html">McArcMotionSemantic</a>, <a class="xref" href="Hi.NcParsers.Semantics.ClLinearMotionSemantic.html">ClLinearMotionSemantic</a>)
as the trigger to emit motion <a class="xref" href="Hi.Numerical.Acts.IAct.html">IAct</a>. NOT carried
forward across blocks. Property names are used as JSON keys via <code>nameof</code>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.IMotionStateDef.html">IMotionStateDef</a></dt>
<dd><p>Modal motion state — Group 01 G-code mode (G00 / G01 / G02 / G03 ...).
Written on every block by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.LinearMotionSyntax.html">LinearMotionSyntax</a> /
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html">CircularMotionSyntax</a>; carried across non-motion
blocks by <a class="xref" href="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html">ModalCarrySyntax</a>. Property names are
used as JSON keys via <code>nameof</code>.</p>
<p>
Unlike sibling modal sections (<a class="xref" href="Hi.NcParsers.Keywords.Unit.html">Unit</a>, <a class="xref" href="Hi.NcParsers.Keywords.PlaneSelect.html">PlaneSelect</a>,
<a class="xref" href="Hi.NcParsers.Keywords.Positioning.html">Positioning</a>) which carry both a brand-specific <code>Term</code>
and a brand-neutral conventional field, <a class="xref" href="Hi.NcParsers.Keywords.MotionState.html">MotionState</a> intentionally
keeps only <a class="xref" href="Hi.NcParsers.Keywords.IMotionStateDef.html#Hi_NcParsers_Keywords_IMotionStateDef_Term">Term</a>: the brand-neutral semantic ("what kind of
motion happened") lives on the sibling one-shot <a class="xref" href="Hi.NcParsers.Keywords.MotionEvent.html">MotionEvent</a>
(<a class="xref" href="Hi.NcParsers.Keywords.IMotionEventDef.html#Hi_NcParsers_Keywords_IMotionEventDef_Form">Form</a> = McLinear / McArc / ClLinear / ClArc).
State here is purely the modal latch of the last Group-01 G-code so
downstream <code>FindPrevious*</code> can resume motion-mode bookkeeping.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.IParsingDef.html">IParsingDef</a></dt>
<dd><p>JSON section schema carrying the raw, brand-specific parsing trace for an
NC block. The <a class="xref" href="Hi.NcParsers.Keywords.IParsingDef.html#Hi_NcParsers_Keywords_IParsingDef_Parsing">Parsing</a> node holds intermediate parser output
used by downstream syntaxes and diagnostics.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.IPathSmoothingDef.html">IPathSmoothingDef</a></dt>
<dd><p>Path smoothing state. The base interface is brand-agnostic; controller
brands extend it with their own argument fields (e.g.
<a class="xref" href="Hi.NcParsers.Keywords.IFanucPathSmoothingDef.html">IFanucPathSmoothingDef</a> for Fanuc G05.1 R precision-level).
Fanuc-flavour writes are produced by
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.FanucPathSmoothingSyntax.html">FanucPathSmoothingSyntax</a>.</p>
<p>
ISO/Fanuc G05.1 Q1 (enable) / G05.1 Q0 (disable):
high-precision contour control / AICC / Nano Smoothing.
Controller-internal interpolation black box — simulation records
the state but does not alter the tool path.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.IPlaneSelectDef.html">IPlaneSelectDef</a></dt>
<dd><p>Active plane selection state written by
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.PlaneSelectSyntax.html">PlaneSelectSyntax</a>.
Property names are used as JSON keys via <code>nameof</code>.</p>
<p>
ISO: G17/G18/G19. Heidenhain: implicit from L/CC syntax.
<a class="xref" href="Hi.NcParsers.Keywords.IPlaneSelectDef.html#Hi_NcParsers_Keywords_IPlaneSelectDef_Term">Term</a> carries the brand-specific G-code; <a class="xref" href="Hi.NcParsers.Keywords.IPlaneSelectDef.html#Hi_NcParsers_Keywords_IPlaneSelectDef_Plane">Plane</a>
stores the conventional, brand-neutral axis-pair name (XY/ZX/YZ).
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.IPositioningDef.html">IPositioningDef</a></dt>
<dd><p>Modal positioning state — ISO Group 03 (G90 absolute / G91 incremental).
Written by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.PositioningSyntax.html">PositioningSyntax</a>, consumed by
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.IncrementalResolveSyntax.html">IncrementalResolveSyntax</a>, canned cycle
syntaxes, and <a class="xref" href="Hi.NcParsers.LogicSyntaxs.MachineCoordSelectSyntax.html">MachineCoordSelectSyntax</a>.
Property names are used as JSON keys via <code>nameof</code>.</p>
<p>
<a class="xref" href="Hi.NcParsers.Keywords.IPositioningDef.html#Hi_NcParsers_Keywords_IPositioningDef_Term">Term</a> is the brand-specific G-code (Fanuc/ISO G90/G91);
<a class="xref" href="Hi.NcParsers.Keywords.IPositioningDef.html#Hi_NcParsers_Keywords_IPositioningDef_Mode">Mode</a> is the conventional, brand-neutral name
(<a class="xref" href="Hi.NcParsers.Keywords.Positioning.html#Hi_NcParsers_Keywords_Positioning_Absolute">Absolute</a> / <a class="xref" href="Hi.NcParsers.Keywords.Positioning.html#Hi_NcParsers_Keywords_Positioning_Incremental">Incremental</a>).
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.IProgramEndDef.html">IProgramEndDef</a></dt>
<dd><p>Program end marker (M02/M30).
Written by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.ProgramEndSyntax.html">ProgramEndSyntax</a>.
Other syntaxes (e.g. <a class="xref" href="Hi.NcParsers.LogicSyntaxs.IsoLocalCoordinateOffsetSyntax.html">IsoLocalCoordinateOffsetSyntax</a>)
read this section to reset modal state instead of detecting M30 directly.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.IProgramStopDef.html">IProgramStopDef</a></dt>
<dd><p>Program-stop marker (M00 unconditional / M01 optional).
Written by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.ProgramStopSyntax.html">ProgramStopSyntax</a> on each
block that carries an M00/M01 flag. Non-modal: the section appears
only on the exact block where the stop code is present.</p>
<p>
Distinct from <a class="xref" href="Hi.NcParsers.Keywords.IProgramEndDef.html">IProgramEndDef</a> (M02/M30, end of program).
</p>
<p>
M00 halts execution unconditionally; the operator must press Cycle
Start to resume. M01 is an optional stop gated by the operator's
"Optional Stop" panel switch — ignored when the switch is off.
This parsing-layer section records the NC intent; runtime /
semantic layers decide whether to actually pause.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.IProgramXyzDef.html">IProgramXyzDef</a></dt>
<dd><p>JSON section schema carrying the program-coordinate position commanded on
the current block. Written by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.ProgramXyzSyntax.html">ProgramXyzSyntax</a>
before the <a class="xref" href="Hi.NcParsers.Keywords.ITransformationDef.html#Hi_NcParsers_Keywords_ITransformationDef_ProgramToMcTransform">ProgramToMcTransform</a> chain
composes it into machine coordinates.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.IRadiusCompensationDef.html">IRadiusCompensationDef</a></dt>
<dd><p>Radius compensation state written by
<a class="xref" href="Hi.NcParsers.PostLogicSyntaxs.RadiusCompensationSyntax.html">RadiusCompensationSyntax</a>.
Property names are used as JSON keys via <code>nameof</code>.</p>
<p>
Managed commands (ISO): G41 (left), G42 (right), G40 (cancel).
Heidenhain Klartext maps RL → G41, RR → G42, R0 → G40.
When active, the tool path is offset perpendicular to the programmed path
by <a class="xref" href="Hi.NcParsers.Keywords.IRadiusCompensationDef.html#Hi_NcParsers_Keywords_IRadiusCompensationDef_Radius_mm">Radius_mm</a>; <a class="xref" href="Hi.NcParsers.Keywords.IRadiusCompensationDef.html#Hi_NcParsers_Keywords_IRadiusCompensationDef_Side">Side</a> determines left vs right.
The root <code>ProgramXyz</code> retains the user-programmed position;
<code>MachineCoordinate</code> is overwritten to reflect the compensated path.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.ISpindleControlDef.html">ISpindleControlDef</a></dt>
<dd><p>Spindle control item for use inside <a class="xref" href="Hi.NcParsers.Keywords.CompoundMotion.html#Hi_NcParsers_Keywords_CompoundMotion_ItemsKey">ItemsKey</a>
arrays. Resolved by <span class="xref">Hi.NcParsers.Semantics.CompoundMotionSemanticUtil</span>
into <a class="xref" href="Hi.Numerical.Acts.ActSpindleDirection.html">ActSpindleDirection</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.ISpindleOrientationDef.html">ISpindleOrientationDef</a></dt>
<dd><p>Oriented spindle stop item for use inside
<a class="xref" href="Hi.NcParsers.Keywords.CompoundMotion.html#Hi_NcParsers_Keywords_CompoundMotion_ItemsKey">ItemsKey</a> arrays.
Commands the spindle to stop at a specific angular position (OSS).
Resolved by <span class="xref">Hi.NcParsers.Semantics.CompoundMotionSemanticUtil</span>
into <a class="xref" href="Hi.Numerical.Acts.ActSpindleOrientation.html">ActSpindleOrientation</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.ISpindleSpeedDef.html">ISpindleSpeedDef</a></dt>
<dd><p>Spindle speed and direction state written by
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.SpindleSpeedSyntax.html">SpindleSpeedSyntax</a>.
Property names are used as JSON keys via <code>nameof</code>.</p>
<p>
ISO: S command for speed, M03/M04/M05 for direction.
Heidenhain: M3/M4/M5. Siemens: M3/M4/M5 or SPOS.
Direction is stored as the conventional <a class="xref" href="Hi.Numerical.SpindleDirection.html">SpindleDirection</a>
enum name (CW/CCW/STOP), not as brand-specific M-codes.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.ITiltTransformDef.html">ITiltTransformDef</a></dt>
<dd><p>Tilt transform state written by tilt transform syntaxes.
Property names are used as JSON keys via <code>nameof</code>.</p>
<p>
Managed commands (ISO/Fanuc): G68 (2D rotation), G68.2 (tilted work plane), G69 (cancel).
Siemens equivalent: CYCLE800, ROT/AROT (handled by separate syntax).
Heidenhain equivalent: PLANE SPATIAL / PLANE RESET (handled by separate syntax).
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.IToolHeightCompensationDef.html">IToolHeightCompensationDef</a></dt>
<dd><p>Tool height compensation state written by
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.ToolHeightOffsetSyntax.html">ToolHeightOffsetSyntax</a>.
Property names are used as JSON keys via <code>nameof</code>.
The JSON section can be deserialized to an instance implementing this interface.</p>
<p>
Managed commands (ISO/Fanuc): G43, G44, G49.
Fanuc extension: G43.4 (TCPM — parsed only in Fanuc syntax list).
Siemens equivalent: TRAFOOF/TRAORI (handled by separate syntax).
Heidenhain equivalent: TOOL CALL / M128/M129 (handled by separate syntax).
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.ITransformationDef.html">ITransformationDef</a></dt>
<dd><p>Chain of named ProgramXyz → MachineCoordinate transformation entries.
Stored as a <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonarray">JsonArray</a> of entries, each with
<code>&ldquo;Source&rdquo;</code>, <code>&ldquo;Kind&rdquo;</code>, and <code>&ldquo;Mat4d&rdquo;</code> keys.
Each contributing <a class="xref" href="Hi.NcParsers.Syntaxs.INcSyntax.html">INcSyntax</a> adds or replaces its own
entry by source name.
<a class="xref" href="Hi.NcParsers.Syntaxs.TransformationUtil.html#Hi_NcParsers_Syntaxs_TransformationUtil_GetComposedTransform_System_Text_Json_Nodes_JsonObject_">GetComposedTransform(JsonObject)</a>
composes entries in order: <code>McXyz = ProgramXyz * T[0] * T[1] * ... * T[n]</code>.</p>
<p>
<b><code>Kind</code> contour-validity classification.</b> Each entry is either:
<ul><li><code>"Static"</code> — the Mat4d is valid for any point along the contour.
Tilt, coord-offset, and the kinematic pivot in non-RTCP / rotary-stable
blocks are all Static.</li><li><code>"Dynamic"</code> — the Mat4d is a <i>block-endpoint snapshot</i> of a
rotary-state-dependent transform (RTCP rotary-dynamic). Composition still
yields a correct endpoint MC, but the matrix is not contour-valid:
intermediate CL-point positions cannot be derived by applying it to an
interpolated ProgramXyz. The semantic layer
(<a class="xref" href="Hi.NcParsers.Semantics.ClLinearMotionSemantic.html">ClLinearMotionSemantic</a>) handles per-step IK
separately.</li></ul>
Use <a class="xref" href="Hi.NcParsers.Syntaxs.TransformationUtil.html#Hi_NcParsers_Syntaxs_TransformationUtil_HasDynamicEntry_System_Text_Json_Nodes_JsonObject_">HasDynamicEntry(JsonObject)</a> to detect
the presence of any Dynamic entry on this block.
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.IUnitDef.html">IUnitDef</a></dt>
<dd><p>Unit-system state (ISO Group 06: G20 inch / G21 metric).
Written by <a class="xref" href="Hi.NcParsers.LogicSyntaxs.UnitModeSyntax.html">UnitModeSyntax</a>. Modal.</p>
<p>
HiNC's NC pipeline works exclusively in millimetres. G21 is therefore
a no-op confirmation of the default; G20 is reported as an
Unsupported Error and callers are expected to pre-convert the NC
program to metric before loading.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Keywords.IUnparsedTextDef.html">IUnparsedTextDef</a></dt>
<dd><p>JSON section schema carrying the residual block text that was not consumed
by any registered syntax. Used for diagnostics and round-trip preservation.</p>
</dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
</div>
</div>
</footer>
</body>
</html>