Archived
462 lines
30 KiB
HTML
462 lines
30 KiB
HTML
<!DOCTYPE html>
|
||
<html>
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<title>Datum Tables | HiAPI-C# 2025 </title>
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<meta name="title" content="Datum Tables | 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-ControllerDatumTables">
|
||
<h1 id="datum-tables">Datum Tables</h1>
|
||
|
||
<p>Datum Tables is the pair of Heidenhain per-case ledgers the Controller branch grows together: the
|
||
preset rows a <code>CYCL DEF 247</code> cycle selects, and the datum shift rows a <code>CYCL DEF 7</code> cycle adds on top
|
||
of the selected preset. Both live on the General Setup page at <code>/general-setup</code> under the
|
||
Control-Tree ids <code>equipment/controller/program-data/datum-presets</code> and
|
||
<code>equipment/controller/program-data/datum-shifts</code> — reached as
|
||
<code>?tree=equipment/controller/program-data/datum-presets</code> and
|
||
<code>?tree=equipment/controller/program-data/datum-shifts</code> — and the tree labels them
|
||
<strong>Datum Presets (Q339)</strong> and <strong>Datum Shifts (D)</strong>. One snapshot flag grows the pair, one component
|
||
serves both nodes, and one of the two tables is also the object the Work Coordinates leaf edits.</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>
|
||
<h2 id="two-nodes-one-component">Two Nodes, One Component</h2>
|
||
<p>The branch builder pushes both nodes inside a single test on the snapshot's datum flag, so the two
|
||
rows appear and disappear as a pair and never one without the other. That flag probes
|
||
<a class="xref" href="../../../../api/Hi.NcParsers.Dependencys.HeidenhainDatumTable.html">HeidenhainDatumTable</a> over the runner's proxy-resolved dependency
|
||
list, and only the Heidenhain preset carries it — which brand grows which leaf is
|
||
<a class="xref" href="../brand-matrix.html">Brand Matrix</a>.</p>
|
||
<p>Both nodes carry the same item type, so the editor row mounts the same component for either
|
||
selection. The component takes its role from the last segment of the node id it is given: an id
|
||
ending in <code>datum-shifts</code> makes it the shift editor, and <strong>anything else</strong> makes it the preset editor.
|
||
The test is a suffix match with a preset default rather than an equality check over two known ids, so
|
||
the preset role is what an unrecognised id falls to.</p>
|
||
<p>Four things follow from that role, and nothing else in the panel differs between the two nodes.</p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>Decided by the role</th>
|
||
<th>Datum Presets (Q339)</th>
|
||
<th>Datum Shifts (D)</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>Which array of the one read is rendered</td>
|
||
<td>the preset rows</td>
|
||
<td>the shift rows</td>
|
||
</tr>
|
||
<tr>
|
||
<td>The index column's header</td>
|
||
<td><code>Q339</code></td>
|
||
<td><code>D</code></td>
|
||
</tr>
|
||
<tr>
|
||
<td>The description caption above the table</td>
|
||
<td><em>"Datum presets (CYCL DEF 247, Q339 = row). Rows 1–6 double as G54–G59."</em></td>
|
||
<td><em>"Datum shifts (CYCL DEF 7)."</em></td>
|
||
</tr>
|
||
<tr>
|
||
<td>The route segment its writes address</td>
|
||
<td><code>preset</code></td>
|
||
<td><code>shift</code></td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p><strong>One request serves both nodes.</strong> The read returns a presence flag together with <em>both</em> arrays, and
|
||
the panel keeps one and discards the other. Selecting the sibling node changes the node id, which
|
||
changes the editor row's remount key, so the component remounts and re-fetches the same payload for
|
||
the other half. Reading the pair therefore costs two identical requests, and neither node can show a
|
||
value the other's request had already returned.</p>
|
||
<p>The <code>preset</code> and <code>shift</code> segments are the only two the panel ever sends; the endpoint's rejection of
|
||
a third is one of the departures recorded in
|
||
<a class="xref" href="../editing-contract.html">Editing Contract</a>.</p>
|
||
<h2 id="what-each-table-holds">What Each Table Holds</h2>
|
||
<p>Both tables are the same shape — an integer row number against an X / Y / Z translation — and both
|
||
are seeded with rows 1 through 20 at zero when the table is constructed. What separates them is which
|
||
klartext cycle reads which, and how the value is applied.</p>
|
||
<ul>
|
||
<li><strong>Datum Presets (Q339)</strong> is the preset store. <code>CYCL DEF 247 DATUM SETTING</code> with <code>Q339=N</code> selects
|
||
row <em>N</em>, and its translation becomes the block's active coordinate offset. The same parser claims
|
||
the DIN/ISO spelling <code>G247 Q339=+N</code> and stamps the identical cycle record, so both dialects reach
|
||
one store.</li>
|
||
<li><strong>Datum Shifts (D)</strong> is the shift store. <code>CYCL DEF 7</code> with a <code>#N</code> row index reads row <em>N</em>, and the
|
||
translation composes <strong>on top of</strong> the active preset rather than replacing it — the two land in
|
||
separate entries of the block's transform chain. <code>CYCL DEF 7</code> written with direct X / Y / Z values
|
||
instead of a <code>#</code> index reads no table row at all.</li>
|
||
</ul>
|
||
<p>The two stores sit on one dependency and are two dictionaries of it, which is why one flag grows two
|
||
nodes and one request answers for both.</p>
|
||
<p><strong>Neither store is a parameter table.</strong> <a class="xref" href="../../../../api/Hi.NcParsers.Dependencys.HeidenhainDatumTable.html">HeidenhainDatumTable</a> does not
|
||
derive from the controller parameter base every brand's machine settings hang off, and the Heidenhain
|
||
preset carries it as an entry of its own beside the machine-parameter entry. So no datum row has a
|
||
native parameter number, and none of these values appears in
|
||
<a class="xref" href="../machine/native-parameters.html">Native Parameters</a> — unlike the Fanuc and Syntec work
|
||
coordinates, which are parameter addresses and do.</p>
|
||
<h3 id="where-the-table-is-stored">Where the table is stored</h3>
|
||
<p>The Heidenhain preset does not carry a datum table. It carries
|
||
<a class="xref" href="../../../../api/Hi.NcParsers.Dependencys.HeidenhainDatumTableProxy.html">HeidenhainDatumTableProxy</a>, a get-or-create placeholder that installs
|
||
a bare new table into the project's per-case list when that list holds none of the type, and resolves
|
||
to the project's own table when it does. The proxy holds no seed and serializes as an empty element,
|
||
so a controller file saved from the branch root carries none of these values, and installing a
|
||
Heidenhain runner file over a Heidenhain project leaves the rows already edited exactly where they
|
||
are. The plane's storage model in full is <a class="xref" href="index.html">Program Data Plane</a>.</p>
|
||
<h2 id="the-columns-and-the-axis-set">The Columns and the Axis Set</h2>
|
||
<p>Each leaf renders one dense markup table: the row-number column, three value columns, and an
|
||
unlabelled action column.</p>
|
||
<ul>
|
||
<li>The row-number cell is bold plain text and cannot be edited. Its header is the role's literal —
|
||
<code>Q339</code> or <code>D</code>.</li>
|
||
<li>The three value headers read <code>X (mm)</code>, <code>Y (mm)</code> and <code>Z (mm)</code>. Those three and the index literal
|
||
beside them are hard-coded rather than translated, so they read the same under any locale, while
|
||
the description caption, both empty bodies and the action button's tooltip are translated.</li>
|
||
<li>The action column has no header text and holds one button per row.</li>
|
||
</ul>
|
||
<p><strong>The axis set is fixed at three and does not follow the machine.</strong> A datum row is a three-component
|
||
translation on both sides of the wire, so the columns are X, Y and Z whatever the machining chain
|
||
declares — a fourth or rotary axis has no column here and no stored datum component. That is the
|
||
opposite of the branch's <a class="xref" href="../machine/per-axis-tables.html">Per-Axis Tables</a>, whose rows are the
|
||
chain's own axis names. The <code>mm</code> in the header is a label: nothing on the path from the stored
|
||
translation to the cell converts anything.</p>
|
||
<p>Rows are whatever the read returned, in row-number order. A table built by the proxy opens with
|
||
twenty rows of zeros in each node; a table deserialized from a project file carries the rows that
|
||
file holds.</p>
|
||
<h2 id="editing-a-row">Editing a Row</h2>
|
||
<p>Every value cell is the shared numeric field, so it commits on blur or on Enter and never per
|
||
keystroke; its parsing, its bounds behaviour and the second commit that follows Enter are
|
||
<a class="xref" href="../../../widget/numeric-input.html">Numeric Input</a>. No cell here passes a minimum or a maximum, so a negative
|
||
offset is accepted and stored.</p>
|
||
<p><strong>The write is the whole row.</strong> A commit assigns the new number into the local row and then sends
|
||
that row's three components as they stand to the row's number; a failure restores the one component
|
||
the handler captured and raises the branch's standard toast, though the request carried all three.
|
||
That shape, the toast it ends in and what a failed write leaves behind are
|
||
<a class="xref" href="../editing-contract.html">Editing Contract</a>.</p>
|
||
<p>A cleared cell parses to null, and <code>Infinity</code> or <code>NaN</code> parse to a non-finite number; the handler
|
||
returns before the request in every one of those cases. Nothing is written and nothing is restored,
|
||
so the cell is left blank — or showing the literal <code>Infinity</code> — while the stored number stands
|
||
unchanged, until the panel is remounted by selecting another node and coming back.</p>
|
||
<p>The action button is labelled with the single character <code>0</code> and carries the tooltip <em>“Reset to
|
||
zero”</em>. It writes zeros into all three components of that row through a route of its own rather than
|
||
through the row setter, and it is not a delete: the row stays, at zero. It is also the one write on
|
||
these two leaves that is not optimistic — the request resolves first, and only then are the three
|
||
local cells set to zero. No confirmation guards it.</p>
|
||
<p>Neither leaf has an add control, a delete control, a draft or a save button, and the component
|
||
declares no events at all, so no edit made here rebuilds the branch or marks anything dirty.</p>
|
||
<h2 id="the-preset-table-is-also-the-work-coordinate-table">The Preset Table Is Also the Work-Coordinate Table</h2>
|
||
<p>This is the pairing with <a class="xref" href="work-coordinates.html">Work Coordinates</a>, and it holds for
|
||
exactly one of the two tables.</p>
|
||
<p><a class="xref" href="../../../../api/Hi.NcParsers.Dependencys.HeidenhainDatumTable.html">HeidenhainDatumTable</a> implements
|
||
<a class="xref" href="../../../../api/Hi.NcParsers.Dependencys.IIsoCoordinateConfig.html">IIsoCoordinateConfig</a>, and the work-coordinate endpoint reads and
|
||
writes through the <em>first</em> implementer of that interface in the runner's proxy-resolved list. On the
|
||
Heidenhain preset the datum proxy is the second entry of the dependency list, immediately after the
|
||
brand marker, and no other entry that preset carries implements the interface — the Heidenhain
|
||
machine-parameter table does not. So on Heidenhain the object behind Work Coordinates is this datum
|
||
table, and the snapshot's coordinate-kind field reports the Heidenhain arm for that same reason.</p>
|
||
<p>The alias is narrow, and one-directional in coverage.</p>
|
||
<ul>
|
||
<li><strong>Datum Presets (Q339) aliases.</strong> The ISO face maps <code>G54</code> through <code>G59</code> onto preset rows 1 through
|
||
6, in order, on both the read and the write, and enumerates no id outside that series — one for
|
||
each of those six rows the table holds, which is all six unless a stored project table omits one of
|
||
them. Editing the <code>Q339</code> row 3 cells changes what Work Coordinates shows for <code>G56</code>, and an edit
|
||
made on <code>G56</code> changes row 3 — one instance, one cell, two faces. The row-zeroing button reaches the
|
||
same cells.</li>
|
||
<li><strong>Datum Shifts (D) does not alias.</strong> Nothing on the ISO face touches the shift store: the id
|
||
enumeration reads the preset dictionary only, and both the offset getter and the offset setter
|
||
resolve to preset rows. The shift table has exactly one editing surface, the leaf on this page.</li>
|
||
<li><strong>Preset rows 7 through 20 have no work-coordinate face either.</strong> The ISO face reserves six rows
|
||
for the <code>G54</code> series and enumerates no id past <code>G59</code>, so fourteen preset rows and all twenty shift
|
||
rows are reachable from this page and from nowhere else on the branch.</li>
|
||
</ul>
|
||
<p>The two faces are never on screen together — the editor row mounts one panel at a time — and each
|
||
panel reads once on mount, so moving the selection between the two nodes is itself the refresh. What
|
||
a mounted panel therefore does not see is
|
||
<a class="xref" href="../editing-contract.html">Editing Contract</a>.</p>
|
||
<h3 id="what-a-brand-switch-does-to-the-pair">What a brand switch does to the pair</h3>
|
||
<p>The brand switch's carry option reads the outgoing runner's coordinate provider and writes the values
|
||
into the incoming one, for the ids the incoming provider enumerates. On this table that means at most
|
||
six values, landing in preset rows 1 through 6; a switch away from Heidenhain reads those same six
|
||
rows out. <strong>No shift row is ever carried, and neither are preset rows 7 through 20.</strong></p>
|
||
<p>A switch away from Heidenhain then sweeps the datum table itself, because no other brand preset
|
||
proxies it — both stores go, and switching back materializes a fresh table of zeros rather than
|
||
restoring them. The staged select, its confirmation and the rest of that operation are
|
||
<a class="xref" href="../machine/brand-switch.html">Brand Switch</a>.</p>
|
||
<h2 id="what-the-rows-feed">What the Rows Feed</h2>
|
||
<p>At run time both stores are read and neither is written. No syntax in the parse pipeline writes
|
||
either dictionary — every writer is one of the four surfaces named below — so playing a program
|
||
cannot change a datum row.</p>
|
||
<p><strong>The preset path.</strong> A <code>CYCL DEF 247</code> block resolves its <code>Q339</code> number — a literal, or the number a
|
||
Q-expression evaluated to — looks the row up, and writes a synthetic coordinate id naming that row
|
||
alongside the translation. The shared ISO coordinate syntax then keeps the offset alive on following
|
||
blocks by re-resolving that synthetic id against the same table, which is how a mid-program edit to a
|
||
row takes effect on the blocks after the declaration. A <code>CYCL DEF 247</code> whose <code>Q339</code> is not a number
|
||
resolves nothing, leaves the active datum unchanged, and reports the validation warning <em>"CYCL DEF
|
||
247 without a literal Q339 preset number; the active datum is kept unchanged."</em></p>
|
||
<p><strong>A successful preset selection clears the active shift.</strong> That is the one path in the cycle handler
|
||
that does not carry the previous block's shift forward.</p>
|
||
<p><strong>The shift path.</strong> A <code>CYCL DEF 7</code> block carrying a <code>#</code> index reads that shift row and composes it as
|
||
a second, separate transform entry, so preset and shift add rather than replace. On blocks with no
|
||
cycle the shift is carried modally, and a numbered shift re-resolves from the table on every block,
|
||
exactly as the preset does. A <code>CYCL DEF 7</code> written with direct values carries them forward verbatim
|
||
instead and needs no datum table at all; cancelling is a zero shift. A <code>CYCL DEF 7</code> carrying neither
|
||
form reports <em>"CYCL DEF 7 carries neither a #-table index nor direct X/Y/Z values; the active datum
|
||
shift is kept unchanged."</em></p>
|
||
<p><strong>A <code>G54</code> with axis words is not a table read.</strong> On the Heidenhain syntax list the datum-shift parser
|
||
claims a <code>G54</code> that is followed by at least one axis value and routes it into the direct-shift flow,
|
||
which reads no row; a bare <code>G54</code> is left alone and reaches the ISO path, where it resolves preset row</p>
|
||
<ol>
|
||
<li>So <code>G54</code> means a table lookup or a literal shift depending on what follows it in the block.</li>
|
||
</ol>
|
||
<p>A row number that resolves to nothing yields a zero translation rather than an error, on both paths.
|
||
And nothing is active at the first block: the Heidenhain preset's initializer seeds no coordinate
|
||
section at all, unlike the Fanuc family's <code>G54</code> and the Siemens cancel frame, so a program that
|
||
issues no datum cycle and no <code>G54</code> machines with no offset applied.</p>
|
||
<h2 id="where-non-zero-rows-come-from">Where Non-Zero Rows Come From</h2>
|
||
<p>Four surfaces put a value into these tables, and only the first is on this page.</p>
|
||
<ul>
|
||
<li><strong>The two leaves themselves</strong>, per cell or per row.</li>
|
||
<li><strong>Work Coordinates</strong>, for preset rows 1 through 6 only, through the alias above.</li>
|
||
<li><strong>A brand switch onto Heidenhain with its carry option on</strong>, through that same ISO face and into
|
||
the table the incoming preset resolves: at most six offsets, into preset rows 1 through 6 —
|
||
<a class="xref" href="../machine/brand-switch.html">Brand Switch</a>.</li>
|
||
<li><strong>A project-load migration.</strong> Opening a project file that carries the superseded controller
|
||
environment element and no per-case list populates the materialized per-case tables from that
|
||
element, and the datum half runs only when the legacy brand element reads Heidenhain. It copies
|
||
preset entries and shift entries by row number, overwriting a row it names and leaving every other
|
||
row as seeded. The legacy work-coordinate table is replayed first, through the same ISO face that
|
||
aliases onto preset rows 1 through 6, so where the two overlap the explicit datum copy is what
|
||
stands.</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>Program Data</strong> Group Row — <code>equipment/controller/program-data</code>
|
||
<ul>
|
||
<li><strong>Datum Presets (Q339)</strong> Node Row — <code>equipment/controller/program-data/datum-presets</code></li>
|
||
<li><strong>Datum Shifts (D)</strong> Node Row — <code>equipment/controller/program-data/datum-shifts</code></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li>Editor Row — the panel of whichever node is selected, one at a time
|
||
<ul>
|
||
<li><strong>Datum Presets (Q339)</strong> / <strong>Datum Shifts (D)</strong> Panel — one component, its role taken from the
|
||
selected id's last segment
|
||
<ul>
|
||
<li>No-Runner Body — <em>"No NC runner — load a project first."</em>; the shared empty state, shown
|
||
instead of everything below while the snapshot reports no runner</li>
|
||
<li>Absent-Table Body — <em>"No Heidenhain datum table on the active runner."</em>; shown instead of
|
||
everything below while the panel's own read reports no table</li>
|
||
<li>Description Caption — grey, one line: <em>"Datum presets (CYCL DEF 247, Q339 = row). Rows 1–6
|
||
double as G54–G59."</em> or <em>"Datum shifts (CYCL DEF 7)."</em></li>
|
||
<li>Datum Table — dense, flat, bordered; no sort, no pagination, no column menu
|
||
<ul>
|
||
<li>Header Row — <code>Q339</code> or <code>D</code>, then <code>X (mm)</code>, <code>Y (mm)</code> and <code>Z (mm)</code>, then an unlabelled action
|
||
column</li>
|
||
<li>Datum Row, one per row the read returned, in row-number order
|
||
<ul>
|
||
<li>Row Number Label — bold plain text, never editable</li>
|
||
<li>Value Numeric Field, one per axis column — no minimum, no maximum, no unit suffix</li>
|
||
<li><strong>0</strong> Button — flat, dense, centred, tooltip <em>“Reset to zero”</em></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li>Toast — negative, three seconds, the panel's context followed by the server's own message</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<p>The panel carries no heading, no toolbar, no add row, no delete button, no toggle, no save button and
|
||
no dialog.</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/SoftNcDatumTablePanel.vue</code> — the one component behind both
|
||
leaves: the role taken from the node id's suffix with its preset default, the four things that
|
||
role decides, the literal column headers, the whole-row cell commit with its non-finite guard, and
|
||
the non-optimistic row reset.</li>
|
||
<li><code>wwwroot-src/src/components/controlTree/softNcItemTypes.ts</code> — the branch builder: the two node ids
|
||
and label keys pushed together inside one flag test, and the single item type both carry.</li>
|
||
<li><code>wwwroot-src/src/components/controlTree/PrimarySlavePanel.vue</code> — the editor row: the remount key
|
||
that makes a move between the two nodes a re-fetch, and the events this panel declares none of.</li>
|
||
<li><code>wwwroot-src/src/components/controlTree/SoftNcEmptyState.vue</code> — the shared no-runner line the panel
|
||
opens with.</li>
|
||
<li><code>wwwroot-src/src/components/widgets/NumericInput.vue</code> — the value cell: commit on blur or Enter,
|
||
the empty-text-to-null parse, and the infinity and NaN literals the panel's handler then rejects.</li>
|
||
<li><code>wwwroot-src/src/api/softNcRunner.ts</code> — the read that returns both tables and its row shape, the
|
||
two role values, the per-row setter and the reset call, and the snapshot's datum flag.</li>
|
||
<li><code>wwwroot-src/src/composables/useSoftNcRunner.ts</code> — the shared snapshot the first empty layer reads.</li>
|
||
<li><code>wwwroot-src/src/api/http.ts</code> — the envelope helper that turns a success-flagged failure body into
|
||
a thrown error.</li>
|
||
<li><code>wwwroot-src/src/components/controlTree/SoftNcWorkCoordinatesPanel.vue</code> — the second face on the
|
||
preset rows: the same six cells addressed by coordinate id, and the caption that names the mapping.</li>
|
||
<li><code>wwwroot-src/src/i18n/en/softNc.ts</code> — the two node labels, the two descriptions, the absent-table
|
||
body and the three error contexts.</li>
|
||
<li><code>wwwroot-src/src/i18n/en/common.ts</code> — the reset button's tooltip.</li>
|
||
<li><code>Mech/SoftNcRunnerController.cs</code> — the REST surface: the datum flag's probe in the snapshot
|
||
builder, the read that returns both dictionaries ordered by row number, the per-row writer and the
|
||
zeroing route behind one shared table-segment guard, the work-coordinate routes that reach the same
|
||
object through the ISO interface, and the brand switch's capture-swap-carry-sweep.</li>
|
||
</ul>
|
||
<h3 id="hiapi-engine">HiAPI Engine</h3>
|
||
<ul>
|
||
<li><code>HiMech/NcParsers/Dependencys/Heidenhain/HeidenhainDatumTable.cs</code> — the two dictionaries, their
|
||
twenty seeded rows, the accessors both cycles read through, and the ISO face: the <code>G54</code>–<code>G59</code> map
|
||
onto preset rows 1–6, the synthetic preset ids it also resolves, and the id enumeration that stops
|
||
at six.</li>
|
||
<li><code>HiMech/NcParsers/Dependencys/Heidenhain/HeidenhainDatumTableProxy.cs</code> — the seedless get-or-create
|
||
placeholder the preset carries, and the bare table it installs into a project holding none.</li>
|
||
<li><code>HiMech/NcParsers/Dependencys/IIsoCoordinateConfig.cs</code> — the offset-provider contract whose first
|
||
implementer the work-coordinate face resolves.</li>
|
||
<li><code>HiMech/NcParsers/Dependencys/Heidenhain/HeidenhainParameterTable.cs</code> — the other Heidenhain
|
||
per-case table: it derives from the controller parameter base, which declares no coordinate
|
||
contract, which is why the datum table is the preset's only implementer of one.</li>
|
||
<li><code>HiMech/NcParsers/SoftNcRunner.cs</code> — the Heidenhain preset's dependency list and the position of the
|
||
datum proxy in it, the proxy resolution every read goes through, and the legacy per-case populate
|
||
that fills both dictionaries by row number after replaying the legacy coordinate table.</li>
|
||
<li><code>HiMech/NcParsers/ParsingSyntaxs/Heidenhain/CyclDefSyntaxs/HeidenhainDatumSettingSyntax.cs</code> — the
|
||
<code>CYCL DEF 247</code> parser and the DIN/ISO <code>G247</code> spelling it claims for the same cycle record.</li>
|
||
<li><code>HiMech/NcParsers/ParsingSyntaxs/Heidenhain/CyclDefSyntaxs/HeidenhainDatumShiftSyntax.cs</code> — the
|
||
<code>CYCL DEF 7</code> parser: the <code>#</code> row index, the direct-value form, and the axis-word test that decides
|
||
whether a <code>G54</code> becomes a direct shift or stays on the ISO path.</li>
|
||
<li><code>HiMech/NcParsers/LogicSyntaxs/Heidenhain/HeidenhainCoordinateOffsetSyntax.cs</code> — the resolver: the
|
||
preset lookup and its synthetic id, the additive shift in its own transform entry, the modal carry
|
||
that re-resolves a numbered shift from the table, the shift reset a successful preset selection
|
||
performs, and the two validation warnings.</li>
|
||
<li><code>HiMech/NcParsers/LogicSyntaxs/IsoCoordinateOffsetSyntax.cs</code> — the <code>G54</code>-series path and the modal
|
||
lookback that re-queries the table for the carried id.</li>
|
||
<li><code>HiMech/NcParsers/LogicSyntaxs/CoordinateOffsetUtil.cs</code> — the offset resolution and the translation
|
||
composed onto the block's transform chain.</li>
|
||
<li><code>HiMech/NcParsers/Syntaxs/HeidenhainSyntaxUtil.cs</code> — the Heidenhain syntax list carrying both the
|
||
ISO coordinate syntax and the datum-cycle syntax.</li>
|
||
<li><code>HiMech/NcParsers/Initializers/StaticInitializer.cs</code> — the Heidenhain initializer that seeds no
|
||
coordinate section, against the Fanuc and Siemens ones that do.</li>
|
||
<li><code>HiGeom/Geom/Vec3d.cs</code> — the three-component translation a datum row stores, and the zero it
|
||
defaults to.</li>
|
||
<li><code>HiNc/MachiningProcs/MachiningProject.cs</code> — the load path that wires the proxies and then runs the
|
||
legacy per-case populate on a project carrying no per-case list.</li>
|
||
</ul>
|
||
<h2 id="see-also">See Also</h2>
|
||
<ul>
|
||
<li><a class="xref" href="index.html">Program Data Plane</a> — the plane these two leaves sit on, where their table is
|
||
stored, and the per-case tables beside them a brand switch keeps or sweeps</li>
|
||
<li><a class="xref" href="work-coordinates.html">Work Coordinates</a> — the second face on the preset rows: the same six cells
|
||
addressed as <code>G54</code>–<code>G59</code>, on the one brand where two nodes edit one object</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>
|