This commit is contained in:
2026-09-09 17:35:23 +08:00
parent 2a98ae7556
commit 161af68fe3
1271 changed files with 58251 additions and 98639 deletions
@@ -0,0 +1,294 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>A Mission That Resumes | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="A Mission That Resumes | 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="">
<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="">
<h1 id="a-mission-that-resumes">A Mission That Resumes</h1>
<p>A mission written as one Script runs, and tells you nothing. The same run written as commands reads
as values, switches a row at a time, and — with two Record Meshed Geometry entries around the
program — restarts from where the last run got to instead of from the stock.</p>
<p>This page is the layout that gets you all three. It is a recommendation, not a rule: every command
is placeable anywhere, and <a href="building-a-mission.html">Building a Mission</a> is the mechanics.</p>
<h2 id="the-shape">The shape</h2>
<table>
<thead>
<tr>
<th>#</th>
<th>Command</th>
<th>Category</th>
<th>Why it is there</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td><strong>Physics</strong></td>
<td>Setup</td>
<td>the run's switches, above everything they govern</td>
</tr>
<tr>
<td>2</td>
<td><strong>Machining Resolution</strong></td>
<td>Setup</td>
<td>must precede the first record — see below</td>
</tr>
<tr>
<td>3</td>
<td><strong>Collision Detection</strong></td>
<td>Setup</td>
<td></td>
</tr>
<tr>
<td>4</td>
<td><strong>Script</strong></td>
<td>Program</td>
<td>only what no command covers</td>
</tr>
<tr>
<td>5</td>
<td><strong>Record Meshed Geometry</strong></td>
<td>Output</td>
<td><code>Cache/&lt;stage&gt;-init.wct</code> — the stock, meshed once; drop this row where the stock is already a recorded mesh</td>
</tr>
<tr>
<td>6</td>
<td><strong>Program File</strong></td>
<td>Program</td>
<td>the stage</td>
</tr>
<tr>
<td>7</td>
<td><strong>Record Meshed Geometry</strong></td>
<td>Output</td>
<td><code>Cache/&lt;stage&gt;-done.wct</code> — the result of the stage; the next stage's stock</td>
</tr>
<tr>
<td>8</td>
<td><strong>Post-Execution</strong></td>
<td>Output</td>
<td>what the run writes out</td>
</tr>
</tbody>
</table>
<p>Every entry keeps its own checkbox, so any of them can be switched off without being deleted and
without its settings being lost.</p>
<h2 id="why-commands-rather-than-one-script">Why commands rather than one script</h2>
<p>A script sets the same values, and that is the whole of its advantage. Against it:</p>
<ul>
<li><strong>A row states its value.</strong> <code>Machining Resolution [0.125 mm]</code>, <code>Physics [On]</code>,
<code>Program File [NC/facing.ptp]</code> — the mission is legible without opening anything.</li>
<li><strong>A checkbox replaces commenting-out.</strong> A commented line is invisible in the tree and survives
into the saved project as text nobody reads. A cleared checkbox greys the row and says so.</li>
<li><strong>The fields are typed.</strong> A resolution is a number field with a unit, not a line that has to
compile.</li>
<li><strong>The order is the run.</strong> Moving a setting above or below a program is a drag, not an edit.</li>
</ul>
<p>Leave in the Script only what no command covers, and title it for what it is.</p>
<h2 id="resolution-before-the-first-record">Resolution before the first record</h2>
<p><strong>Machining Resolution has to sit above the first Record Meshed Geometry entry.</strong> The record writes
the workpiece as a meshed geometry, and the mesh is built at whatever resolution is in force when it
runs. Put the resolution command below it and the cached mesh is built at the previous value —
which the next run then reads back, silently, as if it were the one you asked for.</p>
<p>The same holds for anything else that changes what the geometry is: the Setup commands go first.</p>
<h2 id="what-read-on-first-or-write-does">What Read On First Or Write does</h2>
<p>Record Meshed Geometry has four actions, and the fourth is the one that makes a mission resumable:</p>
<table>
<thead>
<tr>
<th>Action</th>
<th>What it does</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>No Action</strong></td>
<td>nothing; the entry is a placeholder</td>
</tr>
<tr>
<td><strong>Read</strong></td>
<td>always loads the file into the session</td>
</tr>
<tr>
<td><strong>Write</strong></td>
<td>always writes the session's geometry to the file</td>
</tr>
<tr>
<td><strong>Read On First Or Write</strong></td>
<td>reads the file if it exists <strong>and no machining step has been produced yet this run</strong>; otherwise writes</td>
</tr>
</tbody>
</table>
<p>The condition is a property of the run, not of the entry — there is no per-entry counter. It is
also about steps, not about cutting: a pass that only positions the tool still produces steps, so a
program that removed no material still counts as having played, and the next record writes rather
than reads. Only a program that produced no steps at all — no tool selected, no motion, or a file
that was not found — leaves the run in its opening state.</p>
<p>So in the layout above:</p>
<ul>
<li><strong>First run.</strong> Neither file exists. Entry 5 writes the meshed stock; the program plays; entry 7
writes the result.</li>
<li><strong>Every run after.</strong> Entry 5 finds its file and nothing has played, so it <strong>reads</strong> — the stock is
not re-meshed. The program plays, so by entry 7 something has played, and it <strong>writes</strong> the fresh
result.</li>
<li><strong>Re-running one stage.</strong> Clear the checkbox on the stages you do not want. The first record entry
that is still ticked becomes the first thing to run, so it reads its cache, and the run picks up
from there.</li>
</ul>
<p>That last line is the point of the layout. The cost of getting back to the middle of a long job is
one file read.</p>
<h2 id="the-stage-0-cache-goes-stale-silently">The stage-0 cache goes stale, silently</h2>
<p>This is the price of the layout, and it is worth stating on its own.</p>
<p>The record above the program caches the <strong>stock</strong>, meshed. From the second run onward that cache is
what the run starts from — so <strong>changing the workpiece geometry, its initial resolution, or the
Machining Resolution has no effect until the cache is cleared.</strong> Nothing warns you: the run simply
reproduces the previous one. After changing any of those three, Reset the stage-0 record (or delete
its file) before reading anything into the result.</p>
<p><strong>Give a stage a stage-0 record only when the stock costs real time to mesh</strong> — a large mesh or a
solid the kernel has to build. Where a stage's stock is itself a recorded mesh, as it is for the
second operation in a chained pair, a stage-0 record buys no time at all and freezes the chain: the
upstream stage can be re-run all it likes and this one keeps reading the copy it took the first
time. There, the previous stage's own end-of-stage file is already the cache, and the stage needs
no record above its program.</p>
<h2 id="one-record-per-stage">One record per stage</h2>
<p>A mission with several Program File entries gets a record after each, plus the stage-0 record where
that one earns its place. Name each file after the stage it ends, not after the program that wrote
it, so the file that a stage <em>reads</em> is the one named for the stage before it.</p>
<p>Do not split one control file into several Program File entries to get finer stages. A program's
modal state — units, plane, work offset, absolute or incremental — is established in its header and
carried forward; cutting it in half hands the second half to a runner that never saw the header. The
stage boundary is a file boundary.</p>
<h2 id="what-stays-in-a-script">What stays in a Script</h2>
<p>Two things belong there and little else:</p>
<ol>
<li><strong>Process-wide settings with no command of their own.</strong> <code>MillingCycleDivisionNum</code> is the standing
example: it is process-wide, it survives a runtime reset and a project switch, and a training
script that raised it leaks into every project loaded afterwards. Pinning it in the mission is a
guard, not a setting.</li>
<li><strong>Genuinely one-off session work</strong> — see the Script section of
<a href="the-other-commands.html">The Other Commands</a>.</li>
</ol>
<p>Anything with a command belongs in the command. A script line that duplicates a command's default is
worse than nothing: it reads as a decision when it is a leftover.</p>
<h2 id="the-cache-is-a-by-product">The cache is a by-product</h2>
<p><code>Cache/</code> holds rebuildable artifacts, which is why the record command defaults there. A meshed
workpiece is large — hundreds of megabytes at a fine resolution is ordinary — and it is derived
entirely from the stock geometry, the resolution and the programs above it. Keep it out of version
control, and delete it whenever you want the run rebuilt from the stock: the record command's own
<strong>Reset</strong> clears the file it points at.</p>
<h2 id="see-also">See Also</h2>
<ul>
<li><a href="building-a-mission.html">Building a Mission</a> — adding, ordering, ticking and grouping the entries</li>
<li><a href="the-other-commands.html">The Other Commands</a> — what each command kind holds</li>
<li><a href="playing-a-program.html">Playing a Program</a> — the two commands that put NC code into a run</li>
<li><a href="running-a-simulation.html">Starting and Stepping</a> — the transport that plays the list</li>
<li><a href="../basics/projects.html">Projects</a> — what a project folder holds</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>
Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

@@ -0,0 +1,247 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Building a Mission | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Building a Mission | 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="">
<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="">
<h1 id="building-a-mission">Building a Mission</h1>
<p>A mission is the list of commands a run executes, in order. Nothing plays until there is one, and
what plays is exactly what the list says — including which entries are ticked and which are not.</p>
<h2 id="where-it-is">Where it is</h2>
<p>The Execution page at <code>/execution</code>, <strong>Mission</strong> branch of the Control Tree; <code>/mission</code> lands on the
same place. This is the page the application opens on.</p>
<p>The branch root is the list editor: it is where the list is assembled and rearranged. A command's
own settings are edited one level in, on that command's node.</p>
<h2 id="add-a-command">Add a command</h2>
<p><strong>Add Command</strong> opens a search-first picker. Type to narrow it: the search matches a command's
display name, its internal kind key and the aliases it declares, and an alias matches both by its
English key and by its word in the interface language. Arrow keys walk the results and
<kbd>Enter</kbd> takes the highlighted one.</p>
<p>Results are grouped by category. Thirteen kinds ship:</p>
<table>
<thead>
<tr>
<th>Category</th>
<th>Commands</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Setup</strong></td>
<td>Machining Resolution, Machining Motion Resolution, Collision Detection, Pause on Failure, Physics</td>
</tr>
<tr>
<td><strong>Program</strong></td>
<td>Program File, NC Code, Script</td>
</tr>
<tr>
<td><strong>Optimization</strong></td>
<td>NC Optimization Config</td>
</tr>
<tr>
<td><strong>Output</strong></td>
<td>Post-Execution, Record Meshed Geometry, Export Meshed Geometry (STL)</td>
</tr>
<tr>
<td><strong>Flow</strong></td>
<td>List</td>
</tr>
</tbody>
</table>
<p>What you pick is appended to the <strong>end</strong> of the list you added it to, and the selection stays on the
list rather than jumping into the new command. Nothing is pinned to a position: the order is
entirely yours, and every command is placeable anywhere.</p>
<p><strong>Add Command is disabled until a project is open.</strong> With nothing open the list reads <em>No project
loaded</em>; with a project and an empty mission it reads <em>No commands yet</em> and names the button.</p>
<p>The set on offer is served by the application rather than built into the interface, so a command
kind can appear in this dialog before this manual has a page for it.</p>
<p>The picker over the demo mission, at <code>/execution?tree=execution/mission</code> with <strong>Add Command</strong>
pressed. The five category headings are the grouping in the table above, the search box at the top
is what narrows them, and the first result is highlighted ready for <kbd>Enter</kbd>.</p>
<p><img src="building-a-mission-img/add-command.en.png" alt="The Add Command dialog open over the Execution page: a Search commands box above thirteen entries under five headings — Setup with Machining Resolution, Machining Motion Resolution, Collision Detection, Pause on Failure and Physics; Program with Program File, NC Code and Script; Optimization with NC Optimization Config; Output with Post-Execution, Record Meshed Geometry and Export Meshed Geometry STL; and Flow with List"></p>
<h2 id="read-a-row">Read a row</h2>
<p>Each row shows the command's kind followed by the detail that identifies it, in brackets. Where you
can name a command that detail is the title you typed, so a row still says what it is after it has
been named: <code>List [Roughing]</code>, <code>NC Code [Face check]</code>. Where you cannot, the command brackets what
it holds instead — <code>Program File [NC/facing.ptp]</code>, <code>Machining Resolution [0.25 mm]</code>,
<code>Collision Detection [On]</code> — so a mission is readable without opening anything.</p>
<p>Beside the label sit four buttons — <strong>up</strong>, <strong>down</strong>, <strong>duplicate</strong> and <strong>delete</strong>. Up and down are
disabled at the ends of the list. Delete asks first, in a dialog naming the command. Duplicate is a
deep copy: a group copies with everything inside it, and the copy lands directly after the original.</p>
<p>Clicking a row anywhere but on a button selects that command's node and opens its editor.</p>
<h2 id="tick-what-runs">Tick what runs</h2>
<p><strong>The checkbox is on the tree item, not in the row, and it is the only thing that decides whether a
command runs.</strong> Clearing it greys the row and the tree node; the editor stays open and fully
editable. Clearing the box on a group greys the whole group, and the run skips the group together
with everything nested inside it.</p>
<p>Leaving a command in place with its box cleared is how you skip a step without losing its settings,
which is what you want while you narrow down a problem.</p>
<h2 id="group-with-a-list">Group with a list</h2>
<p><strong>List</strong> is an ordinary command in the Flow category, and adding one grows a sub-tree: its children
are its own entries, edited by the same list editor one level down. That nests to any depth, so a
mission can be grouped by operation rather than left flat.</p>
<p>A list carries an optional title, entered on its own node above the embedded editor. The row reads
<code>List</code> while the title is empty and <code>List [title]</code> once it says something; a title of nothing but
spaces counts as unset. The Mission root is the one list with no title field — it reads <strong>Mission</strong>.</p>
<p>The demo mission at <code>/execution?tree=execution/mission</code>: three groups and four loose entries. The
tree above shows <strong>List [Setup]</strong> opened, with the three settings commands inside it bracketing
their values; the editor below shows the same seven entries as rows. The greyed <strong>Script</strong> row is an
entry left in place with its checkbox cleared — part of the mission, and not run.</p>
<p><img src="building-a-mission-img/grouped-mission.en.png" alt="The Mission branch of the Control Tree with List Setup expanded over Machining Resolution 0.25 mm, Collision Detection On and Physics On, then NC Optimization Config, List Roughing, List Finishing, NC Code Face check, Post-Execution and a greyed Script Export result row with its checkbox cleared; below it the list editor shows the same seven entries, each with up, down, duplicate and delete buttons, above the line reading that commands run top-down"></p>
<h2 id="reorder-and-move-in-and-out">Reorder, and move in and out</h2>
<p>Up and down move an entry within its own list and never change which list owns it. Dragging does
more, and where you drop decides which:</p>
<table>
<thead>
<tr>
<th>Drop it on</th>
<th>What happens</th>
</tr>
</thead>
<tbody>
<tr>
<td>Another row</td>
<td>Reorder within this list. A row splits at its midline into <em>before</em> and <em>after</em>.</td>
</tr>
<tr>
<td>The middle band of a <strong>List</strong> row</td>
<td>Move the entry <strong>into</strong> that list. The row's outer quarters still reorder around it.</td>
</tr>
<tr>
<td>The drop-out zone below a nested list's entries</td>
<td>Move the entry <strong>out</strong>, landing directly after the list it came from.</td>
</tr>
</tbody>
</table>
<p>The drop-out zone belongs to a nested list's editor and appears only while a row inside it is being
dragged. Moving a list into itself, or into one of its own groups, is refused.</p>
<p>Dragging serves rearrangement only — dropping text or files on the list does nothing. To bring
several programs in at once, use one Program File command's picker and select them together; see
<a href="playing-a-program.html">Playing a Program</a>.</p>
<h2 id="edit-one-command">Edit one command</h2>
<p>Select a command's node. Its editor opens below a control bar carrying the same up, down, duplicate
and delete operations the row has, and a note while the command is switched off.</p>
<p>A command with one job — Program File, NC Code, Script — puts its whole editor on that one node.
A command with several cards spreads them: the general settings stay on the command node and each
remaining card becomes a <strong>child node</strong> beneath it, so a long command is read by walking down the
tree rather than by scrolling one panel. Where a card had its own <em>Enable</em> switch, that switch is
the child node's own checkbox. Which commands do that, and what each card holds, is
<a href="the-other-commands.html">The Other Commands</a>.</p>
<h2 id="see-also">See Also</h2>
<ul>
<li><a href="index.html">Running a Simulation</a> — the rest of running a job</li>
<li><a href="playing-a-program.html">Playing a Program</a> — the two commands that put NC code into a run</li>
<li><a href="the-other-commands.html">The Other Commands</a> — what the rest of the command kinds are for</li>
<li><a href="a-mission-that-resumes.html">A Mission That Resumes</a> — a layout that reads as values and restarts mid-job</li>
<li><a href="running-a-simulation.html">Starting and Stepping</a> — the transport that plays the list built here</li>
<li><a class="xref" href="../../anatomy/execution/mission/mission-root-panel.html">Mission Root Panel</a> — the component behind this branch: the list editor, the picker and the three drag landings</li>
<li><a class="xref" href="../../anatomy/execution/mission/ListCommand-panel.html">List Command Panel</a> — the component behind a group: what nesting costs, and what a disabled list skips</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>
@@ -0,0 +1,136 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Running a Simulation | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Running a Simulation | 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="">
<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="">
<h1 id="running-a-simulation">Running a Simulation</h1>
<p>Everything that happens after the equipment is set up: writing the list of commands a run executes,
playing it, watching it, and reading what it did.</p>
<p>The Execution page at <code>/execution</code> is where all of it happens — it is also where the application
opens.</p>
<p>Ordered as a run goes: build the list, play it, watch it, read it, and diagnose it.</p>
<h2 id="pages">Pages</h2>
<ul>
<li><a href="building-a-mission.html">Building a Mission</a> — The command list a run executes, and the checkbox on each command that decides whether it runs</li>
<li><a href="playing-a-program.html">Playing a Program</a> — The two commands that put NC code into a run, and which to use when</li>
<li><a href="the-other-commands.html">The Other Commands</a> — The settings, optimizer and output kinds, and the script command: what each is for and where in the list it belongs</li>
<li><a href="running-a-simulation.html">Starting and Stepping</a> — The transport controls, the F5–F8 keys, and why one line is not one step</li>
<li><a href="watching-the-run.html">Watching the Run</a> — The canvas, and the three charts that show the whole mission at once</li>
<li><a href="inspecting-a-step.html">Inspecting a Step</a> — The Step Info column: the sentence, the step, the engagement and the per-revolution charts</li>
<li><a href="the-program-branch.html">The Program Branch</a> — The files a run read, the passes it made over each and what every line produced</li>
<li><a href="when-something-goes-wrong.html">When Something Goes Wrong</a> — Which of the four message lists answers which question, why a row is not an occurrence, and three things that look like faults and are not</li>
</ul>
<h2 id="see-also">See Also</h2>
<ul>
<li><a href="../setup/index.html">Setup</a> — the equipment a run needs before any of this</li>
<li><a href="../basics/index.html">Basics</a> — the window, the project and the messages every screen shares</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>
Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

@@ -0,0 +1,232 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Inspecting a Step | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Inspecting a Step | 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="">
<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="">
<h1 id="inspecting-a-step">Inspecting a Step</h1>
<p>Once a strip chart has told you <em>where</em>, the Step Info column tells you <em>what</em>. Every panel in it is
a view of the one selected step — except the panel at the top, which deliberately is not, and the
reason for that exception is worth knowing before you read the column.</p>
<h2 id="where-it-is">Where it is</h2>
<p>The Execution page at <code>/execution</code>, rightmost column, switched on and off from the quick-toggles on
the menu bar. Most of it stays empty until a step is selected, and selecting one is a click on a
strip chart or on the tool path in the 3D canvas.</p>
<h2 id="sentence-syntax-and-why-it-sits-outside">Sentence Syntax, and why it sits outside</h2>
<p>The top panel is the odd one out, and it is placed outside the step group on purpose: <strong>a line of NC
need not produce a machining step at all</strong>. A tool change, a coordinate selection or a comment is a
sentence with no motion under it, so a panel that reads sentences cannot be a member of a group
keyed on steps.</p>
<p>It shows the sentence's own text and the reading the interpreter made of it, with a badge naming the
file, the line and the sentence, and a button that copies the parsed form.</p>
<p>Its two empty messages say different things, and the difference matters:</p>
<ul>
<li><strong>No sentence selected</strong> — nothing is picked yet.</li>
<li><strong>This line has no executed SyntaxPiece</strong> — a line <em>is</em> picked, and it did not run in this session.
That is an answer, not a gap: the line was skipped, or it belongs to a pass the run never reached,
or the session has been reset since.</li>
</ul>
<p>The sentence it follows comes from two directions: selecting a step brings its sentence here, and so
does clicking a line in a Program file panel. That is the bridge between reading the program and
reading the run.</p>
<h2 id="the-rest-of-the-column">The rest of the column</h2>
<p>Below the group bar every panel is a view of the same selected step.</p>
<table>
<thead>
<tr>
<th>Panel</th>
<th>What it shows</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Step Properties</strong></td>
<td>The step's values, for the fields you have chosen</td>
</tr>
<tr>
<td><strong>CWE</strong></td>
<td>The cutter–workpiece engagement — what the cutter was actually touching</td>
</tr>
<tr>
<td><strong>Sim Cutting Force Cycle</strong></td>
<td>Simulated cutting force through one spindle revolution</td>
</tr>
<tr>
<td><strong>Sim Spindle Moment Cycle</strong></td>
<td>Simulated spindle moment through the same revolution</td>
</tr>
<tr>
<td><strong>Sensor Cutting Force Cycle</strong></td>
<td>The same force as measured by a dynamometer, against time</td>
</tr>
<tr>
<td><strong>Sensor Spindle Moment Cycle</strong></td>
<td>The same moment as measured, against time</td>
</tr>
</tbody>
</table>
<p>The group bar above them carries the step number as a badge, or <strong>No step selected</strong>. That badge is
the only place the step index is shown — Step Properties leaves that row out rather than repeat it,
which is why the list you configure and the list you see differ by one row.</p>
<p><strong>Step Properties shows short names.</strong> Hovering a name gives the full one, and the unit follows the
value. A field with nothing in it reads <code>-</code>.</p>
<p><strong>CWE is a footprint, not a solid.</strong> It is a small 3D view of its own, drawing the contact contours
the step left behind rather than the volume it swept, because contours are what a step stores. It has
its own view controls and a contour-grid toggle, and it reads <strong>No cut in this step</strong> for a step that
removed nothing — a rapid, or a move in air.</p>
<h2 id="two-scales-and-the-join-between-them">Two scales, and the join between them</h2>
<p>The strip charts beside this column and the cycle charts inside it are the same measurements at two
scales: the strip charts span the whole mission, the cycle charts span <strong>one revolution of one
step</strong>. Changing the selection on a strip chart re-reads every cycle chart, so scrubbing the mission
scrubs the detail with it.</p>
<p>The two simulated charts plot against <strong>spindle angle in degrees</strong>; the two sensor charts plot
against <strong>time in seconds</strong>, because measured data arrives on a clock rather than on a phase. Both
sensor charts need measurement data attached to the project; with none, they read <strong>No data for
step</strong> while the simulated pair beside them is full.</p>
<p>Each cycle chart's header carries a <strong>value boundary</strong> — <em>Auto</em>, or a fixed ± bound that pins the
scale so two steps can be compared without the axis moving under you — and a reload. The two spindle
moment charts carry one more: a <strong>Line / Dartboard</strong> switch, where Dartboard replots the same cycle
as a locus in the plane instead of three channels against the cycle parameter.</p>
<p><strong>Clicking a point in a cycle chart marks that point for its whole group.</strong> The two simulated charts
share one mark in spindle angle; the two sensor charts share another in seconds. The mark survives a
switch between Line and Dartboard and a change of selected step. It also reaches the CWE panel: the
cutter in that view rotates to the angle you clicked, so &ldquo;the force peaked here&rdquo; and &ldquo;this is what
the cutter was touching there&rdquo; become one picture rather than two.</p>
<p>The column with the demo mission paused and a step selected: Sentence Syntax at the top, the step
badge on the bar below it, then Step Properties, CWE and the two simulated cycle charts. The two sensor charts are folded away at the bottom — this project carries no measured data,
so nothing is lost by leaving them shut.</p>
<p><img src="inspecting-a-step-img/step-info.en.png" alt="The Execution page's Step Info column filled: a Sentence Syntax panel showing an NC block and its parsed form, a group bar carrying a step number badge, a Step Properties list of named values, a CWE panel showing the cut footprint in a small 3D view, and two cycle charts plotting force and moment against spindle angle"></p>
<h2 id="choosing-what-step-properties-shows">Choosing what Step Properties shows</h2>
<p>Step Properties does not show everything a step carries — it shows what you asked for, out of a much
longer list. The small button on that panel's header opens the chooser, beside the list it
configures.</p>
<p>Candidates are on the left, grouped into categories; a category header ticks or unticks the whole
group, and <strong>Add Selected</strong> moves what you ticked across. Anything already displayed is greyed with a
tick beside it, so the left side never offers you a duplicate. The displayed list is on the right, in
the order it will appear: drag a row, or use its up and down buttons, and remove one row at a time or
<strong>Clear</strong> the lot. <strong>Reset</strong> empties the list entirely.</p>
<p><strong>There is no Save button, and that is not an omission.</strong> Every add, removal and reorder is written
as you make it, and the header reports the write — so the way to undo an experiment is to put the
rows back, not to close the dialog.</p>
<p>The chooser open over the column, at <code>/execution</code>. The counts in its header are this account's
displayed list against everything the run can offer; the green ticks down the candidate side are the
rows already on the right.</p>
<p><img src="inspecting-a-step-img/step-present.en.png" alt="The Step Present Preference dialog open over the Execution page: a header counting displayed against available keys with Reset and close, a Candidate Keys panel on the left with collapsible categories and an Add Selected button, and a Displayed Keys panel on the right listing the chosen properties with up, down and remove buttons and a Clear action"></p>
<h2 id="see-also">See Also</h2>
<ul>
<li><a href="index.html">Running a Simulation</a> — the rest of running a job</li>
<li><a href="watching-the-run.html">Watching the Run</a> — the mission-wide charts whose selection fills this column</li>
<li><a href="running-a-simulation.html">Starting and Stepping</a> — stepping the run to land on the step you want to read</li>
<li><a href="the-program-branch.html">The Program Branch</a> — the file panels whose line clicks steer the Sentence Syntax panel</li>
<li><a class="xref" href="../../anatomy/execution/selected-step-info-panel.html">Selected-Step Info Panel</a> — the component behind Step Properties, and where its values come from</li>
<li><a class="xref" href="../../anatomy/execution/cycle-line-charts.html">Cycle-Line Charts</a> — the components behind the four cycle charts, and the shared cursor mark</li>
<li><a class="xref" href="../../anatomy/execution/step-present-dialog.html">Step Present Dialog</a> — the component behind the chooser: its categories, its labels and how it persists</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>
Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 122 KiB

@@ -0,0 +1,252 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Playing a Program | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Playing a Program | 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="">
<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="">
<h1 id="playing-a-program">Playing a Program</h1>
<p>Two commands put a program into a mission, and the difference between them is where the program
lives rather than what it does: <strong>Program File</strong> references a file on disk, <strong>NC Code</strong> carries the
text inside the project.</p>
<h2 id="where-they-are">Where they are</h2>
<p>The Execution page's <strong>Mission</strong> branch. Both sit in the <strong>Program</strong> category of <strong>Add Command</strong>,
and both are placed like any other command — see <a href="building-a-mission.html">Building a Mission</a>.</p>
<h2 id="which-one-to-use">Which one to use</h2>
<ul>
<li><strong>Program File</strong> — the program stays a file, and the project stores the path. Editing the file
changes what plays next time, so this is what a CAM system's output belongs in.</li>
<li><strong>NC Code</strong> — the program text is written into the project itself. Nothing outside is referenced,
so the project travels complete. Use it for a short probe, a hand-written test, or anything you
want to keep with the project rather than beside it.</li>
</ul>
<p><strong>They do not necessarily feed the same reader.</strong> NC Code is always brand NC text. Program File
plays brand NC, NX-CL or CSV, and which one it uses is a setting on the command.</p>
<h2 id="program-file">Program File</h2>
<h3 id="point-it-at-a-program">Point it at a program</h3>
<p>Type the path, or press <strong>Browse</strong>. Both forms are accepted: a path relative to the project folder,
which is what browsing produces, or an absolute path on the server.</p>
<p>Browse opens the server's file explorer on the project folder and offers no other root, so anything
picked there is project-relative by construction. A program that lives outside the project folder is
reached by typing its absolute path into the field instead.</p>
<p>The dialog filters in four groups rather than one:</p>
<table>
<thead>
<tr>
<th>Group</th>
<th>Extensions</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>NC Files</strong></td>
<td><code>.nc</code>, <code>.anc</code>, <code>.tap</code>, <code>.eia</code>, <code>.mpf</code>, <code>.spf</code>, <code>.cnc</code>, <code>.ptp</code>, <code>.h</code> — the common brand extensions, not all of them</td>
</tr>
<tr>
<td><strong>CL Files</strong></td>
<td><code>.cl</code>, <code>.cls</code>, <code>.clsf</code></td>
</tr>
<tr>
<td><strong>CSV Files</strong></td>
<td><code>.csv</code></td>
</tr>
<tr>
<td><strong>All Files</strong></td>
<td>everything, and the backstop for a brand extension the first group does not name</td>
</tr>
</tbody>
</table>
<p><strong>The picker takes more than one file.</strong> The first goes on the command you opened it from; every
further pick becomes a <strong>new Program File command</strong> placed directly after it, in the order you
picked them, inside the same list — including inside a group. That is the quick way to bring a
folder of CAM output into a mission.</p>
<h3 id="choose-the-reader">Choose the reader</h3>
<p><strong>Play As</strong> decides which reader plays the file:</p>
<table>
<thead>
<tr>
<th>Choice</th>
<th>What plays it</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Auto (by extension)</strong></td>
<td>Picked from the extension: <code>.cl</code>, <code>.cls</code> and <code>.clsf</code> play as CL, <code>.csv</code> as CSV, and every other extension as brand NC</td>
</tr>
<tr>
<td><strong>Brand NC</strong></td>
<td>The controller brand's own reader</td>
</tr>
<tr>
<td><strong>CL (CLSF)</strong></td>
<td>The NX-CL reader</td>
</tr>
<tr>
<td><strong>CSV</strong></td>
<td>The CSV reader</td>
</tr>
</tbody>
</table>
<p>Auto is the default and is right almost always. Pin one of the other three when the extension would
route the file to the wrong reader — a CL file saved as <code>.txt</code>, say.</p>
<p>For brand NC, <em>which</em> brand is not this command's business: it is the controller set on the project,
and what its words mean is <a href="../../technique/nc-dialects/index.html">NC Dialects</a>.</p>
<h3 id="read-the-banner">Read the banner</h3>
<p>Once the field holds a path, a banner below it reports what the <strong>server</strong> can see:</p>
<ul>
<li><strong>Found</strong> — a green banner with the file's size, its modified time and its line count, and a
<strong>Preview</strong> button that shows the first 100 lines read-only.</li>
<li><strong>Not found</strong> — an orange banner saying so, and no Preview button.</li>
</ul>
<p>Typing saves the path as you type; the banner refreshes when you leave the field or press
<kbd>Enter</kbd>. An orange banner is worth trusting: it means the path does not resolve on the
machine that will play it, which is not always the machine you are typing on.</p>
<p>The first Program File in the demo mission's <strong>Roughing</strong> group, at
<code>/execution?tree=execution/mission/2/0</code>. The path field carries a project-relative path, <strong>Play As</strong>
reads <em>Auto</em>, and the green banner below reports the file's size, modified time and line count with
<strong>Preview</strong> beside it. The row and the tree label both read <code>Program File</code> followed by the path,
which is how a mission of several programs stays readable.</p>
<p><img src="playing-a-program-img/program-file.en.png" alt="The Program File command panel in the Control Tree dock: a program file path field with a Browse button, a Play As select reading Auto, and a green file information banner giving size, modified time and line count with a Preview button"></p>
<h2 id="nc-code">NC Code</h2>
<h3 id="name-it">Name it</h3>
<p><strong>Title</strong> is optional in the sense that the field may be cleared, but it is not decoration: it is
the program name the run reports under, and it is the detail the mission row brackets. A new command
arrives with <code>NC Code</code> already in the field; rename it and both the log and the row follow.</p>
<h3 id="write-it">Write it</h3>
<p>The editor is a plain monospace area — no line numbers and no syntax highlighting, because this is
NC text, not a program in a language the application parses while you type. Line and character
counts sit below it and follow what you type.</p>
<p>Two buttons act on the whole text, and both are disabled while it is empty:</p>
<ul>
<li><strong>Trim Blank Lines</strong> — trims every line and drops the ones left empty.</li>
<li><strong>Clear</strong> — empties the text, after asking.</li>
</ul>
<p>Typing saves on its own, shortly after you stop; the two buttons save at once.</p>
<p><strong>Nothing is checked while you type.</strong> The text is stored exactly as written, and a mistake in it
surfaces when the mission plays it — in <strong>NC Diagnostics</strong>, see
<a href="when-something-goes-wrong.html">When Something Goes Wrong</a>.</p>
<p>The demo mission's short hand-written pass, at <code>/execution?tree=execution/mission/4</code>. The title
above the editor is what the row brackets, and the line and character counts below it are the whole
of the feedback this editor gives.</p>
<p><img src="playing-a-program-img/nc-code.en.png" alt="The NC Code command panel: a Title field reading Face check above a monospace text area holding a short NC program, with line and character counts and the Trim Blank Lines and Clear buttons below it"></p>
<h2 id="after-it-has-played">After it has played</h2>
<p>Every program a session read appears under the <strong>Program</strong> branch, with the passes that went over it
and the marks the run left on each line. That is where you see what happened to a line, as opposed
to what the mission asked for — see <a href="the-program-branch.html">The Program Branch</a>.</p>
<h2 id="see-also">See Also</h2>
<ul>
<li><a href="index.html">Running a Simulation</a> — the rest of running a job</li>
<li><a href="building-a-mission.html">Building a Mission</a> — the list these two commands go into</li>
<li><a href="the-program-branch.html">The Program Branch</a> — what the run recorded against each line</li>
<li><a href="the-other-commands.html">The Other Commands</a> — the rest of the command kinds, including the script that drives a session without NC</li>
<li><a class="xref" href="../../anatomy/execution/mission/NcFileCommand-panel.html">NcFileCommand Panel</a> — the component behind Program File: its fields, its picker and the endpoints behind the banner</li>
<li><a class="xref" href="../../anatomy/execution/mission/NcCodeCommand-panel.html">NcCodeCommand Panel</a> — the component behind NC Code: its editor, its stats row and how it saves</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>
Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

@@ -0,0 +1,256 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Starting and Stepping | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Starting and Stepping | 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="">
<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="">
<h1 id="starting-and-stepping">Starting and Stepping</h1>
<p>Six buttons and four keys drive a run. What each of them does is short to say; <strong>which of them you
can press at a given moment is the part worth learning</strong>, because the availability of a button is
what tells you where the run actually is.</p>
<h2 id="where-it-is">Where it is</h2>
<p>The Execution page at <code>/execution</code>. The transport sits along the top of the editor panel in the left
dock, and it is mounted for the <strong>Execution</strong> root and every node beneath it — so it stays reachable
while you are editing a Mission command one level in. There is exactly one of it on the page, and it
is the thing that binds <kbd>F5</kbd> to <kbd>F8</kbd>.</p>
<h2 id="the-six-controls">The six controls</h2>
<table>
<thead>
<tr>
<th>Control</th>
<th>Key</th>
<th>What it does</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Start</strong> / <strong>Resume</strong></td>
<td><kbd>F5</kbd></td>
<td>Starts the run, or resumes a paused one</td>
</tr>
<tr>
<td><strong>Pause</strong></td>
<td><kbd>F6</kbd></td>
<td>Holds the run where it is</td>
</tr>
<tr>
<td><strong>Run one NC line</strong></td>
<td><kbd>F7</kbd></td>
<td>Advances by one line of the program</td>
</tr>
<tr>
<td><strong>Run one machining step</strong></td>
<td><kbd>F8</kbd></td>
<td>Advances by one machining step</td>
</tr>
<tr>
<td><strong>Stop</strong></td>
<td>—</td>
<td>Ends the run</td>
</tr>
<tr>
<td><strong>Reset</strong></td>
<td>—</td>
<td>Unwinds the session back to the start</td>
</tr>
</tbody>
</table>
<p>Start and Resume are the same button, not two: it reads <strong>Start</strong> from the beginning and <strong>Resume</strong>
once the run is paused. The two single-advance buttons share one icon and are told apart by a small
letter in the corner — <strong>L</strong> for a line, <strong>S</strong> for a step. Stop and Reset carry no key.</p>
<p>Reset unwinds in the background: the button shows a spinner while it works and the rest of the
application stays usable.</p>
<h2 id="one-line-is-not-one-step">One line is not one step</h2>
<p>The two single-advance buttons exist because the two units do not line up. One line of program can
produce many machining steps — a long move at a fine machining resolution is dozens of them — while
another line produces none at all, because a tool change or a coordinate selection is a sentence with
no motion under it. So advancing by one line and advancing by one step land in different places.</p>
<p>Use <strong>Run one NC line</strong> when you are following the program: it stops where the next line begins,
which is where the program text you are reading changes. Use <strong>Run one machining step</strong> when you are
following the cut: it stops at the next thing the machine did, which is the unit the Step Info column
and the strip charts are keyed on. Stepping by step through a single long move is how you watch one
cut develop; stepping by line skips straight past it.</p>
<h2 id="what-you-can-press-and-when">What you can press, and when</h2>
<p>The whole bar is dead until two things are true: <strong>a project is open</strong>, and <strong>the page's 3D canvas
has connected to the service</strong>. The second one is easy to miss — the connection is what binds the
run engine to this page, so a canvas that has dropped its connection leaves every transport button
greyed even though the project is plainly loaded. The connection badge on the menu bar is where you
check that.</p>
<p>With both in place, availability follows the run state:</p>
<table>
<thead>
<tr>
<th>Control</th>
<th>Available while the run is</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Start</strong> / <strong>Resume</strong></td>
<td>ready, or paused</td>
</tr>
<tr>
<td><strong>Pause</strong></td>
<td>running</td>
</tr>
<tr>
<td><strong>Run one NC line</strong> / <strong>Run one machining step</strong></td>
<td>ready, or paused</td>
</tr>
<tr>
<td><strong>Stop</strong></td>
<td>running, paused, or finished</td>
</tr>
<tr>
<td><strong>Reset</strong></td>
<td>any time a project is open</td>
</tr>
</tbody>
</table>
<p><strong>Nothing steps a moving run.</strong> Both single-advance buttons are unavailable while the run is going,
so the way to step through something you are already watching is to pause first and then step. That
is the single most useful thing in the table: the buttons are not refusing you, they are telling you
the run has not stopped yet.</p>
<p>The bar at rest, with the demo project open and nothing run yet, at <code>/execution</code>. Start, the two
single-advance buttons and Reset are live; Pause and Stop are greyed, because there is no run to hold
or to end — and the two single-advance buttons carry the <strong>L</strong> and the <strong>S</strong> that tell them apart. The
badge on the <strong>Execution</strong> tree item reads <em>ready</em>, and the block on the canvas is uncut.</p>
<p><img src="running-a-simulation-img/transport-ready.en.png" alt="The Execution page with the Control Tree on the left showing the Mission and Program branches, a green ready badge on the Execution item, the transport row above the editor panel with the pause and stop buttons greyed, and the 3D canvas showing an uncut rectangular aluminium block on its fixture"></p>
<h2 id="reading-the-run-state">Reading the run state</h2>
<p>The state rides the <strong>Execution</strong> item in the Control Tree as a coloured badge — <em>ready</em>, <em>running</em>,
<em>paused</em>, <em>finished</em> — so it is readable from wherever you are in the tree rather than only from the
transport. The footer along the bottom of the window carries the session's own messages beside it.</p>
<p>The same page with the mission paused part way through. The badge now reads <em>paused</em> in orange, Pause
has gone grey, and Stop has joined the live ones — so the bar alone tells you a run is open and held.
On the canvas the tool path the run has laid down so far is now drawn over the block, and the tabs
under it are counting what the run has reported: this mission trips the collision check, which is
what the red line in the footer and the number on <strong>Step Diagnostics</strong> are saying.</p>
<p><img src="running-a-simulation-img/transport-paused.en.png" alt="The Execution page with the Control Tree on the left, its Execution item carrying an orange paused badge, the transport row above the editor panel with the pause button greyed and the rest live, the 3D canvas showing the block with the covered tool path drawn over it, and a footer line reporting a collision"></p>
<h2 id="the-keys-and-where-they-stop">The keys, and where they stop</h2>
<p><kbd>F5</kbd> to <kbd>F8</kbd> are bound only while the Execution page is the one on screen. On every
other page <kbd>F5</kbd> is the browser's own reload, and the same is true here in two cases: when
the button a key drives is unavailable at that moment, and when the focus is inside a text field.</p>
<div class="WARNING">
<h5>Warning</h5>
<p>That exception bites hardest on <kbd>F5</kbd> during a run. Start is unavailable while the run is
going, so the key falls through to the browser, the page reloads, and the session goes with it.
Pause with <kbd>F6</kbd> first.</p>
</div>
<h2 id="see-also">See Also</h2>
<ul>
<li><a href="index.html">Running a Simulation</a> — the rest of running a job</li>
<li><a href="building-a-mission.html">Building a Mission</a> — the command list this transport plays</li>
<li><a href="watching-the-run.html">Watching the Run</a> — the canvas and the charts that fill while this plays</li>
<li><a href="inspecting-a-step.html">Inspecting a Step</a> — the column that reads whichever step you stopped on</li>
<li><a href="when-something-goes-wrong.html">When Something Goes Wrong</a> — what to read when the run does not do what you expected</li>
<li><a href="../basics/the-app-window.html">The Application Window</a> — the menu bar's connection badge, and the footer this page's state is reported in</li>
<li><a class="xref" href="../../anatomy/execution/execution-tool-bar.html">Execution Tool Bar</a> — the component behind these buttons: the enable rules, the status feed and the key bindings</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>
Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 104 KiB

@@ -0,0 +1,367 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>The Other Commands | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="The Other Commands | 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="">
<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="">
<h1 id="the-other-commands">The Other Commands</h1>
<p>Beyond putting a program into a run, a mission can change the session's settings part-way through,
steer the optimizer, write out what the run produced, and drive the session from a script.</p>
<h2 id="where-they-are">Where they are</h2>
<p>The Execution page's <strong>Mission</strong> branch, all from the same <strong>Add Command</strong>. The Program category's
other two commands are on <a href="playing-a-program.html">Playing a Program</a>, and the Flow category's one
command is on <a href="building-a-mission.html">Building a Mission</a>.</p>
<h2 id="settings-one-per-command">Settings, one per command</h2>
<p>The <strong>Setup</strong> category holds five commands, each carrying one setting:</p>
<table>
<thead>
<tr>
<th>Command</th>
<th>What it sets</th>
<th>Default</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Machining Resolution</strong></td>
<td>the meshing resolution of material removal, in mm</td>
<td>0.125 mm</td>
</tr>
<tr>
<td><strong>Machining Motion Resolution</strong></td>
<td>how a motion is sampled into steps</td>
<td>Feed Per Cycle</td>
</tr>
<tr>
<td><strong>Collision Detection</strong></td>
<td>whether collisions are detected</td>
<td>on</td>
</tr>
<tr>
<td><strong>Pause on Failure</strong></td>
<td>whether the run stops at a failure</td>
<td>off</td>
</tr>
<tr>
<td><strong>Physics</strong></td>
<td>whether physics is simulated</td>
<td>on, where the advanced-physics licence is held</td>
</tr>
</tbody>
</table>
<p><strong>Each takes effect from its own position in the list onward.</strong> A program above one plays under
whatever was in force before it; programs below it play under the new value, until something further
down changes the session again.</p>
<p>That is the reason these are commands rather than project-wide settings, and it is worth using: put
a coarse machining resolution above the roughing programs and a fine one above the finishing
programs, and one run does both at the resolution each deserves.</p>
<p>Four of the five are a single field or checkbox. <strong>Machining Motion Resolution</strong> has more to say and
carries its own editor: a type — <em>Feed Per Cycle</em>, <em>Feed Per Tooth</em> or <em>Fixed</em> — and, for Fixed, a
linear resolution in mm and a rotary one in degrees.</p>
<div class="NOTE">
<h5>Note</h5>
<p><strong>General Config is not on the menu, and it is not missing.</strong> It was one command carrying all five
of these settings at once, and the five above replace it. A project that still stores one loads as
those five commands in its place — preceded by a Record Meshed Geometry command where the bundle
also read a meshed geometry file — and saving from then on writes the five. There is nothing to
add and nothing to look for.</p>
</div>
<h2 id="the-optimizer-as-a-step">The optimizer, as a step</h2>
<p><strong>NC Optimization Config</strong> is the Optimization category's one command, and it exists so the
optimizer's settings sit at a point in the run rather than over all of it. Everything played below
it optimizes under those values, and a second one further down re-points them mid-mission.</p>
<p>Its own node carries four switches — <strong>Enable Optimization</strong>, <strong>Enable Feedrate Optimization</strong>,
<strong>Enable Depth Splition</strong> and <strong>Enable Interpolation</strong> — and the values live on five child nodes
beneath it:</p>
<table>
<thead>
<tr>
<th>Child node</th>
<th>What is on it</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Distances</strong></td>
<td>the extended pre- and post-distances, in mm</td>
</tr>
<tr>
<td><strong>Feedrate</strong></td>
<td>the feedrate floor and ceiling, the rapid feed, the feed-per-tooth bounds and the assignment ratio</td>
</tr>
<tr>
<td><strong>Motion Dynamics</strong></td>
<td>maximum acceleration and jerk</td>
</tr>
<tr>
<td><strong>Force &amp; Safety</strong></td>
<td>the preferred cutting force and the yielding, thermal-yield, spindle-torque and spindle-power safety factors</td>
</tr>
<tr>
<td><strong>Compensation</strong></td>
<td>the forward, side and depth compensation switches</td>
</tr>
</tbody>
</table>
<p>None of the five child nodes carries a checkbox of its own. The command's own checkbox is the only
one, and like every command's it decides whether the mission runs this command — not whether the
optimizer is on, which is the first switch on its panel.</p>
<p>The command takes no title: its row always reads <strong>NC Optimization Config</strong>. What each quantity
means, and why an optimized result can look wrong, is
<a href="../../technique/nc-optimization/index.html">NC Optimization</a>.</p>
<p>The demo mission's optimizer command, at <code>/execution?tree=execution/mission/1</code>, sitting above the
two program groups it governs. The four switches are on the command's own panel; the five value
nodes are indented under it in the tree.</p>
<p><img src="the-other-commands-img/nc-optimization-config.en.png" alt="The NC Optimization Config command selected in the Mission branch, with Distances, Feedrate, Motion Dynamics, Force and Safety and Compensation child nodes listed beneath it, and the panel below showing the Enable Optimization, Enable Feedrate Optimization, Enable Depth Splition and Enable Interpolation checkboxes"></p>
<h2 id="writing-out-what-the-run-produced">Writing out what the run produced</h2>
<p>The <strong>Output</strong> category holds three commands: <strong>Post-Execution</strong>, <strong>Record Meshed Geometry</strong> and
<strong>Export Meshed Geometry (STL)</strong>.</p>
<p><strong>Post-Execution's name says what it consumes, not where it goes.</strong> It is an ordinary entry in the
list, not an end-of-run hook, and everything it writes is derived from what the session has played
<em>above</em> it. Put it after two programs and it covers both; put a second one halfway down the list and
it writes an interim snapshot of the same accumulating run. <strong>Its placement is the whole question.</strong></p>
<p>Five outputs hang off it, each a child node whose own checkbox switches that output on:</p>
<table>
<thead>
<tr>
<th>Output</th>
<th>What it writes</th>
<th>Default template</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Step Files Output</strong></td>
<td>the step-series data of what has played</td>
<td><code>Output/[NcName].step.csv</code></td>
</tr>
<tr>
<td><strong>Shot Files Output</strong></td>
<td>time-sampled series at a period you set</td>
<td><code>Output/[NcName].shot.csv</code></td>
</tr>
<tr>
<td><strong>Optimization Output</strong></td>
<td>the optimized programs</td>
<td><code>Output/Opt-[NcName]</code></td>
</tr>
<tr>
<td><strong>CL → NC Writeback</strong></td>
<td>brand NC re-synthesized from what was played</td>
<td><code>Output/[NcName].nc</code></td>
</tr>
<tr>
<td><strong>Geometry Difference Detection</strong></td>
<td>a comparison of the workpiece geometry at a radius you set</td>
<td>—</td>
</tr>
</tbody>
</table>
<p><code>[NcName]</code> in a template is replaced by the source program's name.</p>
<p>Three things to know before switching them on:</p>
<ol>
<li><strong>Two of the five are visible only while Show Physics Options is on</strong> in the Preference menu —
Shot Files Output and Optimization Output. See <a href="../basics/preferences.html">Preferences</a>.</li>
<li><strong>The shot file's time resolution is a sampling period, not the machining resolution</strong>, and it
sets the accuracy ceiling of that data. A fine period makes a large file: a six-cut program
writes about 13 MB at the default 1 ms and about 128 MB at 0.1 ms.</li>
<li><strong>The CL → NC writeback needs the CL played on an XYZABC chain</strong>, so the Program File command
that plays it goes above this command. It re-serializes every control file the session played,
so an NC play is written back too, and the converted files appear on the <strong>Program</strong> branch as
their own nodes — see <a href="the-program-branch.html">The Program Branch</a>.</li>
</ol>
<p>Every field stays editable whether or not its checkbox is ticked: the checkbox decides what runs,
not what can be prepared. The outputs are written in an order of the command's own — shot files,
step files, optimization, the writeback, then the geometry difference — which is not the order the
tree lists them in, and which matters only if you are reading their timestamps.</p>
<p>The demo mission's Post-Execution command with <strong>Step Files Output</strong> selected, at
<code>/execution?tree=execution/mission/5/step-files</code>. Each output is a child node with its own
checkbox — that tick is what switches the output on — and the template field for the selected one
sits in the panel below.</p>
<p><img src="the-other-commands-img/post-execution.en.png" alt="The Post-Execution command in the Mission branch with its five child nodes, each carrying its own checkbox, and the Step File Template field in the panel below"></p>
<h2 id="keeping-the-workpiece-between-runs">Keeping the workpiece between runs</h2>
<p>The Output category's other two commands both take the workpiece as it stands at their own point in
the list. <strong>Record Meshed Geometry</strong> stores it in the application's mesh format so a later run can
pick it back up; <strong>Export Meshed Geometry (STL)</strong> writes an STL for something outside the
application to read.</p>
<p>Record Meshed Geometry carries a path — <code>Cache/Workpiece.wct</code> by default, because a recorded mesh is
a rebuildable by-product of a run rather than a project asset — and one of four actions:</p>
<table>
<thead>
<tr>
<th>Action</th>
<th>What it does</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>No Action</strong></td>
<td>nothing; the entry is a placeholder</td>
</tr>
<tr>
<td><strong>Read</strong></td>
<td>always loads the file into the session</td>
</tr>
<tr>
<td><strong>Write</strong></td>
<td>always writes the session's geometry to the file</td>
</tr>
<tr>
<td><strong>Read On First Or Write</strong></td>
<td>reads the file if it exists <strong>and nothing has played yet this session</strong>; otherwise writes</td>
</tr>
</tbody>
</table>
<p>The condition on the fourth is what makes the command usable more than once in one mission: the
first such entry reads, and every one below a program writes. Building a mission around that is
<a href="a-mission-that-resumes.html">A Mission That Resumes</a>.</p>
<p><strong>Writing builds the mesh, at the resolution in force where the command sits</strong> — so a Machining
Resolution command belongs above it. A missing file is not an error: writing it is what a run does.
<strong>Reset</strong> on the command's panel deletes the file it points at, so the next run records afresh.</p>
<p>Export Meshed Geometry (STL) takes a path — <code>Output/MeshedGeom.stl</code> by default, since an export is
something you asked for rather than a cache — and a resolution in millimetres; leave it at 0 for the
default. It also builds the mesh, so the same placement rule applies.</p>
<h2 id="driving-the-session-from-a-script">Driving the session from a script</h2>
<p><strong>Script</strong> is the Program category's third command: C# evaluated against the running session, for
anything the other command kinds do not cover. Where the script returns a sequence of actions, that
sequence is played as part of the run.</p>
<p>The editor completes against the very API the run will compile the script with, so what it offers is
what the run accepts, and a member's signature and summary show beside the suggestion. Picking a
method inserts the call with each argument as a stop, so <kbd>Tab</kbd> walks the parameters.</p>
<p><strong>There is no Save button.</strong> Typing saves shortly after you stop, and the pill beside the title
reports where the text is: <em>Idle</em>, <em>Dirty</em>, <em>Staging…</em>, <em>Staged</em>, or <em>Error</em> with the reason in its
tooltip. <strong>Staged means the service is holding the script, not that the project has been saved</strong> —
save the project to keep it.</p>
<p>Two prompts guard the edges, and neither is a yes/no question, so each has three buttons:</p>
<ul>
<li><strong>Unsaved Changes</strong>, when you select another node while a save is still pending — <em>Save &amp; switch</em>
flushes it first, <em>Discard</em> drops it, <em>Cancel</em> leaves the selection where it is.</li>
<li><strong>Script changed elsewhere</strong>, when the command changed underneath you — another tab, or a project
reload.</li>
</ul>
<p>Like NC Code, the title is optional and is what the row brackets.</p>
<h2 id="the-list-is-not-closed">The list is not closed</h2>
<p>What <strong>Add Command</strong> offers is whatever the application knows about, not a menu built into the
interface. A kind with no editor of its own is served by a generic one built from the settings that
kind declares — which is how <strong>Machining Resolution</strong>, <strong>Collision Detection</strong>, <strong>Pause on Failure</strong>
and <strong>Physics</strong> are edited. So a command kind can be addable, and fully editable, before this manual
has a page for it.</p>
<h2 id="see-also">See Also</h2>
<ul>
<li><a href="index.html">Running a Simulation</a> — the rest of running a job</li>
<li><a href="building-a-mission.html">Building a Mission</a> — the list these commands go into</li>
<li><a href="a-mission-that-resumes.html">A Mission That Resumes</a> — the layout these commands fall into, and what it buys</li>
<li><a href="playing-a-program.html">Playing a Program</a> — the two commands that put NC code into a run</li>
<li><a class="xref" href="../../anatomy/execution/mission/PreSettingCommand-panel.html">PreSettingCommand Panel</a> — the component behind General Config, and what a stored bundle expands into</li>
<li><a class="xref" href="../../anatomy/execution/mission/NcOptOption-panel.html">NC Optimization Option Panel</a> — the component behind NC Optimization Config, field by field</li>
<li><a class="xref" href="../../anatomy/execution/mission/PostExecutionCommand-panel.html">PostExecutionCommand Panel</a> — the component behind Post-Execution: its five sections and what each writes</li>
<li><a class="xref" href="../../anatomy/execution/mission/script-command-panel.html">Script Command Panel</a> — the component behind Script: its editor, its completion and its save states</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>
Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

@@ -0,0 +1,192 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>The Program Branch | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="The Program Branch | 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="">
<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="">
<h1 id="the-program-branch">The Program Branch</h1>
<p>What the run actually read, line by line, as opposed to what the mission asked for.</p>
<p>The Execution page's Control Tree carries two branches: <strong>Mission</strong> above, <strong>Program</strong> below, at
Control-Tree path <code>execution/program</code>. Program is read-only — every node on it is either a file the
mission points at or a pass a run made over one — and the transport bar stays pinned above its
panels, so a run can be started, stepped and reset without leaving the branch.</p>
<h2 id="before-anything-runs">Before anything runs</h2>
<p>The branch is not empty before a run. The service seeds it from the mission: one node per distinct
NC file a <strong>Program File</strong> command names, and one per <strong>NC Code</strong> command, taken in the order the
mission lists them and reaching into nested groups. Those nodes are placeholders — a file the run
has not opened yet — and the branch panel says so, badging itself <em>not run yet</em> beside the file
count.</p>
<p>Three things decide what is seeded, and each of them is visible in the screenshot below:</p>
<ul>
<li><strong>A disabled command seeds nothing.</strong> The mission's greyed <em>Program File</em> entry names an NC file
that never reaches the branch, and nothing beneath a disabled group reaches it either.</li>
<li><strong>Two commands naming one file seed one node.</strong> Paths are compared with case and slash direction
ignored, so a file played twice appears once.</li>
<li><strong>An NC Code command is seeded under its own title</strong>, not under a file name, because it has no
file — its text lives in the mission. The branch marks it <code>(inline)</code>.</li>
</ul>
<p><img src="the-program-branch-img/program-before-run.en.png" alt="The Execution page before a run: the Control Tree shows the Mission branch with nine commands — two of them greyed out and unticked — over the Program branch, whose five nodes are circle.ptp, drill_slot.ptp, side.ptp, slide.ptp and (inline) Inline finishing pass. The branch panel below the transport bar is badged not run yet beside 5 files, and the four Session Messages tabs are empty"></p>
<p><em>The Program branch at <code>/execution?tree=execution/program</code>, on a project that has not been played.
The disabled <code>Program File</code> entry in Mission has no node under Program; the enabled <code>NC Code</code>
command has one, under its title.</em></p>
<h2 id="after-a-run">After a run</h2>
<p>Playing the mission fills the same nodes in and adds any file the run reached that the mission did
not name — a subprogram call nests its callee under the caller. The panel's badge changes from
<em>not run yet</em> to <em>run data</em>, and a file the run made more than one pass over takes a <code>×</code> and a
count in its tree label.</p>
<p><img src="the-program-branch-img/program-after-run.en.png" alt="The same page after the run has finished: the Execution root badge reads finished, the first Program node now reads circle.ptp ×2, the branch panel is badged run data beside 5 files, and the Session Messages tabs carry counts — Shell 10 and NC Diagnostics 7, with Step Diagnostics and NC Manipulation still unbadged"></p>
<p><em>The same deep link once the run has finished. <code>circle.ptp ×2</code> is one node holding two passes,
because two Program File commands named the same file.</em></p>
<div class="IMPORTANT">
<h5>Important</h5>
<p>The branch is rebuilt when the run <strong>changes state</strong> — starting, finishing, being reset — and not
while it is playing. During a long run the nodes on screen are the ones the last transition left
there, so a file the run has since opened may not be listed yet. Pausing brings it up to date.</p>
</div>
<h2 id="reading-one-file">Reading one file</h2>
<p>Selecting a node opens the file as the run saw it: the path it was read from, a selector for the
passes made over it, and the text with what each line produced beside it.</p>
<p><img src="the-program-branch-img/program-file-passes.en.png" alt="The Program branch with circle.ptp ×2 selected: the breadcrumb reads Execution / Program / circle.ptp ×2, the path caption NC/circle.ptp, a pass selector reading Pass (2) and #2 · re-entry beside a Follow toggle, then twenty-one numbered lines of NC with a step range printed to the right of thirteen of them, and a footer reading 21 lines · 21 executed lines"></p>
<p><em>One file node at <code>/execution?tree=execution/program/0</code>, with the canvas column switched off so the
line viewer has the width. The pass selector names the pass and why it was entered.</em></p>
<ul>
<li><strong>The pass selector</strong> carries one entry per pass, labelled with how that pass was entered — the
first arrival at the top of the file, a re-entry when the mission came back to it, or the call
that reached it from another file.</li>
<li><strong>The step range</strong> beside a line is what that line produced. A line with no range beside it ran
and produced no motion: <code>G</code> and <code>M</code> words that set state, and the tape marks, all execute without
cutting anything.</li>
<li><strong>A line missing from the marks altogether did not run in that pass.</strong> That is the difference the
branch exists to show, and it is per pass — the same line can be greyed in one pass and marked in
the next.</li>
<li><strong>Follow</strong> keeps the viewer on the line the run is executing; with it off the view stays where it
was put.</li>
</ul>
<h2 id="what-the-branch-does-not-hold">What the branch does not hold</h2>
<ul>
<li><strong>The writeback files are not inside the file nodes.</strong> Converting a played program back to NC
makes its own node at the top of the branch, beside the file nodes rather than under them, and
clicking a line on either side jumps to its twin on the other. That conversion is the CL-to-NC
writeback, so a mission that plays brand NC produces none, and the branch shows only source files.</li>
<li><strong>Node addresses are positions, not files.</strong> A node is <code>execution/program</code> followed by its index,
so a deep link into the branch survives only as long as the branch has the same shape. Link to the
branch, not into it.</li>
<li><strong>A skipped line is not only recorded here.</strong> A line suppressed by block skip is also announced in
the <strong>NC Diagnostics</strong> list while the run is playing — see
<a href="when-something-goes-wrong.html">When Something Goes Wrong</a>.</li>
</ul>
<h2 id="see-also">See Also</h2>
<ul>
<li><a href="index.html">Running a Simulation</a> — the rest of running a job</li>
<li><a href="playing-a-program.html">Playing a Program</a> — the two commands that put the sources here</li>
<li><a href="when-something-goes-wrong.html">When Something Goes Wrong</a> — reading this branch as part of a diagnosis</li>
<li><a href="inspecting-a-step.html">Inspecting a Step</a> — the Sentence Syntax panel that a line click on one of these file panels steers</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>
@@ -0,0 +1,49 @@
<div id="sidetoggle">
<div>
<div class="sidefilter">
<form class="toc-filter">
<span class="glyphicon glyphicon-filter filter-icon"></span>
<span class="glyphicon glyphicon-remove clear-icon" id="toc_filter_clear"></span>
<input type="text" id="toc_filter_input" placeholder="Filter by title" onkeypress="if(event.keyCode==13) {return false;}">
</form>
</div>
<div class="sidetoc">
<div class="toc" id="toc">
<ul class="nav level1">
<li>
<a href="index.html" name="" title="Overview">Overview</a>
</li>
<li>
<a href="building-a-mission.html" name="" title="Building a Mission">Building a Mission</a>
</li>
<li>
<a href="playing-a-program.html" name="" title="Playing a Program">Playing a Program</a>
</li>
<li>
<a href="the-other-commands.html" name="" title="The Other Commands">The Other Commands</a>
</li>
<li>
<a href="a-mission-that-resumes.html" name="" title="A Mission That Resumes">A Mission That Resumes</a>
</li>
<li>
<a href="running-a-simulation.html" name="" title="Starting and Stepping">Starting and Stepping</a>
</li>
<li>
<a href="watching-the-run.html" name="" title="Watching the Run">Watching the Run</a>
</li>
<li>
<a href="inspecting-a-step.html" name="" title="Inspecting a Step">Inspecting a Step</a>
</li>
<li>
<a href="the-program-branch.html" name="" title="The Program Branch">The Program Branch</a>
</li>
<li>
<a href="when-something-goes-wrong.html" name="" title="When Something Goes Wrong">When Something Goes Wrong</a>
</li>
</ul>
</div>
</div>
</div>
</div>
@@ -0,0 +1,2 @@
{"items":[{"name":"Overview","href":"index.html","topicHref":"index.html"},{"name":"Building a Mission","href":"building-a-mission.html","topicHref":"building-a-mission.html"},{"name":"Playing a Program","href":"playing-a-program.html","topicHref":"playing-a-program.html"},{"name":"The Other Commands","href":"the-other-commands.html","topicHref":"the-other-commands.html"},{"name":"A Mission That Resumes","href":"a-mission-that-resumes.html","topicHref":"a-mission-that-resumes.html"},{"name":"Starting and Stepping","href":"running-a-simulation.html","topicHref":"running-a-simulation.html"},{"name":"Watching the Run","href":"watching-the-run.html","topicHref":"watching-the-run.html"},{"name":"Inspecting a Step","href":"inspecting-a-step.html","topicHref":"inspecting-a-step.html"},{"name":"The Program Branch","href":"the-program-branch.html","topicHref":"the-program-branch.html"},{"name":"When Something Goes Wrong","href":"when-something-goes-wrong.html","topicHref":"when-something-goes-wrong.html"}]}
Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

@@ -0,0 +1,305 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Watching the Run | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Watching the Run | 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="">
<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="">
<h1 id="watching-the-run">Watching the Run</h1>
<p>A run shows itself two ways at once, and they answer different questions. The canvas shows what is
happening now. The strip charts show the <strong>whole mission</strong> as one picture, so they are where you find
out <em>where</em> the interesting part is. Use the charts to choose a moment; use the canvas and the Step
Info column to look at it.</p>
<h2 id="where-it-is">Where it is</h2>
<p>The Execution page at <code>/execution</code>, in the two middle columns: the 3D canvas with the Session
Messages panel beneath it, and the <strong>Strip Charts</strong> column beside it. Both columns are switched on
and off from the quick-toggles on the menu bar, and every panel inside them folds to its own header.</p>
<h2 id="the-canvas">The canvas</h2>
<p><strong>What the canvas draws is a choice, not a fixed set.</strong> It opens showing the workpiece, the fixture,
the dimension bar and the tool path. The machine and the tool are <em>not</em> drawn until you ask for
them — which is usually what you want, because a five-axis machine at home position fills the frame
and hides the cut you came to watch.</p>
<p>The panel header carries the generic camera control — a <strong>View</strong> menu of seven presets: Isometric,
Front, Back, Right, Left, Top and Bottom — and beside it the four that belong to a run:</p>
<table>
<thead>
<tr>
<th>Control</th>
<th>What it does</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Tool Path</strong></td>
<td>Shows or hides the tool path through the whole program</td>
</tr>
<tr>
<td><strong>Path Points</strong></td>
<td>Adds the per-position dot markers along it. Editable only while Tool Path is on</td>
</tr>
<tr>
<td><strong>Scene ▾</strong></td>
<td>Which elements are drawn, in three groups</td>
</tr>
<tr>
<td><strong>Meshed Geom ▾</strong></td>
<td>The workpiece's rendering-cache budget, and the ideal-versus-actual difference display</td>
</tr>
</tbody>
</table>
<p>The <strong>Scene</strong> menu groups its checkboxes the way the renderer groups them: <strong>Solid</strong> — Machine, Tool,
Workpiece, Fixture; <strong>Coordinate</strong> — Program Zero, ISO Coordinate, and Heidenhain Coordinate on a
Heidenhain project only; <strong>Display Aids</strong> — Dimension Bar, Color Scale Bar. The tool path is
deliberately not in this menu: its own button owns it, and Path Points hangs off that.</p>
<p>Under <strong>Meshed Geom</strong> sit two rows, each opening a panel of its own: <em>Graphic Cache</em>, the memory
budget for the workpiece's rendering cache, and <em>Diff Visual Radius</em>, which displays the difference
between the ideal geometry and the actual one. The second carries a badge reading <strong>None</strong> or
<strong>Diff</strong>, so the menu answers &ldquo;did this run leave a difference?&rdquo; without your opening the row.</p>
<p>Collapsing the canvas does not disconnect it. The panel keeps it mounted and simply stops it drawing,
so re-expanding is instant rather than a fresh connection.</p>
<p>The <strong>Scene</strong> menu open over the canvas at <code>/execution</code>, with the Strip Charts column beside it. The
three groups are the ones listed above, and the ticked boxes are the set the page opens with —
Workpiece, Fixture and Dimension Bar — with Machine and Tool unticked.</p>
<p><img src="watching-the-run-img/scene-menu.en.png" alt="The Execution page with the Scene dropdown open over the 3D canvas, showing Solid with Machine, Tool, Workpiece and Fixture, Coordinate with Program Zero and ISO Coordinate, and Display Aids with Dimension Bar and Color Scale Bar; Workpiece, Fixture and Dimension Bar are ticked, and the Strip Charts column stands to the right"></p>
<h2 id="the-three-strip-charts">The three strip charts</h2>
<p>One group bar drives three charts, and each of them plots <strong>the whole mission rather than the current
moment</strong>:</p>
<table>
<thead>
<tr>
<th>Chart</th>
<th>What it plots</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Availability Chart</strong></td>
<td>Five ratios: yielding stress, max spindle torque, max spindle power, spindle working temperature, thermal yield</td>
</tr>
<tr>
<td><strong>Surface Roughness Chart</strong></td>
<td>Re-cut depth, program-side cusp, and tip deflection in X / Y / Z, in µm</td>
</tr>
<tr>
<td><strong>Color Index Time Chart</strong></td>
<td>One property you pick, from every step property the run can quantify</td>
</tr>
</tbody>
</table>
<p>Each series is drawn as a <strong>band between its minimum and its maximum</strong>, not as a line through
samples: the window is downsampled to the width it has on screen, so what you are reading is the
shape of the run — where the spindle is loaded, where surface quality degrades, where thermal limits
are approached — rather than individual values. The values themselves are in the legend panel down
the side of each chart, which follows the cursor and can be dragged wider.</p>
<p>All three carry a <strong>Y-axis range</strong> editor in their header — <em>Fit</em> to the data, <em>Lock</em> to a minimum
and maximum you type, or <em>Symmetric</em> about zero with a bound; locking one is how you compare two
parts of a run without the axis moving under you. The
Color Index chart adds two more: the property picker, which is a type-to-filter list of every
quantifiable step property, and <strong>Colors</strong>, which edits the colour guide. Colors is worth
understanding before you touch it: it drives the <strong>colour of the workpiece in the 3D scene</strong> and the
colour scale bar, not the line in the chart.</p>
<h3 id="the-group-bar">The group bar</h3>
<table>
<thead>
<tr>
<th>Control</th>
<th>What it does</th>
</tr>
</thead>
<tbody>
<tr>
<td>Range chip</td>
<td>The slice of the mission currently shown, against its total step count</td>
</tr>
<tr>
<td>Cursor readout</td>
<td>The x-value under the pointer, shared by all three charts</td>
</tr>
<tr>
<td><strong>X-axis mode</strong></td>
<td><em>Time (s)</em> or <em>Step index</em>, applied to all three at once</td>
</tr>
<tr>
<td><strong>Fit view</strong></td>
<td>Fits the 3D canvas to the tool path — the one control here that acts on the canvas</td>
</tr>
<tr>
<td><strong>Stick to live end</strong></td>
<td>Keeps the window's right edge pinned to the running end of the mission</td>
</tr>
<tr>
<td><strong>Reset display range</strong></td>
<td>Back to the whole mission, and re-arms stick-to-end</td>
</tr>
<tr>
<td><strong>Reload</strong></td>
<td>Re-fetches all three charts</td>
</tr>
</tbody>
</table>
<p>Stick-to-end turns itself <strong>off</strong> the moment you pan or zoom, because both of those set a definite
right edge. That is the behaviour you want while a run is going — you can look at something without
being dragged back to the live end — and <em>Reset display range</em> is how you re-arm it.</p>
<h2 id="reading-a-chart-with-the-pointer">Reading a chart with the pointer</h2>
<p>The three charts share one window and one selection, so a gesture on any of them moves all three.</p>
<table>
<thead>
<tr>
<th>Gesture</th>
<th>What it does</th>
</tr>
</thead>
<tbody>
<tr>
<td>Click</td>
<td>Selects that step — this is what fills the Step Info column</td>
</tr>
<tr>
<td>Drag left or right</td>
<td>Sweeps a range and zooms to it on release</td>
</tr>
<tr>
<td>Right-drag or middle-drag</td>
<td>Pans</td>
</tr>
<tr>
<td>Wheel</td>
<td>Zooms about the pointer</td>
</tr>
<tr>
<td>Hover</td>
<td>Puts that x-value in the group bar's cursor readout</td>
</tr>
<tr>
<td>One finger / two fingers</td>
<td>Pans / pinch-zooms, on a touch screen</td>
</tr>
</tbody>
</table>
<p>A left drag shorter than a few pixels counts as a click, so selecting a step does not need a steady
hand.</p>
<p>Before anything has run, all three read <strong>No mission data</strong>. A chart that has data but no physics
behind it reads <strong>No physics data</strong> instead — that is what the Availability chart looks like when
the run produced no physics results.</p>
<p>The three charts with the demo mission paused part way through and a step selected. The vertical rule
crossing all three at the same place is that selection; the range chip on the group bar names the
window, the x-axis is in seconds, and each chart's legend stands down its right side with one entry
per series — five on each of the first two, one on the Color Index chart, which plots the single
property named in its header.</p>
<p><img src="watching-the-run-img/strip-charts.en.png" alt="The Execution page's Strip Charts column filled from a paused run: an Availability Chart, a Surface Roughness Chart and a Color Index Time Chart stacked under one group bar, each showing banded series across the mission timeline with a legend listing its series down the right side, and the 3D canvas showing the part-machined block to the left"></p>
<h2 id="see-also">See Also</h2>
<ul>
<li><a href="index.html">Running a Simulation</a> — the rest of running a job</li>
<li><a href="running-a-simulation.html">Starting and Stepping</a> — the transport that makes these fill</li>
<li><a href="inspecting-a-step.html">Inspecting a Step</a> — the per-step detail a click on these charts opens</li>
<li><a href="../basics/the-app-window.html">The Application Window</a> — the column quick-toggles that show and hide these two columns</li>
<li><a class="xref" href="../../anatomy/execution/strip-charts.html">Strip Charts</a> — the components behind this column: the shared window, the pointer contract and the data behind each series</li>
<li><a class="xref" href="../../anatomy/execution/execution-extended-renderingcanvas-tool-bar.html">Execution Extended RenderingCanvas Tool Bar</a> — the component behind the canvas header's run controls</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>
Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

@@ -0,0 +1,244 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>When Something Goes Wrong | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="When Something Goes Wrong | 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="">
<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="">
<h1 id="when-something-goes-wrong">When Something Goes Wrong</h1>
<p>A run that does not do what was expected has usually already said why, somewhere. This page is about
which <em>somewhere</em> — the four lists on the Execution page at <code>/execution</code>, the Program branch at
Control-Tree path <code>execution/program</code>, and the service's own log.</p>
<h2 id="start-with-the-right-list">Start with the right list</h2>
<p>The <strong>Session Messages</strong> panel, below the canvas, splits the session's messages across four lists,
and picking the right one is most of the diagnosis. A tab carries a count only once its list has
something in it, so a tab with no number beside its name is a sink nothing has reached.</p>
<ul>
<li><strong>Shell</strong> — the session's own account of itself: what started, what finished, what it built, and
the verdicts it reaches at the end of a play. A conversion or an optimization reports itself here
too, stage by stage and file by file, from its opening row to its closing count. These rows carry
no anchor, because there is nothing
in the program to anchor them to. <strong>This is the list a run that appears to have done nothing is
diagnosed from</strong>: a play that ends with no step having touched the workpiece is reported here, and
the message names the usual causes — an incremental header with no <code>G90</code> after it, a work offset
or program zero that puts the program somewhere else, stock that is not where the program expects
it.</li>
<li><strong>NC Diagnostics</strong> — everything the NC pipeline said while playing, which is not only complaints.
It opens each file with the line count it found, and a row about one sentence carries an anchor
naming it. This is the list to read when the program did not do what its text says.</li>
<li><strong>Step Diagnostics</strong> — anchored to a machining step rather than to a position in the text. Most of
it is about motion, but not all: an NC-embedded script that fails to compile is reported here too,
against the step it was reached from.</li>
<li><strong>NC Manipulation</strong> — what the writeback found in the program while converting it to NC files or
optimizing it: a block whose words it would not rewrite, an edit that matched no piece in the
stream, a block the optimizer would not re-interpolate and optimized whole instead, a split arc
whose written fragments no longer share one radius. It holds findings and nothing else, so a
conversion or an optimization with nothing to complain about leaves this list empty; the run's own
account of itself is on <strong>Shell</strong>.</li>
</ul>
<p>A message about a <code>G</code> word and a message about a move are different problems, and they never share a
list. Looking in the wrong one reads as silence.</p>
<h2 id="reading-a-row">Reading a row</h2>
<p><img src="when-something-goes-wrong-img/nc-diagnostics.en.png" alt="The Execution page with the left and right columns switched off: the canvas above, and below it the Session Messages panel with the NC Diagnostics tab selected. The tab row shows Shell badged 10 and NC Diagnostics badged 7, with Step Diagnostics and NC Manipulation carrying no badge at all. Under a filter toolbar of Severity, Category, a text box, Reset and Export, seven rows are listed: six System rows reading Sys-Init&ndash;FileLines with each file and its line count, and one warning row whose anchor column reads Sn 2105, category Unsupported, id Parsing&ndash;Unconsumed, text Unconsumed Parsing entries: G02"></p>
<p><em>The four lists at <code>/execution</code>, with NC Diagnostics selected. Two of the four tabs carry no badge,
which is how an empty sink looks.</em></p>
<p>A row carries, left to right, the position it is about, the category, the message's own id, and its
text. The position is the anchor: <code>Sn</code> and a number for a sentence, <code>S</code> and a number for a step. Not
every row has one — a complaint about the pipeline rather than about a particular sentence has
nothing to anchor to, and neither has anything on <strong>Shell</strong>.</p>
<p>The id is worth reading. It is stable across languages and releases, so it is the thing to quote
when asking someone else about a message, and the thing to filter on when one message is repeating.
The <strong>Filter text…</strong> box, the <strong>Severity</strong> and <strong>Category</strong> lists and <strong>Export</strong> are described with
the rest of the panel in <a href="../basics/messages-and-logs.html">Messages and Logs</a>.</p>
<div class="IMPORTANT">
<h5>Important</h5>
<p><strong>On the two NC lists, a row is not an occurrence.</strong> <strong>NC Diagnostics</strong> folds across a play and
<strong>NC Manipulation</strong> across one conversion or optimization run; <strong>Shell</strong> and <strong>Step Diagnostics</strong>
fold nothing, and every report they take becomes a row of its own. Where it applies, the pipeline
keeps one entry per
distinct message — same id, same wording — and drops every repeat instead of listing it. When the
program ends, each message that occurred more than once gets one summary row reading <em>repeated N
times in this run, first at</em> the sentence it was first seen on. So a diagnostic raised on forty
different sentences leaves two rows for that program: the first occurrence, and the summary.</p>
<p>Two consequences are worth holding on to. The count is only in that summary sentence — the
multiplier badge that marks consecutive identical messages is a different mechanism and does not
appear on these. And <strong>the summary row's anchor is the last occurrence while its text names the
first</strong>, so jumping from it lands at the end of the run of repeats, not at the beginning.
Everything between the two rows has no anchor at all: to find those positions, fix the first one
and play again.</p>
</div>
<h2 id="then-the-runs-own-record">Then the run's own record</h2>
<p>The <strong>Program</strong> branch holds what the run did to each line — the passes it made and the marks each
one left. A line that was expected to cut and was not marked was not executed in that pass. See
<a href="the-program-branch.html">The Program Branch</a>.</p>
<p>The two records answer different questions and are worth reading together: <strong>NC Diagnostics</strong> says
what the pipeline thought of a sentence while it was playing, the <strong>Program</strong> branch says what that
sentence produced.</p>
<h2 id="then-the-service-log">Then the service log</h2>
<p><strong>Show Log</strong> on the menu bar opens the log the service is writing for the current day, with a
<strong>Download</strong> for sending it to someone else. It holds things the four lists never carry — the
exception behind a failure, and the engine's own start-up account of itself — and it is the only
one of these surfaces that outlives the session. What it does not hold is the four lists: those are
pushed to the browser and are never written to the file, so a message seen in a list is not
findable there. The viewer itself is described in
<a href="../basics/messages-and-logs.html">Messages and Logs</a>.</p>
<h2 id="while-an-optimization-is-running">While an optimization is running</h2>
<p>An optimization reports itself on <strong>Shell</strong>, stage by stage. It opens with <em>Start NC optimization.</em>
and ends with <em>Total N files optimized.</em> and <em>optimization cache cleared.</em>, and between them every
stage announces itself as it begins: <em>Computing Optimized Feed by indivisual step..</em>, closed by
<em>Optimization Feedrate built.</em> once the per-step feeds are solved, then <em>Constrain feedrate By
expaneded segment..</em>, <em>Constrain Feedrate By Acceleration..</em>, <em>Build Compensation..</em> and <em>Regenerate
NC commands..</em>, with one <em>File optimized:</em> row naming each output file as it is finished.</p>
<p>Two of those stages count aloud, and they are the only way to tell a slow optimization from a
stopped one. While the per-step feeds are being solved, every thousandth step adds another
<em>Computing Optimized Feed by indivisual step..</em> row carrying the source file and line it has
reached; while the optimized text is being written, every thousandth line adds a <em>Now optimizing
to:</em> row carrying the same two numbers. <strong>Shell appends every one of them and folds nothing</strong>, so
its newest row is where the run has got to: numbers that keep advancing are a run still working, and
a list that has stopped growing on a stage whose successor has not been announced is a run that is
not.</p>
<p>The counting rows are the instrument, not the stage rows. A stage with fewer than a thousand steps
to solve, or fewer than a thousand lines to write, announces its start and then says nothing until
it ends — so a short program crosses the whole ladder in near-silence, and that silence means
nothing on its own.</p>
<p><strong>A Stop ends an optimization on a success row.</strong> Stop reaches the optimizer between steps and
between output files rather than only at the end, and what it leaves on <strong>Shell</strong> is <em>optimization
canceled.</em> followed immediately by <em>Total N files optimized.</em> in success green — even <em>Total 0 files
optimized.</em> arrives as a success. The count is of the files the run had opened, so a file the Stop
landed part-way through is counted with the rest and is left on disk short. The complete ones are
those whose own <em>File optimized:</em> row appeared before the cancel.</p>
<h2 id="three-things-that-look-like-faults-and-are-not">Three things that look like faults and are not</h2>
<p><strong>An English message in a translated interface is the safe answer, not a bug.</strong> Engine messages
arrive with an id and their English text, and the interface substitutes its own translation only
when its copy of that message matches the one the engine sent. An engine built against a different
message set, or a message the interface has no copy of, leaves the original English in place rather
than rendering text that might say something else. The English is the accurate text.</p>
<p><strong>An action refused because a run is playing is a guard, not a fault.</strong> Switching the NC runner and
switching the controller brand are both refused while a program is playing, rather than swapping the
parser underneath it; the refusal names the reason and asks for the run to be paused or finished
first. It arrives on the action itself — no row is added to any of the four lists, so there is
nothing to go looking for afterwards.</p>
<p><strong>An empty Step Diagnostics list is not proof that nothing was wrong.</strong> Collision detection is off
unless the mission turns it on, and the physics-dependent warnings — the cutter geometry checks
raised at tool change among them — are not raised at all when physics is off. A quiet list on a run
with those switched off says only that nothing was being watched for.</p>
<h2 id="if-it-is-a-configuration-problem-rather-than-a-run-problem">If it is a configuration problem rather than a run problem</h2>
<p>Some failures are the setup answering late. A cutter whose upper beam is shorter than its flute
cannot build its thermal shell. The Upper Beam editor flags it while the tool is being edited, and a
run that equips that tool reports it again at tool change, in <strong>Step Diagnostics</strong> — provided
physics is on, which is what makes that check run. See
<a class="xref" href="../../technique/milling-physics/cutter-geometry.html">Cutter Geometry</a>.</p>
<h2 id="see-also">See Also</h2>
<ul>
<li><a href="index.html">Running a Simulation</a> — the rest of running a job</li>
<li><a href="running-a-simulation.html">Starting and Stepping</a> — the transport, and the run state this page reads</li>
<li><a href="the-program-branch.html">The Program Branch</a> — what the run recorded against each line</li>
<li><a href="../basics/messages-and-logs.html">Messages and Logs</a> — the panel these four lists live in, the footer, and the service's log viewer</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>