deploy webservice static-file routing for docsite folder URLs, per-instance step-cache db, and constant-height panel title bars.

This commit is contained in:
2026-08-27 14:51:37 +08:00
parent 1fc510af5e
commit 2a98ae7556
1468 changed files with 182837 additions and 18888 deletions
@@ -94,6 +94,35 @@
<h3 id="classes">
Classes
</h3>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.Heidenhain.HeidenhainGotoIterationDependency.html">HeidenhainGotoIterationDependency</a></dt>
<dd><p>Watchdog for Heidenhain FN 9–12 <code>GOTO LBL</code> jumps — the
label-keyed sibling of the Siemens
<a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensGotoIterationDependency.html">SiemensGotoIterationDependency</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 for diagnostic clarity and because klartext
targets are <code>LBL</code> numbers-or-names, matched in their canonical
form (<code>&ldquo;01&rdquo;</code> ≡ <code>1</code> on a TNC, quotes stripped).</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>) and <code>Label</code> is the normalised
target. Klartext has no direction mnemonic — a backward jump is the
language's loop primitive, a forward jump can only fire once per
arrival — so all jumps to one label share one bucket and the cap stays
generous.
</p>
<p>
The consuming syntax
(<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainGotoSyntax.html">HeidenhainGotoSyntax</a>)
counts after the condition gate and before the label scan; above
<a class="xref" href="Hi.NcParsers.Dependencys.Heidenhain.HeidenhainGotoIterationDependency.html#Hi_NcParsers_Dependencys_Heidenhain_HeidenhainGotoIterationDependency_MaxIterationsPerLabel">MaxIterationsPerLabel</a> the jump warns
<code>HeidenhainGoto--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.Heidenhain.HeidenhainParameterTable.html">HeidenhainParameterTable</a></dt>
<dd><p>Heidenhain TNC/iTNC machine parameter table.
@@ -102,6 +131,71 @@ Stores machine parameters (MP numbers) as system and per-axis values.</p>
MP100–MP199: General machine configuration.
MP400–MP499: Axis-specific parameters.
</p>
</dd>
</dl>
<dl class="jumplist">
<dt><a class="xref" href="Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTableProxy.html">HeidenhainParameterTableProxy</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.Heidenhain.HeidenhainParameterTable.html">HeidenhainParameterTable</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 parameter table. Like the Fanuc-family parameter
table, the Heidenhain MP table mixes machine config (axis types /
reference positions / rapid rates / tool axis direction) with per-project
edits, so the proxy carries a fixed machine-config <a class="xref" href="Hi.NcParsers.Dependencys.Heidenhain.HeidenhainParameterTableProxy.html#Hi_NcParsers_Dependencys_Heidenhain_HeidenhainParameterTableProxy_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.Heidenhain.HeidenhainParameterTable.html">HeidenhainParameterTable</a> yet; a loaded project's own full
table wins, so a same-brand re-flash re-binds to the project's parameters
instead of resetting them. 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> 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.Heidenhain.HeidenhainQParameterTable.html">HeidenhainQParameterTable</a></dt>
<dd><p>Heidenhain Q-parameter table for the ranges that persist on a real TNC:
free parameters <code>Q0-Q99</code> (survive power cycles) and the permanent
<code>QR0-QR499</code> range (nonvolatile, backed up with the machine). Like
the Siemens sibling <a class="xref" href="Hi.NcParsers.Dependencys.Siemens.SiemensRParameterTable.html">SiemensRParameterTable</a>, this
table is not session-reset and is serialised into the project file.</p>
<p>
The other Q ranges deliberately live elsewhere: <code>Q100-Q199</code> are
controller-written system parameters — <a class="xref" href="Hi.NcParsers.Dependencys.Heidenhain.HeidenhainQParameterTable.html#Hi_NcParsers_Dependencys_Heidenhain_HeidenhainQParameterTable_Get_System_String_">Get(string)</a> returns
<code>null</code> for them (read fail-soft, no fabricated values) and the
reading syntax refuses writes; <code>Q200+</code> are volatile cycle/user
parameters carried block-to-block in <code>Vars.Volatile</code> (JSON
dataflow, cleared at program end) — <a class="xref" href="Hi.NcParsers.Dependencys.Heidenhain.HeidenhainQParameterTable.html#Hi_NcParsers_Dependencys_Heidenhain_HeidenhainQParameterTable_Get_System_String_">Get(string)</a> also returns
<code>null</code> so the evaluator's chain falls through to
<a class="xref" href="Hi.NcParsers.EvaluationSyntaxs.Heidenhain.HeidenhainVolatileQLookup.html">HeidenhainVolatileQLookup</a>.
</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.Heidenhain.HeidenhainQParameterReadingSyntax.html">HeidenhainQParameterReadingSyntax</a>,
which consumes literal <code>Parsing.Assignments.Qn</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. 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.Heidenhain.HeidenhainQParameterTableProxy.html">HeidenhainQParameterTableProxy</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.Heidenhain.HeidenhainQParameterTable.html">HeidenhainQParameterTable</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 Q parameters (<code>Q0–Q99</code> + <code>QR0–QR499</code>).</p>
</dd>
</dl>