This repository has been archived on 2026-10-11. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
HiNC-2025-win-desktop-Deploy/App/wwwroot/HiAPI-docsite/manual/setup/controller.html
T
2026-09-12 18:16:27 +08:00

225 lines
14 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Controller | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="Controller | 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="controller">Controller</h1>
<p>The controller is the NC parser a project reads its programs with: a brand, the machine and control
settings that brand assumes, and the coordinate, offset and variable tables an NC program addresses.
Setting it up is picking the brand first, then filling in the tables that brand grew.</p>
<h2 id="where-it-is">Where it is</h2>
<p>The General Setup page, at <code>/general-setup</code>, reached from the menu bar's <strong>Page</strong> dropdown. Select
the <strong>Controller</strong> branch of the Control Tree (<code>/general-setup?tree=equipment/controller</code>); it sits
after Workpiece, and whichever node you select opens its editor below the tree in the same dock.</p>
<p>The branch grows children only with a project open and a controller resolved on it, so a Controller
node standing alone is the state before a project is open rather than a fault; a project file
naming no controller keeps the Fanuc preset. Once a runner resolves, the root's own panel badges the
brand in force and enables an <strong>Object Management</strong> (<code>⋮</code>) menu, whose <strong>Load</strong> installs a
<code>.Controller</code>, <code>.SoftNcRunner</code> or <code>.xml</code> runner file in place of the whole controller and whose
<strong>Save As</strong> writes the current one out, offered as <code>NcRunner.Controller</code>.</p>
<h2 id="pick-the-brand-first">Pick the brand first</h2>
<p>Select <strong>Controller Brand</strong> (<code>equipment/controller/machine/brand</code>), pick one of <strong>Fanuc</strong>,
<strong>Siemens</strong>, <strong>Heidenhain</strong>, <strong>Syntec</strong> and <strong>Mazak</strong>, and press <strong>Apply brand</strong>. Until you do the
pick is only staged: <strong>Revert</strong> drops it, and so does selecting another tree row.</p>
<p>Do it before anything else, because it replaces the whole controller rather than one field:</p>
<ol>
<li><strong>The dialect changes.</strong> Each brand is a different reader; what its G and M words actually do is
<a href="../../technique/nc-dialects/index.html">NC Dialects</a>.</li>
<li><strong>The node set changes.</strong> The branch is regrown, so nodes the new brand has no concept of stop
existing and its own appear.</li>
<li><strong>Machine settings reset</strong> to the new preset's defaults. The runner-owned ones — the tool-change
position, block-skip layers, subprogram folders and the macro iteration guards — reset on every
apply. The travel limits, rapid feedrates, home reference, M-code declarations and native
parameters live in the brand's parameter table and reset only where the switch also sweeps that
table; Fanuc and Mazak share one, so a switch between those two leaves them where they are.</li>
<li><strong>The old brand's own program-data tables are removed</strong> — the ones only that brand proxies:
Siemens frames, <code>$TC_DP</code> offsets and R parameters, Heidenhain datum presets and shifts. Tool
offsets survive every switch, and retained common variables survive among Fanuc, Syntec and
Mazak. What is swept does not come back: switching back builds those tables fresh from the new
preset's defaults.
<strong>Carry work-coordinate XYZ (G54…) into the new brand's table</strong>, ticked by default, moves the
work offsets across — only those, and only for ids the new brand also holds: Fanuc to Siemens
keeps G54–G57 and drops the rest.</li>
</ol>
<p>A brand switch and an Object-Management load are both refused while an NC program is playing — see
<a href="../run/playing-a-program.html">Playing a Program</a>.</p>
<p>The <strong>Controller Brand</strong> leaf on a demo project, at
<code>/general-setup?tree=equipment/controller/machine/brand</code>. The machine plane above it is expanded, so
the eleven leaves this brand grows are all visible; the panel below carries the <strong>Controller brand</strong>
select reading <em>Fanuc</em>, the carry checkbox ticked, and the <strong>Apply brand</strong> and <strong>Revert</strong> buttons
that are enabled only while a different brand is staged.</p>
<p><img src="controller-img/controller-brand.en.png" alt="The Controller branch of the Control Tree with its Machine / Controller plane expanded, listing Controller Brand, Machine Limits (Stroke), Rapid Feedrates, Home / G28 Reference, Tool-Change Position, Controller Parameters, M-Code Declarations, Canned Cycle (Peck), Block Skip / Delete, Subprogram Folders and Parameters (Native); the panel below shows a Controller brand select reading Fanuc, a ticked checkbox reading carry work-coordinate XYZ into the new brand's table, and the Apply Brand and Revert buttons"></p>
<h2 id="the-two-planes">The two planes</h2>
<p>Every other node hangs on one of two group stems, and which one it is on says what it describes;
selecting a stem lists its children.</p>
<table>
<thead>
<tr>
<th>Plane</th>
<th>Tree id</th>
<th>What sits on it</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Machine / Controller</strong></td>
<td><code>equipment/controller/machine</code></td>
<td>What the machine is wired to do: travel limits, rapid feedrates, the home / G28 reference, the tool-change position, the controller parameters in both a grouped and a native form, the peck clearance, M-code declarations, block-skip layers, subprogram folders and, on Siemens, the indexing position tables</td>
</tr>
<tr>
<td><strong>Program Data</strong></td>
<td><code>equipment/controller/program-data</code></td>
<td>The tables a program reads and writes: work coordinates (G54…) and tool offsets on every brand, plus the brand's own — Siemens frames, <code>$TC_DP</code> offsets and R parameters, Heidenhain datum presets and shifts, Fanuc-family retained common variables</td>
</tr>
</tbody>
</table>
<p>The machine plane's per-axis rows are driven by the machine tool's chain: every brand preset already
declares X, Y and Z, and attaching a machine tool adds that chain's own axes beside them. Program
data stays with the project, so loading a controller file of the brand already in force leaves those
tables as they are.</p>
<p><strong>Work Coordinates</strong> always lists the plain <code>G54</code>–<code>G59</code> rows its brand's table holds — Siemens seeds
only G54–G57 — and, on Fanuc, Mazak and Syntec, the extended <code>G59.1</code>–<code>G59.9</code> rows of the
brand-neutral table that sits behind the brand table; it shows the <code>G54.1P</code> and <code>G505</code>–<code>G599</code> rows
once a value is non-zero or the <strong>Show all</strong> toggle is on. Each row carries <strong>P0</strong>, which writes the machine coordinate the
workpiece's program-zero anchor sits at, and <strong>M0</strong>, which writes machine zero; clicking anywhere in
a row also marks that coordinate on the canvas. Both write into the table; neither moves the part.
The other direction — moving the part so that program zero lands on the offset a row already
holds — is not offered on the runner path: this branch is the runner's own settings face and has
no such control, and the Legacy-Controller screen that used to carry one (Align P0) was removed on
2026-09-11. Placing the part on a recorded offset is done by hand —
<a href="program-zero-alignment.html">Program Zero Alignment</a>.</p>
<h2 id="a-table-that-is-not-there">A table that is not there</h2>
<p>A node the active brand has no concept of is never created rather than shown and disabled — Frames
on Fanuc, Retained Common Variables on Siemens, Block Skip / Delete on Heidenhain — and a <code>?tree=</code>
link naming one does nothing on the wrong brand, so name the brand alongside any id shared. Nor is an
id promised to survive a version change — see <a href="../basics/finding-your-way.html">Finding Your Way</a>.</p>
<p>Two further rows may differ from a colleague's tree for an unrelated reason: <strong>CSV Controller</strong> and
<strong>CL Controller</strong> are separate non-brand controllers, absent until their box in the <strong>Preference</strong>
dropdown is switched on, and which box is on is a per-device setting — see
<a href="../basics/preferences.html">Preferences</a>. Unlike a brand-gated node, though, these two are still
reachable by link: a <code>?tree=equipment/controller-csv</code> or <code>?tree=equipment/controller-cl</code> mints the
node and selects it whatever the box says, so a shared bookmark never dead-ends.</p>
<p><strong>The Preference menu answers whether you need either of them.</strong> Under each of the two checkboxes it
reads <em>This project plays CSV</em> / <em>This project plays CL</em>, or <em>Not used by this project</em>, worked out
from what the open project actually plays — the kinds its mission commands name, the play verbs its
scripts call, and, for CL, a machine chain that can only be driven from CL. Neither node is a setup task in its own right:
both are childless leaves with no Object Management, because a CSV or CL pipeline is not loaded,
pasted or saved as a file the way a brand controller is. Switching a box on reveals the pipeline's
settings; leaving it off on a project that plays neither costs nothing.</p>
<h2 id="see-also">See Also</h2>
<ul>
<li><a href="../../technique/nc-dialects/index.html">NC Dialects</a> — what each brand's G and M vocabulary actually does, once the brand is picked</li>
<li><a href="machine-tool.html">Machine Tool</a> — the chain whose axes fill the per-axis rows on the machine plane</li>
<li><a href="program-zero-alignment.html">Program Zero Alignment</a> — the other half of a work offset: where program zero sits on the workpiece</li>
<li><a href="index.html">Setup</a> — the rest of the pre-simulation configuration</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>