This repository has been archived on 2026-10-11. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
HiNC-2025-win-desktop-Deploy/App/wwwroot/HiAPI-docsite/api/Hi.NcParsers.Dependencys.Siemens.html
T

349 lines
20 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Namespace Hi.NcParsers.Dependencys.Siemens | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Namespace Hi.NcParsers.Dependencys.Siemens | 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 &quot;{query}&quot;">
<meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
<meta name="loc:tocFilter" content="Filter by title">
<meta name="loc:nextArticle" content="Next">
<meta name="loc:prevArticle" content="Previous">
<meta name="loc:themeLight" content="Light">
<meta name="loc:themeDark" content="Dark">
<meta name="loc:themeAuto" content="Auto">
<meta name="loc:changeTheme" content="Change theme">
<meta name="loc:copy" content="Copy">
<meta name="loc:downloadPdf" content="Download PDF">
<script type="module" src="./../public/docfx.min.js"></script>
<script>
const theme = localStorage.getItem('theme') || 'auto'
document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
</script>
</head>
<body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
<header class="bg-body border-bottom">
<nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
<div class="container-xxl flex-nowrap">
<a class="navbar-brand" href="../index.html">
<img id="logo" class="svg" src="../img/HiAPI.logo.png" alt="">
</a>
<button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
<i class="bi bi-three-dots"></i>
</button>
<div class="collapse navbar-collapse" id="navpanel">
<div id="navbar">
<form class="search" role="search" id="search">
<i class="bi bi-search"></i>
<input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
</form>
</div>
</div>
</div>
</nav>
</header>
<main class="container-xxl">
<div class="toc-offcanvas">
<div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
<div class="offcanvas-header">
<h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
<button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
</div>
<div class="offcanvas-body">
<nav class="toc" id="toc"></nav>
</div>
</div>
</div>
<div class="content">
<div class="actionbar">
<button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
<i class="bi bi-list"></i>
</button>
<nav id="breadcrumb"></nav>
</div>
<article data-uid="Hi.NcParsers.Dependencys.Siemens">
<h1 id="Hi_NcParsers_Dependencys_Siemens" data-uid="Hi.NcParsers.Dependencys.Siemens" class="text-break">Namespace Hi.NcParsers.Dependencys.Siemens</h1>
<div class="markdown level0 summary"></div>
<div class="markdown level0 conceptual"></div>
<div class="markdown level0 remarks"></div>
<h3 id="classes">
Classes
</h3>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html">SiemensFrameTable</a></dt>
<dd><p>Sinumerik settable work coordinate frames (<code>$P_UIFR[n]</code>).
Models G54–G57 (ISO-compatible), G505–G599 (extended Siemens),
and G500 (cancel — always zero).</p>
<p>
On real Sinumerik, $P_UIFR is a frame array containing translation,
rotation, scale and mirror per entry. HiNC currently consumes only the
translation component, so this table stores <a class="xref" href="Hi.Geom.Vec3d.html">Vec3d</a> per id.
$P_UIFR is NOT in the machine data table — therefore this is a separate
dependency from <a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html">SiemensMachineDataTable</a> (which holds
MD-prefixed OEM machine data such as MD30300 axis type, MD34010 reference
position, etc.).
</p>
<p>
Deliberately not <a class="xref" href="Hi.NcParsers.ISessionResettable.html">ISessionResettable</a>: settable frames
are setting data on the control — a <code>$P_UIFR</code> write from the
program survives reset and power-off, so a replayed session must see
the values the previous run wrote.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensFrameTableProxy.html">SiemensFrameTableProxy</a></dt>
<dd><p>Get-or-create <a class="xref" href="Hi.NcParsers.Dependencys.INcDependencyProxy.html">INcDependencyProxy</a> for <a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html">SiemensFrameTable</a>:
a placeholder in the shared <a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_PipelineNcDependencyList">PipelineNcDependencyList</a> that
resolves the host project's own per-case settable work frames ($P_UIFR,
G54–G57…).</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensGotoIterationDependency.html">SiemensGotoIterationDependency</a></dt>
<dd><p>Watchdog for Siemens <code>GOTOF</code>/<code>GOTOB</code> jumps — the
label-keyed sibling of the Fanuc
<a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucGotoIterationDependency.html">FanucGotoIterationDependency</a>, with the same
&ldquo;soft-cap + runtime counter + session-init <a class="xref" href="Hi.NcParsers.ISessionResettable.html">ISessionResettable</a>&rdquo;
shape. Kept per-brand (rather than widening the Fanuc dep's int-keyed
bucket) for diagnostic clarity and because Siemens targets are named
labels, not N-numbers.</p>
<p>
The counter key is <code>(FileName, Label)</code> where <code>FileName</code> is
the source-level file path of the jump host (the relative form
carried on <a class="xref" href="Hi.NcParsers.Sentence.html#Hi_NcParsers_Sentence_FilePath">FilePath</a>). Source-level keying
means multiple inline invocations of the same subprogram pool their
counts, while two files each jumping to their own <code>LBL1</code> stay
isolated. Forward and backward jumps to the same label share one
bucket — only the backward direction can loop, but a shared bucket
keeps the accounting simple and the cap generous.
</p>
<p>
The consuming syntax
(<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensGotoSyntax.html">SiemensGotoSyntax</a>) counts
after the condition gate and before the label scan; above
<a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensGotoIterationDependency.html#Hi_NcParsers_Dependencys_Siemens_SiemensGotoIterationDependency_MaxIterationsPerLabel">MaxIterationsPerLabel</a> the jump warns
<code>SiemensGoto--IterationLimitExceeded</code> and falls through. A
missing dependency disables the cap (Fanuc parity) — the brand preset
wires one by default.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensLoopIterationDependency.html">SiemensLoopIterationDependency</a></dt>
<dd><p>Watchdog shared by all four Siemens loop constructs
(<code>WHILE/ENDWHILE</code>, <code>FOR/ENDFOR</code>, <code>REPEAT/UNTIL</code>,
<code>LOOP/ENDLOOP</code>) — construct-neutral by design, unlike the Fanuc
sibling (<a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.FanucWhileDoIterationDependency.html">FanucWhileDoIterationDependency</a>) which
only has WHILE to guard. Same &ldquo;soft-cap + runtime counter +
session-init <a class="xref" href="Hi.NcParsers.ISessionResettable.html">ISessionResettable</a>&rdquo; shape.</p>
<p>
Siemens loop constructs carry no LoopId, so the counter key is
<code>(FileName, BeginLineNo)</code> — the loop-entry line recorded in the
active frame identifies the construct uniquely within its file, and
the file path isolates identically-numbered lines across files (and
across inlined subprograms).
</p>
<p>
The consuming syntax
(<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensLoopSyntax.html">SiemensLoopSyntax</a>) counts at
the back-jump step (the loop terminator / falsy <code>UNTIL</code>), so a
loop whose condition is false from the outset consumes zero
iterations. Above <a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensLoopIterationDependency.html#Hi_NcParsers_Dependencys_Siemens_SiemensLoopIterationDependency_MaxIterationsPerLoop">MaxIterationsPerLoop</a> the terminator
warns <code>SiemensLoop--IterationLimitExceeded</code>, pops the frame and
falls through. A missing dependency disables the cap for the
condition-bearing constructs (Fanuc parity) but hard-blocks the
<code>ENDLOOP</code> back-jump — <code>LOOP</code> has no exit condition, so an
uncapped back-jump would hang the pipeline deterministically.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html">SiemensMachineDataTable</a></dt>
<dd><p>Siemens Sinumerik machine data table.
Stores machine data (MD numbers) as system and per-axis parameters.</p>
<p>
MD10000–MD19999: General machine data.
MD20000–MD29999: Axis-specific machine data.
MD30000–MD39999: Axis-specific machine data (extended).
</p>
<p>
Deliberately not <a class="xref" href="Hi.NcParsers.ISessionResettable.html">ISessionResettable</a>: machine data is
control configuration a part program cannot mutate, so there is no
session-scoped state to clear.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTableProxy.html">SiemensMachineDataTableProxy</a></dt>
<dd><p>Get-or-create <a class="xref" href="Hi.NcParsers.Dependencys.INcDependencyProxy.html">INcDependencyProxy</a> for
<a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html">SiemensMachineDataTable</a>: a placeholder in the shared
<a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_PipelineNcDependencyList">PipelineNcDependencyList</a> that resolves the host
project's own machine data table. Like the Fanuc-family parameter table,
the Siemens machine data mixes machine config (axis types / reference
positions / velocities / indexing tables) with per-project edits, so the
proxy carries a fixed machine-config <a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTableProxy.html#Hi_NcParsers_Dependencys_Siemens_SiemensMachineDataTableProxy_Seed">Seed</a> that is serialized
into the shared runner file. On wire, the host receives a deep clone of the
seed only when it has no <a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html">SiemensMachineDataTable</a> yet; a
loaded project's own full table wins, so a same-brand re-flash re-binds to
the project's machine data instead of resetting it. The resolved host
table is fully serialized on the project.</p>
<p>
The proxy deliberately does <b>not</b> implement the machine-config
interfaces (<a class="xref" href="Hi.NcParsers.Dependencys.IMachineAxisConfig.html">IMachineAxisConfig</a>,
<a class="xref" href="Hi.NcParsers.Dependencys.IIndexingPositionConfig.html">IIndexingPositionConfig</a>, etc.) — every machine-config
consumer must go through
<a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_GetEffectiveNcDependencyList">GetEffectiveNcDependencyList()</a> so it sees the
resolved host table, never this placeholder.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensRParameterTable.html">SiemensRParameterTable</a></dt>
<dd><p>Sinumerik R-parameter table (<code>R0-R999</code>). R parameters are the
Siemens arithmetic-variable surface (<code>R63=100.5</code>, <code>C=R61</code>,
<code>R26=(558.5+14)/2</code>); on real hardware they live in retentive memory
(sized by MD28050) and survive program end and power cycles, so — like
the Fanuc sibling <a class="xref" href="Hi.NcParsers.Dependencys.Fanuc.RetainedCommonVariableTable.html">RetainedCommonVariableTable</a> — this
table is not session-reset and is serialised into the project file.</p>
<p>
Reads flow through <a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Evaluation.IVariableLookup.html#Hi_NcParsers_EvaluationSyntaxs_Evaluation_IVariableLookup_Get_System_String_">Get(string)</a> (registered
automatically because the table sits on the runner's effective
<code>NcDependencyList</code>); writes flow through
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Siemens.SiemensRParameterReadingSyntax.html">SiemensRParameterReadingSyntax</a>,
which consumes literal <code>Parsing.Assignments.Rn</code> entries after
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.VariableEvaluatorSyntax.html">VariableEvaluatorSyntax</a> has normalized
expression RHS to literals.
</p>
<p>
Vacant is represented by <code>null</code>: either the dictionary has no entry
for the key, or the entry maps to <code>null</code> — both read identically.
Real Sinumerik default-initialises every allocated R to 0, but a vacant
read failing loud (Variable--Vacant via the evaluator) surfaces missing
setup data instead of silently machining with 0.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensRParameterTableProxy.html">SiemensRParameterTableProxy</a></dt>
<dd><p>Get-or-create <a class="xref" href="Hi.NcParsers.Dependencys.INcDependencyProxy.html">INcDependencyProxy</a> for <a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensRParameterTable.html">SiemensRParameterTable</a>:
a placeholder in the shared <a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_PipelineNcDependencyList">PipelineNcDependencyList</a> that
resolves the host project's own per-case R parameters (<code>R0–R999</code>).</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensToolEdgeOffset.html">SiemensToolEdgeOffset</a></dt>
<dd><p>One Siemens cutting-edge offset row ($TC_DP fields for a (T, D) pair):
geometry lengths L1/L2/L3 ($TC_DP3/4/5), radius ($TC_DP6) and the
corresponding wear values ($TC_DP12/13/14/15) as typed properties (all
mm), plus <a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensToolEdgeOffset.html#Hi_NcParsers_Dependencys_Siemens_SiemensToolEdgeOffset_VerbatimDpFields">VerbatimDpFields</a> for every other $TC_DP index —
same split as <a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html">SiemensMachineDataTable</a>'s well-known-MD
properties over a generic parameter bag. A typed property means the
simulation consumes the field; a bag entry means the value is stored
and round-tripped but not interpreted.</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensToolOffsetTable.html">SiemensToolOffsetTable</a></dt>
<dd><p>Per-case Siemens tool offset table — the first concrete
<a class="xref" href="Hi.NcParsers.Dependencys.Siemens.ISiemensToolOffsetConfig.html">ISiemensToolOffsetConfig</a> ($TC_DP model): one
<a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensToolEdgeOffset.html">SiemensToolEdgeOffset</a> row per (tool number T, cutting
edge D), each carrying the three length components + radius with their
wear counterparts, plus a verbatim bag for the remaining $TC_DP
indices (round-tripped, not consumed — see
<a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensToolEdgeOffset.html#Hi_NcParsers_Dependencys_Siemens_SiemensToolEdgeOffset_VerbatimDpFields">VerbatimDpFields</a>). Effective
values are geometry <b>+</b> wear —
Sinumerik wear ($TC_DP12..15) is additive; a worn-down tool carries a
negative wear value. Unconfigured (T, D) pairs return 0 per the
interface contract.</p>
<p>
Also carries the <a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensToolOffsetTable.html#Hi_NcParsers_Dependencys_Siemens_SiemensToolOffsetTable_ToolNames">ToolNames</a> map ($TC_TP2 analog,
case-insensitive) so Siemens string tool calls (<code>T="D8R1"</code>)
can resolve to the int-keyed act chain — consumed by
<a class="xref" href="Hi.NcParsers.Semantics.ToolChangeSemantic.html">ToolChangeSemantic</a>.
</p>
<p>
Per-case editable data — reaches the pipeline through
<a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensToolOffsetTableProxy.html">SiemensToolOffsetTableProxy</a> on the host's
<a class="xref" href="Hi.NcParsers.Dependencys.INcDependencyListHost.html#Hi_NcParsers_Dependencys_INcDependencyListHost_PerCaseNcDependencyList">PerCaseNcDependencyList</a>, never as a
concrete instance baked into the shared runner. Deliberately separate
from <a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensMachineDataTable.html">SiemensMachineDataTable</a> (MD-prefixed machine-fixed
OEM data) — same split rationale as <a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensFrameTable.html">SiemensFrameTable</a>.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensToolOffsetTableProxy.html">SiemensToolOffsetTableProxy</a></dt>
<dd><p>Get-or-create <a class="xref" href="Hi.NcParsers.Dependencys.INcDependencyProxy.html">INcDependencyProxy</a> for
<a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensToolOffsetTable.html">SiemensToolOffsetTable</a>: a placeholder in the shared
<a class="xref" href="Hi.NcParsers.SoftNcRunner.html#Hi_NcParsers_SoftNcRunner_PipelineNcDependencyList">PipelineNcDependencyList</a> that resolves the
host project's own per-case Siemens ($TC_DP) tool offset table.</p>
</dd>
</dl>
<h3 id="interfaces">
Interfaces
</h3>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.Siemens.ISiemensToolOffsetConfig.html">ISiemensToolOffsetConfig</a></dt>
<dd><p>Siemens (840D/Sinumerik) tool offset configuration.
Offsets are addressed by (tool number T, cutting edge D number),
unlike <a class="xref" href="Hi.NcParsers.Dependencys.IToolOffsetConfig.html">IToolOffsetConfig</a> where a single integer selects the row.</p>
<p>
Siemens stores up to 25 data fields per cutting edge ($TC_DP1..$TC_DP25),
including three independent length components (L1/L2/L3 for Z/X/Y directions),
radius, and corresponding wear values.
</p>
</dd>
</dl>
</article>
<div class="contribution d-print-none">
</div>
</div>
<div class="affix">
<nav id="affix"></nav>
</div>
</main>
<div class="container-xxl search-results" id="search-results"></div>
<footer class="border-top text-secondary">
<div class="container-xxl">
<div class="flex-fill">
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
</div>
</div>
</footer>
</body>
</html>