This repository has been archived on 2026-10-11. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
HiNC-2025-win-desktop-Deploy/App/wwwroot/HiAPI-docsite/api/Hi.Numerical.CsvParsers.html
T

338 lines
22 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.Numerical.CsvParsers | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Namespace Hi.Numerical.CsvParsers | 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.Numerical.CsvParsers">
<h1 id="Hi_Numerical_CsvParsers" data-uid="Hi.Numerical.CsvParsers" class="text-break">Namespace Hi.Numerical.CsvParsers</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.Numerical.CsvParsers.CsvActDataSemantic.html">CsvActDataSemantic</a></dt>
<dd><p>CSV extension semantic: emits <a class="xref" href="Hi.Numerical.Acts.ActData.html">ActData</a> from the residual
<code>CsvRow</code> columns — those not claimed by any <code>RowTo*Syntax</code>
(tool id, spindle, feedrate, coolant, time, csscript) nor by the machine /
cutter coordinate prefixes. A caller-supplied
<a class="xref" href="Hi.Numerical.CsvParsers.CsvRunnerConfig.html#Hi_Numerical_CsvParsers_CsvRunnerConfig_ParsingDictionary">ParsingDictionary</a> entry is applied to its
column's raw text; the rest pass through as their pre-typed
number / bool / string. Carries arbitrary recorded channels
(file/line bookkeeping, sensor columns, etc.) onto the step.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.CsvParsers.CsvActualTimeSemantic.html">CsvActualTimeSemantic</a></dt>
<dd><p>CSV extension semantic: emits <a class="xref" href="Hi.Numerical.Acts.ActActualTimecode.html">ActActualTimecode</a> from the
<a class="xref" href="Hi.Numerical.CsvParsers.CsvRunnerConfig.html#Hi_Numerical_CsvParsers_CsvRunnerConfig_ActualTimeTag">ActualTimeTag</a> cell of the decoded
<code>CsvRow</code>. This is telemetry the general semantic list does not cover —
the absolute controller timestamp of the recorded sample. Stateless; the
duration that consumes this timestamp is computed independently by
<a class="xref" href="Hi.Numerical.CsvParsers.CsvMotionSemantic.html">CsvMotionSemantic</a> via <span class="xref">Hi.Numerical.CsvParsers.CsvTimingUtil</span>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.CsvParsers.CsvMotionSemantic.html">CsvMotionSemantic</a></dt>
<dd><p>CSV motion semantic — the recorded-duration counterpart of the general
<a class="xref" href="Hi.NcParsers.Semantics.McLinearMotionSemantic.html">McLinearMotionSemantic</a>. Reads the same standardized sections
(<a class="xref" href="Hi.NcParsers.Keywords.IMotionEventDef.html">IMotionEventDef</a>, <a class="xref" href="Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html#Hi_NcParsers_Keywords_IMachineCoordinateStateDef_MachineCoordinateState">MachineCoordinateState</a>,
<a class="xref" href="Hi.NcParsers.Keywords.IFeedrateDef.html">IFeedrateDef</a>) the general motion semantic reads, but derives
the move's duration from the recorded CSV timing
(<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html">ResolveDuration(LazyLinkedListNode&lt;SyntaxPiece&gt;)</a>) instead of feedrate × distance —
because CSV is replayed telemetry where time is given, not computed.</p>
<p>
First coordinate row (no previous MC) → <a class="xref" href="Hi.Numerical.Acts.ActMcXyzabcStep.html">ActMcXyzabcStep</a> to the
point; subsequent rows → <a class="xref" href="Hi.Numerical.Acts.ActMcXyzabcLinearContour.html">ActMcXyzabcLinearContour</a> from the
previous point. The recorded feedrate is emitted as a standalone
<a class="xref" href="Hi.Numerical.Acts.ActFeedrate.html">ActFeedrate</a> on change.
</p>
<p>
Because the upstream <a class="xref" href="Hi.Numerical.CsvParsers.RowToMotionEventSyntax.html">RowToMotionEventSyntax</a> writes the full
general motion-section contract, this semantic can be replaced one-for-one
with <a class="xref" href="Hi.NcParsers.Semantics.McLinearMotionSemantic.html">McLinearMotionSemantic</a> to fall back to feedrate-derived
timing.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSyntax.html">CsvRowSyntax</a></dt>
<dd><p>Per-row CSV parsing syntax for the soft NC runner. Reads the active
<a class="xref" href="Hi.Numerical.CsvParsers.CsvSegmenter.html#Hi_Numerical_CsvParsers_CsvSegmenter_TitleList">TitleList</a> via
<a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.SegmenterDependency.html">SegmenterDependency</a>, splits the row text using
<a class="xref" href="Hi.Common.CsvUtils.CsvInputKit.html#Hi_Common_CsvUtils_CsvInputKit_GetCsvDictionary_System_Collections_Generic_IList_System_String__System_String_">GetCsvDictionary(IList&lt;string&gt;, string)</a>, and
stamps the resulting column→value map into
<a class="xref" href="Hi.NcParsers.Syntaxs.SyntaxPiece.html#Hi_NcParsers_Syntaxs_SyntaxPiece_JsonObject">JsonObject</a> under the <a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSyntax.html#Hi_Numerical_CsvParsers_CsvRowSyntax_CsvRowKey">CsvRowKey</a>
property for the downstream CSV syntaxes and semantics to consume.</p>
<p>
Numeric cells are pre-typed to <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.double">double</a> (or <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>)
at this stage so downstream readers — including the CSV semantics' backwards
walk for the previous machine coordinate — touch native JSON numbers instead
of re-parsing strings on every visit. Columns kept as strings: the script / time / spindle-direction
tags whose semantic interpretation is non-numeric, plus any column whose
key appears in <a class="xref" href="Hi.Numerical.CsvParsers.CsvRunnerConfig.html#Hi_Numerical_CsvParsers_CsvRunnerConfig_ParsingDictionary">ParsingDictionary</a> (the
caller-supplied parsing function expects the raw cell text).
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.CsvParsers.CsvRunnerConfig.html">CsvRunnerConfig</a></dt>
<dd><p>Configuration class for CSV Runner. Lives in
<a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_PipelineNcDependencyList">PipelineNcDependencyList</a> when wired with
<a class="xref" href="Hi.Numerical.CsvParsers.GeneralCsvRunner.html">GeneralCsvRunner</a>; consumed by <a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSyntax.html">CsvRowSyntax</a> and the
CSV row syntaxes/semantics for tag-name lookup and custom-field parsing.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.CsvParsers.CsvSegmenter.html">CsvSegmenter</a></dt>
<dd><p>Segments a CSV stream for the <a class="xref" href="Hi.NcParsers.SoftNcRunner.html">SoftNcRunner</a>
pipeline. Consumes the first <a class="xref" href="Hi.Common.FileLines.IndexedFileLine.html">IndexedFileLine</a> as the title
row (populating <a class="xref" href="Hi.Numerical.CsvParsers.CsvSegmenter.html#Hi_Numerical_CsvParsers_CsvSegmenter_TitleList">TitleList</a> and registering any new columns
as step variables via
<a class="xref" href="Hi.NcParsers.Dependencys.SystemWired.StepPropertyAccessDictionaryDependency.html">StepPropertyAccessDictionaryDependency</a>), then yields each
subsequent line as a one-line <a class="xref" href="Hi.NcParsers.Sentence.html">Sentence</a> for
<a class="xref" href="Hi.Numerical.CsvParsers.CsvRowSyntax.html">CsvRowSyntax</a> to parse.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.CsvParsers.GeneralCsvRunner.html">GeneralCsvRunner</a></dt>
<dd><p>Factory for a <a class="xref" href="Hi.NcParsers.SoftNcRunner.html">SoftNcRunner</a> that replays CSV telemetry through
the <b>general-semantics</b> architecture: a chain of small
<code>RowTo*Syntax</code> classes maps each decoded <code>CsvRow</code> into the same
standardized JSON sections the brand-NC pipeline writes
(<code>SpindleSpeed</code>, <code>Feedrate</code>, <code>Coolant</code>, <code>CsScript</code>,
<code>ToolChange</code>, <code>MachineCoordinateState</code>, <code>MotionEvent</code>), and a
mostly-general semantic list resolves them into acts. A handful of CSV
extension semantics cover telemetry the general list does not
(<a class="xref" href="Hi.Numerical.CsvParsers.CsvActualTimeSemantic.html">CsvActualTimeSemantic</a>, <a class="xref" href="Hi.Numerical.CsvParsers.CsvMotionSemantic.html">CsvMotionSemantic</a>,
<a class="xref" href="Hi.Numerical.CsvParsers.CsvActDataSemantic.html">CsvActDataSemantic</a>); tool changes ride the general
<a class="xref" href="Hi.NcParsers.Semantics.ToolingTeleportSemantic.html">ToolingTeleportSemantic</a> (the tool jumps to its recorded
position — no modelled tool-changer cycle).</p>
<p>
This is the flagship CSV runner — it superseded an earlier single-syntax /
single-semantic pipeline.
</p>
<p>
<b>Recorded vs. computed timing.</b> CSV is replayed telemetry, so
<a class="xref" href="Hi.Numerical.CsvParsers.CsvMotionSemantic.html">CsvMotionSemantic</a> uses the recorded sample duration
(<code>StepDuration</code> / <code>ActualTime</code> delta) rather than
feedrate × distance. Because <a class="xref" href="Hi.Numerical.CsvParsers.RowToMotionEventSyntax.html">RowToMotionEventSyntax</a> still
writes the full general motion-section contract, swapping
<a class="xref" href="Hi.Numerical.CsvParsers.CsvMotionSemantic.html">CsvMotionSemantic</a> for the general
<a class="xref" href="Hi.NcParsers.Semantics.McLinearMotionSemantic.html">McLinearMotionSemantic</a> in <a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_NcSemanticList">NcSemanticList</a>
flips the runner to feedrate-derived timing with no other change.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.CsvParsers.RowToCoolantSyntax.html">RowToCoolantSyntax</a></dt>
<dd><p>Translates the coolant column of a decoded <code>CsvRow</code> into the
standardized <a class="xref" href="Hi.NcParsers.Keywords.ICoolantDef.html">ICoolantDef</a> section consumed by the general
<a class="xref" href="Hi.NcParsers.Semantics.CoolantSemantic.html">CoolantSemantic</a>. The cell may hold a
mode name (<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>) or a boolean / 0-1 on-off flag; an
unrecognized value is a no-op.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.CsvParsers.RowToCsScriptSyntax.html">RowToCsScriptSyntax</a></dt>
<dd><p>Translates the begin/end C# script columns of a decoded <code>CsvRow</code>
(<a class="xref" href="Hi.Numerical.CsvParsers.CsvRunnerConfig.html#Hi_Numerical_CsvParsers_CsvRunnerConfig_LineBeginCsScriptTag">LineBeginCsScriptTag</a> /
<a class="xref" href="Hi.Numerical.CsvParsers.CsvRunnerConfig.html#Hi_Numerical_CsvParsers_CsvRunnerConfig_LineEndCsScriptTag">LineEndCsScriptTag</a>) into the standardized
<a class="xref" href="Hi.NcParsers.Keywords.CsScript.html">CsScript</a> section consumed by the general
<a class="xref" href="Hi.NcParsers.Semantics.CsScriptBeginSemantic.html">CsScriptBeginSemantic</a> /
<a class="xref" href="Hi.NcParsers.Semantics.CsScriptEndSemantic.html">CsScriptEndSemantic</a>. Empty cells are
skipped; an all-empty row is a no-op.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.CsvParsers.RowToFeedrateSyntax.html">RowToFeedrateSyntax</a></dt>
<dd><p>Translates the feedrate column of a decoded <code>CsvRow</code> into the
standardized <a class="xref" href="Hi.NcParsers.Keywords.IFeedrateDef.html">IFeedrateDef</a> section. CSV feedrate is recorded
in mm/min, so the section is stamped with the
<a class="xref" href="Hi.NcParsers.Keywords.Generic.IsoKeywords.html#Hi_NcParsers_Keywords_Generic_IsoKeywords_G94">G94</a> (mm/min) term and its derived unit — the
same shape <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.json.nodes.jsonobject">ReadFeedrate_mmds(JsonObject, ISentenceCarrier, NcDiagnosticProgress)</a>
expects.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.CsvParsers.RowToMachineCoordinateSyntax.html">RowToMachineCoordinateSyntax</a></dt>
<dd><p>Translates the machine-coordinate columns of a decoded <code>CsvRow</code>
(prefixed by <a class="xref" href="Hi.Numerical.CsvParsers.CsvRunnerConfig.html#Hi_Numerical_CsvParsers_CsvRunnerConfig_MachineCoordinatePrefix">MachineCoordinatePrefix</a>, e.g.
<code>MC.X</code> … <code>MC.C</code>) into the standardized
<a class="xref" href="Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html#Hi_NcParsers_Keywords_IMachineCoordinateStateDef_MachineCoordinateState">MachineCoordinateState</a> section.
Linear axes (X/Y/Z) are millimetres; rotary axes (A/B/C) are raw degrees,
matching the convention <a class="xref" href="Hi.NcParsers.LogicSyntaxs.McAbcSyntax.html">McAbcSyntax</a>
writes and <a class="xref" href="Hi.NcParsers.LogicSyntaxs.ProgramXyzUtil.html#Hi_NcParsers_LogicSyntaxs_ProgramXyzUtil_ReadMcXyzabc_System_Text_Json_Nodes_JsonObject_">ReadMcXyzabc(JsonObject)</a>
reads (degrees → radians). Only axes actually present in the row are
written; an all-absent row is a no-op.</p>
<p>Must run before <a class="xref" href="Hi.Numerical.CsvParsers.RowToMotionEventSyntax.html">RowToMotionEventSyntax</a>.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.CsvParsers.RowToMotionEventSyntax.html">RowToMotionEventSyntax</a></dt>
<dd><p>Marks every CSV row that carries a
<a class="xref" href="Hi.NcParsers.Keywords.IMachineCoordinateStateDef.html#Hi_NcParsers_Keywords_IMachineCoordinateStateDef_MachineCoordinateState">MachineCoordinateState</a> section as a
<a class="xref" href="Hi.NcParsers.Keywords.Generic.MotionForm.html#Hi_NcParsers_Keywords_Generic_MotionForm_McLinear">McLinear</a> feed move by writing the standardized
<a class="xref" href="Hi.NcParsers.Keywords.IMotionEventDef.html">IMotionEventDef</a> (+ modal <a class="xref" href="Hi.NcParsers.Keywords.IMotionStateDef.html">IMotionStateDef</a>)
sections. This keeps the motion-section contract identical to the one the
general <a class="xref" href="Hi.NcParsers.Semantics.McLinearMotionSemantic.html">McLinearMotionSemantic</a> reads,
so the CSV pipeline's <a class="xref" href="Hi.Numerical.CsvParsers.CsvMotionSemantic.html">CsvMotionSemantic</a> (recorded-duration)
can be swapped for the general feedrate-derived semantic by changing only
the semantic list.</p>
<p>
CSV telemetry has no rapid concept, so <a class="xref" href="Hi.NcParsers.Keywords.IMotionEventDef.html#Hi_NcParsers_Keywords_IMotionEventDef_IsRapid">IsRapid</a>
is never set (feed move). Must run after
<a class="xref" href="Hi.Numerical.CsvParsers.RowToMachineCoordinateSyntax.html">RowToMachineCoordinateSyntax</a>.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.CsvParsers.RowToSpindleSyntax.html">RowToSpindleSyntax</a></dt>
<dd><p>Translates the spindle columns of a decoded <code>CsvRow</code> into the
standardized <a class="xref" href="Hi.NcParsers.Keywords.ISpindleSpeedDef.html">ISpindleSpeedDef</a> section that the general
<a class="xref" href="Hi.NcParsers.Semantics.SpindleSpeedSemantic.html">SpindleSpeedSemantic</a> consumes.
Reads <a class="xref" href="Hi.Numerical.CsvParsers.CsvRunnerConfig.html#Hi_Numerical_CsvParsers_CsvRunnerConfig_SpindleSpeedTag_rpm">SpindleSpeedTag_rpm</a> (numeric) and
<a class="xref" href="Hi.Numerical.CsvParsers.CsvRunnerConfig.html#Hi_Numerical_CsvParsers_CsvRunnerConfig_SpindleDirectionTag">SpindleDirectionTag</a> (enum name); when only
the speed is present the direction defaults to
<a class="xref" href="Hi.Numerical.SpindleDirection.html#Hi_Numerical_SpindleDirection_CW">CW</a> (matching the legacy CSV behavior).</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.CsvParsers.RowToTimingSyntax.html">RowToTimingSyntax</a></dt>
<dd><p>Moves the recorded-timing columns of a decoded <code>CsvRow</code>
(<a class="xref" href="Hi.Numerical.CsvParsers.CsvRunnerConfig.html#Hi_Numerical_CsvParsers_CsvRunnerConfig_DurationTag">DurationTag</a> /
<a class="xref" href="Hi.Numerical.CsvParsers.CsvRunnerConfig.html#Hi_Numerical_CsvParsers_CsvRunnerConfig_ActualTimeTag">ActualTimeTag</a>) into a dedicated
<code>CsvTiming</code> section, consuming them from <code>CsvRow</code>. The cells stay
as raw strings (the source format may be a <code>TimeSpan</code> or
<code>DateTime</code> literal); parsing happens later in
<span class="xref">Hi.Numerical.CsvParsers.CsvTimingUtil</span>. Having a syntax own the timing tags — like the
other <code>RowTo*</code> syntaxes own their columns — is what lets
<a class="xref" href="Hi.Numerical.CsvParsers.CsvActDataSemantic.html">CsvActDataSemantic</a> treat whatever remains in <code>CsvRow</code> as
residual telemetry without a hard-coded consumed-key list.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.Numerical.CsvParsers.RowToToolingSyntax.html">RowToToolingSyntax</a></dt>
<dd><p>Translates the tool-id column of a decoded <code>CsvRow</code> into the
standardized <code>ToolChange</code> section
(<a class="xref" href="Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html#Hi_NcParsers_LogicSyntaxs_ToolChangeSyntax_SectionName">SectionName</a>). The active tool number is
always written; <a class="xref" href="Hi.NcParsers.LogicSyntaxs.ToolChangeSyntax.html#Hi_NcParsers_LogicSyntaxs_ToolChangeSyntax_IsChangeKey">IsChangeKey</a> is set when the
tool id differs from the previous row (including the first occurrence), so
the section both drives
<a class="xref" href="Hi.NcParsers.Semantics.ToolingTeleportSemantic.html">ToolingTeleportSemantic</a>
(teleport-on-change) and stays compatible with the general
<a class="xref" href="Hi.NcParsers.Semantics.ToolChangeSemantic.html">ToolChangeSemantic</a>.</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>