Archived
615 lines
33 KiB
HTML
615 lines
33 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>Interface Parameters | HiAPI-C# 2025 </title>
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<meta name="title" content="Interface Parameters | 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 "{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="">
|
|
<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="Anatomy-ControllerParameters">
|
|
<h1 id="interface-parameters">Interface Parameters</h1>
|
|
|
|
<p>Two leaves of the Controller branch's machine plane put the controller's non-axis parameters into
|
|
domain vocabulary instead of parameter numbers: <strong>Controller Parameters</strong> and <strong>Canned Cycle
|
|
(Peck)</strong>. They live on the General Setup page at <code>/general-setup</code> under the Control-Tree ids
|
|
<code>equipment/controller/machine/parameters</code> and <code>equipment/controller/machine/canned-cycle</code>. Each value
|
|
they edit that is a row of the brand parameter table is also reachable as a raw numbered row on the
|
|
sibling leaf, <a class="xref" href="native-parameters.html">Parameters (Native)</a>; the values stored
|
|
elsewhere are named below, and they reach no native form at all.</p>
|
|
<div class="IMPORTANT">
|
|
<h5>Important</h5>
|
|
<p>Anatomy makes no claim that any id named here is stable across versions. The migration hop that
|
|
keeps an older <code>?tree=</code> value resolving is described in
|
|
<a class="xref" href="../../../platform/tree-ids-and-routes.html">Tree Ids and Routes</a>.</p>
|
|
</div>
|
|
<p>Controller Parameters is ungated: the branch builder pushes it with the brand and the four per-axis
|
|
leaves, so it exists wherever a runner resolves. Canned Cycle (Peck) is pushed behind the
|
|
<code>hasCannedCycle</code> flag, which is true on all five shipped brand presets — see
|
|
<a class="xref" href="../brand-matrix.html">Brand Matrix</a>.</p>
|
|
<h2 id="the-five-fields-and-which-brand-shows-which">The Five Fields, and Which Brand Shows Which</h2>
|
|
<p>Controller Parameters renders at most five controls, in one column, in this fixed order. There is no
|
|
tab, no group box and no scroll region; a field the brand does not have is not disabled but absent.</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Field the user reads</th>
|
|
<th>Control</th>
|
|
<th>Backed by</th>
|
|
<th>Fanuc, Mazak</th>
|
|
<th>Syntec</th>
|
|
<th>Siemens</th>
|
|
<th>Heidenhain</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Max spindle speed</td>
|
|
<td>numeric, <code>rpm</code>, minimum 0</td>
|
|
<td>the brand parameter table</td>
|
|
<td>#3741</td>
|
|
<td>Pr3741</td>
|
|
<td>MD35100</td>
|
|
<td>MP100</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Cutter compensation startup / cancel type</td>
|
|
<td>select — Type A / Type B / Type C</td>
|
|
<td>the brand parameter table</td>
|
|
<td>#5003</td>
|
|
<td>Pr5003</td>
|
|
<td>—</td>
|
|
<td>—</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Tool-axis direction</td>
|
|
<td>select — Z / Y / X</td>
|
|
<td>the brand parameter table</td>
|
|
<td>—</td>
|
|
<td>—</td>
|
|
<td>—</td>
|
|
<td>MP101</td>
|
|
</tr>
|
|
<tr>
|
|
<td>GOTO — max jumps per N target †</td>
|
|
<td>numeric, minimum 1</td>
|
|
<td>an iteration-guard dependency</td>
|
|
<td>Fanuc guard</td>
|
|
<td>Fanuc guard</td>
|
|
<td>Siemens guard</td>
|
|
<td>—</td>
|
|
</tr>
|
|
<tr>
|
|
<td>WHILE/DO — max iterations per loop †</td>
|
|
<td>numeric, minimum 1</td>
|
|
<td>an iteration-guard dependency</td>
|
|
<td>Fanuc guard</td>
|
|
<td>Fanuc guard</td>
|
|
<td>Siemens guard</td>
|
|
<td>—</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>† The Fanuc-family spelling. Siemens spells both guard labels differently — the two pairs are below.</p>
|
|
<p>The last two sit under a separator and the caption <em>Macro loop guards (advanced)</em>, and that whole
|
|
group is rendered only when at least one of the two guard values resolves. On Heidenhain neither
|
|
does, so the separator, the caption and both fields are absent together; that brand shows two fields
|
|
in total.</p>
|
|
<p><strong>The two guard labels are chosen from the brand marker, not from the dependency that answered.</strong> The
|
|
Siemens spellings — <em>GOTOF/GOTOB — max jumps per label</em> and <em>WHILE / FOR / REPEAT / LOOP — max
|
|
iterations per loop</em> — are used when the brand marker string reads <code>Siemens</code>, and the Fanuc spellings
|
|
otherwise. Syntec and Mazak therefore read the Fanuc spellings, which is correct: both presets carry
|
|
the Fanuc guard types. The label and the value are independent lookups, so a runner whose brand
|
|
marker was edited apart from its dependency list can show one brand's wording over the other brand's
|
|
guard.</p>
|
|
<p>The three select options <em>Type A</em> / <em>Type B</em> / <em>Type C</em> are translated strings; the three tool-axis
|
|
options <code>Z</code>, <code>Y</code> and <code>X</code> are literal letters written into the component and are the same in every
|
|
locale.</p>
|
|
<h2 id="visibility-is-null-driven-not-flag-driven">Visibility Is Null-Driven, Not Flag-Driven</h2>
|
|
<p>Which fields appear is decided <strong>per field, by a null in the read</strong>, and not by the shared runner
|
|
snapshot the tree shape is built from. The reader answers one object with <code>present</code> plus five
|
|
nullable numbers, computed by type-switching on the resolved dependencies:</p>
|
|
<ul>
|
|
<li><strong>Max spindle speed</strong> is non-null for each of the four brand parameter-table types, so it is
|
|
present on all five brands. A <code>ControllerParameterTableBase</code> subclass outside those four answers
|
|
null, and the field disappears while <code>present</code> stays true.</li>
|
|
<li><strong>Cutter compensation type</strong> is non-null only for the Fanuc and the Syntec table.</li>
|
|
<li><strong>Tool-axis direction</strong> is non-null only for the Heidenhain table.</li>
|
|
<li>Each <strong>guard</strong> is the Fanuc dependency's value if one resolves, otherwise the Siemens dependency's,
|
|
otherwise null.</li>
|
|
</ul>
|
|
<p>The panel's own conditions are <code>!= null</code> on those five keys. No snapshot flag decides a field on this
|
|
leaf; the only one read at all is the shared no-runner guard. The snapshot's brand marker is read
|
|
twice more, but only to choose between the two guard label pairs — never to show or hide anything.</p>
|
|
<p><strong>Three flags in the snapshot describe exactly these fields and are read by nothing.</strong>
|
|
<code>hasCutterComp</code>, <code>hasToolAxisDirection</code> and <code>hasIterationGuards</code> are computed server-side, typed,
|
|
defaulted and parsed in the client's API layer, and no component consults any of them. They remain a
|
|
live part of the REST snapshot for any other client. Two notes about the third:</p>
|
|
<ul>
|
|
<li><code>hasIterationGuards</code> probes the Fanuc and the Siemens jump-guard types only. The Heidenhain preset
|
|
carries a jump guard of its own type, so the flag reports false for a brand that has one. That
|
|
matches what the panel shows on the shipped presets — the reader probes the same two types, so the
|
|
Heidenhain guard has no field either — while under-describing the runner.</li>
|
|
<li>Its doc comment names the Fanuc GOTO / WHILE-DO guards alone while the code also matches the
|
|
Siemens jump guard. The code is what ships.</li>
|
|
</ul>
|
|
<p>The panel's whole body — the guards included — is hidden behind <code>present</code>, which reports the
|
|
<strong>parameter table</strong> and nothing else: <em>"No controller parameter table on the active runner."</em> The
|
|
guards live on separate dependencies with their own write endpoints, so a runner carrying guards but
|
|
no parameter table would hide two reachable fields. All five brand presets carry a parameter-table
|
|
proxy, so the combination does not arise on a shipped preset.</p>
|
|
<h2 id="units-edited-versus-stored">Units: Edited Versus Stored</h2>
|
|
<p>Every value but one is stored in the unit it is edited in.</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Value</th>
|
|
<th>Edited as</th>
|
|
<th>Stored as</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Max spindle speed</td>
|
|
<td>rpm</td>
|
|
<td>rpm, in the table's system-parameter row</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Cutter compensation type</td>
|
|
<td>one of three named options</td>
|
|
<td>the option's index, 0 / 1 / 2, as a number in the same row set</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Tool-axis direction</td>
|
|
<td>one of <code>Z</code> / <code>Y</code> / <code>X</code></td>
|
|
<td>0 / 1 / 2 in the same row set</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Macro guards</td>
|
|
<td>a plain count</td>
|
|
<td>the same count, on the guard dependency</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Peck retraction clearance</td>
|
|
<td>mm</td>
|
|
<td>mm on Fanuc and Mazak, <strong>microns on Syntec</strong>, mm on the generic fallback</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p><strong>Syntec is the one brand whose stored unit differs from the edited one, and the peck clearance is
|
|
the one value it happens to.</strong> The Syntec table's accessor divides its stored row by 1000 on read and
|
|
the write multiplies by 1000, so this leaf shows <code>5</code> on every brand while the native leaf shows
|
|
<code>5000</code> under Pr4002 on Syntec and <code>5</code> under #4002 on Fanuc and Mazak. An operator copying a number
|
|
off a real controller reads the native form; an operator entering a clearance in millimetres reads
|
|
this one. The two are the same setting.</p>
|
|
<p>The two select fields are the second unit hazard, in a milder form: the native leaf shows their
|
|
stored number, <code>0</code>, <code>1</code> or <code>2</code>, with the brand table's own description of that number under the id,
|
|
and never the words <em>Type A</em> or <code>Z</code>.</p>
|
|
<p>Not every value reaches the native form at all. The two macro guards are properties of their own
|
|
runner-owned dependencies rather than rows of any table, so they appear there on no brand; the peck
|
|
clearance does the same on Siemens and Heidenhain, where the generic fallback supplies it.</p>
|
|
<h2 id="peck-retraction-clearance">Peck Retraction Clearance</h2>
|
|
<p>Canned Cycle (Peck) is a single numeric field labelled <em>Peck retraction clearance (G83)</em>, in
|
|
millimetres, at zero or above, with a caption naming where the value is stored. Its model is
|
|
<a class="xref" href="../../../../api/Hi.NcParsers.Dependencys.ICannedCycleConfig.html#Hi_NcParsers_Dependencys_ICannedCycleConfig_PeckRetractionDistance_mm">PeckRetractionDistance_mm</a>, and the read reports
|
|
which implementation answered. Three can, and between them they cover every shipped preset:</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Caption the user reads</th>
|
|
<th>Answered by</th>
|
|
<th>Brands</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td><em>Stored in the Fanuc parameter table (#4002, mm).</em></td>
|
|
<td><a class="xref" href="../../../../api/Hi.NcParsers.Dependencys.Fanuc.FanucParameterTable.html">FanucParameterTable</a></td>
|
|
<td>Fanuc, Mazak</td>
|
|
</tr>
|
|
<tr>
|
|
<td><em>Stored in the Syntec parameter table (Pr4002, microns) — edited here in mm.</em></td>
|
|
<td><a class="xref" href="../../../../api/Hi.NcParsers.Dependencys.Syntec.SyntecParameterTable.html">SyntecParameterTable</a></td>
|
|
<td>Syntec</td>
|
|
</tr>
|
|
<tr>
|
|
<td><em>This brand takes the clearance per call (CYCLE83 / CYCL DEF); this value is the fallback used when a call omits it.</em></td>
|
|
<td><a class="xref" href="../../../../api/Hi.NcParsers.Dependencys.Generic.FallbackConfig.html">FallbackConfig</a></td>
|
|
<td>Siemens, Heidenhain</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>That third caption describes an override the mapping does not implement. The Siemens and Heidenhain
|
|
front-end syntaxes translate their own cycle vocabulary into the shared ISO cycle section, whose key
|
|
set is fixed at X, Y, Z, R, Q, F, P and K — and none of those eight is a retraction clearance. The
|
|
CYCLE83 mapping fills the R plane, the hole bottom Z and the first peck depth Q; the klartext cycle
|
|
mapping fills the same three plus a bottom dwell and a feed, and folds the klartext set-up clearance
|
|
into the R plane rather than keeping a slot of its own. The shared G83 expansion then reads the
|
|
clearance from this dependency unconditionally. So on those two brands the value here is not a
|
|
fallback for an omitted argument: it is the clearance every pecking cycle uses.</p>
|
|
<p>An <code>ICannedCycleConfig</code> implementation outside those three answers a fourth source token, which no
|
|
caption is written for: the field renders at the value that implementation supplies and the line
|
|
under it is blank. It is the peck counterpart of the null a parameter table outside the four returns
|
|
on the other leaf.</p>
|
|
<p>Which storage answered also decides where the value lives. On Fanuc, Mazak and Syntec it is a row of
|
|
the project's parameter table and appears in the native form; on Siemens and Heidenhain it is a field
|
|
of a plain runner-owned dependency, so it appears in <strong>no</strong> native form and a brand apply returns it
|
|
to the preset default — see <a class="xref" href="index.html">Machine and Controller Plane</a>.</p>
|
|
<p>The value is consumed by two cycle expansions and they use it differently. In G83 it is the clearance
|
|
the tool rapids down to above the previous stroke bottom before feeding deeper; in G73 it is the
|
|
whole chip-break retract distance between strokes. The field's label names G83 only. G73 expands on
|
|
Fanuc, Mazak, Syntec and Siemens; the Heidenhain syntax list registers the G83 expansion without it.</p>
|
|
<h2 id="what-the-values-reach">What the Values Reach</h2>
|
|
<p>Four of the six values are read by the parsing pipeline; the other two are stored declarations.</p>
|
|
<ul>
|
|
<li><strong>Peck retraction clearance</strong> drives the two cycle expansions above.</li>
|
|
<li><strong>Tool-axis direction</strong> is read where a Heidenhain <code>PLANE SPATIAL … COORD ROT</code> block is resolved:
|
|
it decides which spatial angle may be non-zero for the rotation to count as purely about the tool
|
|
axis, which is the only case where COORD ROT suppresses rotary positioning and rotates the
|
|
coordinate system instead.</li>
|
|
<li><strong>The macro guards</strong> are soft caps with runtime counters. Above the cap the consuming block emits
|
|
an iteration-limit warning and stops firing the jump or the loop back-edge, so a runaway macro ends
|
|
as a diagnostic instead of an unbounded run. Each is keyed per source file and per target — per N
|
|
target, per label or per loop — and the counters reset on the session-init edge while the cap does
|
|
not.</li>
|
|
<li><strong>Max spindle speed</strong> and <strong>cutter compensation type</strong> are stored, edited and serialized, and no
|
|
syntax or semantic in the shipped pipeline reads either. Cutter radius compensation itself <em>is</em>
|
|
resolved, by the G41 / G42 / G40 pass over the motion sections; what that pass does not consult is
|
|
the A / B / C startup-and-cancel vector style this field records.</li>
|
|
</ul>
|
|
<h2 id="defaults-a-freshly-seeded-table-opens-on">Defaults a Freshly Seeded Table Opens On</h2>
|
|
<p>Each brand's default table decides what the fields show once that brand's table is cloned fresh into
|
|
a project; the guards are plain preset entries and are re-created at their type defaults on every
|
|
apply.</p>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Value</th>
|
|
<th>Fanuc, Mazak</th>
|
|
<th>Syntec</th>
|
|
<th>Siemens</th>
|
|
<th>Heidenhain</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Max spindle speed</td>
|
|
<td>60000</td>
|
|
<td>24000</td>
|
|
<td>60000</td>
|
|
<td>60000</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Cutter compensation type</td>
|
|
<td>Type A</td>
|
|
<td>Type A</td>
|
|
<td>—</td>
|
|
<td>—</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Tool-axis direction</td>
|
|
<td>—</td>
|
|
<td>—</td>
|
|
<td>—</td>
|
|
<td>Z</td>
|
|
</tr>
|
|
<tr>
|
|
<td>GOTO jump cap</td>
|
|
<td>1000</td>
|
|
<td>1000</td>
|
|
<td>1000</td>
|
|
<td>—</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Loop cap</td>
|
|
<td>10000</td>
|
|
<td>10000</td>
|
|
<td>10000</td>
|
|
<td>—</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Peck retraction clearance</td>
|
|
<td>5 mm</td>
|
|
<td>5 mm (5000 stored)</td>
|
|
<td>5 mm (fallback)</td>
|
|
<td>5 mm (fallback)</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>The table-backed values — the first three rows, and the peck clearance on the three brands whose
|
|
parameter table stores it — are reached only by an apply that leaves the project holding no table of
|
|
the incoming proxy's type: the outgoing brand's table is swept and the incoming proxy clones its seed
|
|
in place of it. Fanuc and Mazak share one table type, so the hop between those two re-binds the
|
|
project's existing table instead, and every value in it survives with its edits. The two guards and
|
|
the fallback clearance are runner-owned and return to the preset's on every apply, whichever brands
|
|
it runs between.</p>
|
|
<p>The two caps differ by an order of magnitude on purpose: a jump is not the legitimate bulk-iteration
|
|
primitive, so its cap stays tight, while loops are what generated drill grids and calibration sweeps
|
|
are built from.</p>
|
|
<h2 id="reading-a-field-can-create-its-row">Reading a Field Can Create Its Row</h2>
|
|
<p>Both readers reach the stored values through accessors that <strong>write a default into the table when the
|
|
row is absent</strong>. Opening either leaf on a table whose max-spindle, cutter-comp, tool-axis or peck
|
|
row was deleted from <a class="xref" href="native-parameters.html">Parameters (Native)</a> therefore
|
|
re-creates that row at the type's default, in the live project-owned table, with no edit and no
|
|
request from the user. On Heidenhain — which has neither a cutter-comp row nor a peck row — the
|
|
max-spindle and tool-axis rows are the whole set. The native leaf's delete removes the row; the next
|
|
read of this leaf puts it back.</p>
|
|
<p>The guard dependencies have no such behaviour — their values are ordinary properties with field
|
|
initializers.</p>
|
|
<h2 id="editing-a-field">Editing a Field</h2>
|
|
<p>Both leaves follow the branch's shared commit, rollback and toast rules, which are
|
|
<a class="xref" href="../editing-contract.html">Editing Contract</a>. Four details are specific to these two
|
|
leaves:</p>
|
|
<ul>
|
|
<li><strong>The numeric fields commit on blur or on Enter</strong>, never per keystroke; their full contract is
|
|
<a class="xref" href="../../../widget/numeric-input.html">Numeric Input</a>. The two selects commit on the pick.</li>
|
|
<li><strong>Each write is one field.</strong> Every control has its own endpoint and sends only its own value; no
|
|
edit here resends a neighbouring field.</li>
|
|
<li><strong>A value the handler refuses is left on screen.</strong> Clearing a field parses to null and the handler
|
|
returns before the request; a guard field additionally refuses anything that is not a whole number,
|
|
and every numeric handler here refuses a non-finite one — the field accepts the words <code>Infinity</code>
|
|
and <code>NaN</code> as text and turns them into numbers, and the handlers are what stop them. In each case
|
|
the box keeps what was typed — blank, where the field was cleared — while the stored value stands,
|
|
because nothing re-writes the box until the panel is remounted by selecting another node and coming
|
|
back.</li>
|
|
<li><strong>A bound violation never reaches a handler at all.</strong> The numeric field itself refuses a value
|
|
below its minimum and shows an untranslated <em>Must be ≥ …</em> under the box. Each handler carries a
|
|
lower-bound test of its own — 1 on a guard, 0 on the peck clearance — but the field's own minimum
|
|
is the same number and stops every finite value first, so those tests decide nothing.</li>
|
|
</ul>
|
|
<h2 id="layout">Layout</h2>
|
|
<ul>
|
|
<li><strong>General Setup</strong> Control Tree — the left dock of <code>/general-setup</code>
|
|
<ul>
|
|
<li><strong>Controller</strong> Node Row
|
|
<ul>
|
|
<li><strong>Machine / Controller</strong> Group Row
|
|
<ul>
|
|
<li><strong>Controller Parameters</strong> Node Row — <code>equipment/controller/machine/parameters</code></li>
|
|
<li><strong>Canned Cycle (Peck)</strong> Node Row — <code>equipment/controller/machine/canned-cycle</code></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>Editor Row — the panel of whichever node is selected
|
|
<ul>
|
|
<li><strong>Controller Parameters</strong> Panel — one column, gutter-spaced
|
|
<ul>
|
|
<li><strong>Max spindle speed</strong> Numeric Field — dense, outlined, suffixed <code>rpm</code>, minimum 0</li>
|
|
<li><strong>Cutter compensation startup / cancel type</strong> Select — dense, outlined; options <strong>Type A</strong>,
|
|
<strong>Type B</strong>, <strong>Type C</strong></li>
|
|
<li><strong>Tool-axis direction</strong> Select — dense, outlined; options <strong>Z</strong>, <strong>Y</strong>, <strong>X</strong></li>
|
|
<li>Guard Group — rendered only when at least one guard value resolves
|
|
<ul>
|
|
<li>Separator</li>
|
|
<li><strong>Macro loop guards (advanced)</strong> Caption</li>
|
|
<li>Jump-Guard Numeric Field — minimum 1; labelled <strong>GOTO — max jumps per N target</strong> or
|
|
<strong>GOTOF/GOTOB — max jumps per label</strong></li>
|
|
<li>Loop-Guard Numeric Field — minimum 1; labelled <strong>WHILE/DO — max iterations per loop</strong> or
|
|
<strong>WHILE / FOR / REPEAT / LOOP — max iterations per loop</strong></li>
|
|
</ul>
|
|
</li>
|
|
<li>No-Table Block — replaces every field above:
|
|
<em>"No controller parameter table on the active runner."</em></li>
|
|
</ul>
|
|
</li>
|
|
<li><strong>Canned Cycle (Peck)</strong> Panel — one column, gutter-spaced
|
|
<ul>
|
|
<li><strong>Peck retraction clearance (G83)</strong> Numeric Field — dense, outlined, suffixed <code>mm</code>, minimum 0</li>
|
|
<li>Source Caption — one of the three sentences in the table above, or empty where a fourth
|
|
implementation answered</li>
|
|
<li>No-Config Block — replaces both:
|
|
<em>"No canned-cycle config on the active runner."</em></li>
|
|
</ul>
|
|
</li>
|
|
<li>Shared Empty State — replaces either panel's whole body while the snapshot reports no runner:
|
|
<em>"No NC runner — load a project first."</em></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<p>Neither panel has a table, an add-row control, a delete control or a Save button.</p>
|
|
<h2 id="source-code-path">Source Code Path</h2>
|
|
<p>See <a class="xref" href="../../../index.html">HiNC App Anatomy</a> for git repository links.</p>
|
|
<h3 id="web-application">Web Application</h3>
|
|
<p>HiNC-2025-webservice (Quasar CLI SPA):</p>
|
|
<ul>
|
|
<li><code>wwwroot-src/src/components/controlTree/SoftNcControllerParamsPanel.vue</code> — the five-field panel:
|
|
the per-field <code>!= null</code> conditions, the guard group's combined condition, the brand-marker choice
|
|
between the two guard label pairs, the translated compensation-type options beside the literal
|
|
tool-axis letters, and the three commit handlers with their null, non-finite and integer refusals
|
|
beside the lower-bound tests the field's own minimum shadows.</li>
|
|
<li><code>wwwroot-src/src/components/controlTree/SoftNcCannedCyclePanel.vue</code> — the peck panel: the single
|
|
field, the presence layer, and the caption chosen from the read's source token.</li>
|
|
<li><code>wwwroot-src/src/components/controlTree/SoftNcEmptyState.vue</code> — the shared no-runner line both
|
|
panels open with.</li>
|
|
<li><code>wwwroot-src/src/components/widgets/NumericInput.vue</code> — the numeric field: the unit rendered as a
|
|
suffix, commit on blur or Enter, the empty-text-to-null parse both panels reject, and the
|
|
untranslated bound message that stops a value before it is emitted.</li>
|
|
<li><code>wwwroot-src/src/components/controlTree/softNcItemTypes.ts</code> — the two node ids and their labels:
|
|
Controller Parameters among the unconditional machine leaves, Canned Cycle (Peck) behind the
|
|
peck-provider flag.</li>
|
|
<li><code>wwwroot-src/src/api/softNcRunner.ts</code> — the two readers and their setters, the five nullable
|
|
parameter keys, the peck source token, and the three snapshot flags that describe these fields and
|
|
are declared, defaulted and parsed without a consumer.</li>
|
|
<li><code>wwwroot-src/src/composables/useSoftNcRunner.ts</code> — the shared runner snapshot the first empty layer
|
|
reads.</li>
|
|
<li><code>wwwroot-src/src/i18n/en/softNc.ts</code> — the two node labels, the five field labels, the two guard
|
|
label pairs, the compensation-type options, the macro-guard caption, the three peck source
|
|
sentences and the two empty-state lines quoted above.</li>
|
|
<li><code>Mech/SoftNcRunnerController.cs</code> — the REST surface: the parameter read's type switches and its
|
|
table-only presence flag, one write per field, the guard writes that fall back from the Fanuc
|
|
dependency to the Siemens one, the peck read with its source token, and the peck write that
|
|
converts to microns for the Syntec table.</li>
|
|
</ul>
|
|
<h3 id="hiapi-engine">HiAPI Engine</h3>
|
|
<ul>
|
|
<li><code>HiMech/NcParsers/Dependencys/ControllerParameterTableBase.cs</code> — the base every brand table
|
|
extends, and the raw system-parameter dictionary the first three fields are rows of.</li>
|
|
<li><code>HiMech/NcParsers/Dependencys/Fanuc/FanucParameterTable.cs</code> — the Fanuc and Mazak table: the
|
|
max-spindle, peck-clearance and cutter-comp parameter numbers, the compensation-type enum with its
|
|
three vector styles, the millimetre peck accessor, and the default seed.</li>
|
|
<li><code>HiMech/NcParsers/Dependencys/Syntec/SyntecParameterTable.cs</code> — the Syntec table: the same three
|
|
parameter numbers, the micron peck row and the accessor that converts it, and the default seed.</li>
|
|
<li><code>HiMech/NcParsers/Dependencys/Siemens/SiemensMachineDataTable.cs</code> — the Siemens table: the
|
|
max-spindle machine datum, and the absence of any compensation-type or peck member.</li>
|
|
<li><code>HiMech/NcParsers/Dependencys/Heidenhain/HeidenhainParameterTable.cs</code> — the Heidenhain table: the
|
|
max-spindle and tool-axis-direction machine parameters and their default seed.</li>
|
|
<li><code>HiMech/NcParsers/Dependencys/Fanuc/FanucParameterTableProxy.cs</code> — the proxy shape all four brand
|
|
tables share: the seed clone that fires only where the project holds no table of that type, and
|
|
the pure take afterwards.</li>
|
|
<li><code>HiMech/NcParsers/Dependencys/ICannedCycleConfig.cs</code> — the peck-clearance contract and its three
|
|
implementations.</li>
|
|
<li><code>HiMech/NcParsers/Dependencys/Generic/FallbackConfig.cs</code> — the runner-owned clearance the Siemens
|
|
and Heidenhain presets carry, and its millimetre default.</li>
|
|
<li><code>HiMech/NcParsers/Dependencys/Fanuc/FanucGotoIterationDependency.cs</code>,
|
|
<code>HiMech/NcParsers/Dependencys/Fanuc/FanucWhileDoIterationDependency.cs</code>,
|
|
<code>HiMech/NcParsers/Dependencys/Siemens/SiemensGotoIterationDependency.cs</code>,
|
|
<code>HiMech/NcParsers/Dependencys/Siemens/SiemensLoopIterationDependency.cs</code> — the four guards the two
|
|
advanced fields write: their caps, their per-file counters and the session reset that clears the
|
|
counters alone.</li>
|
|
<li><code>HiMech/NcParsers/Dependencys/Heidenhain/HeidenhainGotoIterationDependency.cs</code> — the fifth guard,
|
|
the one the reader does not probe and no field edits.</li>
|
|
<li><code>HiMech/NcParsers/SoftNcRunner.cs</code> — the five brand presets: which parameter-table proxy, which
|
|
guards and whether a fallback clearance each one carries.</li>
|
|
<li><code>HiMech/NcParsers/LogicSyntaxs/CannedCycleSyntaxUtil.cs</code> — the shared ISO cycle section: the fixed
|
|
eight-key parameter set none of whose keys is a retraction clearance, and the modal merge that
|
|
consumes them.</li>
|
|
<li><code>HiMech/NcParsers/LogicSyntaxs/PeckDrillingCycleSyntax.cs</code> — the G83 expansion, which reads the
|
|
clearance from the dependency rather than from the block.</li>
|
|
<li><code>HiMech/NcParsers/LogicSyntaxs/HighSpeedPeckCycleSyntax.cs</code> — the G73 expansion that spends the
|
|
same value as the chip-break retract distance.</li>
|
|
<li><code>HiMech/NcParsers/Syntaxs/FanucSyntaxUtil.cs</code>,
|
|
<code>HiMech/NcParsers/Syntaxs/MazakSyntaxUtil.cs</code>,
|
|
<code>HiMech/NcParsers/Syntaxs/SyntecSyntaxUtil.cs</code>,
|
|
<code>HiMech/NcParsers/Syntaxs/SiemensSyntaxUtil.cs</code>,
|
|
<code>HiMech/NcParsers/Syntaxs/HeidenhainSyntaxUtil.cs</code> — the five brand syntax lists, and which of
|
|
them register both peck expansions against the one that registers the G83 expansion alone.</li>
|
|
<li><code>HiMech/NcParsers/LogicSyntaxs/Siemens/SiemensModalCycleSyntax.cs</code> — the CYCLE83 mapping onto the
|
|
shared cycle section, and the arguments it drops.</li>
|
|
<li><code>HiMech/NcParsers/LogicSyntaxs/Heidenhain/HeidenhainCannedCycleSyntax.cs</code> — the klartext cycle
|
|
mapping onto the same section.</li>
|
|
<li><code>HiMech/NcParsers/LogicSyntaxs/Heidenhain/HeidenhainPlaneTiltSyntax.cs</code> — the one consumer of the
|
|
tool-axis direction: the pure-tool-axis test that decides whether COORD ROT suppresses rotary
|
|
positioning.</li>
|
|
<li><code>HiMech/NcParsers/PostLogicSyntaxs/RadiusCompensationSyntax.cs</code> — the cutter radius compensation
|
|
that is resolved, and that does not consult the stored startup-and-cancel type.</li>
|
|
<li><code>HiGeom/Common/Collections/DictionaryUtil.cs</code> — the get-or-create the table accessors read through,
|
|
and therefore why a read re-creates a deleted parameter row.</li>
|
|
</ul>
|
|
<h2 id="see-also">See Also</h2>
|
|
<ul>
|
|
<li><a class="xref" href="index.html">Machine and Controller Plane</a> — the plane these two leaves sit on, and which half of the project
|
|
each of their values is stored in</li>
|
|
<li><a class="xref" href="../brand-matrix.html">Brand Matrix</a> — why one of the two leaves is gated and the other is not, and
|
|
which brand resolves which parameter table</li>
|
|
<li><a class="xref" href="../editing-contract.html">Editing Contract</a> — the fetch, commit, rollback and empty-layer rules these
|
|
panels share with the rest of the branch</li>
|
|
<li><a class="xref" href="native-parameters.html">Native Parameters</a> — the same rows by number, in their raw stored units,
|
|
including the peck clearance this page shows converted</li>
|
|
</ul>
|
|
|
|
</article>
|
|
|
|
<div class="contribution d-print-none">
|
|
</div>
|
|
|
|
<div class="next-article d-print-none border-top" id="nextArticle"></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>
|