Archived
deploy webservice static-file routing for docsite folder URLs, per-instance step-cache db, and constant-height panel title bars.
This commit is contained in:
@@ -6,7 +6,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Class CircularMotionSyntax | HiAPI-C# 2025 ">
|
||||
|
||||
<meta name="description" content="Writes motion for circular commands (ISO G02/G03). Detects motion mode from , reads I/J/K center offsets or R radius from , computes arc center in program coordinates, and writes a one-shot (form + arc params) plus a modal (Term). G02/G03 mode is modal (Group 01) — persists across blocks via . Arc parameters (I/J/K/R) are per-block and must be present in every arc block. Must be placed before in the syntax chain. Both share the Group 01 motion slot; whichever writes a first claims it.">
|
||||
<meta name="description" content="Writes motion for circular commands (ISO G02/G03). Detects motion mode from , reads I/J/K center offsets or R radius from , computes arc center in program coordinates, and writes a one-shot (form + arc params) plus a modal (Term). G02/G03 mode is modal (Group 01) — persists across blocks via . Arc parameters (I/J/K/R) are per-block and must be present in every arc block. Must be placed before in the syntax chain. Both share the Group 01 motion slot; whichever writes a first claims it. switches the I/J/K reading to absolute center coordinates (Heidenhain DIN/ISO — the ISO twin of the Klartext CC pole; the Heidenhain list sets it, every other brand keeps the offset default). In that mode the center is modal: letters not written in a block inherit the previous absolute pole (, carried by the brand's ), a letter never written falls back to the arc start's component, a letters-free block that commands an endpoint continues the modal arc off the pole (a flags-only block stays motionless), a G91 block reads offsets again and breaks the pole chain, and the plane-normal letter is a center coordinate — never the per-turn helix pitch. Behavior mirrors HardNcLine.BuildArcNcArg + ArcNcArg.GetCenterOrCenterOnBeginPlane (HiUniNc 3.1.152.2) bit for bit.">
|
||||
<link rel="icon" href="../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../public/main.css">
|
||||
@@ -114,6 +114,23 @@ Must be placed before <a class="xref" href="Hi.NcParsers.LogicSyntaxs.LinearMoti
|
||||
syntax chain. Both share the Group 01 motion slot; whichever
|
||||
writes a <a class="xref" href="Hi.NcParsers.Keywords.MotionEvent.html">MotionEvent</a> first claims it.
|
||||
</p>
|
||||
<p>
|
||||
<a class="xref" href="Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html#Hi_NcParsers_LogicSyntaxs_CircularMotionSyntax_IsIjkAbsolute">IsIjkAbsolute</a> switches the I/J/K reading to absolute
|
||||
center coordinates (Heidenhain DIN/ISO — the ISO twin of the
|
||||
Klartext CC pole; the Heidenhain list sets it, every other brand
|
||||
keeps the offset default). In that mode the center is modal: letters
|
||||
not written in a block inherit the previous absolute pole
|
||||
(<a class="xref" href="Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.html#Hi_NcParsers_LogicSyntaxs_CircularMotionSyntax_AbsoluteIjkPoleKey">AbsoluteIjkPoleKey</a>, carried by the brand's
|
||||
<a class="xref" href="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html">ModalCarrySyntax</a>), a letter never
|
||||
written falls back to the arc start's component, a letters-free
|
||||
block that commands an endpoint continues the modal arc off the
|
||||
pole (a flags-only block stays motionless), a G91 block reads
|
||||
offsets again and breaks the pole chain, and the plane-normal letter
|
||||
is a center coordinate — never the per-turn helix pitch. Behavior
|
||||
mirrors <code>HardNcLine.BuildArcNcArg</code> +
|
||||
<code>ArcNcArg.GetCenterOrCenterOnBeginPlane</code> (HiUniNc 3.1.152.2)
|
||||
bit for bit.
|
||||
</p>
|
||||
</div>
|
||||
<div class="markdown conceptual"></div>
|
||||
|
||||
@@ -347,8 +364,8 @@ semantic knows to draw the closed loop:
|
||||
}</code></pre>
|
||||
Fanuc L parameter (helix turn count, 1-based) — <code>L3</code> on a
|
||||
start==end closed loop means three total turns, so
|
||||
<code>AdditionalCircleNum = L − 1 = 2</code>. Matches legacy
|
||||
<code>NcProc.cs:442</code>; the L parameter is consumed alongside I/J/K/R:
|
||||
<code>AdditionalCircleNum = L − 1 = 2</code>. Matches the legacy
|
||||
HardNc reading; the L parameter is consumed alongside I/J/K/R:
|
||||
#BeforeBuild:
|
||||
<pre><code class="lang-csharp">{
|
||||
"Parsing": { "Flags": ["G02"], "I": 5, "J": 0, "L": 3 },
|
||||
@@ -371,8 +388,8 @@ arc, it is the per-turn axial pitch, not a center offset. Here
|
||||
<code>K = −3</code> mm/turn over <code>ΔZ = −9</code> mm gives
|
||||
<code>AdditionalCircleNum = floor(−9 / −3) = 3</code>. The center stays
|
||||
on the begin-plane (Z = 0) — <code>ResolveCenterFromIjk</code> zeros the
|
||||
plane-normal component before adding to begin. Matches legacy
|
||||
<code>NcProc.cs:458</code>:
|
||||
plane-normal component before adding to begin. Matches the legacy
|
||||
HardNc reading:
|
||||
#BeforeBuild:
|
||||
<pre><code class="lang-csharp">{
|
||||
"Parsing": { "Flags": ["G02"], "I": 5, "J": 0, "K": -3 },
|
||||
@@ -389,6 +406,95 @@ plane-normal component before adding to begin. Matches legacy
|
||||
"AdditionalCircleNum": 3
|
||||
}
|
||||
}</code></pre>
|
||||
Absolute I/J (<code>IsIjkAbsolute = true</code> on the SUT — the
|
||||
Heidenhain DIN/ISO reading; values taken from a real production
|
||||
program): I/J ARE the center's program coordinates, the center
|
||||
is locked onto the begin plane (Z from the previous block), the
|
||||
post-inheritance letters are recorded as the modal
|
||||
<code>AbsoluteIjkPole</code> section and the event is stamped
|
||||
<code>IsIjkAbsolute</code> for the NcOpt splition write-back (the arc
|
||||
start comes from the predecessor's <code>MachineCoordinateState</code> —
|
||||
the modal anchor <code>GetLastProgramXyz</code> reads; no transform chain
|
||||
here, so it equals the program position):
|
||||
#Previous:
|
||||
<pre><code class="lang-csharp">{ "MachineCoordinateState": { "X": -23.958, "Y": -0.0965, "Z": 3.4338 } }</code></pre>
|
||||
#BeforeBuild:
|
||||
<pre><code class="lang-csharp">{
|
||||
"Parsing": { "Flags": ["G02"], "I": -23.3261, "J": -1.2062 },
|
||||
"ProgramXyz": { "X": -23.3253, "Y": 0.0708, "Z": 3.4338 }
|
||||
}</code></pre>
|
||||
#AfterBuild:
|
||||
<pre><code class="lang-csharp">{
|
||||
"ProgramXyz": { "X": -23.3253, "Y": 0.0708, "Z": 3.4338 },
|
||||
"AbsoluteIjkPole": { "I": -23.3261, "J": -1.2062 },
|
||||
"MotionState": { "Term": "G02" },
|
||||
"MotionEvent": {
|
||||
"Form": "McArc",
|
||||
"ArcCenter": { "X": -23.3261, "Y": -1.2062, "Z": 3.4338 },
|
||||
"IsCcw": false,
|
||||
"AdditionalCircleNum": 0,
|
||||
"IsIjkAbsolute": true
|
||||
}
|
||||
}</code></pre>
|
||||
Absolute modal pole (the CC-pole twin): a continuation block writes
|
||||
only J — the I component inherits the previous block's
|
||||
<code>AbsoluteIjkPole</code>, the G03 mode continues via
|
||||
<code>#Previous:</code> <code>MotionState.Term</code>, and the refreshed pole is
|
||||
written back:
|
||||
#Previous:
|
||||
<pre><code class="lang-csharp">{
|
||||
"MachineCoordinateState": { "X": -25.2297, "Y": 0.0704, "Z": 0 },
|
||||
"AbsoluteIjkPole": { "I": -25.2029, "J": -0.9154 },
|
||||
"MotionState": { "Term": "G03" }
|
||||
}</code></pre>
|
||||
#BeforeBuild:
|
||||
<pre><code class="lang-csharp">{
|
||||
"Parsing": { "J": -0.9154 },
|
||||
"ProgramXyz": { "X": -24.9288, "Y": 0.5929, "Z": 0 }
|
||||
}</code></pre>
|
||||
#AfterBuild:
|
||||
<pre><code class="lang-csharp">{
|
||||
"ProgramXyz": { "X": -24.9288, "Y": 0.5929, "Z": 0 },
|
||||
"AbsoluteIjkPole": { "I": -25.2029, "J": -0.9154 },
|
||||
"MotionState": { "Term": "G03" },
|
||||
"MotionEvent": {
|
||||
"Form": "McArc",
|
||||
"ArcCenter": { "X": -25.2029, "Y": -0.9154, "Z": 0 },
|
||||
"IsCcw": true,
|
||||
"AdditionalCircleNum": 0,
|
||||
"IsIjkAbsolute": true
|
||||
}
|
||||
}</code></pre>
|
||||
G91 on an <code>IsIjkAbsolute</code> SUT switches the block back to the
|
||||
ordinary start-to-center offsets (center = begin + (I, J)), ignores
|
||||
the inherited pole and BREAKS the pole chain — the emptied section
|
||||
blocks the ModalCarry copy, so a later absolute block falls back to
|
||||
the arc start (the <code>preArcNcArg.IsIjkAbsolute</code> check of
|
||||
<code>HardNcLine.BuildArcNcArg</code>):
|
||||
#Previous:
|
||||
<pre><code class="lang-csharp">{
|
||||
"MachineCoordinateState": { "X": 10, "Y": 0, "Z": 0 },
|
||||
"AbsoluteIjkPole": { "I": -25.2029, "J": -0.9154 }
|
||||
}</code></pre>
|
||||
#BeforeBuild:
|
||||
<pre><code class="lang-csharp">{
|
||||
"Parsing": { "Flags": ["G02"], "I": 10, "J": 0 },
|
||||
"Positioning": { "Term": "G91", "Mode": "Incremental" },
|
||||
"ProgramXyz": { "X": 20, "Y": 10, "Z": 0 }
|
||||
}</code></pre>
|
||||
#AfterBuild:
|
||||
<pre><code class="lang-csharp">{
|
||||
"Positioning": { "Term": "G91", "Mode": "Incremental" },
|
||||
"ProgramXyz": { "X": 20, "Y": 10, "Z": 0 },
|
||||
"AbsoluteIjkPole": {},
|
||||
"MotionState": { "Term": "G02" },
|
||||
"MotionEvent": {
|
||||
"Form": "McArc",
|
||||
"ArcCenter": { "X": 20, "Y": 0, "Z": 0 },
|
||||
"IsCcw": false,
|
||||
"AdditionalCircleNum": 0
|
||||
}
|
||||
}</code></pre>
|
||||
|
||||
|
||||
|
||||
@@ -457,10 +563,87 @@ plane-normal component before adding to begin. Matches legacy
|
||||
|
||||
|
||||
|
||||
<h2 class="section" id="fields">Fields
|
||||
</h2>
|
||||
|
||||
|
||||
|
||||
<h3 id="Hi_NcParsers_LogicSyntaxs_CircularMotionSyntax_AbsoluteIjkPoleKey" data-uid="Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.AbsoluteIjkPoleKey">
|
||||
AbsoluteIjkPoleKey
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Root-section key of the modal absolute-center pole (the letters of
|
||||
the last absolute arc, post-inheritance — the SoftNc dual of
|
||||
<code>HardNcLine.ArcNcArg.Ijk</code>). Written by every effective-absolute
|
||||
arc block, emptied by a G91 arc block to break the chain, and
|
||||
carried across intermediate blocks by the brand list's
|
||||
<a class="xref" href="Hi.NcParsers.PostLogicSyntaxs.ModalCarrySyntax.html">ModalCarrySyntax</a> Logic track. Kept
|
||||
apart from <code>HeidenhainCircleCenterSyntax</code>'s Klartext CC
|
||||
section — the two dialect poles never share a key.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public const string AbsoluteIjkPoleKey = "AbsoluteIjkPole"</code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<h4 class="section">Field Value</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h2 class="section" id="properties">Properties
|
||||
</h2>
|
||||
|
||||
|
||||
<a id="Hi_NcParsers_LogicSyntaxs_CircularMotionSyntax_IsIjkAbsolute_" data-uid="Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.IsIjkAbsolute*"></a>
|
||||
|
||||
<h3 id="Hi_NcParsers_LogicSyntaxs_CircularMotionSyntax_IsIjkAbsolute" data-uid="Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.IsIjkAbsolute">
|
||||
IsIjkAbsolute
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>When true, I/J/K address the circle center as absolute program
|
||||
coordinates instead of start-to-center offsets, with the modal-pole
|
||||
/ G91 semantics described on the class doc. Set by the Heidenhain
|
||||
list (DIN/ISO dialect); every other brand keeps the offset default.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public bool IsIjkAbsolute { get; set; }</code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h4 class="section">Property Value</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
|
||||
<dd></dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_NcParsers_LogicSyntaxs_CircularMotionSyntax_Name_" data-uid="Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.Name*"></a>
|
||||
|
||||
<h3 id="Hi_NcParsers_LogicSyntaxs_CircularMotionSyntax_Name" data-uid="Hi.NcParsers.LogicSyntaxs.CircularMotionSyntax.Name">
|
||||
|
||||
Reference in New Issue
Block a user