Archived
449 lines
29 KiB
HTML
449 lines
29 KiB
HTML
<!DOCTYPE html>
|
||
<html>
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<title>Indexing Position Tables | HiAPI-C# 2025 </title>
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<meta name="title" content="Indexing Position 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-ControllerIndexingPositions">
|
||
<h1 id="indexing-position-tables">Indexing Position Tables</h1>
|
||
|
||
<p>Indexing Position Tables is the machine plane's single-brand leaf: the two global position lists a
|
||
Sinumerik control resolves coded-position words against, edited as drafts and saved whole. It lives
|
||
on the General Setup page at <code>/general-setup</code> under the Control-Tree id
|
||
<code>equipment/controller/machine/indexing-positions</code>, and of the five controller brands only Siemens
|
||
grows it. The tables it edits are machine data of the Siemens machine-data table; the assignment
|
||
that decides which axis reads which of them is shown here and edited on the sibling leaf,
|
||
<a class="xref" href="native-parameters.html">Parameters (Native)</a>.</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="the-one-single-brand-node">The One Single-Brand Node</h2>
|
||
<p>The branch builder pushes this leaf behind the <code>hasIndexingTables</code> snapshot flag, and that flag is a
|
||
<strong>pure type probe</strong>: it reports whether the runner's brand parameter table <em>is</em> the
|
||
<a class="xref" href="../../../../api/Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html">SiemensMachineDataTable</a>. Nothing about the tables' contents
|
||
is examined, so the node grows on every Siemens runner whether or not a single position has been
|
||
entered. Only the Siemens preset carries that table, which is why this leaf is the machine plane's
|
||
one single-brand row in the <a class="xref" href="../brand-matrix.html">Brand Matrix</a>; the program-data
|
||
plane beside it has several.</p>
|
||
<p>The flag and the panel's own read do not ask quite the same question. The flag inspects the <strong>first</strong>
|
||
brand parameter table in the resolved dependency list; the panel's reader looks for a Siemens
|
||
machine-data table <strong>anywhere</strong> in it. The two agree on every shipped preset, where the Siemens
|
||
machine-data table is the only parameter table present.</p>
|
||
<p>That table is also the sole implementer of
|
||
<a class="xref" href="../../../../api/Hi.NcParsers.Dependencys.IIndexingPositionConfig.html">IIndexingPositionConfig</a> in the engine, so nothing else in a runner
|
||
can supply an indexing table and no other brand can grow this node by carrying a different type.</p>
|
||
<h2 id="what-the-two-tables-are">What the Two Tables Are</h2>
|
||
<p>The leaf edits <a class="xref" href="../../../../api/Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html#Hi_NcParsers_Dependencys_Siemens_SiemensMachineDataTable_IndexAxPosTab1">IndexAxPosTab1</a> and
|
||
<a class="xref" href="../../../../api/Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html#Hi_NcParsers_Dependencys_Siemens_SiemensMachineDataTable_IndexAxPosTab2">IndexAxPosTab2</a> — the general machine
|
||
data MD10910 and MD10930. They describe axes that take up discrete stations rather than arbitrary
|
||
positions: Hirth-coupled tables, indexing rotaries, turret-style workholders.</p>
|
||
<ul>
|
||
<li><strong>They are global, not per-axis.</strong> Each is one ordered list shared by every axis assigned to it, so
|
||
an edit to Table 1 changes every axis whose assignment reads 1.</li>
|
||
<li><strong>Row order is the position number, and numbering is 1-based.</strong> Row 1 is indexing position 1. The
|
||
used-length machine data beside each table — MD10900 and MD10920 — is not stored: the list count
|
||
<em>is</em> the used length, which is why the panel has no length field.</li>
|
||
<li><strong>Values are in the axis' own native units</strong> — degrees on a rotary axis, millimetres on a linear
|
||
one — and the panel prints no unit suffix on the cells, because the unit follows whichever axes
|
||
read the table.</li>
|
||
<li><strong>Values must be strictly ascending</strong>, and where a modular rotary axis reads the table they must
|
||
also satisfy <code>0 ≤ position < 360</code>.</li>
|
||
<li><strong>At most 60 entries per table</strong>, the MD10910 / MD10930 array size. Finer station counts are what
|
||
the equidistant definition below exists for.</li>
|
||
</ul>
|
||
<h3 id="what-consumes-them">What consumes them</h3>
|
||
<p>The tables are read at the write stage of the parsing pipeline, through
|
||
<a class="xref" href="../../../../api/Hi.NcParsers.Dependencys.IIndexingPositionConfig.html#Hi_NcParsers_Dependencys_IIndexingPositionConfig_TryGetIndexingPosition_">TryGetIndexingPosition</a><small>(API)</small>
|
||
and <a class="xref" href="../../../../api/Hi.NcParsers.Dependencys.IIndexingPositionConfig.html#Hi_NcParsers_Dependencys_IIndexingPositionConfig_TryFindIndexingAnchor_">TryFindIndexingAnchor</a><small>(API)</small>,
|
||
for the Siemens coded-position coordinate functions <code>CAC()</code>, <code>CIC()</code>, <code>CDC()</code>, <code>CACP()</code> and <code>CACN()</code>
|
||
— the family whose argument is a position <strong>number</strong> rather than a coordinate. The Siemens
|
||
per-word coordinate syntax unwraps those verbs only on axes that
|
||
<a class="xref" href="../../../../api/Hi.NcParsers.Dependencys.IIndexingPositionConfig.html#Hi_NcParsers_Dependencys_IIndexingPositionConfig_IsIndexingAxis_">IsIndexingAxis</a><small>(API)</small> reports
|
||
as usable, and the rotary-only members of the family additionally require a rotary axis; the rotary
|
||
words are then resolved by the ABC write pass and the linear words by the incremental-resolve pass,
|
||
both through the shared coded-position helper.</p>
|
||
<p><strong>An empty table is a real state with a visible consequence.</strong> An axis assigned to a table that holds
|
||
no entries is not a usable indexing axis, so its coded-position words are left unrecognised and
|
||
surface as unresolved text rather than being resolved against nothing. The engine lookups themselves
|
||
deliberately do not validate the Siemens constraints — a table that breaks them resolves nonsense
|
||
positions with no diagnostic — which is why the write endpoint, and this panel with it, is where the
|
||
rules are enforced.</p>
|
||
<h2 id="machine-data-not-program-data">Machine Data, Not Program Data</h2>
|
||
<p>The tables belong to the machine plane rather than the program-data plane: they configure the
|
||
machine's stations, not a part's setup, and they carry no per-workpiece meaning the way a work
|
||
coordinate or a datum shift does. That is the classification the branch builder gives the node, and
|
||
it is the reason the node sits beside Machine Limits and Rapid Feedrates rather than beside Work
|
||
Coordinates.</p>
|
||
<p><strong>Their storage half is a separate question, and the answer is the project.</strong> The Siemens preset
|
||
carries a <a class="xref" href="../../../../api/Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTableProxy.html">SiemensMachineDataTableProxy</a>, not a table: the
|
||
proxy holds a fixed machine-config seed, deep-clones it into the project's per-case list only when
|
||
the project has no Siemens machine-data table yet, and thereafter resolves the project's own table.
|
||
Three consequences follow, and they are the ones the plane's other project-owned leaves live with —
|
||
Machine Limits, Rapid Feedrates, Home / G28 Reference, M-Code Declarations and Parameters (Native),
|
||
all rows of the same per-case table. The plane's runner-owned leaves get the opposite of all three,
|
||
and which half a leaf falls in is listed on
|
||
<a class="xref" href="index.html">Machine and Controller Plane</a>:</p>
|
||
<ul>
|
||
<li>Edited positions are stored on the <strong>project</strong>, serialized with the per-case table as one XML
|
||
element per entry carrying its table number and its value.</li>
|
||
<li>Installing another Siemens runner, or re-applying the Siemens brand, leaves them alone: the
|
||
incoming proxy re-binds to the project's table instead of cloning its seed over it.</li>
|
||
<li>Saving a controller file captures the <strong>seed</strong>, not the edited table. A <code>.Controller</code> written after
|
||
the tables were filled in carries the preset seed they were cloned from.</li>
|
||
</ul>
|
||
<p>Switching to any other brand removes the Siemens machine-data table from the project, because no
|
||
proxy of the incoming runner resolves it, and the positions go with it. Switching back clones a fresh
|
||
table from the seed rather than restoring the removed one — see
|
||
<a class="xref" href="brand-switch.html">Brand Switch</a>.</p>
|
||
<h2 id="the-assignment-is-shown-here-and-edited-elsewhere">The Assignment Is Shown Here and Edited Elsewhere</h2>
|
||
<p>Above the two drafts the panel renders one display-only table: <strong>Axis</strong> against <strong>Indexing assignment
|
||
(MD30500)</strong>, the per-axis machine datum that decides what an axis does with the two global lists.
|
||
Four values are named:</p>
|
||
<table>
|
||
<thead>
|
||
<tr>
|
||
<th>Assignment</th>
|
||
<th>Label the user reads</th>
|
||
<th>Meaning</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>0</td>
|
||
<td><em>Not an indexing axis</em></td>
|
||
<td>the axis ignores the coded-position family</td>
|
||
</tr>
|
||
<tr>
|
||
<td>1</td>
|
||
<td><em>Table 1 (MD10910)</em></td>
|
||
<td>the axis reads the first draft below</td>
|
||
</tr>
|
||
<tr>
|
||
<td>2</td>
|
||
<td><em>Table 2 (MD10930)</em></td>
|
||
<td>the axis reads the second draft below</td>
|
||
</tr>
|
||
<tr>
|
||
<td>3</td>
|
||
<td><em>Equidistant (MD30501–MD30503)</em></td>
|
||
<td>positions come from a spacing rule, not from either table</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
<p>Any other stored value renders as the bare number.</p>
|
||
<p><strong>The rows are the axes that carry an MD30500 entry, not the plane's usual axis set.</strong> Every other
|
||
per-axis leaf reads the table's axis-type rows — the set a machine-tool install stamps the chain's
|
||
axis codes into — while this one reads the keys of the assignment row itself, sorted by axis name. An
|
||
axis of the machine with no assignment entry does not appear here at all, and an assignment entry
|
||
written against a name the machine does not have does.</p>
|
||
<p>An axis the table reports as modular rotary carries the note <em>(wraps 0–360°)</em> beside its name, and
|
||
its presence is what turns on the one-revolution rule for whichever table it reads. That report is
|
||
the machine-axis contract's default —
|
||
<a class="xref" href="../../../../api/Hi.NcParsers.Dependencys.IMachineAxisConfig.html#Hi_NcParsers_Dependencys_IMachineAxisConfig_IsModularRotary_">IsModularRotary</a><small>(API)</small> is not
|
||
overridden by any parameter table — so on this branch every rotary and every spindle-mode axis counts
|
||
as modular.</p>
|
||
<p><strong>Nothing on this leaf writes an assignment.</strong> The panel renders the value as plain text, and the
|
||
leaf's REST surface exposes a reader for the two tables with their per-axis assignments and a writer
|
||
for one position table; no endpoint of its own writes an assignment. MD30500 is written where every
|
||
other raw machine datum is written: on
|
||
<a class="xref" href="native-parameters.html">Parameters (Native)</a>, as a row of the <strong>Axis parameters
|
||
(integer)</strong> section, added through the <em>Section</em> / <em>Parameter id</em> / <em>Axis</em> / <em>Value (raw)</em> footer with
|
||
the section set to <strong>Axis (integer)</strong>. With no assignment row anywhere on the table this panel says
|
||
so and points there: <em>"No axis declares an indexing assignment (MD30500) yet — add it as a per-axis
|
||
integer parameter in Parameters (Native)."</em></p>
|
||
<p>The equidistant definition is edited entirely on that same sibling leaf and has <strong>no</strong> surface here.
|
||
Its three machine data — the numerator MD30501, the denominator MD30502 and the offset MD30503 —
|
||
are ordinary parameter rows, and an axis on assignment 3 consults neither of the two tables this
|
||
panel edits. On a modular rotary axis the numerator is ignored and the revolution is divided into
|
||
MD30502 positions; elsewhere the spacing is the numerator over the denominator and the position count
|
||
is unbounded.</p>
|
||
<h2 id="draft-validate-save-whole">Draft, Validate, Save Whole</h2>
|
||
<p>This is the branch's one draft-then-save table, and it departs from the shared commit rule that
|
||
<a class="xref" href="../editing-contract.html">Editing Contract</a> sets for its siblings. Every other table
|
||
in the branch commits per cell and rolls a failed write back; this one commits nothing until a button
|
||
is pressed, and keeps a failed edit on screen.</p>
|
||
<ul>
|
||
<li><strong>Cells bind straight into the draft.</strong> Each numeric cell is bound with a two-way model and carries
|
||
no commit handler, so a cell's commit — which the widget runs on blur and on Enter, never on a
|
||
keystroke — lands in the draft row and goes no further. The badge, the validation line and the two
|
||
buttons therefore follow those commits rather than the typing. The field itself still refuses text
|
||
it cannot parse, with an untranslated message under the box; it carries no minimum and no maximum
|
||
here, so every rule below is the draft validator's — see
|
||
<a class="xref" href="../../../widget/numeric-input.html">Numeric Input</a>.</li>
|
||
<li><strong>Add and delete are draft operations too.</strong> <em>Add Position</em> appends an empty row and is disabled at
|
||
60; the row's delete button removes it from the draft with no confirmation and no request.</li>
|
||
<li><strong>An orange <em>unsaved</em> badge</strong> appears beside a table's title while the draft differs from what was
|
||
last saved, compared row count first and then value by value.</li>
|
||
<li><strong>Save Table sends the whole list</strong> for that one table and is disabled while the draft is clean or
|
||
while validation fails. <em>Revert</em> restores the draft from the last saved values.</li>
|
||
<li><strong>The validator mirrors the endpoint's own rules</strong> and reports the first violation as a line under
|
||
the table: the per-table maximum, a <em>fill in position … (or delete its row)</em> line naming an empty
|
||
or non-finite cell, a strictly-ascending check naming both offending positions with their values,
|
||
and the <code>0 ≤ position < 360</code> range when a modular rotary axis reads that table.</li>
|
||
<li><strong>A failed save does not roll the draft back.</strong> The draft stays dirty and the badge stays up, so
|
||
the work is not lost — the opposite of every other panel in the branch.</li>
|
||
<li><strong>Saving an empty table clears it.</strong> The endpoint accepts an empty list, and the axes assigned to
|
||
that table then stop being indexing axes.</li>
|
||
</ul>
|
||
<p>The endpoint enforces the same four rules independently, so the panel's validation is live feedback
|
||
rather than the gate. A save that passes is applied to the live table and the panel does not re-read:
|
||
it marks the draft saved from what it sent.</p>
|
||
<h2 id="what-a-freshly-switched-siemens-runner-shows">What a Freshly Switched Siemens Runner Shows</h2>
|
||
<p><a class="xref" href="../../../../api/Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html#Hi_NcParsers_Dependencys_Siemens_SiemensMachineDataTable_Default3Axis">Default3Axis</a> — the seed the Siemens
|
||
proxy clones — declares a linear X, Y and Z, a reference position and a velocity for each, a maximum
|
||
spindle speed and six note-only OEM M-codes. It declares <strong>no</strong> MD30500 assignment and <strong>no</strong> entry
|
||
in either position table. So a project that has just been switched to Siemens grows this node,
|
||
opens it successfully, and finds it completely empty: the assignment caption in place of the axis
|
||
table, and two titled tables with headers, no rows and an <em>Add Position</em> button.</p>
|
||
<p>This leaf is also the only place the two lists appear. Parameters (Native) shows every row of the
|
||
machine-data table's three parameter dictionaries, and the two position tables are not in any of
|
||
them — they are separate list properties, so this panel is the whole editable surface for MD10910
|
||
and MD10930.</p>
|
||
<p>The panel opens through the branch's two-layer empty gate: the shared <em>"No NC runner — load a
|
||
project first."</em> from the runner snapshot, then <em>"No Siemens machine-data table on the active
|
||
runner."</em> from its own read. The second line is also what a failed read leaves on screen, since the
|
||
presence flag starts false and the failure path only raises a toast.</p>
|
||
<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>Indexing Position Tables</strong> Node Row — <code>equipment/controller/machine/indexing-positions</code>,
|
||
between <strong>Subprogram Folders</strong> and <strong>Parameters (Native)</strong></li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
</li>
|
||
<li>Editor Row — the panel of the selected node
|
||
<ul>
|
||
<li><strong>Indexing Position Tables</strong> Panel — one column, gutter-spaced
|
||
<ul>
|
||
<li>Description Caption — <em>"Global indexing position tables for coded-position programming
|
||
(<code>CAC/CIC/CDC/CACP/CACN</code>). Row order is position-number order — row 1 is indexing position 1.
|
||
Values are in the axis' native units (degrees for rotary, mm for linear) and must be strictly
|
||
ascending. Which axis reads which table is MD30500, edited in Parameters (Native); an axis
|
||
whose table is empty is not an indexing axis (its coded-position words stay unresolved)."</em></li>
|
||
<li>Assignment Table — dense, flat, bordered; display-only
|
||
<ul>
|
||
<li>Header Row — <strong>Axis</strong>, <strong>Indexing assignment (MD30500)</strong></li>
|
||
<li>Data Row — the axis name in bold, with <em>(wraps 0–360°)</em> beside it on a modular rotary axis,
|
||
then the assignment's label</li>
|
||
<li>No-Assignment Caption — replaces the table when no axis carries an assignment</li>
|
||
</ul>
|
||
</li>
|
||
<li>Position Table Block — one per table, twice
|
||
<ul>
|
||
<li>Title Row — <strong>Table 1 (MD10910)</strong> or <strong>Table 2 (MD10930)</strong>, then either <em>used by</em> and the
|
||
names of the axes assigned to it or <em>not used by any axis</em>, then an orange <strong>unsaved</strong> badge
|
||
while the draft is dirty</li>
|
||
<li>Table — dense, flat, bordered
|
||
<ul>
|
||
<li>Header Row — <strong>Position #</strong>, <strong>Value</strong>, and an unlabelled action column</li>
|
||
<li>Data Row — the 1-based position number in bold, the numeric cell, and a delete button that
|
||
removes the row from the draft</li>
|
||
</ul>
|
||
</li>
|
||
<li>Validation Line — the first rule the draft breaks, in the negative colour</li>
|
||
<li>Button Row — <strong>Add Position</strong> (disabled at 60 rows), then <strong>Revert</strong> and <strong>Save Table</strong>, both
|
||
disabled while the draft is clean and <strong>Save Table</strong> also while validation fails</li>
|
||
</ul>
|
||
</li>
|
||
<li>No-Table Body — replaces everything above: <em>"No Siemens machine-data table on the active
|
||
runner."</em></li>
|
||
<li>Shared Empty State — replaces the whole body while the snapshot reports no runner: <em>"No NC
|
||
runner — load a project first."</em></li>
|
||
</ul>
|
||
</li>
|
||
<li>Toast — negative, three seconds, the panel's context followed by the server's own message</li>
|
||
</ul>
|
||
</li>
|
||
</ul>
|
||
<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/SoftNcIndexingPositionsPanel.vue</code> — this panel: the draft
|
||
model over the two tables, the dirty comparison behind the badge, the validator that mirrors the
|
||
endpoint's rules, the display-only assignment table with its four labels and its wrap note, and the
|
||
save that marks the draft clean without re-reading.</li>
|
||
<li><code>wwwroot-src/src/components/controlTree/softNcItemTypes.ts</code> — the node's id, label and label key,
|
||
and the snapshot flag it is pushed behind, between the subprogram and native leaves.</li>
|
||
<li><code>wwwroot-src/src/api/softNcRunner.ts</code> — the reader that parses the two tables and the axis rows,
|
||
the whole-table replace and its documented refusals, and the snapshot flag the builder gates on.</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/components/widgets/NumericInput.vue</code> — the cell: the two-way binding this panel
|
||
uses in place of a commit handler, the blur-and-Enter moment that binding emits on, the
|
||
empty-to-null parse the validator then reports, and the untranslated parse message.</li>
|
||
<li><code>wwwroot-src/src/components/controlTree/SoftNcEmptyState.vue</code> — the shared no-runner line.</li>
|
||
<li><code>wwwroot-src/src/components/controlTree/SoftNcNativeParamsPanel.vue</code> — the sibling panel that owns
|
||
the assignment: the integer per-axis section and the footer that adds a row by id and axis.</li>
|
||
<li><code>wwwroot-src/src/i18n/en/softNc.ts</code> — the node label, the description caption, the four assignment
|
||
labels, the wrap note, the table titles, the used-by captions, the four validation messages and the
|
||
absent-table line quoted above.</li>
|
||
<li><code>wwwroot-src/src/i18n/en/common.ts</code> — the shared <strong>Axis</strong> and <strong>Value</strong> column headers.</li>
|
||
<li><code>Mech/SoftNcRunnerController.cs</code> — the REST surface: the read that pairs the two tables with the
|
||
per-axis assignments and reports presence from the Siemens table alone, the whole-table replace
|
||
with its capacity, finite, ascending and one-revolution checks, the integer per-axis parameter
|
||
write the assignment is edited through, and the brand switch whose sweep removes the table on
|
||
leaving Siemens.</li>
|
||
</ul>
|
||
<h3 id="hiapi-engine">HiAPI Engine</h3>
|
||
<ul>
|
||
<li><code>HiMech/NcParsers/Dependencys/IIndexingPositionConfig.cs</code> — the contract: 1-based position
|
||
numbering, the native-unit and frame rules, the position count, the cyclic test, the number-to-
|
||
coordinate lookup and the anchor search, and the rule that an axis whose table is empty is not a
|
||
usable indexing axis.</li>
|
||
<li><code>HiMech/NcParsers/Dependencys/Siemens/SiemensMachineDataTable.cs</code> — the two position lists, their
|
||
XML round-trip and the statement that the lookups do not validate the Siemens constraints, the
|
||
MD30500 assignment dictionary, the equidistant spacing resolution over MD30501–MD30503, the five
|
||
contract implementations, and the default seed that declares none of them.</li>
|
||
<li><code>HiMech/NcParsers/Dependencys/Siemens/SiemensMachineDataTableProxy.cs</code> — the get-or-create proxy:
|
||
the seed serialized on the runner, the deep clone installed only into a project that has no table,
|
||
and the deliberate refusal to implement the machine-config interfaces itself.</li>
|
||
<li><code>HiMech/NcParsers/Dependencys/IMachineAxisConfig.cs</code> — the axis contract, and the modular-rotary
|
||
default that makes every rotary and spindle axis subject to the one-revolution rule.</li>
|
||
<li><code>HiMech/NcParsers/SoftNcRunner.cs</code> — the Siemens preset that carries the machine-data proxy, and
|
||
the proxy resolution every read on this leaf goes through.</li>
|
||
<li><code>HiMech/NcParsers/Syntaxs/SiemensSyntaxUtil.cs</code> — the syntax list that wires the coded-position
|
||
producer and its two write-stage consumers into the Siemens pipeline.</li>
|
||
<li><code>HiMech/NcParsers/EvaluationSyntaxs/Siemens/SiemensAcIcSyntax.cs</code> — the producer: it unwraps the
|
||
five coded verbs only on usable indexing axes and stamps the per-word override, leaving the word
|
||
untouched elsewhere.</li>
|
||
<li><code>HiMech/NcParsers/LogicSyntaxs/CodedPositionUtil.cs</code> — the shared resolution: position number to
|
||
coordinate, the hold-on-failure semantics, and the diagnostics for an invalid number or a table
|
||
that has gone missing between stages.</li>
|
||
<li><code>HiMech/NcParsers/LogicSyntaxs/McAbcSyntax.cs</code>,
|
||
<code>HiMech/NcParsers/LogicSyntaxs/IncrementalResolveSyntax.cs</code> — the two write-stage consumers, rotary
|
||
words and linear words.</li>
|
||
<li><code>HiMech/NcParsers/LogicSyntaxs/McAbcCyclicPathSyntax.cs</code> — the tail pass that turns the resolved
|
||
directional approach into a path, and the one other syntax pass that reads the modular-rotary flag
|
||
directly.</li>
|
||
</ul>
|
||
<h2 id="see-also">See Also</h2>
|
||
<ul>
|
||
<li><a class="xref" href="index.html">Machine and Controller Plane</a> — the plane this leaf sits on, and which half of the project each
|
||
of its neighbours is stored in</li>
|
||
<li><a class="xref" href="../brand-matrix.html">Brand Matrix</a> — the gate behind this node, why it is the machine plane's
|
||
only single-brand row, and what every other flag probes</li>
|
||
<li><a class="xref" href="../editing-contract.html">Editing Contract</a> — the per-cell commit rule the rest of the branch follows
|
||
and this panel deliberately breaks</li>
|
||
<li><a class="xref" href="native-parameters.html">Native Parameters</a> — where the MD30500 assignment and the equidistant
|
||
machine data this leaf only displays are actually edited</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>
|