deploy.
This commit is contained in:
@@ -1943,7 +1943,12 @@ otherwise falls back to <a class="xref" href="Hi.Numerical.HardNcEnv.html#Hi_Num
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Closes the current project.</p>
|
||||
<div class="markdown level1 summary"><p>Closes the current project. Like the other five project-file operations
|
||||
this runs under <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.action">RunExclusiveProjectFileOp(Action)</a>: a close arriving
|
||||
while a load or a save holds the file is cancelled with
|
||||
<a class="xref" href="Hi.MachiningProcs.ProjectFileBusyException.html">ProjectFileBusyException</a> instead of interleaving with it.
|
||||
It was the one operation left outside the gate, which is why
|
||||
<code>ProjectController.CloseProject</code>'s 409 handler could never fire.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
@@ -1960,6 +1965,12 @@ otherwise falls back to <a class="xref" href="Hi.Numerical.HardNcEnv.html#Hi_Num
|
||||
|
||||
|
||||
|
||||
<h4 class="section">Exceptions</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="Hi.MachiningProcs.ProjectFileBusyException.html">ProjectFileBusyException</a></dt>
|
||||
<dd><p>Another project-file operation is in progress.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1058,8 +1058,10 @@ Internal Use Only.</p>
|
||||
<div class="markdown level1 summary"><p>Emit one-shot session <code>ConfigurationError</code>s naming the root cause when the
|
||||
currently equipped tool's <a class="xref" href="Hi.Milling.Cutters.MillingCutter.html">MillingCutter</a> has an unreasonable
|
||||
upper-beam / shank geometry (see
|
||||
<a class="xref" href="Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_GetUpperBeamGeometryIssues">GetUpperBeamGeometryIssues()</a>) — e.g. an
|
||||
<a class="xref" href="Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_ReportUpperBeamGeometryIssues_System_IProgress_Hi_Common_Messages_IMessage__System_Object_">ReportUpperBeamGeometryIssues(IProgress<IMessage>, object)</a>) — e.g. an
|
||||
<code>ExtendedCylinder</code> beam whose <code>FullLength</code> sits below the flute height.
|
||||
The error's wording is the cutter's own literal emit, shared with the web API's
|
||||
edit-time warnings, so the tool it belongs to rides in the detail payload.
|
||||
Before this check, such a setting surfaced only as a per-step
|
||||
<code>NullReferenceException</code> cascade inside the thermal physics, with nothing
|
||||
naming the beam. Additionally emits a <code>Cutter-Shank–ThermalModelUnavailable</code>
|
||||
|
||||
@@ -104,6 +104,7 @@ Class SetupController
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">[ApiController]
|
||||
[Route("api/[controller]/[action]")]
|
||||
[ProducesResponseType(typeof(ApiActionResult), 409)]
|
||||
public class SetupController : ControllerBase</code></pre>
|
||||
</div>
|
||||
|
||||
@@ -700,6 +701,13 @@ public class SetupController : ControllerBase</code></pre>
|
||||
|
||||
|
||||
|
||||
<h2 id="Hi_MachiningProcs_SetupController_remarks">Remarks</h2>
|
||||
<div class="markdown level0 remarks"><p>Project-level surface: every action but <a class="xref" href="Hi.MachiningProcs.SetupController.html#Hi_MachiningProcs_SetupController_LoadProject_System_String_">LoadProject(string)</a> writes through members
|
||||
that are null until a project is open. Without the filter those writes do not throw — the
|
||||
serialization helpers are extension methods and the setup-face setters return early on a
|
||||
null <code>SetupEquipment</code> — so the caller got HTTP 200 for a save that saved nothing.
|
||||
The filter turns that silent false-success into an honest HTTP 409 + <a class="xref" href="Hi.MachiningProcs.ApiActionResult.html">ApiActionResult</a>.</p>
|
||||
</div>
|
||||
|
||||
|
||||
<h2 class="section" id="constructors">Constructors
|
||||
@@ -872,6 +880,9 @@ public void LoadProject(string filePath)</code></pre>
|
||||
|
||||
|
||||
|
||||
<h4 class="section" id="Hi_MachiningProcs_SetupController_LoadProject_System_String__remarks">Remarks</h4>
|
||||
<div class="markdown level1 remarks"><p>This is how a project comes into being, so it runs before one exists.</p>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -2472,17 +2472,12 @@ session paths read the value from
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Collects human-readable configuration issues on the upper-beam / shank
|
||||
geometry — the settings that used to surface only as an opaque per-step
|
||||
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.nullreferenceexception">NullReferenceException</a> cascade inside the thermal physics
|
||||
(e.g. an <a class="xref" href="Hi.Geom.ExtendedCylinder.html">ExtendedCylinder</a> beam whose
|
||||
<a class="xref" href="Hi.Geom.ExtendedCylinder.html#Hi_Geom_ExtendedCylinder_FullLength">FullLength</a> is below the flute height, so the
|
||||
shank solid inverts and <span class="xref">Hi.Milling.Cutters.MillingCutter.GetShankThermalZrList()</span> cannot build).
|
||||
Returns <code>(Id, Message)</code> pairs following the structured-id convention of
|
||||
the <code>IMessage</code> channel (e.g. <code>Cutter-UpperBeam–ExtendedCylinderFullLengthTooShort</code>);
|
||||
empty when no upper beam is configured (a legal state — physics runs without
|
||||
a shank) or the beam is consistent. Shared by the physics runner (tool-change
|
||||
<code>ConfigurationError</code>) and the web API (post-edit validation warnings).</p>
|
||||
<div class="markdown level1 summary"><p>The issues <a class="xref" href="Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_ReportUpperBeamGeometryIssues_System_IProgress_Hi_Common_Messages_IMessage__System_Object_">ReportUpperBeamGeometryIssues(IProgress<IMessage>, object)</a> would report, as
|
||||
<code>(Id, Message)</code> pairs — the id in the structured-id convention of the
|
||||
<code>IMessage</code> channel (e.g. <code>Cutter-UpperBeam–ExtendedCylinderFullLengthTooShort</code>),
|
||||
the message its rendered English notification. Empty when no upper beam is
|
||||
configured or the beam is consistent. The web API's edit-time view of the same
|
||||
detection (<code>warnings[]</code> of the upper-beam endpoints).</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
@@ -2624,6 +2619,62 @@ and chains <code>Reg(factory)</code> on dependents. Idempotent.</p>
|
||||
|
||||
|
||||
|
||||
<a id="Hi_Milling_Cutters_MillingCutter_ReportUpperBeamGeometryIssues_" data-uid="Hi.Milling.Cutters.MillingCutter.ReportUpperBeamGeometryIssues*"></a>
|
||||
|
||||
<h3 id="Hi_Milling_Cutters_MillingCutter_ReportUpperBeamGeometryIssues_System_IProgress_Hi_Common_Messages_IMessage__System_Object_" data-uid="Hi.Milling.Cutters.MillingCutter.ReportUpperBeamGeometryIssues(System.IProgress{Hi.Common.Messages.IMessage},System.Object)">
|
||||
ReportUpperBeamGeometryIssues(IProgress<IMessage>, object)
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Reports the configuration issue on the upper-beam / shank geometry — the
|
||||
settings that used to surface only as an opaque per-step
|
||||
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.nullreferenceexception">NullReferenceException</a> cascade inside the thermal physics
|
||||
(e.g. an <a class="xref" href="Hi.Geom.ExtendedCylinder.html">ExtendedCylinder</a> beam whose
|
||||
<a class="xref" href="Hi.Geom.ExtendedCylinder.html#Hi_Geom_ExtendedCylinder_FullLength">FullLength</a> is below the flute height, so the
|
||||
shank solid inverts and <span class="xref">Hi.Milling.Cutters.MillingCutter.GetShankThermalZrList()</span> cannot build) —
|
||||
as a <code>ConfigurationError</code> on <code class="paramref">sink</code>, at most one per
|
||||
call. Nothing is reported when no upper beam is configured (a legal state —
|
||||
physics runs without a shank) or the beam is consistent. The wordings live
|
||||
here, one literal id and one literal template per emit, because the
|
||||
engine-message gate reads both off the call: the physics runner hands in its
|
||||
step-anchored sink at tool change, the web API a <a class="xref" href="Hi.Common.Messages.MessageCollector.html">MessageCollector</a>
|
||||
through <a class="xref" href="Hi.Milling.Cutters.MillingCutter.html#Hi_Milling_Cutters_MillingCutter_GetUpperBeamGeometryIssues">GetUpperBeamGeometryIssues()</a> (post-edit validation warnings).</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public int ReportUpperBeamGeometryIssues(IProgress<IMessage> sink, object detail = null)</code></pre>
|
||||
</div>
|
||||
|
||||
<h4 class="section">Parameters</h4>
|
||||
<dl class="parameters">
|
||||
<dt><code>sink</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.iprogress-1">IProgress</a><<a class="xref" href="Hi.Common.Messages.IMessage.html">IMessage</a>></dt>
|
||||
<dd><p>Destination of the error; null is a no-op.</p>
|
||||
</dd>
|
||||
<dt><code>detail</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></dt>
|
||||
<dd><p>Optional detail payload attached to the error — the runner
|
||||
names the tool here, since the templates are shared with the web API and cannot
|
||||
carry a tool prefix.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h4 class="section">Returns</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
|
||||
<dd><p>The number of issues detected, 0 or 1 — reported on <code class="paramref">sink</code> when it is non-null.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<a id="Hi_Milling_Cutters_MillingCutter_SetShaperStlResolution_" data-uid="Hi.Milling.Cutters.MillingCutter.SetShaperStlResolution*"></a>
|
||||
|
||||
<h3 id="Hi_Milling_Cutters_MillingCutter_SetShaperStlResolution_Hi_Geom_Resolution_PolarResolution2d_" data-uid="Hi.Milling.Cutters.MillingCutter.SetShaperStlResolution(Hi.Geom.Resolution.PolarResolution2d)">
|
||||
|
||||
+3
-2
@@ -6,7 +6,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Class HeidenhainFnFeatureSyntax | HiAPI-C# 2025 ">
|
||||
|
||||
<meta name="description" content="Structured skip for the Heidenhain FN opcodes the simulation does not implement (FN 14 error display, FN 16 print, FN 18 SYSREAD, table/pallet opcodes …): the whole statement is consumed and a single HeidenhainFn&ndash;Unsupported warning names the opcode. Two opcode families pass through untouched: FN 0-5 belong to (which runs earlier), and the jump family FN 9-12 belongs to (also earlier) — the pass-through here is the malformed-jump safety net: a jump line the owner's grammar rejects surfaces as visible residue instead of a fabricated skip. Claiming the statement here is load-bearing, not cosmetic: an FN 18 line like FN18: SYSREAD Q94= ID50 NR11 contains a Q94= token that the bare Q-assignment capture (later in the Parsing bundle) would otherwise grab, storing the garbage string ID50 into Q94. The target parameter must instead stay vacant so dependent expressions fail soft (VariableExpression--Unevaluated) — no fabricated values.">
|
||||
<meta name="description" content="Structured skip for the Heidenhain FN opcodes the simulation does not implement (FN 14 error display, FN 16 print, FN 18 SYSREAD, table/pallet opcodes …): the whole statement is consumed and a single warning names the opcode — HeidenhainFn&ndash;Unsupported, or HeidenhainFn&ndash;UnsupportedSysread for the FN 18 wording. Two opcode families pass through untouched: FN 0-5 belong to (which runs earlier), and the jump family FN 9-12 belongs to (also earlier) — the pass-through here is the malformed-jump safety net: a jump line the owner's grammar rejects surfaces as visible residue instead of a fabricated skip. Claiming the statement here is load-bearing, not cosmetic: an FN 18 line like FN18: SYSREAD Q94= ID50 NR11 contains a Q94= token that the bare Q-assignment capture (later in the Parsing bundle) would otherwise grab, storing the garbage string ID50 into Q94. The target parameter must instead stay vacant so dependent expressions fail soft (VariableExpression--Unevaluated) — no fabricated values.">
|
||||
<link rel="icon" href="../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../public/main.css">
|
||||
@@ -100,7 +100,8 @@ Class HeidenhainFnFeatureSyntax
|
||||
<div class="markdown summary"><p>Structured skip for the Heidenhain FN opcodes the simulation does not
|
||||
implement (<code>FN 14</code> error display, <code>FN 16</code> print, <code>FN 18</code>
|
||||
SYSREAD, table/pallet opcodes …): the whole statement is consumed and a
|
||||
single <code>HeidenhainFn–Unsupported</code> warning names the opcode. Two
|
||||
single warning names the opcode — <code>HeidenhainFn–Unsupported</code>, or
|
||||
<code>HeidenhainFn–UnsupportedSysread</code> for the <code>FN 18</code> wording. Two
|
||||
opcode families pass through untouched: <code>FN 0-5</code> belong to
|
||||
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.html">HeidenhainFnAssignmentSyntax</a> (which runs earlier), and the
|
||||
jump family <code>FN 9-12</code> belongs to
|
||||
|
||||
@@ -190,7 +190,8 @@ Extends <a class="xref" href="Hi.NcParsers.ParsingSyntaxs.TagAssignmentSyntax.ht
|
||||
<dd><p>Structured skip for the Heidenhain FN opcodes the simulation does not
|
||||
implement (<code>FN 14</code> error display, <code>FN 16</code> print, <code>FN 18</code>
|
||||
SYSREAD, table/pallet opcodes …): the whole statement is consumed and a
|
||||
single <code>HeidenhainFn–Unsupported</code> warning names the opcode. Two
|
||||
single warning names the opcode — <code>HeidenhainFn–Unsupported</code>, or
|
||||
<code>HeidenhainFn–UnsupportedSysread</code> for the <code>FN 18</code> wording. Two
|
||||
opcode families pass through untouched: <code>FN 0-5</code> belong to
|
||||
<a class="xref" href="Hi.NcParsers.ParsingSyntaxs.Heidenhain.HeidenhainFnAssignmentSyntax.html">HeidenhainFnAssignmentSyntax</a> (which runs earlier), and the
|
||||
jump family <code>FN 9-12</code> belongs to
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Class RadiusCompInterference | HiAPI-C# 2025 ">
|
||||
|
||||
<meta name="description" content="Classifies cutter-compensation interference — the case a real control refuses under G41/G42: the compensated tool path runs against the programmed direction because the offset radius is larger than the inner feature it has to follow (an inner arc smaller than the offset, a groove bottom narrower than the tool). Fanuc stops with alarm PS0041 INTERFERENCE IN CUTTER COMPENSATION; Heidenhain and Siemens have equivalents. The simulation has no interference check and keeps running the swapped-side path — so a program that simulates cleanly can still stop on the machine, and a wrongly filled D row (the tool radius entered against a tool-centre CAM path that expects wear only) shows up as an overcut instead of an alarm. The diagnostics built from this class exist to close that gap; they never change the path. Today the gate is meaningful on the XY plane (G17) only: both compensation engines build the perpendicular as Z × axis whatever plane is selected, so a G18/G19 region is neither compensated in its own plane nor checked here — the planeNormalDir parameters are ready for the day the engines pass the selected plane through.">
|
||||
<meta name="description" content="Classifies cutter-compensation interference — the case a real control refuses under G41/G42: the compensated tool path runs against the programmed direction because the offset radius is larger than the inner feature it has to follow (an inner arc smaller than the offset, a groove bottom narrower than the tool). Fanuc stops with alarm PS0041 INTERFERENCE IN CUTTER COMPENSATION; Heidenhain and Siemens have equivalents. The simulation has no interference check and keeps running the swapped-side path — so a program that simulates cleanly can still stop on the machine, and a wrongly filled D row (the tool radius entered against a tool-centre CAM path that expects wear only) shows up as an overcut instead of an alarm. The diagnostics built from this class exist to close that gap; they never change the path. The gate works on the selected G17/G18/G19 plane: both engines pass the block's plane through planeNormalDir, and the in-plane projections below use it (neither engine checks a polar G12.1 block). Until 2026-09-11 both engines built the perpendicular as Z × axis whatever plane was selected, so a G18/G19 region was offset along its normal and could never be judged here.">
|
||||
<link rel="icon" href="../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../public/main.css">
|
||||
@@ -110,11 +110,12 @@ radius entered against a tool-centre CAM path that expects wear only)
|
||||
shows up as an overcut instead of an alarm. The diagnostics built from
|
||||
this class exist to close that gap; they never change the path.</p>
|
||||
<p>
|
||||
Today the gate is meaningful on the XY plane (G17) only: both
|
||||
compensation engines build the perpendicular as <code>Z × axis</code>
|
||||
whatever plane is selected, so a G18/G19 region is neither compensated
|
||||
in its own plane nor checked here — the <code>planeNormalDir</code> parameters
|
||||
are ready for the day the engines pass the selected plane through.
|
||||
The gate works on the selected G17/G18/G19 plane: both engines pass
|
||||
the block's plane through <code>planeNormalDir</code>, and the in-plane
|
||||
projections below use it (neither engine checks a polar G12.1 block).
|
||||
Until 2026-09-11 both engines built the perpendicular as
|
||||
<code>Z × axis</code> whatever plane was selected, so a G18/G19 region was
|
||||
offset along its normal and could never be judged here.
|
||||
</p>
|
||||
</div>
|
||||
<div class="markdown conceptual"></div>
|
||||
|
||||
@@ -0,0 +1,285 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Class RadiusCompPlaneChange | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Class RadiusCompPlaneChange | HiAPI-C# 2025 ">
|
||||
|
||||
<meta name="description" content="Classifies a plane selection (G17/G18/G19) that arrives while cutter radius compensation is still active — the case a real control refuses. Fanuc stops with alarm PS0037 CAN NOT CHANGE PLANE IN CRC, which covers both a plane code inside the compensation mode and a plane code sharing its block with the G40 that cancels it; Siemens and Heidenhain have equivalents. Neither engine can honour such a change: the corner between the two blocks is built from one block's running axis on the old plane and the other's on the new one, so the path around the change mixes two planes — and the block after it is offset on a plane the block before it never saw. The diagnostics built from this class exist to name that; they never change the path. The check is on the plane actually resolving differently from the previous block's, so a plane code that re-selects the plane already in force stays silent, as does the plane code on the block that starts the region (a control accepts that one — compensation is not active yet).">
|
||||
<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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<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.RadiusCompPlaneChange">
|
||||
|
||||
|
||||
|
||||
<h1 id="Hi_NcParsers_RadiusCompPlaneChange" data-uid="Hi.NcParsers.RadiusCompPlaneChange" class="text-break">
|
||||
Class RadiusCompPlaneChange
|
||||
</h1>
|
||||
|
||||
<div class="facts text-secondary">
|
||||
<dl><dt>Namespace</dt><dd><a class="xref" href="Hi.html">Hi</a>.<a class="xref" href="Hi.NcParsers.html">NcParsers</a></dd></dl>
|
||||
<dl><dt>Assembly</dt><dd>HiMech.dll</dd></dl>
|
||||
</div>
|
||||
|
||||
<div class="markdown summary"><p>Classifies a plane selection (G17/G18/G19) that arrives while cutter
|
||||
radius compensation is still active — the case a real control refuses.
|
||||
Fanuc stops with alarm PS0037 CAN NOT CHANGE PLANE IN CRC, which covers
|
||||
both a plane code inside the compensation mode and a plane code sharing
|
||||
its block with the G40 that cancels it; Siemens and Heidenhain have
|
||||
equivalents. Neither engine can honour such a change: the corner between
|
||||
the two blocks is built from one block's running axis on the old plane
|
||||
and the other's on the new one, so the path around the change mixes two
|
||||
planes — and the block after it is offset on a plane the block before it
|
||||
never saw. The diagnostics built from this class exist to name that;
|
||||
they never change the path.</p>
|
||||
<p>
|
||||
The check is on the plane actually resolving differently from the
|
||||
previous block's, so a plane code that re-selects the plane already in
|
||||
force stays silent, as does the plane code on the block that starts the
|
||||
region (a control accepts that one — compensation is not active yet).
|
||||
</p>
|
||||
</div>
|
||||
<div class="markdown conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public static class RadiusCompPlaneChange</code></pre>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<dl class="typelist inheritance">
|
||||
<dt>Inheritance</dt>
|
||||
<dd>
|
||||
<div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
|
||||
<div><span class="xref">RadiusCompPlaneChange</span></div>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
|
||||
|
||||
<dl class="typelist inheritedMembers">
|
||||
<dt>Inherited Members</dt>
|
||||
<dd>
|
||||
<div>
|
||||
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
|
||||
</div>
|
||||
<div>
|
||||
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
|
||||
</div>
|
||||
<div>
|
||||
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
|
||||
</div>
|
||||
<div>
|
||||
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
|
||||
</div>
|
||||
<div>
|
||||
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
|
||||
</div>
|
||||
<div>
|
||||
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
|
||||
</div>
|
||||
<div>
|
||||
<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
|
||||
</div>
|
||||
</dd></dl>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h2 class="section" id="fields">Fields
|
||||
</h2>
|
||||
|
||||
|
||||
|
||||
<h3 id="Hi_NcParsers_RadiusCompPlaneChange_DiagnosticId" data-uid="Hi.NcParsers.RadiusCompPlaneChange.DiagnosticId">
|
||||
DiagnosticId
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Diagnostic id shared by the SoftNc and HardNc compensation paths.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public const string DiagnosticId = "RadiusComp--PlaneChangeInRegion"</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="methods">Methods
|
||||
</h2>
|
||||
|
||||
|
||||
<a id="Hi_NcParsers_RadiusCompPlaneChange_TryDescribe_" data-uid="Hi.NcParsers.RadiusCompPlaneChange.TryDescribe*"></a>
|
||||
|
||||
<h3 id="Hi_NcParsers_RadiusCompPlaneChange_TryDescribe_System_String_System_String_System_String_System_String__System_Collections_Generic_Dictionary_System_String_System_Object___" data-uid="Hi.NcParsers.RadiusCompPlaneChange.TryDescribe(System.String,System.String,System.String,System.String@,System.Collections.Generic.Dictionary{System.String,System.Object}@)">
|
||||
TryDescribe(string, string, string, out string, out Dictionary<string, object>)
|
||||
|
||||
</h3>
|
||||
|
||||
<div class="markdown level1 summary"><p>Describes a plane change inside a compensation region: returns the
|
||||
constant notification <code class="paramref">text</code> and a value-carrying
|
||||
<code class="paramref">detail</code> when <code class="paramref">fromPlane</code> and
|
||||
<code class="paramref">toPlane</code> differ, and false when they agree (a
|
||||
re-select of the plane already in force) or either is unknown.</p>
|
||||
</div>
|
||||
<div class="markdown level1 conceptual"></div>
|
||||
|
||||
<div class="codewrapper">
|
||||
<pre><code class="lang-csharp hljs">public static bool TryDescribe(string fromPlane, string toPlane, string compensationTerm, out string text, out Dictionary<string, object> detail)</code></pre>
|
||||
</div>
|
||||
|
||||
<h4 class="section">Parameters</h4>
|
||||
<dl class="parameters">
|
||||
<dt><code>fromPlane</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
|
||||
<dd><p>Plane code in force on the previous block (G17/G18/G19).</p>
|
||||
</dd>
|
||||
<dt><code>toPlane</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
|
||||
<dd><p>Plane code this block resolves to.</p>
|
||||
</dd>
|
||||
<dt><code>compensationTerm</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
|
||||
<dd><p>The G code the region runs under (G41/G42).</p>
|
||||
</dd>
|
||||
<dt><code>text</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
|
||||
<dd><p>Constant notification text (fold-stable), or null.</p>
|
||||
</dd>
|
||||
<dt><code>detail</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary-2">Dictionary</a><<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a>></dt>
|
||||
<dd><p>The two planes and the compensation mode, or null.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<h4 class="section">Returns</h4>
|
||||
<dl class="parameters">
|
||||
<dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
|
||||
<dd></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>
|
||||
@@ -217,11 +217,33 @@ radius entered against a tool-centre CAM path that expects wear only)
|
||||
shows up as an overcut instead of an alarm. The diagnostics built from
|
||||
this class exist to close that gap; they never change the path.</p>
|
||||
<p>
|
||||
Today the gate is meaningful on the XY plane (G17) only: both
|
||||
compensation engines build the perpendicular as <code>Z × axis</code>
|
||||
whatever plane is selected, so a G18/G19 region is neither compensated
|
||||
in its own plane nor checked here — the <code>planeNormalDir</code> parameters
|
||||
are ready for the day the engines pass the selected plane through.
|
||||
The gate works on the selected G17/G18/G19 plane: both engines pass
|
||||
the block's plane through <code>planeNormalDir</code>, and the in-plane
|
||||
projections below use it (neither engine checks a polar G12.1 block).
|
||||
Until 2026-09-11 both engines built the perpendicular as
|
||||
<code>Z × axis</code> whatever plane was selected, so a G18/G19 region was
|
||||
offset along its normal and could never be judged here.
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="jumplist">
|
||||
<dt><a class="xref" href="Hi.NcParsers.RadiusCompPlaneChange.html">RadiusCompPlaneChange</a></dt>
|
||||
<dd><p>Classifies a plane selection (G17/G18/G19) that arrives while cutter
|
||||
radius compensation is still active — the case a real control refuses.
|
||||
Fanuc stops with alarm PS0037 CAN NOT CHANGE PLANE IN CRC, which covers
|
||||
both a plane code inside the compensation mode and a plane code sharing
|
||||
its block with the G40 that cancels it; Siemens and Heidenhain have
|
||||
equivalents. Neither engine can honour such a change: the corner between
|
||||
the two blocks is built from one block's running axis on the old plane
|
||||
and the other's on the new one, so the path around the change mixes two
|
||||
planes — and the block after it is offset on a plane the block before it
|
||||
never saw. The diagnostics built from this class exist to name that;
|
||||
they never change the path.</p>
|
||||
<p>
|
||||
The check is on the plane actually resolving differently from the
|
||||
previous block's, so a plane code that re-selects the plane already in
|
||||
force stays silent, as does the plane code on the block that starts the
|
||||
region (a control accepts that one — compensation is not active yet).
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
@@ -469,8 +469,9 @@ Set by the current line's iteration in <a class="xref" href="Hi.Numerical.Radius
|
||||
|
||||
<h4 class="section" id="Hi_Numerical_RadiusCompensationBuf_ResolveRadiusCompensation_System_Collections_Generic_LinkedListNode_Hi_Numerical_HardNcLine__Hi_Numerical_HardNcEnv_Hi_Numerical_NcNoteCache_System_IProgress_Hi_Common_Messages_IMessage___remarks">Remarks</h4>
|
||||
<div class="markdown level1 remarks"><p>Blocks without in-plane movement of their own (comments, empty lines,
|
||||
a bare G41/G40, M/F/S-only blocks, dwells, Z-only plunges, zero-length
|
||||
moves) never take part in a corner. Before the region's first moving
|
||||
a bare G41/G40, M/F/S-only blocks, dwells, plunges along the plane
|
||||
normal, zero-length moves) never take part in a corner. Before the
|
||||
region's first moving
|
||||
block the start-up is pending (Fanuc: a G41/G42 block without
|
||||
movement starts up on the next movement block), so such blocks keep
|
||||
their nominal position; afterwards they carry the previous block's
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Class CodeXyzabcChain | HiAPI-C# 2025 ">
|
||||
|
||||
<meta name="description" content="A authored through chain code — a bracket notation for the connectivity of the mechanism's branches. On purpose of easy XML hand management. The entity is the inherited ; is a delegated representation: reading derives the codes from the mechanism's topology, assigning reseeds the mechanism (transformers and solids of same-named components carry over). Notation: each segment declares branches left to right — [O][Y];[Y][X];[X][w] pairs, or the concatenated sugar [O][Y][X][w]. Words merge by name across segments; [] is an anonymous component (each occurrence is a fresh one). Reserved words: X,Y,Z translational axes, A,B,C rotational axes, w table buckle, t tool buckle; any other word is a plain component.">
|
||||
<meta name="description" content="A authored through chain code — a bracket notation for the connectivity of the mechanism's branches. On purpose of easy XML hand management. The entity is the inherited ; is a delegated representation: reading derives the codes from the mechanism's topology, assigning reseeds the mechanism (transformers and solids of same-named components carry over). Notation: each segment declares branches left to right — [O][Y];[Y][X];[X][w] pairs, or the concatenated sugar [O][Y][X][w]. Words merge by name across segments; [] is an anonymous component (each occurrence is a fresh one). Reserved words: X,Y,Z translational axes, A,B,C rotational axes, w table buckle, t tool buckle; any other word is a plain component. Reserved words are matched exactly as written, so a word differing only in letter case is a plain component.">
|
||||
<link rel="icon" href="../img/HiAPI.favicon.ico">
|
||||
<link rel="stylesheet" href="../public/docfx.min.css">
|
||||
<link rel="stylesheet" href="../public/main.css">
|
||||
@@ -111,7 +111,8 @@ solids of same-named components carry over).</p>
|
||||
anonymous component (each occurrence is a fresh one). Reserved words:
|
||||
<code>X</code>,<code>Y</code>,<code>Z</code> translational axes, <code>A</code>,<code>B</code>,<code>C</code>
|
||||
rotational axes, <code>w</code> table buckle, <code>t</code> tool buckle; any other
|
||||
word is a plain component.</p>
|
||||
word is a plain component. Reserved words are matched exactly as written,
|
||||
so a word differing only in letter case is a plain component.</p>
|
||||
</div>
|
||||
<div class="markdown conceptual"></div>
|
||||
|
||||
|
||||
@@ -110,7 +110,8 @@ solids of same-named components carry over).</p>
|
||||
anonymous component (each occurrence is a fresh one). Reserved words:
|
||||
<code>X</code>,<code>Y</code>,<code>Z</code> translational axes, <code>A</code>,<code>B</code>,<code>C</code>
|
||||
rotational axes, <code>w</code> table buckle, <code>t</code> tool buckle; any other
|
||||
word is a plain component.</p>
|
||||
word is a plain component. Reserved words are matched exactly as written,
|
||||
so a word differing only in letter case is a plain component.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="jumplist">
|
||||
|
||||
@@ -2443,6 +2443,9 @@
|
||||
<li>
|
||||
<a href="Hi.NcParsers.RadiusCompInterference.html" name="" title="RadiusCompInterference">RadiusCompInterference</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="Hi.NcParsers.RadiusCompPlaneChange.html" name="" title="RadiusCompPlaneChange">RadiusCompPlaneChange</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="Hi.NcParsers.Sentence.html" name="" title="Sentence">Sentence</a>
|
||||
</li>
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user