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/technique/nc-dialects/controller-iso.html
T
2026-09-12 18:16:27 +08:00

567 lines
26 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>General NC Code Support | HiAPI-C# 2025 </title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="title" content="General NC Code Support | 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="Technique-GeneralNcCodeSupport">
<h1 id="general-nc-code-support">General NC Code Support</h1>
<p>The vocabulary HiNC interprets is decided by the controller brand selected for the project. This page
covers the ISO-family presets — <strong>Fanuc</strong>, <strong>Syntec</strong> and <strong>Mazak</strong> — and <strong>Siemens SINUMERIK</strong>.
Heidenhain is a different language and has its own page: <a href="controller-heidenhain.html">Heidenhain Support</a>.</p>
<h2 id="how-to-read-this-page">How to read this page</h2>
<p>Coverage is stated in three states.</p>
<table>
<thead>
<tr>
<th>State</th>
<th>What happens when the construct appears in your program</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Supported</strong></td>
<td>interpreted, and its effect is simulated.</td>
</tr>
<tr>
<td><strong>Recognized, not simulated</strong></td>
<td>consumed on purpose and reported under its own message id. The block keeps running and the construct's effect does not apply — but it can never be silently misread as something else.</td>
</tr>
<tr>
<td><strong>Not supported</strong></td>
<td>the words are left over, and the block reports <code>Parsing--Unconsumed</code> naming them.</td>
</tr>
</tbody>
</table>
<div class="TIP">
<h5>Tip</h5>
<p>The message list a run produces is the coverage report for <strong>your</strong> program. Every word the
interpreter could not use is named on the block that carried it, so you never have to infer
coverage from the simulated result. An unknown code does not stop the run — it is reported and
skipped.</p>
</div>
<h2 id="iso-core">ISO core</h2>
<p>Fanuc, Syntec and Mazak share the vocabulary below. Siemens spells most of it the same way and adds
its own for the rest — see <a href="#siemens-sinumerik">Siemens SINUMERIK</a>.</p>
<h3 id="motion">Motion</h3>
<table>
<thead>
<tr>
<th>Code</th>
<th>Meaning</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>G00</code></td>
<td>Rapid positioning.</td>
</tr>
<tr>
<td><code>G01</code></td>
<td>Linear interpolation at the programmed feedrate.</td>
</tr>
<tr>
<td><code>G02</code> / <code>G03</code></td>
<td>Circular interpolation, clockwise / counter-clockwise. The centre may be given as <code>I</code> / <code>J</code> / <code>K</code> offsets or as a radius <code>R</code>.</td>
</tr>
<tr>
<td><code>G04</code></td>
<td>Dwell. <code>X</code> / <code>U</code> are seconds, <code>P</code> is milliseconds, <code>S</code> is spindle revolutions. Both the <code>G4</code> and <code>G04</code> spellings are read.</td>
</tr>
<tr>
<td><code>G28</code></td>
<td>Reference-point (home) return through an intermediate point.</td>
</tr>
<tr>
<td><code>G53</code></td>
<td>One-shot machine-coordinate move — work offsets are bypassed for that block only.</td>
</tr>
</tbody>
</table>
<h3 id="plane-units-and-positioning-mode">Plane, units and positioning mode</h3>
<table>
<thead>
<tr>
<th>Code</th>
<th>Meaning</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>G17</code> / <code>G18</code> / <code>G19</code></td>
<td>Plane selection — XY / ZX / YZ. Arcs and canned cycles follow the active plane.</td>
</tr>
<tr>
<td><code>G21</code></td>
<td>Metric. This is the HiNC default.</td>
</tr>
<tr>
<td><code>G71</code></td>
<td>Metric — the RS-274-D / Fanuc G-code system C / Syntec spelling of <code>G21</code>, accepted the same way on the Fanuc and Syntec presets. Mazak EIA stays <code>G20</code> / <code>G21</code> only.</td>
</tr>
<tr>
<td><code>G20</code></td>
<td>Inch — <strong>not supported</strong>. The block reports <code>Unit--InchNotSupported</code>; post the program in metric.</td>
</tr>
<tr>
<td><code>G70</code></td>
<td>Inch — the RS-274-D / Fanuc G-code system C / Syntec spelling of <code>G20</code>, read on the Fanuc and Syntec presets. <strong>Not supported</strong>; the block reports <code>Unit--InchNotSupported</code>; post the program in metric.</td>
</tr>
<tr>
<td><code>G90</code> / <code>G91</code></td>
<td>Absolute / incremental positioning.</td>
</tr>
<tr>
<td><code>G94</code> / <code>G95</code></td>
<td>Feed per minute / feed per revolution.</td>
</tr>
</tbody>
</table>
<h3 id="work-coordinates">Work coordinates</h3>
<table>
<thead>
<tr>
<th>Code</th>
<th>Meaning</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>G54</code>–<code>G59</code></td>
<td>Standard work coordinate systems.</td>
</tr>
<tr>
<td><code>G59.1</code>–<code>G59.9</code></td>
<td>Extended work coordinate systems, backed by the brand-neutral table the Fanuc, Mazak and Syntec presets carry behind their brand table. Like <code>G54</code>–<code>G59</code>, a row left at zero is read as an authoring convention and stays silent.</td>
</tr>
<tr>
<td><code>G54.1 P1</code>–<code>P48</code></td>
<td>Fanuc additional work coordinate systems, backed by the extended work offset table. Also read in the manual's second spelling <code>G54 P1</code>–<code>P48</code>, with or without the space; a <code>G54</code> with no P word is the plain G54 above. A selected row nobody has entered reports <code>Coord-WorkOffset--AdditionalZero</code>.</td>
</tr>
<tr>
<td><code>G52</code></td>
<td>Local coordinate offset, applied on top of the active work coordinate system.</td>
</tr>
</tbody>
</table>
<h3 id="tool-compensation">Tool compensation</h3>
<table>
<thead>
<tr>
<th>Code</th>
<th>Meaning</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>G43</code> / <code>G44</code> / <code>G49</code></td>
<td>Tool length compensation, positive / negative / cancel. <code>H</code> selects the offset row.</td>
</tr>
<tr>
<td><code>G41</code> / <code>G42</code> / <code>G40</code></td>
<td>Cutter radius compensation, left / right / cancel. <code>D</code> selects the offset row.</td>
</tr>
</tbody>
</table>
<p>Radius compensation is resolved against the blocks that actually travel in the compensation plane. A
block whose own words command no movement in that plane — a bare <code>G41</code> / <code>G42</code>, a comment, an empty
line, a plunge along the plane normal (Z under G17) — takes no offset of its own and no part in a
corner:</p>
<ul>
<li><strong>Start-up waits for motion.</strong> A <code>G41</code> or <code>G42</code> block that does not move in the plane does not
start the offset; the first block that travels in the plane is the start-up block and takes the
perpendicular (type A) offset. The blocks between them carry the previous block's offset vector,
so nothing moves on their account.</li>
<li><strong>Corners are resolved between travelling blocks.</strong> Wordless blocks sitting between two moves are
passed over, and the corner is the intersection of the two real segments. Running axes are the
in-plane part of each displacement, so a ramping move keeps its full offset and a plunge along
the plane normal stays on the offset line.</li>
<li><strong>The plane cannot change inside a region.</strong> <code>G17</code> / <code>G18</code> / <code>G19</code> selects the
compensation plane, and it may only be selected while compensation is cancelled. A plane
code that resolves to a different plane while <code>G41</code> / <code>G42</code> is active — including one
sharing its block with the <code>G40</code> that cancels the region — is reported as
<code>RadiusComp--PlaneChangeInRegion</code>, because the corner spanning the change would be built
from one running axis per plane. A control alarms there (Fanuc PS0037 CAN NOT CHANGE
PLANE IN CRC). Re-selecting the plane already in force is not a change and is accepted.</li>
<li><strong>A bare <code>G40</code> closes the region.</strong> The last compensated block ends on its own perpendicular
offset rather than turning toward the first uncompensated move after the cancel. A <code>G40</code> that
carries motion is the last corner's partner instead, and the compensated path meets the cancel
line at their intersection (Fanuc type B); the legacy interpreter
(<a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_EnableSoftNcRunner">EnableSoftNcRunner</a> set <code>false</code>) ends that case
perpendicular.</li>
<li><strong>The D row must match the program's strategy.</strong> A zero-based program (the CAM path is the
tool-centre path, <code>G41 D..</code> kept for wear only) needs a D row whose geometry radius is 0; a
cutter-radius program (the NC is the part contour) needs the tool radius there. An offset larger
than an inner arc or groove of the contour makes the compensated path run against the programmed
direction — a control stops with an interference alarm (Fanuc PS0041), HiNC reports
<code>RadiusComp--Interference</code> and keeps playing the swapped-side path. The radius basis of the
tool-house refresh is chosen on <a class="xref" href="../../anatomy/general-setup/controller/program-data/tool-offsets.html">Tool Offsets</a>.</li>
</ul>
<h3 id="rotation-tilted-planes-and-five-axis">Rotation, tilted planes and five-axis</h3>
<table>
<thead>
<tr>
<th>Code</th>
<th>Meaning</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>G68</code></td>
<td>Coordinate rotation in the active plane, around a centre point by angle <code>R</code>.</td>
</tr>
<tr>
<td><code>G68.2</code></td>
<td>Tilted work plane — Euler angles <code>I</code> / <code>J</code> / <code>K</code> with origin <code>X</code> / <code>Y</code> / <code>Z</code>.</td>
</tr>
<tr>
<td><code>G69</code></td>
<td>Cancels <code>G68</code> and <code>G68.2</code>.</td>
</tr>
<tr>
<td><code>G53.1</code></td>
<td>Tool-axis direction — swings the rotary axes into line with the active <code>G68.2</code> plane.</td>
</tr>
<tr>
<td><code>G43.4</code></td>
<td>RTCP / tool centre point management. The Siemens equivalent is <code>TRAORI</code>, the Heidenhain equivalent <code>M128</code>.</td>
</tr>
</tbody>
</table>
<h3 id="canned-cycles">Canned cycles</h3>
<table>
<thead>
<tr>
<th>Code</th>
<th>Cycle</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>G73</code></td>
<td>High-speed peck drilling — <code>Q</code> increments with a partial retract.</td>
</tr>
<tr>
<td><code>G74</code></td>
<td>Left-hand tapping.</td>
</tr>
<tr>
<td><code>G76</code></td>
<td>Fine boring — oriented spindle stop, <code>Q</code> shift, rapid out.</td>
</tr>
<tr>
<td><code>G81</code></td>
<td>Drilling.</td>
</tr>
<tr>
<td><code>G82</code></td>
<td>Drilling with a dwell at the bottom.</td>
</tr>
<tr>
<td><code>G83</code></td>
<td>Peck drilling — <code>Q</code> increments with a full retract to the <code>R</code> point.</td>
</tr>
<tr>
<td><code>G84</code></td>
<td>Right-hand tapping.</td>
</tr>
<tr>
<td><code>G85</code></td>
<td>Boring, feed out.</td>
</tr>
<tr>
<td><code>G86</code></td>
<td>Boring, spindle stop then rapid out.</td>
</tr>
<tr>
<td><code>G87</code></td>
<td>Back boring.</td>
</tr>
<tr>
<td><code>G89</code></td>
<td>Boring with a dwell at the bottom.</td>
</tr>
<tr>
<td><code>G80</code></td>
<td>Cancel.</td>
</tr>
<tr>
<td><code>G98</code> / <code>G99</code></td>
<td>Retract to the initial level / to the <code>R</code> level.</td>
</tr>
</tbody>
</table>
<p>A cycle is expanded into the individual strokes it performs — approach, peck, dwell, retract — each
with its own feedrate, so material removal and cycle time come out of the real motion rather than an
approximation. Modal repetition and <code>G91</code> incremental cycle data are resolved before the strokes are
built.</p>
<h3 id="polar-interpolation">Polar interpolation</h3>
<p><code>G12.1</code> turns polar coordinate interpolation on and <code>G13.1</code> turns it off. Inside a polar section the
<code>X</code> word is a <strong>diameter</strong> and the <code>C</code> word is a hypothetical Cartesian axis in millimetres, not
rotary degrees. HiNC halves <code>X</code>, resolves <code>G90</code> / <code>G91</code>, writes both the polar and the derived
Cartesian positions along with the machine C angle, and simulates polar linear and polar arc motion —
the arc as real spiral geometry that stays continuous across ±180°. <code>G41</code> / <code>G42</code> compensation is
resolved on the hypothetical plane, and <code>YA</code> / <code>ZB</code> axis pairs work the same way. G codes that
conflict with polar mode are checked before the mode is entered.</p>
<h3 id="path-smoothing">Path smoothing</h3>
<p><code>G05.1 Q1</code> enables high-precision contour control (AICC / Nano Smoothing) and <code>Q0</code> disables it. The
optional <code>R</code> precision level is preserved.</p>
<p><strong>Bare <code>G05</code> (or <code>G5</code>) is a different feature under a confusingly similar name</strong>, and the two are
tracked separately so they cannot cancel one another. It selects a function through its <code>P</code> word, on
the Fanuc, Syntec and Mazak presets:</p>
<table>
<thead>
<tr>
<th><code>P</code></th>
<th>Reading</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>P10000</code></td>
<td>HPCC — RISC-based high-precision contour control. Recognized, deliberately not simulated: it changes the machine's look-ahead, acceleration and servo behaviour, never the programmed coordinates. Reports <code>Hpcc--NoOp</code>.</td>
</tr>
<tr>
<td><code>P0</code></td>
<td>Cancels HPCC. Consumed silently — cancelling a no-op needs no message.</td>
</tr>
<tr>
<td><code>P10001</code>–<code>P10999</code></td>
<td>High-speed cycle machining. The real machine executes cycle data pre-registered in its variable area, which is <strong>actual axis motion HiNC cannot see</strong>, so the simulated result misses that machining. Reports <code>Hpcc--HighSpeedCycleIgnored</code> as a warning.</td>
</tr>
<tr>
<td>anything else</td>
<td>Not supported offline and ignored, reported as <code>Hpcc--UnsupportedFunction</code>. Small <code>P</code> values select the high-speed remote buffer modes.</td>
</tr>
<tr>
<td>no <code>P</code> at all</td>
<td>Not supported offline and ignored, reported as <code>Hpcc--MissingFunctionWord</code>.</td>
</tr>
</tbody>
</table>
<p>An unevaluated macro variable or expression in <code>P</code> is tolerated — it reports
<code>Hpcc--UnevaluatedFunction</code> rather than failing the block.</p>
<h3 id="m-codes">M codes</h3>
<table>
<thead>
<tr>
<th>Code</th>
<th>Meaning</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>M00</code> / <code>M01</code></td>
<td>Program stop / optional stop.</td>
</tr>
<tr>
<td><code>M02</code> / <code>M30</code></td>
<td>Program end.</td>
</tr>
<tr>
<td><code>M03</code> / <code>M04</code> / <code>M05</code></td>
<td>Spindle clockwise / counter-clockwise / stop.</td>
</tr>
<tr>
<td><code>M06</code></td>
<td>Tool change. The axis travel the change requires is synthesized rather than teleported.</td>
</tr>
<tr>
<td><code>M07</code> / <code>M08</code> / <code>M09</code></td>
<td>Mist coolant on / flood coolant on / coolant off.</td>
</tr>
<tr>
<td><code>M98</code> / <code>M99</code></td>
<td>Subprogram call (<code>M98 P{program} L{repeat}</code>) and return, including <code>M99 P{sequence}</code> early return.</td>
</tr>
<tr>
<td><code>M198</code></td>
<td>Subprogram call from external storage — same shape as <code>M98</code>, different lookup folder.</td>
</tr>
</tbody>
</table>
<div class="NOTE">
<h5>Note</h5>
<p><strong>Composite and OEM M-codes are not built in — they are declared on the machine.</strong> An <code>M13</code> that
means &ldquo;spindle CW plus flood coolant&rdquo;, an M-code that triggers a tool change, or turret <code>T</code>-word
semantics are stated once in the machine's own M-code table and expanded into the ISO effects the
rest of the pipeline already understands. A code declared with no modelled effect is voiced once as
<code>DeclaredMCode--UnmodeledEffects</code> instead of raising an unknown-code warning on every occurrence.</p>
</div>
<div class="NOTE">
<h5>Note</h5>
<p>If a program states a spindle speed greater than zero but never issues a direction, HiNC assumes
clockwise and reports <code>SpindleDirection--AssumedCw</code>. Without that assumption the cutting-force
model would silently produce zero mechanics for the whole file.</p>
</div>
<h2 id="fanuc">Fanuc</h2>
<p>Everything in the ISO core, plus:</p>
<p><strong>Custom Macro B.</strong> <code>#</code> variable assignment and arithmetic, with each range routed to the store it
belongs to — <code>#1</code>–<code>#33</code> local to the macro frame, <code>#100</code>–<code>#499</code> volatile and cleared on <code>M02</code> /
<code>M30</code>, <code>#500</code>–<code>#999</code> retained and saved with the project, <code>#3000</code>–<code>#3999</code> system control. Boolean and
logical operators, <code>IF [..] GOTO n</code>, <code>IF [..] THEN &lt;statement&gt;</code>, and <code>WHILE [..] DO m</code> / <code>END m</code> with
a bounded-loop watchdog. Position and tool-offset system variables read back into expressions.</p>
<p><strong>Macro and subprogram calls.</strong> <code>G65</code> one-shot macro call, binding arguments <code>A</code>–<code>Z</code> onto <code>#1</code>–<code>#26</code>;
<code>G66</code> / <code>G67</code> modal macro, firing at every positioning block until cancelled; <code>M98</code> / <code>M198</code> / <code>M99</code>.
A callee's blocks are spliced into the program at the call site, so the rest of the run treats them
exactly as if they had been written in the main file.</p>
<p><strong>Not supported.</strong> <code>G10</code> programmable data setting, <code>G50</code> spindle speed clamp, <code>G31</code> skip.</p>
<h2 id="syntec">Syntec</h2>
<p>Syntec runs the ISO core plus the Fanuc-family macro and subprogram vocabulary and polar
interpolation.</p>
<p><strong>Not supported.</strong> Custom <code>G</code> macros defined on the controller, <code>Pr</code> parameter mapping, and
twin-head / twin-turret program syntax.</p>
<h2 id="mazak">Mazak</h2>
<p>Mazak reads EIA/ISO with the Fanuc-family macro and subprogram vocabulary and polar interpolation.</p>
<p><strong>Not supported.</strong> MAZATROL conversational sections, and switching between MAZATROL and EIA/ISO
inside one program. Export the EIA/ISO program from the controller.</p>
<h2 id="siemens-sinumerik">Siemens SINUMERIK</h2>
<p>Real <code>.mpf</code> / <code>.spf</code> programs replay end to end — this is not an ISO subset with a Siemens label on
it.</p>
<p><strong>Modal vocabulary.</strong> <code>SUPA</code> / <code>G153</code> suppress all frames for one block; <code>G70</code> / <code>G71</code> units; the
path-smoothing family (<code>G60x</code> / <code>G64x</code>, <code>FNORM</code> / <code>SOFT</code> / <code>FFWON</code> / <code>COMP*</code> / <code>UPATH</code>, <code>CYCLE832</code>);
<code>MSG()</code> and <code>STOPRE</code>; <code>CR=</code> and <code>TURN=</code> arcs. Tail comments are quote-aware, so a <code>;</code> inside
<code>MSG(&quot;A;B&quot;)</code> does not truncate the block. <code>G74</code> / <code>G75</code> fixed-point return is claimed as a whole
block, so the dummy axis values it carries never mint a rapid to those coordinates and its <code>F</code> never
reaches the modal feedrate.</p>
<p><strong>Tools.</strong> <code>T=&quot;NAME&quot;</code> string tool calls with <code>D</code> cutting-edge offsets, resolved through the <code>$TC_DP</code>
tool table — lengths and radius plus additive wear.</p>
<p><strong>Variables and expressions.</strong> R parameters <code>R0</code>–<code>R999</code> are held as per-project data, <code>DEF REAL</code> /
<code>DEF INT</code> declarations lower into assignments, and a full expression evaluator means <code>Z=R63+150</code> and
<code>X=SIN(R10)*20</code> drive real motion. <code>$P_UIFR[n,axis,TR]</code> binds both ways to the frame table. Any other
<code>$</code> variable is recorded with an unsupported note rather than silently dropped.</p>
<p><strong>Frames and five-axis.</strong> <code>TRANS</code> / <code>ATRANS</code> / <code>ROT</code> / <code>AROT</code> (with <code>RPL=</code>) compose into the tilt
chain in Sinumerik RPY order; <code>TRAORI</code> is a real RTCP mode, the sibling of ISO <code>G43.4</code>, with
<code>TRAFOOF</code> handing the offset back; <code>CYCLE800</code> is decoded from its MODE bits across all four swivel
modes.</p>
<p><strong>Calls and control flow.</strong> <code>L</code>-prefixed and named subprogram calls, inlined with their <code>P</code> repetition
count; <code>M17</code> / <code>RET</code>; <code>REPEAT</code> over a labelled slice; <code>MCALL CYCLE81</code> / <code>82</code> / <code>83</code> / <code>85</code> mapped onto
the shared canned-cycle machinery; <code>PROC</code> headers and labels. <code>GOTOF</code> / <code>GOTOB</code>, <code>IF</code> / <code>ELSE</code> /
<code>ENDIF</code>, and <code>WHILE</code> / <code>FOR</code> / <code>REPEAT-UNTIL</code> / <code>LOOP</code>. Jumps and loop iterations are capped rather
than hanging the session — over the cap the construct warns and falls through.</p>
<p><strong>Per-word coordinate functions.</strong> <code>AC()</code> / <code>IC()</code> / <code>DC()</code> / <code>ACP()</code> / <code>ACN()</code>, including on <code>I</code> /
<code>J</code> / <code>K</code> circle centres, so <code>G90 C=IC(360/17)</code> is one incremental index inside an absolute program.
<code>ACP()</code> takes the forward window, <code>ACN()</code> the backward one, and <code>DC()</code> the shortest swing.</p>
<p><strong>Coded positions.</strong> <code>CAC</code> / <code>CIC</code> / <code>CDC</code> / <code>CACP</code> / <code>CACN</code> take a 1-based indexing position number
instead of a coordinate, resolved against the machine's own indexing-position tables.</p>
<p><strong>OEM auxiliary M-codes.</strong> The preset declares <code>M12</code> / <code>M13</code> / <code>M22</code> / <code>M23</code> and <code>M330</code> / <code>M331</code> as
note-only, so each occurrence voices <code>DeclaredMCode--UnmodeledEffects</code> rather than an unknown-code
warning. A machine's own table overrides the declaration once the real effects are known.</p>
<p><strong>Recognized, not simulated.</strong> <code>ROTS</code> / <code>AROTS</code>, <code>SCALE</code> / <code>ASCALE</code>, and <code>MIRROR</code> / <code>AMIRROR</code> — each
reported as <code>SiemensFrame--Unsupported</code>.</p>
<p><strong>Not supported.</strong> <code>SETAL</code>.</p>
<h2 id="see-also">See Also</h2>
<ul>
<li><a href="controller-heidenhain.html">Heidenhain Support</a> — klartext and Heidenhain DIN/ISO.</li>
<li><a class="xref" href="nc-parsing.html">NC Parsing Engine</a> — the pipeline behind these codes, the
brand-by-brand support matrix in one table, and how a machine's own vocabulary is added without
changing HiNC.</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>