deploy webservice static-file routing for docsite folder URLs, per-instance step-cache db, and constant-height panel title bars.
This commit is contained in:
@@ -153,6 +153,7 @@ N… G01 Y10.005 (last layer)
|
||||
</div>
|
||||
<h2 id="see-also">See Also</h2>
|
||||
<ul>
|
||||
<li><a href="probabilistic-peak-crack.html">Probabilistic Peak & Cutter Crack</a> — The general statement of the probabilistic peak effect this section describes</li>
|
||||
<li><a href="corner-behavior.html">Corner Feedrate Behavior</a> — Force-peak interaction with controller deceleration at corners</li>
|
||||
<li><a href="smart-holder-training.html">Smart Holder Training</a> — Smart tool holder measurement that confirms sub-micron sensitivity</li>
|
||||
<li><a href="relief-face-avoidance.html">Relief Face Avoidance</a> — Related geometry sensitivity on the relief side</li>
|
||||
|
||||
@@ -95,15 +95,26 @@
|
||||
<p>Cutting force computation begins after CWE is obtained. Since it is independent of computation order, it runs in multi-threaded mode under normal conditions. Torque and other physical quantities are also computed in parallel during this stage.</p>
|
||||
<p>Temperature computation must follow time-series order, so it converges back to a single thread.</p>
|
||||
<p>The entire machining simulation alternates between these modes. Once a step is fully computed, it is colored according to the designated indicator.</p>
|
||||
<h2 id="two-independent-cost-drivers">Two Independent Cost Drivers</h2>
|
||||
<p>Total simulation time comes from two largely independent parts:</p>
|
||||
<ul>
|
||||
<li><strong>Per-step physics</strong> (force, torque, power, temperature, wear) — computed once per <strong>step</strong>. The total physics cost scales with the <strong>number of steps</strong>, which is set by the <a href="../../workflows/basic-simulation.html#33-machining-motion-resolution">machining motion resolution</a> together with the spindle revolutions along the toolpath. It does <strong>not</strong> depend on the mesh resolution, and it does <strong>not</strong> depend on the overall workpiece size.</li>
|
||||
<li><strong>Geometry removal</strong> (voxel subtraction) — its cost is set by the mesh resolution (<a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_MachiningResolution_mm">MachiningResolution_mm</a>). A finer mesh (smaller value) is more expensive; a coarser mesh (larger value) is cheaper. Removal work is localized to the tool–workpiece contact region, so it is roughly area-scaled and, again, largely independent of the bulk workpiece size.</li>
|
||||
</ul>
|
||||
<p><code>MachiningResolution_mm</code> genuinely controls the removal resolution — it is <strong>not</strong> clamped away or ignored. But because removal and physics run concurrently, the <strong>larger</strong> of the two costs governs wall-clock time:</p>
|
||||
<ul>
|
||||
<li>When geometry removal dominates — <strong>the common case at the fine resolutions real NC machining needs</strong> — a finer mesh is much slower, and a coarser mesh reduces total time.</li>
|
||||
<li>When the mesh is coarse enough that geometry removal is already cheap, several <strong>fixed per-step costs</strong> (physics, thermal/wear, per-step bookkeeping) dominate instead. Coarsening further — e.g. raising <code>MachiningResolution_mm</code> from 1.0 to 2.0 mm — then barely changes total time; to speed up, <strong>reduce the number of steps</strong> with a coarser motion resolution. (Note: 1–2 mm is already very coarse for NC machining.)</li>
|
||||
</ul>
|
||||
<h2 id="cpu-usage">CPU Usage</h2>
|
||||
<h3 id="high-geometry-resolution">High Geometry Resolution</h3>
|
||||
<p>When geometry resolution is high, geometry removal is faster than physics computation, so a large area of light pink follows behind the tool during simulation. There is a cap on the number of unfinished steps; geometry removal only proceeds when the count is within that limit. When physics computation cannot keep up with geometry removal, the number of pink steps stays constant.</p>
|
||||
<p>In this scenario, the workload is primarily multi-core (physics computation), and you are more likely to see high multi-core CPU utilization.</p>
|
||||
<p><img src="cpu-usage-img/geom-quick.png" alt="High geometry resolution"></p>
|
||||
<h3 id="low-geometry-resolution">Low Geometry Resolution</h3>
|
||||
<p>When geometry resolution is low, geometry removal is slower than physics computation, so the light pink area is barely visible.</p>
|
||||
<p>In this scenario, the workload is primarily single-core (geometry computation).</p>
|
||||
<p><img src="cpu-usage-img/geom-slow.png" alt="Low geometry resolution"></p>
|
||||
<h3 id="coarse-mesh--physics-bound">Coarse Mesh — Physics-Bound</h3>
|
||||
<p>When the mesh is coarse (a large <code>MachiningResolution_mm</code>), geometry removal is faster than physics computation, so a large area of light pink follows behind the tool during simulation. There is a cap on the number of unfinished steps; geometry removal only proceeds when the count is within that limit. When physics computation cannot keep up with geometry removal, the number of pink steps stays constant.</p>
|
||||
<p>In this scenario, the workload is primarily multi-core (physics computation), and you are more likely to see high multi-core CPU utilization. Making the mesh even coarser will not reduce total time — the step count (physics) is the limit.</p>
|
||||
<p><img src="cpu-usage-img/geom-quick.png" alt="Coarse mesh: geometry removal outruns physics, leaving a large pink trail"></p>
|
||||
<h3 id="fine-mesh--geometry-bound">Fine Mesh — Geometry-Bound</h3>
|
||||
<p>When the mesh is fine (a small <code>MachiningResolution_mm</code>), geometry removal is slower than physics computation, so the light pink area is barely visible.</p>
|
||||
<p>In this scenario, the workload is primarily single-core (geometry computation), and a coarser mesh will reduce total time.</p>
|
||||
<p><img src="cpu-usage-img/geom-slow.png" alt="Fine mesh: physics keeps up with geometry removal, almost no pink trail"></p>
|
||||
<h3 id="balanced-state">Balanced State</h3>
|
||||
<p>If the geometry resolution is such that geometry and physics computation do not bottleneck each other, the light pink area appears and fluctuates within a certain range. In this case, physics computation does not hold back geometry computation, and geometry computation is typically the performance bottleneck.</p>
|
||||
<h3 id="cpu-not-fully-utilized">CPU Not Fully Utilized</h3>
|
||||
|
||||
@@ -100,6 +100,7 @@
|
||||
<li><a href="relief-face-avoidance.html">Relief Face Avoidance</a> — Minimum relief angle and clearance</li>
|
||||
<li><a href="radial-angle-measurement.html">Radial Angle Measurement</a> — Measuring radial rake and relief angles</li>
|
||||
<li><a href="cam-floating-point-drift.html">CAM Floating-Point Drift</a> — A subtle CAM-NC issue that most workflows miss: sub-thousandth-mm drift between layers triggers floor-contact force peaks. HiNC detects and diagnoses it.</li>
|
||||
<li><a href="probabilistic-peak-crack.html">Probabilistic Peak & Cutter Crack</a> — Why the same cut passes most of the time and only occasionally cracks the cutter: a narrow high-contact window sampled by discrete flutes</li>
|
||||
</ul>
|
||||
<h2 id="simulation-performance">Simulation Performance</h2>
|
||||
<ul>
|
||||
|
||||
@@ -103,6 +103,12 @@ For the underlying boundary curves and how each ratio's denominator is computed
|
||||
<p><strong>Tool Breakage Solutions</strong></p>
|
||||
<p>Modify the toolpath to reduce cutting width/depth, or use HiNC's optimization feature to adjust feed rates, bringing the <strong>Yielding Stress Ratio</strong>, <strong>Max Spindle Torque Ratio</strong>, and <strong>Max Spindle Power Ratio</strong> below 100%.</p>
|
||||
</div>
|
||||
<h2 id="ripple-on-curved-and-tilted-cuts-mesh-quantization">Ripple on Curved and Tilted Cuts (Mesh Quantization)</h2>
|
||||
<p>On a nominally constant-engagement cut that is <strong>curved or tilted</strong> — arc or helical hole milling, ramping, or 5-axis moves — the <strong>Yielding Stress Ratio</strong> (and the underlying <a class="xref" href="../../api/Hi.MachiningSteps.MachiningStep.html#Hi_MachiningSteps_MachiningStep_MaxAbsForce_N">MaxAbsForce_N</a><small>(API)</small>) can show a small step-to-step ripple even though the theoretical engagement is steady. This is a discretization artifact, not a bug.</p>
|
||||
<p><strong>Cause.</strong> The workpiece is represented by an axis-aligned cubic voxel mesh (see <a href="../../workflows/basic-simulation.html#31-workpiece-entity-resolution">Workpiece Entity Resolution</a>). Orthogonal cubes cannot represent a circle or an inclined face smoothly, so the removed volume and the contact engagement area quantize against the grid from step to step. That quantization shows up as ripple in the per-step peak force, and therefore in the ratio.</p>
|
||||
<p><strong>What helps.</strong> A <strong>finer</strong> <code>MachiningResolution_mm</code> makes the quantization step smaller, so the ripple amplitude shrinks — at the cost of slower geometry removal (see <a href="cpu-usage.html">CPU Usage During Simulation</a>).</p>
|
||||
<p><strong>What does <em>not</em> help.</strong> Switching to <strong>fixed-pace / sweeping</strong> motion resolution (<code>FixedPace</code>) does not remove this ripple. The ripple comes from the spatial cubic grid, not from the spacing between steps, so changing the step spacing leaves it essentially unchanged.</p>
|
||||
<p><strong>Getting a smooth curve.</strong> There is no built-in filter that smooths step-series curves. If a smooth curve is needed for a report, post-process the exported CSV (<a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_WriteStepFiles_">WriteStepFiles</a><small>(API)</small>) yourself — e.g. a moving average. Note that the Yielding Stress Ratio is defined on the per-revolution <strong>peak</strong> force only (there is no averaged variant); the averaged force fields (<code>Avg…</code>) are inherently smoother when a trend, rather than the breakage peak, is what you need to read.</p>
|
||||
<h2 id="thermal-plastic-deformation-of-cutting-edge">Thermal Plastic Deformation of Cutting Edge</h2>
|
||||
<p>If the <strong>Thermal Yield Ratio</strong> <small>[<a class="xref" href="../../api/Hi.MachiningSteps.MachiningStep.html#Hi_MachiningSteps_MachiningStep_ThermalYieldRatio">ThermalYieldRatio</a> (API)]</small> exceeds 100%, thermal plastic deformation of the cutting edge occurs, accelerating wear.
|
||||
Unlike the Yielding Stress Ratio, Max Spindle Torque Ratio, and Max Spindle Power Ratio, this is a long-term indicator — exceeding 100% does not cause immediate effects.</p>
|
||||
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 79 KiB |
@@ -0,0 +1,144 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Probabilistic Peak: Why a Cut Passes Most of the Time and Occasionally Cracks the Cutter | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Probabilistic Peak: Why a Cut Passes Most of the Time and Occasionally Cracks the Cutter | 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<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="probabilistic-peak-why-a-cut-passes-most-of-the-time-and-occasionally-cracks-the-cutter">Probabilistic Peak: Why a Cut Passes Most of the Time and Occasionally Cracks the Cutter</h1>
|
||||
|
||||
<p><img src="probabilistic-peak-crack-img/dartboard-engagement.png" alt="Spindle-moment dartboard and the matching 3D engagement for one spindle revolution">
|
||||
<em>Left — spindle-moment dartboard. The <code>(Mx, My)</code> moment-vector tip is drawn as a closed
|
||||
locus over one spindle revolution, coloured by the axial moment <code>Mz</code>; the concentric rings
|
||||
are moment magnitude (Nm). For most of the revolution the locus stays near the centre —
|
||||
small flute–workpiece contact length, small moment. One narrow lobe stretches out to the
|
||||
outer rings: the angle where the contact length spikes and produces the large force that
|
||||
can crack the flute. Right — the 3D engagement at that high-load phase, showing the flute
|
||||
deeply engaged with the workpiece.</em></p>
|
||||
<h2 id="the-mechanism">The Mechanism</h2>
|
||||
<p>The flute–workpiece contact length is small for most spindle angles and spikes only inside
|
||||
one <strong>narrow angular window</strong>. The large force — and the crack risk — exists only inside
|
||||
that window.</p>
|
||||
<p>The cutter's flutes are <strong>discrete</strong>. Whether a cutting flute actually lands inside the
|
||||
narrow high-contact window is a matter of flute phase, not a certainty:</p>
|
||||
<ul>
|
||||
<li><strong>High probability</strong> — the flutes fall in the wide low-contact region and step over the
|
||||
window. The pass completes safely.</li>
|
||||
<li><strong>Low probability</strong> — a flute lands inside the narrow window, takes the full contact
|
||||
length, and sees the large force. The flute can crack.</li>
|
||||
</ul>
|
||||
<p>This is why a cut with a clear high-contact window still passes most of the time and only
|
||||
occasionally breaks the cutter, and why nominally identical geometry can pass on one pass
|
||||
and crack on another. It is the same effect documented under
|
||||
<a href="cam-floating-point-drift.html#probabilistic-peak-dodging">Probabilistic Peak Dodging</a>.</p>
|
||||
<h2 id="see-also">See Also</h2>
|
||||
<ul>
|
||||
<li><a href="cam-floating-point-drift.html">CAM Floating-Point Drift</a> — a concrete case of the same
|
||||
probabilistic peak effect, triggered by sub-micron floor contact.</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>
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 150 KiB |
@@ -90,6 +90,8 @@
|
||||
<p><a class="xref" href="../../api/Hi.Milling.SpindleCapability.html">SpindleCapability</a> <small>(API)</small> describes the energy, torque, power, and thermal envelope of a machine spindle. It is loaded as XML (<code>.SpindleCapability</code> files under <code>Resource/SpindleCapability/</code>) and lives on <a class="xref" href="../../api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipment.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipment_SpindleCapability">SpindleCapability</a> <small>(API)</small> as part of the project equipment. This page explains what the model represents physically and how the per-step ratios on a machining step are derived.</p>
|
||||
<p>For editing values interactively, see <a href="../../app-anatomy/mech/spindle-capability-page.html">Spindle Capability Page</a>. For empirical validation of the resulting power numbers against Fanuc ServoGuide, see <a href="spindle-power-evaluation.html">Spindle Power Evaluation</a>.</p>
|
||||
<h2 id="boundary-curves-continuous-vs-instantaneous">Boundary curves: continuous vs instantaneous</h2>
|
||||
<p><img src="spindle-capability-img/fanuc-at12-12000i.jpg" alt="Power and torque vs spindle speed for a FANUC aT12/12000i spindle"></p>
|
||||
<p><em>A typical spindle datasheet chart (FANUC aT12/12000i, shipped as <code>FANUC-aT12-12000i.SpindleCapability</code>): torque (N-m) and power (kW) plotted against spindle speed. The <strong>S1 Cont.</strong> curves are the continuous boundary; the <strong>S3 60%</strong> curves are a short-duration rating. HiNC stores exactly these curves, keyed by workable duration.</em></p>
|
||||
<p>The capability stores <strong>two dictionaries keyed by workable duration (in minutes)</strong>, mapping spindle speed to the maximum power or torque the spindle can deliver for that duration:</p>
|
||||
<ul>
|
||||
<li><a class="xref" href="../../api/Hi.Milling.SpindleCapability.html#Hi_Milling_SpindleCapability_WorkableDurationToSpindleSpeedPowerContoursDictionary_min_cycleDs_kW">WorkableDurationToSpindleSpeedPowerContoursDictionary_min_cycleDs_kW</a> <small>(API)</small></li>
|
||||
|
||||
@@ -36,6 +36,9 @@
|
||||
<li>
|
||||
<a href="cam-floating-point-drift.html" name="" title="CAM Floating-Point Drift">CAM Floating-Point Drift</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="probabilistic-peak-crack.html" name="" title="Probabilistic Peak & Cutter Crack">Probabilistic Peak & Cutter Crack</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="cpu-usage.html" name="" title="CPU Usage in Simulation">CPU Usage in Simulation</a>
|
||||
</li>
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
|
||||
{"items":[{"name":"Overview","href":"index.html","topicHref":"index.html"},{"name":"Milling Physics Coordinates","href":"milling-physics-coordinates.html","topicHref":"milling-physics-coordinates.html"},{"name":"Process Machinability","href":"machinability.html","topicHref":"machinability.html"},{"name":"Tool Life & Wear","href":"wear.html","topicHref":"wear.html"},{"name":"Cutter Adjustment Levers","href":"cutter-adjustment-levers.html","topicHref":"cutter-adjustment-levers.html"},{"name":"Relief Face Avoidance","href":"relief-face-avoidance.html","topicHref":"relief-face-avoidance.html"},{"name":"Radial Angle Measurement","href":"radial-angle-measurement.html","topicHref":"radial-angle-measurement.html"},{"name":"CAM Floating-Point Drift","href":"cam-floating-point-drift.html","topicHref":"cam-floating-point-drift.html"},{"name":"CPU Usage in Simulation","href":"cpu-usage.html","topicHref":"cpu-usage.html"},{"name":"Corner Feedrate Behavior","href":"corner-behavior.html","topicHref":"corner-behavior.html"},{"name":"Smart Holder Training","href":"smart-holder-training.html","topicHref":"smart-holder-training.html"},{"name":"Spindle Capability","href":"spindle-capability.html","topicHref":"spindle-capability.html"},{"name":"Spindle Power Evaluation","href":"spindle-power-evaluation.html","topicHref":"spindle-power-evaluation.html"},{"name":"NC Optimization Principles","href":"nc-optimization-principles.html","topicHref":"nc-optimization-principles.html"}]}
|
||||
{"items":[{"name":"Overview","href":"index.html","topicHref":"index.html"},{"name":"Milling Physics Coordinates","href":"milling-physics-coordinates.html","topicHref":"milling-physics-coordinates.html"},{"name":"Process Machinability","href":"machinability.html","topicHref":"machinability.html"},{"name":"Tool Life & Wear","href":"wear.html","topicHref":"wear.html"},{"name":"Cutter Adjustment Levers","href":"cutter-adjustment-levers.html","topicHref":"cutter-adjustment-levers.html"},{"name":"Relief Face Avoidance","href":"relief-face-avoidance.html","topicHref":"relief-face-avoidance.html"},{"name":"Radial Angle Measurement","href":"radial-angle-measurement.html","topicHref":"radial-angle-measurement.html"},{"name":"CAM Floating-Point Drift","href":"cam-floating-point-drift.html","topicHref":"cam-floating-point-drift.html"},{"name":"Probabilistic Peak & Cutter Crack","href":"probabilistic-peak-crack.html","topicHref":"probabilistic-peak-crack.html"},{"name":"CPU Usage in Simulation","href":"cpu-usage.html","topicHref":"cpu-usage.html"},{"name":"Corner Feedrate Behavior","href":"corner-behavior.html","topicHref":"corner-behavior.html"},{"name":"Smart Holder Training","href":"smart-holder-training.html","topicHref":"smart-holder-training.html"},{"name":"Spindle Capability","href":"spindle-capability.html","topicHref":"spindle-capability.html"},{"name":"Spindle Power Evaluation","href":"spindle-power-evaluation.html","topicHref":"spindle-power-evaluation.html"},{"name":"NC Optimization Principles","href":"nc-optimization-principles.html","topicHref":"nc-optimization-principles.html"}]}
|
||||
|
||||
@@ -0,0 +1,227 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Cutter-Location (CL) Playback | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Cutter-Location (CL) Playback | 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<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="CutterLocation-Playback">
|
||||
<h1 id="cutter-location-cl-playback">Cutter-Location (CL) Playback</h1>
|
||||
|
||||
<p><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_PlayClFile_">PlayClFile</a> replays a <strong>CAM cutter-location file</strong> — an NX CLSF (<code>.cls</code>) / APT-source toolpath — directly as tool motion, without a post-processor. Use it to verify the <em>programmed</em> toolpath itself (gouge, overcut, engagement) <strong>before</strong> it is post-processed for any particular machine.</p>
|
||||
<p>The same file can also be played onto a real machine-tool chain, and a played CL program can be written back out as Fanuc NC — see <a href="#two-chains-two-questions">Two chains, two questions</a> and <a href="#converting-cl-to-nc">Converting CL to NC</a>.</p>
|
||||
<h2 id="cl-vs-nc--two-different-inputs">CL vs. NC — two different inputs</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_PlayNcFile_">PlayNcFile</a> (NC / G-code)</th>
|
||||
<th><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_PlayClFile_">PlayClFile</a> (CL / CLSF)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Source</td>
|
||||
<td>Post-processed G-code for <strong>one specific machine</strong></td>
|
||||
<td>CAM cutter-location output, <strong>before</strong> post-processing, machine-independent</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Content</td>
|
||||
<td>Axis moves (<code>G01 X.. Y.. Z..</code>), work offsets, canned cycles</td>
|
||||
<td>Cutter locations (<code>GOTO</code>), arcs (<code>CIRCLE</code>), tool axis vectors</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Drives</td>
|
||||
<td>A <strong>machine-tool chain</strong> (X/Y/Z/A/B/C axes) through kinematics</td>
|
||||
<td>Either chain — see below</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Answers</td>
|
||||
<td>“What does <em>this machine</em> do with this program?”</td>
|
||||
<td>“Is the <em>programmed path</em> correct?” — or, on a machine chain, both questions at once</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>A cutter location is a <strong>point plus a tool-axis direction</strong> in workpiece coordinates. <code>PlayClFile</code> places the tool at each location in turn and sweeps the removed material between them.</p>
|
||||
<h2 id="two-chains-two-questions">Two chains, two questions</h2>
|
||||
<p>The chain configured in project setup decides what a CL play means.</p>
|
||||
<p><strong>On a <a class="xref" href="../../api/HiMachining.Milling.ClMillingDevice.html">ClMillingDevice</a></strong> the cutter location is applied straight to the tool: no inverse kinematics, no work-coordinate offsets, no controller dialect. This is the machine-independent check — it answers whether the CAM output itself is correct, and it is the right chain when you do not yet know which machine will run the job.</p>
|
||||
<p><strong>On a machine-tool chain</strong> every CLSF motion endpoint is inverse-solved at parse time and expressed in the same program-to-machine transform vocabulary the NC pipeline uses — a tool-height entry from the active tool, a pivot entry anchored to the workpiece frame, and the solved rotary axes — so the shared machine-coordinate and rotary-wrap handling is reused unchanged. This answers what a <em>particular</em> machine would do with the path, including reach and rotary behaviour, without a post-processor in between.</p>
|
||||
<div class="NOTE">
|
||||
<h5>Note</h5>
|
||||
<p>A machine-chain play needs the project's kinematics to resolve to a live solver. Where an endpoint cannot be solved, the motion is reported rather than silently dropped — watch for <code>ClToMc--EndpointIkFailed</code> and <code>ClToMc--NoToolOffset</code> in the diagnostics.</p>
|
||||
</div>
|
||||
<h2 id="converting-cl-to-nc">Converting CL to NC</h2>
|
||||
<p><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_ConvertClToNcFiles_">ConvertClToNcFiles</a> writes a played CL program back out as Fanuc NC, one file per source file, template-substituting <code>[NcName]</code> (default <code>Output/[NcName].nc</code>). It requires a prior play <strong>on a machine chain</strong> — a <code>ClMillingDevice</code> leaves no machine-solved data to serialize — and reports <code>ConvertClToNc--NoPlay</code> otherwise. A mission can declare the writeback through <a class="xref" href="../../api/Hi.SessionCommands.PostExecutionCommand.html#Hi_SessionCommands_PostExecutionCommand_EnableConvertClToNcFiles">EnableConvertClToNcFiles</a> and <a class="xref" href="../../api/Hi.SessionCommands.PostExecutionCommand.html#Hi_SessionCommands_PostExecutionCommand_ClToNcFileTemplate">ClToNcFileTemplate</a>.</p>
|
||||
<h2 id="file-format">File format</h2>
|
||||
<p>The reader parses <strong>NX CLSF</strong> records (the APT-source language):</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Record</th>
|
||||
<th>Effect</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>GOTO</code></td>
|
||||
<td>Cutter location — first one positions the tool (rapid teleport); subsequent ones cut a straight CL path</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>CIRCLE</code> / <code>MOVARC</code></td>
|
||||
<td>Arms an arc; the following <code>GOTO</code> closes it into a true circular CL path</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>RAPID</code></td>
|
||||
<td>Marks the next move as a non-cutting rapid</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>FEDRAT</code></td>
|
||||
<td>Feed rate (<code>MMPM</code> / <code>IPM</code>)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>SPINDL</code></td>
|
||||
<td>Spindle speed and direction</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>COOLNT</code></td>
|
||||
<td>Coolant mode (<code>ON</code> / <code>FLOOD</code> / <code>MIST</code> / <code>OFF</code>)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>TLDATA</code></td>
|
||||
<td>Tool geometry (diameter, corner radius, length, angles)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>LOAD/TOOL</code></td>
|
||||
<td>Tool change to a tool id</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>Comments (<code>$$</code> to end of line) and line continuation (trailing <code>$</code>) are honored. Records outside this set (<code>PAINT</code>, <code>TOOLNO</code>, <code>TOOL PATH</code>, …) are skipped.</p>
|
||||
<div class="NOTE">
|
||||
<h5>Note</h5>
|
||||
<p>“APT” here means the APT <strong>toolpath language</strong> (<code>GOTO</code>, <code>CIRCLE</code>, …). This is a different use of the word from the <a class="xref" href="../setup/apt.html">APT Tool</a> page, which defines cutter <strong>geometry</strong>. A CL file's <code>TLDATA</code> feeds that same tool-geometry model — see below.</p>
|
||||
</div>
|
||||
<p>The dialect parsed is Siemens NX (<code>.cls</code>). Other CAM systems emit the same APT record family under different names (CATIA APTSOURCE, Creo CL files); those dialects are not yet parsed.</p>
|
||||
<h2 id="tools-from-the-file">Tools from the file</h2>
|
||||
<p>A CL file usually carries its own tool definitions. On <code>LOAD/TOOL,<id></code>, if the tool house has no matching id, the preceding <code>TLDATA</code> geometry is used to create the tool automatically. An id <strong>already present</strong> in the tool house keeps its configured tool — so you can pre-configure tools for accuracy, or let simple files be self-contained.</p>
|
||||
<h2 id="example">Example</h2>
|
||||
<pre><code class="lang-csharp">// The machining chain must be a ClMillingDevice (set in project setup).
|
||||
MachiningResolution_mm = 0.125;
|
||||
EnablePhysics = false; // geometry-only check first
|
||||
PlayClFile("CL/part-op10.cls"); // replay the CAM cutter-location file
|
||||
Diff("target/part-op10.stl"); // compare the cut against the design target
|
||||
</code></pre>
|
||||
<p>The project keeps a dedicated CL runner suit (<a class="xref" href="../../api/Hi.MachiningProcs.MachiningProject.html#Hi_MachiningProcs_MachiningProject_ClsfRunnerSuit">ClsfRunnerSuit</a>) alongside its NC and CSV suits; the parser itself is the <a class="xref" href="../../api/Hi.Numerical.ClsfParsers.NxClRunner.html">NxClRunner</a> preset.</p>
|
||||
<h2 id="see-also">See Also</h2>
|
||||
<ul>
|
||||
<li><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_PlayClFile_">PlayClFile</a> — the script command</li>
|
||||
<li><a class="xref" href="../../api/HiMachining.Milling.ClMillingDevice.html">ClMillingDevice</a> — the cutter-location-driven chain</li>
|
||||
<li><a class="xref" href="../setup/apt.html">APT Tool</a> — cutter geometry (the other meaning of “APT”)</li>
|
||||
<li><a class="xref" href="script-command.html">Glossary: Script Commands</a> — what is a script command</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>
|
||||
@@ -93,7 +93,7 @@
|
||||
<li><a href="script-command.html">Script Command</a> — C# scripting syntax, execution model, warnings</li>
|
||||
<li><a href="step.html">Step</a> — The simulation computation unit: concept, accessing, custom variables, output APIs</li>
|
||||
<li><a href="step-fields.html">Step Field Reference</a> — CSV field reference for step-level output</li>
|
||||
<li><a href="session-progress.html">SessionProgress</a> — Message and progress reporting system</li>
|
||||
<li><a href="shell-progress.html">ShellProgress</a> — Message and progress reporting system</li>
|
||||
</ul>
|
||||
<h2 id="api-reference">API Reference</h2>
|
||||
<ul>
|
||||
|
||||
@@ -115,6 +115,11 @@
|
||||
<td><a class="xref" href="../../workflows/basic-simulation.html">Workflow: Basic Machining Simulation</a>, <a class="xref" href="../../workflows/sensor-mapping.html">Workflow: Sensor Data Mapping</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_PlayClFile_">PlayClFile</a></td>
|
||||
<td>Replay a cutter-location (CL / APT) toolpath file</td>
|
||||
<td><a class="xref" href="../../workflows/basic-simulation.html">Workflow: Basic Machining Simulation</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_RunNcFile_">RunNcFile</a></td>
|
||||
<td>Parse NC file and return action sequence (no auto-pacing)</td>
|
||||
<td>—</td>
|
||||
@@ -336,7 +341,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_MillingCycleDivisionNum">MillingCycleDivisionNum</a></td>
|
||||
<td>Number of angular divisions per revolution</td>
|
||||
<td>Angular divisions per revolution — default 36 suits normal simulation; raise (e.g. 180) for training only. Process-wide: not saved per project, survives <code>ResetRuntime()</code></td>
|
||||
<td><a class="xref" href="../../workflows/force-training.html">Workflow: Milling Force Parameter Training</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -461,28 +466,28 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_WriteRuntimeGeom_">WriteRuntimeGeom</a></td>
|
||||
<td>Save runtime geometry to file</td>
|
||||
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_WriteMeshedGeom_">WriteMeshedGeom</a></td>
|
||||
<td>Save meshed geometry to file</td>
|
||||
<td><a class="xref" href="../../workflows/basic-simulation.html">Workflow: Basic Machining Simulation</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_ReadRuntimeGeom_">ReadRuntimeGeom</a></td>
|
||||
<td>Load runtime geometry from file</td>
|
||||
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_ReadMeshedGeom_">ReadMeshedGeom</a></td>
|
||||
<td>Load meshed geometry from file</td>
|
||||
<td><a class="xref" href="../../workflows/basic-simulation.html">Workflow: Basic Machining Simulation</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_WriteRuntimeGeomToStl_">WriteRuntimeGeomToStl</a></td>
|
||||
<td>Export runtime geometry to STL</td>
|
||||
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_ExportMeshedGeomToStl_">ExportMeshedGeomToStl</a></td>
|
||||
<td>Export meshed geometry to STL</td>
|
||||
<td><a class="xref" href="../../workflows/basic-simulation.html">Workflow: Basic Machining Simulation</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_WriteRuntimeGeomToObj_">WriteRuntimeGeomToObj</a></td>
|
||||
<td>Export runtime geometry to Wavefront OBJ (per-vertex RGB)</td>
|
||||
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_ExportMeshedGeomToObj_">ExportMeshedGeomToObj</a></td>
|
||||
<td>Export meshed geometry to Wavefront OBJ (per-vertex RGB)</td>
|
||||
<td><a class="xref" href="../../workflows/basic-simulation.html">Workflow: Basic Machining Simulation</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_WriteRuntimeGeomToPly_">WriteRuntimeGeomToPly</a></td>
|
||||
<td>Export runtime geometry to binary PLY (per-vertex RGB)</td>
|
||||
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_ExportMeshedGeomToPly_">ExportMeshedGeomToPly</a></td>
|
||||
<td>Export meshed geometry to binary PLY (per-vertex RGB)</td>
|
||||
<td><a class="xref" href="../../workflows/basic-simulation.html">Workflow: Basic Machining Simulation</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
@@ -496,7 +501,7 @@
|
||||
<td><a class="xref" href="../../workflows/geometry-validation.html">Workflow: Geometry Validation</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_ScanRuntimeGeomInfDefect_">ScanRuntimeGeomInfDefect</a></td>
|
||||
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_ScanMeshedGeomInfDefect_">ScanMeshedGeomInfDefect</a></td>
|
||||
<td>Scan for infinite edge cut defects</td>
|
||||
<td><a class="xref" href="../../workflows/geometry-validation.html">Workflow: Geometry Validation</a></td>
|
||||
</tr>
|
||||
@@ -507,6 +512,10 @@
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<div class="NOTE">
|
||||
<h5>Note</h5>
|
||||
<p>These geometry commands were named <code>WriteRuntimeGeom</code> / <code>ReadRuntimeGeom</code> / <code>ExportRuntimeGeomToStl|Obj|Ply</code> / <code>ScanRuntimeGeomInfDefect</code> before the meshed-geom rename. The old names still run in existing player scripts as hidden legacy aliases; new scripts should use the <code>MeshedGeom</code> names.</p>
|
||||
</div>
|
||||
<hr>
|
||||
<h2 id="events">Events</h2>
|
||||
<table>
|
||||
@@ -567,9 +576,9 @@
|
||||
<td>All workflows</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_SessionProgress">SessionProgress</a></td>
|
||||
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_ShellProgress">ShellProgress</a></td>
|
||||
<td>Session message host object</td>
|
||||
<td><a class="xref" href="session-progress.html">Glossary: Session Progress (Messages)</a></td>
|
||||
<td><a class="xref" href="shell-progress.html">Glossary: Shell Progress (Messages)</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
@@ -664,12 +673,12 @@
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_GetUniformContourTrayShiftAngle_deg_">GetUniformContourTrayShiftAngle_deg</a></td>
|
||||
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_GetUniformFlutingShiftAngle_deg_">GetUniformFlutingShiftAngle_deg</a></td>
|
||||
<td>Get tool contour shift angle (deg)</td>
|
||||
<td>—</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_SetUniformContourTrayShiftAngle_deg_">SetUniformContourTrayShiftAngle_deg</a></td>
|
||||
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_SetUniformFlutingShiftAngle_deg_">SetUniformFlutingShiftAngle_deg</a></td>
|
||||
<td>Set tool contour shift angle (deg)</td>
|
||||
<td>—</td>
|
||||
</tr>
|
||||
@@ -695,7 +704,7 @@
|
||||
<li><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html">SessionShell</a> — full API documentation</li>
|
||||
<li><a class="xref" href="script-command.html">Glossary: Script Commands</a> — what is a script command</li>
|
||||
<li><a class="xref" href="step.html">Step</a> — step data model</li>
|
||||
<li><a class="xref" href="session-progress.html">Glossary: Session Progress (Messages)</a> — message system</li>
|
||||
<li><a class="xref" href="shell-progress.html">Glossary: Shell Progress (Messages)</a> — message system</li>
|
||||
</ul>
|
||||
|
||||
</article>
|
||||
|
||||
+9
-9
@@ -2,9 +2,9 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Glossary: Session Progress (Messages) | HiAPI-C# 2025 </title>
|
||||
<title>Glossary: Shell Progress (Messages) | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Glossary: Session Progress (Messages) | HiAPI-C# 2025 ">
|
||||
<meta name="title" content="Glossary: Shell Progress (Messages) | HiAPI-C# 2025 ">
|
||||
|
||||
|
||||
<link rel="icon" href="../../img/HiAPI.favicon.ico">
|
||||
@@ -84,14 +84,14 @@
|
||||
<nav id="breadcrumb"></nav>
|
||||
</div>
|
||||
|
||||
<article data-uid="Glossary-SessionProgress">
|
||||
<h1 id="glossary-session-progress-messages">Glossary: Session Progress (Messages)</h1>
|
||||
<article data-uid="Glossary-ShellProgress">
|
||||
<h1 id="glossary-shell-progress-messages">Glossary: Shell Progress (Messages)</h1>
|
||||
|
||||
<h2 id="what-is-sessionprogress">What Is SessionProgress?</h2>
|
||||
<p><strong>SessionProgress</strong> (<a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_SessionProgress">SessionProgress</a>) is the message host object that manages all messages generated during a HiNC scripting session. It serves as the central hub for logging, filtering, and exporting diagnostic information.</p>
|
||||
<h2 id="what-is-shellprogress">What Is ShellProgress?</h2>
|
||||
<p><strong>ShellProgress</strong> (<a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_ShellProgress">ShellProgress</a>) is the message host object that manages all messages generated during a HiNC scripting session. It serves as the central hub for logging, filtering, and exporting diagnostic information.</p>
|
||||
<div class="NOTE">
|
||||
<h5>Note</h5>
|
||||
<p>The older name <code>SessionMessageHost</code> is marked <code>[Obsolete]</code>. Use <code>SessionProgress</code> instead.</p>
|
||||
<p>This host was previously named <code>SessionProgress</code> (and earlier <code>SessionMessageHost</code>); those names are superseded by <code>ShellProgress</code>.</p>
|
||||
</div>
|
||||
<hr>
|
||||
<h2 id="message-types">Message Types</h2>
|
||||
@@ -145,7 +145,7 @@ ErrorMessage("Workpiece does not exist");
|
||||
<h2 id="displaying-messages">Displaying Messages</h2>
|
||||
<p>All messages are automatically recorded in the session message host and appear in the HiNC UI <strong>message panel</strong>. Progress messages additionally update the <strong>progress bar</strong>.</p>
|
||||
<h3 id="accessing-the-message-host">Accessing the Message Host</h3>
|
||||
<pre><code class="lang-csharp">var messageHost = SessionProgress;
|
||||
<pre><code class="lang-csharp">var messageHost = ShellProgress;
|
||||
</code></pre>
|
||||
<hr>
|
||||
<h2 id="exporting-messages">Exporting Messages</h2>
|
||||
@@ -198,7 +198,7 @@ PlayNcFile("NC/file1.nc");
|
||||
<h2 id="message-lifecycle">Message Lifecycle</h2>
|
||||
<ol>
|
||||
<li>Messages are generated during script execution via the four message commands</li>
|
||||
<li>All messages are stored in the <code>SessionProgress</code> host object</li>
|
||||
<li>All messages are stored in the <code>ShellProgress</code> host object</li>
|
||||
<li>Messages persist until the session ends or the runtime is reset</li>
|
||||
<li><code>ResetRuntime()</code> clears event handlers but does <strong>not</strong> clear previously recorded messages</li>
|
||||
<li>Messages can be exported at any point using <code>AppendMessagesToFile</code></li>
|
||||
@@ -101,7 +101,7 @@
|
||||
</ul>
|
||||
<h2 id="time-and-motion">Time and Motion</h2>
|
||||
<ul>
|
||||
<li>AccumulatedTime: Accumulated simulation time.</li>
|
||||
<li>EndTimecode: Simulated end-of-step timecode (formerly <code>AccumulatedTime</code>; step CSVs written with the legacy header are still read).</li>
|
||||
<li>StepDuration: Duration of this step (default per-revolution mode: one step equals one spindle revolution).</li>
|
||||
<li>BeginSpindleAngle_deg: Spindle angular displacement at the start of this step.</li>
|
||||
<li>Cl (Cutter Location): Cutter location point (including IJK normal).</li>
|
||||
@@ -115,7 +115,11 @@
|
||||
<li>IsTouched: Whether cutting engagement occurred.</li>
|
||||
<li>CuttingWidth_mm (ae) / CuttingDepth_mm (ap): Cutting width / cutting depth.</li>
|
||||
<li>Mrr_mm3ds: Material removal rate.</li>
|
||||
<li>ProgramSideCusp_um, SideCuspList_um: Side cusp height and distribution estimated from program feed and radius.</li>
|
||||
<li>ProgramSideCusp_um, SideCuspList_um: Side cusp height and distribution estimated from program feed and radius.
|
||||
<blockquote>
|
||||
<p><strong>Reading tip — a <code>ProgramSideCusp_um</code> spike usually flags a rapid-move (G00) collision, not a finish result.</strong> The program-side cusp is computed from the <em>ideal program feedrate</em> while the cutter is engaged with the workpiece. A rapid traverse is not meant to touch material; when it does, the cusp formula is fed the (very high) rapid feedrate, so the value spikes far above any real cutting cusp. Treat an isolated cusp peak at a rapid/G00 line as a likely gouge/collision to investigate. The same engagement-during-rapid usually shows up alongside it as spikes in the availability ratios (yielding-stress / spindle-torque / spindle-power).</p>
|
||||
</blockquote>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="chip">Chip</h2>
|
||||
<ul>
|
||||
@@ -138,7 +142,11 @@
|
||||
<li>MaxSpindlePowerRatio (maximum spindle power ratio): Input power / instantaneous maximum power based on spindle capability.</li>
|
||||
<li>ContinueSpindlePowerRatio (continuous spindle power ratio): Input power / unlimited-duration maximum power based on spindle capability.</li>
|
||||
<li>AccumulatedSpindleEnergyConsumption_kWh: Accumulated spindle energy consumption.</li>
|
||||
<li>Max/Continue Spindle Torque Ratio: Instantaneous/continuous spindle torque ratios.</li>
|
||||
<li>Max/Continue Spindle Torque Ratio: Instantaneous/continuous spindle torque ratios.
|
||||
<blockquote>
|
||||
<p><strong>Reading tip — a power / torque ratio over 100% means the spindle cannot supply the demanded load at the commanded rpm</strong>, so it droops: with feed held, rpm drops, feed-per-tooth rises, and forces climb further — a runaway loop that, left unchecked, grows the chip until the cutter breaks and the spindle/drive is overstressed and damaged — load damage, not a tool-vs-workpiece collision (see <a href="../analysis/nc-optimization-principles.html">NC optimization</a>). Read it by <em>duration</em>, not just height: a one-revolution (single-cycle) overshoot usually still completes the pass — it just leaves a slightly insufficient cut there — whereas a ratio that stays above 100% across many consecutive spindle revolutions is a genuine overload to fix. A high-load step typically also shows large cutter–workpiece engagement (CWE), large tip deflection, and more vibration/noise. Because the ratio is normalized by the spindle-capability curve, a placeholder/guessed spindle skews it — confirm against the real spindle's speed–power/torque curve before calling it overloaded.</p>
|
||||
</blockquote>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 id="thermal-and-temperature">Thermal and Temperature</h2>
|
||||
<ul>
|
||||
|
||||
@@ -21,6 +21,9 @@
|
||||
<li>
|
||||
<a href="session-shell.html" name="" title="SessionShell Reference">SessionShell Reference</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="cutter-location-playback.html" name="" title="Cutter-Location (CL) Playback">Cutter-Location (CL) Playback</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="step.html" name="" title="Step — Concept & Output">Step — Concept & Output</a>
|
||||
</li>
|
||||
@@ -28,7 +31,7 @@
|
||||
<a href="step-fields.html" name="" title="Step Field Reference">Step Field Reference</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="session-progress.html" name="" title="SessionProgress">SessionProgress</a>
|
||||
<a href="shell-progress.html" name="" title="ShellProgress">ShellProgress</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
|
||||
{"items":[{"name":"Overview","href":"index.html","topicHref":"index.html"},{"name":"Script Command","href":"script-command.html","topicHref":"script-command.html"},{"name":"SessionShell Reference","href":"session-shell.html","topicHref":"session-shell.html"},{"name":"Step — Concept & Output","href":"step.html","topicHref":"step.html"},{"name":"Step Field Reference","href":"step-fields.html","topicHref":"step-fields.html"},{"name":"SessionProgress","href":"session-progress.html","topicHref":"session-progress.html"}]}
|
||||
{"items":[{"name":"Overview","href":"index.html","topicHref":"index.html"},{"name":"Script Command","href":"script-command.html","topicHref":"script-command.html"},{"name":"SessionShell Reference","href":"session-shell.html","topicHref":"session-shell.html"},{"name":"Cutter-Location (CL) Playback","href":"cutter-location-playback.html","topicHref":"cutter-location-playback.html"},{"name":"Step — Concept & Output","href":"step.html","topicHref":"step.html"},{"name":"Step Field Reference","href":"step-fields.html","topicHref":"step-fields.html"},{"name":"ShellProgress","href":"shell-progress.html","topicHref":"shell-progress.html"}]}
|
||||
|
||||
@@ -87,133 +87,244 @@
|
||||
<article data-uid="Controllers/HeidenhainSupport">
|
||||
<h1 id="heidenhain-controller-support">Heidenhain Controller Support</h1>
|
||||
|
||||
<p>This chapter explains HiNC support for NC codes of Heidenhain TNC640 and TNC530 controllers.</p>
|
||||
<p>Heidenhain controllers support general ISO syntax. The general ISO syntax supported by HiNC is documented in other files.</p>
|
||||
<p>If not mentioned in the documentation, it generally means it's not supported. R radius compensation command is not supported.</p>
|
||||
<h2 id="format-support">Format Support</h2>
|
||||
<p>Except for L code and FQ code, there must be spaces between letter instructions, otherwise, they cannot be parsed.</p>
|
||||
<p>Heidenhain programs run on a single controller preset that reads <strong>both</strong> dialects — TNC klartext
|
||||
(TNC 640 / TNC 530 conversational) and Heidenhain <strong>DIN/ISO</strong>. There is no separate selection to
|
||||
make: pick Heidenhain as the project's controller and the program is read in whichever dialect it is
|
||||
written in.</p>
|
||||
<p>Coverage is stated in the same three states as
|
||||
<a href="controller-iso.html#how-to-read-this-page">General NC Code Support</a> — supported, recognized but not
|
||||
simulated, and not supported. <em>Recognized but not simulated</em> is a deliberate state: the construct is
|
||||
consumed and reported under its own message id, so it can never be silently misread as something
|
||||
else. A <code>PLANE AXIAL B+45</code> will never be mistaken for a rotary-axis command.</p>
|
||||
<h2 id="program-format">Program format</h2>
|
||||
<h3 id="separators-are-optional">Separators are optional</h3>
|
||||
<p>Klartext is normally written with spaces between the letter instructions, and that is what the
|
||||
control shows. Some post-processors emit the same program with no separators at all. <strong>Both forms
|
||||
parse</strong>, and so does the detached feed spelling.</p>
|
||||
<blockquote>
|
||||
<p>Can be parsed:</p>
|
||||
<p>Equivalent, all parsed:</p>
|
||||
<ul>
|
||||
<li><code>FMAX M03</code></li>
|
||||
<li><code>LX-26.3 Y+43.1 Z+100.3 A-90.0 C+13.123 FQ3</code></li>
|
||||
<li><code>L X-26.3 Y+43.1 Z+100.3 A-90.0 C+13.123 FQ3</code> and <code>LX-26.3Y+43.1Z+100.3A-90.0C+13.123FQ3</code></li>
|
||||
<li><code>L X+0 Y+0 R0 FMAX</code> and <code>LX+0Y+0R0FMAX</code></li>
|
||||
<li><code>FMAX M03 M08</code> and <code>FMAXM03M08</code></li>
|
||||
<li><code>F20000</code> and <code>F 20000</code></li>
|
||||
</ul>
|
||||
</blockquote>
|
||||
<h3 id="multi-line-blocks">Multi-line blocks</h3>
|
||||
<p>A statement broken across lines with the tilde continuation — the usual shape of a <code>CYCL DEF</code> body or
|
||||
a long <code>PLANE</code> statement — is joined back into one block before parsing, so it is read as the single
|
||||
statement it is.</p>
|
||||
<h2 id="motion">Motion</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Construct</th>
|
||||
<th>Support</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>L</code></td>
|
||||
<td>Straight-line motion with its axis words.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>FMAX</code></td>
|
||||
<td>Rapid traverse.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>CC</code> / <code>C</code></td>
|
||||
<td>Circular motion — <code>CC</code> sets the pole, <code>C</code> states the end point. <code>DR-</code> is clockwise and <code>DR+</code> counter-clockwise, the centre may be left implicit, and an arc that closes on its start point is a full circle.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>RL</code> / <code>RR</code> / <code>R0</code></td>
|
||||
<td>Radius compensation left / right / off.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>M91</code></td>
|
||||
<td>One-shot machine-coordinate move for that block.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>M126</code> / <code>M127</code></td>
|
||||
<td>Shortest-path rotary traverse on / off. With neither stated, shortest path is the default.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>M140 MB+n</code> / <code>M140 MB MAX</code></td>
|
||||
<td>Tool-axis retract — by <code>n</code> mm, or to the positive Z stroke limit. Without a configured stroke limit, <code>MB MAX</code> reports <code>M140--NoStrokeLimit</code> and is skipped. The statement's own <code>F</code> drives the retract without entering the modal feedrate.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>STOP</code></td>
|
||||
<td>Program stop, alongside <code>M00</code> / <code>M01</code>.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>CYCL DEF 32 TOLERANCE</code></td>
|
||||
<td>Path-smoothing tolerance.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>BLK FORM</code></td>
|
||||
<td>Recorded as a stock declaration. It does <strong>not</strong> replace the workpiece configured in the project.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="tools">Tools</h2>
|
||||
<p><code>TOOL CALL</code> performs the tool change on its own — klartext has no separate <code>M06</code> trigger. A tool
|
||||
number or a quoted tool name is accepted.</p>
|
||||
<blockquote>
|
||||
<p>Cannot be parsed:
|
||||
<code>FMAXM03</code></p>
|
||||
</blockquote>
|
||||
<p>Support for <code>L</code> move command.</p>
|
||||
<blockquote>
|
||||
<p>Can be parsed:</p>
|
||||
<p>Parsed:</p>
|
||||
<ul>
|
||||
<li><code>LX+0Y+0FMAX</code></li>
|
||||
<li><code>L X+0 Y+0 FMAX</code></li>
|
||||
</ul>
|
||||
</blockquote>
|
||||
<h2 id="macro-support">Macro Support</h2>
|
||||
<h3 id="q-variable-assignment">Q Variable Assignment</h3>
|
||||
<p>Support for Q variable assignment.</p>
|
||||
<blockquote>
|
||||
<p>Can be parsed:</p>
|
||||
<ul>
|
||||
<li><code>Q1 = 5000</code></li>
|
||||
<li><code>Q2 = 123</code></li>
|
||||
<li><code>Q3 = 1000</code></li>
|
||||
<li><code>LX-26.3 Y+43.1 Z+100.3 A-90.0 C+13.123 FQ3</code></li>
|
||||
</ul>
|
||||
</blockquote>
|
||||
<h3 id="q-variable-operations">Q Variable Operations</h3>
|
||||
<p>Support for the following macro operations:</p>
|
||||
<ul>
|
||||
<li><code>FN0</code> specify a value.</li>
|
||||
<li><code>FN1</code> calculate and specify the sum of two values.</li>
|
||||
<li><code>FN2</code> calculate and specify the difference of two values.</li>
|
||||
<li><code>FN3</code> calculate and specify the product of two values.</li>
|
||||
</ul>
|
||||
<blockquote>
|
||||
<p>Can be parsed:</p>
|
||||
<ul>
|
||||
<li><code>FN0: Q1 = 5000</code></li>
|
||||
<li><code>FN1: Q1 = -Q2 + -5</code></li>
|
||||
<li><code>FN2: Q1 = +10 - +5</code></li>
|
||||
<li><code>FN3: Q2 = +3 * +3</code></li>
|
||||
</ul>
|
||||
</blockquote>
|
||||
<h2 id="tool-call">TOOL CALL</h2>
|
||||
<p>Support for <code>TOOL CALL</code>, but the tool name must be a number.</p>
|
||||
<blockquote>
|
||||
<p>Can be parsed:</p>
|
||||
<ul>
|
||||
<li><code>TOOL CALL "1" Z S5000</code></li>
|
||||
<li><code>TOOL CALL 1 Z S5000</code></li>
|
||||
<li><code>TOOL CALL "1" Z S5000</code></li>
|
||||
<li><code>TOOL CALL "B40R" Z S3000 DL+0.5</code></li>
|
||||
</ul>
|
||||
</blockquote>
|
||||
<ul>
|
||||
<li>The spindle speed <code>S</code> is recorded modally.</li>
|
||||
<li><code>DL</code> is a length delta — the effective tool height is the tool-table height <strong>plus</strong> <code>DL</code>.</li>
|
||||
<li><code>DR</code> is read and recorded but <strong>not applied</strong>: radius compensation uses the tool-table radius as-is,
|
||||
and the block reports <code>ToolChange--DeltaUnsupported</code>.</li>
|
||||
<li>A tool axis other than <code>Z</code> reports <code>ToolChange--AxisUnsupported</code>.</li>
|
||||
<li>A <code>TOOL CALL</code> whose tool number could not be captured — an unevaluated variable, for example —
|
||||
reports <code>ToolChange--MissingToolId</code>.</li>
|
||||
</ul>
|
||||
<h2 id="datums">Datums</h2>
|
||||
<p><code>CYCL DEF 247</code> sets the datum preset and <code>CYCL DEF 7</code> is an <strong>additive</strong> shift on top of it, which is
|
||||
the TNC semantic. The two compose as separate entries in the coordinate chain instead of replacing
|
||||
each other.</p>
|
||||
<blockquote>
|
||||
<p>Cannot be parsed:
|
||||
<code>TOOL CALL "ET1" S5000</code></p>
|
||||
</blockquote>
|
||||
<h2 id="cycl-def-7">CYCL DEF 7</h2>
|
||||
<p>Support for <code>CYCL DEF 7</code> workpiece origin offset command.</p>
|
||||
<blockquote>
|
||||
<p>Can be parsed:</p>
|
||||
<p>Parsed:</p>
|
||||
<pre><code>CYCL DEF 247 Q339=+1
|
||||
</code></pre>
|
||||
<pre><code>CYCL DEF 7.0 DATUM SHIFT
|
||||
CYCL DEF 7.1 X10.123
|
||||
CYCL DEF 7.2 Y22.223
|
||||
CYCL DEF 7.3 Z32.97
|
||||
</code></pre>
|
||||
</blockquote>
|
||||
<h2 id="cycl-def-247">CYCL DEF 247</h2>
|
||||
<p>Support for <code>CYCL DEF 247</code> workpiece origin setting. Supports <code>Q339</code> coordinate index.</p>
|
||||
<h2 id="q-parameters-and-fn">Q parameters and FN</h2>
|
||||
<p><code>Q</code>, <code>QR</code>, <code>QL</code> and <code>QS</code> parameters are read wherever a value is expected, so <code>FQ1</code> reaches the
|
||||
feedrate, <code>L X+Q2</code> reaches the program position and <code>TOOL CALL SQ3</code> reaches the spindle speed. <code>Q0</code>–<code>Q99</code>
|
||||
free parameters and <code>QR0</code>–<code>QR499</code> permanent parameters are held as per-project data and saved with
|
||||
the project.</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Construct</th>
|
||||
<th>Support</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>FN 0</code>–<code>FN 5</code></td>
|
||||
<td>Assignment and arithmetic, including the <code>DIV</code> keyword of FN 4 and the prefix <code>SQRT</code> of FN 5.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>FN 9</code>–<code>FN 12</code></td>
|
||||
<td>Conditional jumps — <strong>executed</strong>, with a per-label iteration cap so a corrupt or hostile program cannot spin forever.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Other <code>FN</code> opcodes (<code>FN 14</code>, <code>FN 16</code>, <code>FN 18 SYSREAD</code>, …)</td>
|
||||
<td>Recognized, not simulated. The statement is claimed and reported, so its target parameter stays empty instead of taking a fabricated value.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<blockquote>
|
||||
<p>Can be parsed: <code>CYCL DEF 247 Q339=+1</code></p>
|
||||
</blockquote>
|
||||
<h2 id="plane-series-instructions">PLANE Series Instructions</h2>
|
||||
<h3 id="motion-behavior-instructions">Motion Behavior Instructions</h3>
|
||||
<p>Support for one of three motion behavior instructions: { <code>STAY</code> , <code>TURN</code> , <code>MOVE</code> } .</p>
|
||||
<h3 id="seq">SEQ</h3>
|
||||
<p>Support for { <code>SEQ+</code> , <code>SEQ-</code> } active spindle rotation direction instructions.</p>
|
||||
<h3 id="table-rot">TABLE ROT</h3>
|
||||
<p>Support for <code>TABLE ROT</code> worktable rotation instructions.</p>
|
||||
<h3 id="plane-spatial">PLANE SPATIAL</h3>
|
||||
<blockquote>
|
||||
<p>Can be parsed: <code>PLANE SPATIAL SPA-60.3 SPB+0 SPC-19.88 STAY SEQ- TABLE ROT</code></p>
|
||||
</blockquote>
|
||||
<h3 id="plane-reset">PLANE RESET</h3>
|
||||
<blockquote>
|
||||
<p>Can be parsed: <code>PLANE RESET STAY</code></p>
|
||||
</blockquote>
|
||||
<h2 id="heidenhain-specific-m-codes">Heidenhain Specific M Codes</h2>
|
||||
<p>Support for the following Heidenhain specific M codes. General ISO M codes are documented elsewhere.</p>
|
||||
<h3 id="m91">M91</h3>
|
||||
<p>Support for <code>M91</code> single-line effective mechanical coordinate displacement.</p>
|
||||
<blockquote>
|
||||
<p>Can be parsed: <code>L Z-1 F5000 M91</code></p>
|
||||
</blockquote>
|
||||
<h3 id="m107">M107</h3>
|
||||
<p><strong>Skip</strong> <code>M107</code> display error message command.</p>
|
||||
<h3 id="m108">M108</h3>
|
||||
<p><strong>Skip</strong> <code>M108</code> reset <code>M107</code> command.</p>
|
||||
<h3 id="m126">M126</h3>
|
||||
<p>Support for <code>M126</code> move on the rotary axis with a shorter path.</p>
|
||||
<h3 id="m127">M127</h3>
|
||||
<p>Support for <code>M127</code> reset <code>M126</code> command.</p>
|
||||
<h4 id="controller-parameter-field-300401">Controller Parameter Field 300401</h4>
|
||||
<p>Support for controller parameter field <code>300401</code>, if this parameter is true, regardless of whether <code>M127</code> is issued, it will move on the rotary axis with a shorter path.</p>
|
||||
<p>Parameter field <code>300401</code> default value is true.</p>
|
||||
<h3 id="m128">M128</h3>
|
||||
<p>Support for <code>M128</code> enable Tool Center Point Management (TCPM).</p>
|
||||
<h3 id="m129">M129</h3>
|
||||
<p>Support for <code>M129</code> disable Tool Center Point Management (TCPM).</p>
|
||||
<h3 id="m140">M140</h3>
|
||||
<p>Support for <code>M140 MB</code> <code>M140 MB MAX</code> retract tool command.</p>
|
||||
<blockquote>
|
||||
<p>Can be parsed:</p>
|
||||
<p>Parsed:</p>
|
||||
<ul>
|
||||
<li><code>M140 MB MAX</code></li>
|
||||
<li><code>M140 MB+50 F6000</code></li>
|
||||
<li><code>Q1 = 5000</code></li>
|
||||
<li><code>FN0: Q1 = 5000</code></li>
|
||||
<li><code>FN1: Q1 = -Q2 + -5</code></li>
|
||||
<li><code>FN2: Q1 = +10 - +5</code></li>
|
||||
<li><code>FN3: Q2 = +3 * +3</code></li>
|
||||
</ul>
|
||||
</blockquote>
|
||||
<h2 id="tilted-planes-and-rtcp">Tilted planes and RTCP</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Construct</th>
|
||||
<th>Support</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>PLANE SPATIAL</code></td>
|
||||
<td>Fully composed, including <code>SEQ+</code> / <code>SEQ-</code>, <code>COORD ROT</code> / <code>TABLE ROT</code>, and the <code>STAY</code> / <code>MOVE</code> / <code>TURN</code> positioning behaviours.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>PLANE RESET</code></td>
|
||||
<td>Cancels the tilt.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>PLANE VECTOR</code></td>
|
||||
<td>Structurally captured, not simulated.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>PLANE EULER</code> / <code>POINTS</code> / <code>RELATIV</code> / <code>AXIAL</code> / <code>PROJECTED</code></td>
|
||||
<td>Recognized, not simulated — consumed and reported as <code>HeidenhainPlane--Unsupported</code>, with the previous tilt retained.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>FUNCTION TCPM</code></td>
|
||||
<td>Supported.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>M128</code> / <code>M129</code></td>
|
||||
<td>Tool centre point control on / off — real RTCP, the Heidenhain sibling of ISO <code>G43.4</code> and Siemens <code>TRAORI</code>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<blockquote>
|
||||
<p>Parsed:</p>
|
||||
<ul>
|
||||
<li><code>PLANE SPATIAL SPA-60.3 SPB+0 SPC-19.88 STAY SEQ- TABLE ROT</code></li>
|
||||
<li><code>PLANE RESET STAY</code></li>
|
||||
</ul>
|
||||
</blockquote>
|
||||
<h2 id="cycles-and-calls">Cycles and calls</h2>
|
||||
<ul>
|
||||
<li><strong><code>CYCL DEF 2xx</code></strong> bodies are read with their <code>Q</code> parameters mirrored into the block. Cycles <strong>200</strong>,
|
||||
<strong>232</strong>, <strong>251</strong>, <strong>252</strong> and <strong>253</strong> are mapped onto the shared drilling machinery and simulated;
|
||||
the mapping follows the cycle's own <code>Q</code> values, so a <code>Q202</code> peck increment routes to peck drilling
|
||||
and a <code>Q211</code> bottom dwell to dwell drilling.</li>
|
||||
<li>A <code>CYCL DEF</code> body that is not one of those is recognized, not simulated — reported as
|
||||
<code>HeidenhainCycl--Unsupported</code>.</li>
|
||||
<li><strong><code>CYCL CALL</code></strong> and <strong><code>CYCL CALL POS</code></strong> fire the cycle once; <code>M99</code> fires once and <code>M89</code> arms modal
|
||||
firing.</li>
|
||||
<li><strong><code>CALL LBL n</code></strong> inlines the label body up to <code>LBL 0</code>; <strong><code>CALL LBL n REP m</code></strong> repeats that section
|
||||
<code>m</code> times.</li>
|
||||
<li><strong><code>CALL PGM</code></strong> resolves the called program by file name.</li>
|
||||
<li><strong>Mirror image</strong> in both spellings — the klartext <code>CYCL DEF 8</code> form and the DIN/ISO <code>G28</code> form.</li>
|
||||
</ul>
|
||||
<h2 id="diniso-dialect">DIN/ISO dialect</h2>
|
||||
<p>The same preset, with nothing to switch.</p>
|
||||
<ul>
|
||||
<li><code>%</code> tape header and <code>N</code> block numbers.</li>
|
||||
<li><code>T</code> plus <code>M06</code> tool change.</li>
|
||||
<li><strong>Arc centres <code>I</code> / <code>J</code> / <code>K</code> are absolute pole coordinates</strong>, not incremental offsets from the
|
||||
start point. This is the Heidenhain reading, and the pole carries forward modally.</li>
|
||||
<li>The ISO label family — <code>G98 L<n></code> definitions, and the head-anchored <code>L<n>,<m></code> call whose comma
|
||||
count maps onto the repeat count.</li>
|
||||
<li><code>G247 Q339</code> stamps the same datum preset as <code>CYCL DEF 247</code>.</li>
|
||||
<li><code>G54</code> with axis words is read as a datum-shift declaration.</li>
|
||||
<li><code>G70</code> / <code>G71</code> units.</li>
|
||||
</ul>
|
||||
<div class="WARNING">
|
||||
<h5>Warning</h5>
|
||||
<p><strong><code>G28</code> on Heidenhain is MIRROR IMAGE, not a reference-point return.</strong> The Fanuc reading of <code>G28</code>
|
||||
is deliberately absent from the Heidenhain preset. Select the Heidenhain controller for a
|
||||
Heidenhain DIN/ISO file — read as Fanuc, every mirror statement becomes a home move.</p>
|
||||
</div>
|
||||
<h2 id="not-supported">Not supported</h2>
|
||||
<p><code>TOOL DEF</code>, <code>FK</code> free-contour programming, <code>SL</code> cycles, <code>PATTERN DEF</code>, and <code>TCH PROBE</code>. These are left
|
||||
unconsumed, and the block that carried them reports <code>Parsing--Unconsumed</code> naming the words.</p>
|
||||
<p>Machine-specific M-codes that are not part of the Heidenhain vocabulary above are declared on the
|
||||
machine rather than built in — see the M-code note on
|
||||
<a href="controller-iso.html#m-codes">General NC Code Support</a>.</p>
|
||||
<h2 id="see-also">See also</h2>
|
||||
<ul>
|
||||
<li><a href="controller-iso.html">General NC Code Support</a> — Fanuc, Syntec, Mazak and Siemens SINUMERIK.</li>
|
||||
<li><a href="../../fundamentals/nc-parsing/index.html">NC Parsing Engine</a> — the pipeline behind these constructs, the
|
||||
brand-by-brand support matrix in one table, and how a machine's own vocabulary is added without
|
||||
changing HiNC.</li>
|
||||
</ul>
|
||||
|
||||
</article>
|
||||
|
||||
|
||||
@@ -87,17 +87,380 @@
|
||||
<article data-uid="">
|
||||
<h1 id="general-nc-code-support">General NC Code Support</h1>
|
||||
|
||||
<p>This list only represents partial functionality that can be applied to these commands. It may not execute complete functionality.</p>
|
||||
<h2 id="iso-standard-nc-codes">ISO Standard NC Codes</h2>
|
||||
<p>G00, G01, G02, G03, G04, G17, G18, G19, G21, G28, G40,
|
||||
G43, G44, G49, G52, G53, G54~G59.9, G68, G69, G71,
|
||||
G80, G81, G82, G83, G85, G86,
|
||||
G90, G91, G94, G98, G99</p>
|
||||
<p>M03, M04, M05, M06, M08, M09, M13, M14, M30</p>
|
||||
<h2 id="fanuc--syntec-specific-nc-codes">Fanuc & Syntec Specific NC Codes</h2>
|
||||
<p>G43.4, G53.1, G68.2</p>
|
||||
<h2 id="siemens-specific-nc-codes">Siemens Specific NC Codes</h2>
|
||||
<p>G500, SUPA, TRAFOOF, TRAORI</p>
|
||||
<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>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>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.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>G54.1 P1</code>–<code>P48</code></td>
|
||||
<td>Fanuc extended work offset table.</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>
|
||||
<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>
|
||||
<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 “spindle CW plus flood coolant”, 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 <statement></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("A;B")</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="NAME"</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 href="../../fundamentals/nc-parsing/index.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>
|
||||
|
||||
|
||||
@@ -88,6 +88,32 @@
|
||||
<h1 id="coolant">Coolant</h1>
|
||||
|
||||
<p>Models the cutting-zone cooling for the milling temperature FEM. Lives on <a class="xref" href="../../api/Hi.Physics.CoolantHeatCondition.html">CoolantHeatCondition</a><small>(API)</small>; consumed by <a class="xref" href="../../api/Hi.Physics.MillingTemperatureUtil.html">MillingTemperatureUtil</a><small>(API)</small> every simulation step.</p>
|
||||
<h2 id="pick-a-cooling-type">Pick a cooling type</h2>
|
||||
<p>You do not need to know any heat-transfer numbers to set up cooling. In the Player control tree, open <strong>Equipment Setup → Coolant</strong>, click <strong>Select → Browse Resource…</strong>, and pick the ready-made <code>.CoolantHeatCondition</code> file for the cooling your machine uses — exactly the way a workpiece material file is picked:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Shipped file</th>
|
||||
<th>Pick it when</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>StandardForcedAir</strong></td>
|
||||
<td>The machine only blows air at the cutter — no liquid coolant.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>StandardWaterSolubleCoolant</strong></td>
|
||||
<td>Water-based emulsion coolant, the common flood coolant. (A fresh project already carries these values.)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>StandardOilBasedCoolant</strong></td>
|
||||
<td>Neat-oil cutting fluid: better lubrication, noticeably less heat removal than water-based.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>Loading a file fills the <strong>Name / Note</strong> and every property field shown below them. For a customized setup, tune the fields directly and keep the result as your own named file with <strong>Save As…</strong> — it can be loaded back later, or from another project.</p>
|
||||
<p>That is the whole end-user setup. Everything below explains what the values mean.</p>
|
||||
<h2 id="nc-program-drives-the-mode">NC program drives the mode</h2>
|
||||
<p>The parser reads M07/M08/M09 into <a class="xref" href="../../api/Hi.Numerical.CoolantMode.html">CoolantMode</a><small>(API)</small> and carries it on every <a class="xref" href="../../api/Hi.MachiningSteps.MachineMotionStep.html">MachineMotionStep</a><small>(API)</small>. The FEM picks the effective convection coefficient at run time from that mode.</p>
|
||||
<table>
|
||||
@@ -102,7 +128,7 @@
|
||||
<tr>
|
||||
<td><code>M08</code></td>
|
||||
<td><code>Flood</code></td>
|
||||
<td><code>CoolantConvectionCoefficient_Wdm2K</code> (baseline you set)</td>
|
||||
<td><code>CoolantConvectionCoefficient_Wdm2K</code> (baseline of the chosen type)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>M07</code></td>
|
||||
@@ -117,7 +143,46 @@
|
||||
</tbody>
|
||||
</table>
|
||||
<p>Before the first M07/M08/M09 the mode is <code>UnDefined</code>; the FEM treats it as <code>Off</code>.</p>
|
||||
<p>For <strong>StandardForcedAir</strong> (dry cutting) the machine has no liquid circuit, so even <code>M08</code> only means “air blast on” — its flood baseline is an air-blast coefficient, not a liquid one.</p>
|
||||
<h2 id="what-each-shipped-file-sets">What each shipped file sets</h2>
|
||||
<p>Each shipped cooling type is also a static preset on <a class="xref" href="../../api/Hi.Physics.CoolantHeatCondition.html">CoolantHeatCondition</a><small>(API)</small> (<code>StandardForcedAir</code>, <code>StandardWaterSolubleCoolant</code>, <code>StandardOilBasedCoolant</code>) — the same pattern as <code>WorkpieceMaterial.Al6061T6</code>; the resource files are generated from them:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Preset / file</th>
|
||||
<th>Flood baseline W/(m²·K)</th>
|
||||
<th>Mist ratio</th>
|
||||
<th>Off W/(m²·K)</th>
|
||||
<th>Temperature °C</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>StandardForcedAir</code></td>
|
||||
<td>100</td>
|
||||
<td>0.5</td>
|
||||
<td>50</td>
|
||||
<td>25</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>StandardWaterSolubleCoolant</code></td>
|
||||
<td>1 000</td>
|
||||
<td>0.5</td>
|
||||
<td>50</td>
|
||||
<td>25</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>StandardOilBasedCoolant</code></td>
|
||||
<td>300</td>
|
||||
<td>0.5</td>
|
||||
<td>50</td>
|
||||
<td>25</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>The baselines are engineering defaults from the literature ranges below; when you have dynamometer / thermocouple data for your own system, tune the fields and save your own file instead. API side: <code>ApplyPreset</code> copies a preset in place; <code>MatchStandardPreset</code> maps values back to a preset name.</p>
|
||||
<h2 id="properties">Properties</h2>
|
||||
<p>These are the fields shown under Name / Note in the Coolant panel:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
@@ -135,7 +200,7 @@
|
||||
<tr>
|
||||
<td><code>CoolantConvectionCoefficient_Wdm2K</code></td>
|
||||
<td>1 000</td>
|
||||
<td>Flood baseline. Water-based emulsion ≈ 1 000–3 000, oil ≈ 100–500.</td>
|
||||
<td>Flood baseline. Water-based emulsion ≈ 1 000–3 000, oil ≈ 100–500, forced air ≈ 10–500.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>MistFloodConvectionRatio</code></td>
|
||||
@@ -147,6 +212,11 @@
|
||||
<td>50</td>
|
||||
<td>Forced air inside a running enclosure. Natural air ≈ 5–25.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>Name</code> / <code>Note</code></td>
|
||||
<td>—</td>
|
||||
<td>From the loaded file / preset; <strong>Save As…</strong> renames the condition after the file. Legacy projects without a name still work.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="why-the-mist-ratio-defaults-to-05">Why the mist ratio defaults to 0.5</h2>
|
||||
@@ -155,15 +225,23 @@
|
||||
<h5>Note</h5>
|
||||
<p>Further reading: UNIST <em>MQL Handbook</em> (source of the “about half” rule), ANEBON mist-vs-flood AISI 1045 tests, Mukesh et al. <em>IEJ</em> May 2023 review on sustainable machining. Use these only to dig deeper — the <code>0.5</code> default is already calibrated from them.</p>
|
||||
</div>
|
||||
<h2 id="coolant-files-workpiecematerial-pattern">Coolant files (WorkpieceMaterial pattern)</h2>
|
||||
<p><code>MachiningEquipment.CoolantHeatConditionFile</code> tracks an optional <code>.CoolantHeatCondition</code> side-file, exactly like <code>Workpiece.WorkpieceMaterialFile</code> tracks a material file:</p>
|
||||
<ul>
|
||||
<li><strong>No file (default):</strong> the condition serializes inline in the <code>.hincproj</code>, byte-compatible with pre-pattern readers.</li>
|
||||
<li><strong>File tracked:</strong> the project save externalizes the condition as <code><CoolantHeatCondition><XmlSource>relPath</XmlSource></CoolantHeatCondition></code> and (re)writes the side-file. Loading a file installs it in place of the current condition and records the reference (<code>XFactory.GenByFile<CoolantHeatCondition></code>); a file loaded from the resource folder is copied into the project on the next save (self-contained project root).</li>
|
||||
</ul>
|
||||
<h2 id="xml">XML</h2>
|
||||
<pre><code class="lang-xml"><CoolantHeatCondition>
|
||||
<Name>StandardOilBasedCoolant</Name>
|
||||
<Note>Oil-based cutting fluid (neat oil).</Note>
|
||||
<CoolantTemperature_C>25</CoolantTemperature_C>
|
||||
<CoolantConvectionCoefficient_Wdm2K>1000</CoolantConvectionCoefficient_Wdm2K>
|
||||
<CoolantConvectionCoefficient_Wdm2K>300</CoolantConvectionCoefficient_Wdm2K>
|
||||
<MistFloodConvectionRatio>0.5</MistFloodConvectionRatio>
|
||||
<OffConvectionCoefficient_Wdm2K>50</OffConvectionCoefficient_Wdm2K>
|
||||
</CoolantHeatCondition>
|
||||
</code></pre>
|
||||
<p>Omit the last two elements to accept the defaults.</p>
|
||||
<p><code>Name</code>/<code>Note</code> are optional (pre-preset files omit them); omit the last two elements to accept the defaults. The same element saved standalone is the <code>.CoolantHeatCondition</code> file format; inside a <code>.hincproj</code> it may instead appear as the <code><XmlSource></code> reference shown above.</p>
|
||||
|
||||
</article>
|
||||
|
||||
|
||||
@@ -118,6 +118,43 @@ Cutting tools, EDM (electrical discharge machining) dies.</li>
|
||||
<blockquote>
|
||||
<p>For information on measuring rake angle and relief angle, refer to <a href="../analysis/radial-angle-measurement.html">Radial Angle Measurement</a>.</p>
|
||||
</blockquote>
|
||||
<h3 id="upper-beam-clamping-end--shank-geometry">Upper Beam (Clamping End / Shank) Geometry</h3>
|
||||
<p>The <em>upper beam</em> is the cutter's shank / body above the flute — the non-cutting,
|
||||
clamping zone. It can be modeled with several geometry types; the two common
|
||||
choices are:</p>
|
||||
<ul>
|
||||
<li><p><strong>Cylindroid</strong> — an explicit ZR table. You author every <code>(Z, r)</code> pair, so the
|
||||
shank radius (and any stepped / necked profile) is whatever you type in. This
|
||||
faithfully reproduces a <em>known</em> shank, but every value is data you must supply.</p>
|
||||
</li>
|
||||
<li><p><strong>Extended Cylinder</strong> — a cylinder whose <strong>start (bottom) profile is driven by
|
||||
the flute</strong> and whose only parameter is the total length. Its radius follows
|
||||
the cutter (flute-top) radius automatically, so it needs <strong>no shank
|
||||
measurements</strong> — only a length long enough to reach the holder.</p>
|
||||
<p>⚠ <strong><code>FullLength</code> is the beam's FULL length measured from <code>Z=0</code> (the cutter
|
||||
tip), so it includes the flute span</strong> — it is <em>not</em> the remaining segment from
|
||||
the flute top to the exposed end. It must therefore be <strong>larger than the flute
|
||||
height</strong>: e.g. flute height 20 mm and 10 mm of shank above it → <code>FullLength = 30</code>, not 10. A value at or below the flute height inverts the beam solid;
|
||||
thermal physics then cannot build its shank shell layers and reports a
|
||||
<code>Cutter-UpperBeam--BelowFluteHeight</code> configuration error at tool change (the
|
||||
web editor rejects such a value outright).</p>
|
||||
</li>
|
||||
</ul>
|
||||
<p><strong>Convention — prefer the Extended Cylinder when the shank is not given.</strong> Most
|
||||
tool sheets (especially at quoting stage) list only the cutting diameter, corner
|
||||
radius, and stick-out; they do not give a shank diameter or a stepped/necked
|
||||
profile. In that case use the <strong>Extended Cylinder</strong>: it extends the flute by a
|
||||
length without inventing a radius the data does not support. A hand-authored
|
||||
Cylindroid here would bake a <em>guessed</em> shank radius into the model — and an
|
||||
over-fat guess produces false clearance / collision results, while an over-thin
|
||||
one understates the body. Reserve the <strong>Cylindroid</strong> (explicit ZR) for tools
|
||||
whose shank or neck profile is actually known or measured — e.g. stepped,
|
||||
necked, or back-tapered shanks where a flute-radius extension would be wrong.</p>
|
||||
<blockquote>
|
||||
<p>Tip: because the Extended Cylinder's radius tracks the flute, set its length
|
||||
comfortably past the exposed cutter height so the beam reaches into the holder
|
||||
with no gap; the overlap is harmless for clearance checks.</p>
|
||||
</blockquote>
|
||||
<h3 id="relief-angle-setting">Relief Angle Setting</h3>
|
||||
<p>The relief angle setting in HiNC refers to the primary relief angle. It is used to calculate flank wear width (Flank Wear, VB).</p>
|
||||
<h3 id="cutter-body-weight">Cutter Body Weight</h3>
|
||||
|
||||
@@ -88,6 +88,10 @@
|
||||
<h1 id="setup">Setup</h1>
|
||||
|
||||
<p>Pre-simulation configuration: the physical entities and components you configure before running a simulation. Once set, these form the fixed environment of the simulation.</p>
|
||||
<div class="TIP">
|
||||
<h5>Tip</h5>
|
||||
<p>New to building a project? Start with the <a href="project-data-checklist.html">Project Data Checklist</a> — the single list of data to collect (and hand to the machine owner) before configuring any of the components below.</p>
|
||||
</div>
|
||||
<h2 id="equipment">Equipment</h2>
|
||||
<ul>
|
||||
<li><a href="machine-tool.html">Machine Tool</a> — Build or load a virtual machine tool</li>
|
||||
@@ -95,8 +99,8 @@
|
||||
</ul>
|
||||
<h2 id="controllers">Controllers</h2>
|
||||
<ul>
|
||||
<li><a href="controller-heidenhain.html">Heidenhain Support</a> — Heidenhain controller setup</li>
|
||||
<li><a href="controller-iso.html">ISO / General NC</a> — Fanuc, Siemens, Mitsubishi, and ISO NC code support</li>
|
||||
<li><a href="controller-heidenhain.html">Heidenhain Support</a> — klartext and Heidenhain DIN/ISO code support</li>
|
||||
<li><a href="controller-iso.html">ISO / General NC</a> — Fanuc, Syntec, Mazak and Siemens SINUMERIK code support</li>
|
||||
</ul>
|
||||
<h2 id="cutting-tools">Cutting Tools</h2>
|
||||
<ul>
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,180 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Program Zero Alignment | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Program Zero Alignment | 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<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="program-zero-alignment">Program Zero Alignment</h1>
|
||||
|
||||
<p><strong>Program zero</strong> (<code>ProgramZeroAnchor</code>) is the point an NC program treats as <code>X0 Y0 Z0</code>. It is related to the machine's work-coordinate offset (G54/G55/...): when the machine coordinate equals the work offset, the spindle sits at program zero.</p>
|
||||
<p>Setting up a simulation requires relating program zero to the work offset. <strong>Which way you align depends on the scenario.</strong></p>
|
||||
<h2 id="two-alignment-directions">Two Alignment Directions</h2>
|
||||
<h3 id="nc-file-scenario-planning--align-g54-to-program-zero">NC-file scenario (planning) — align G54 to program zero</h3>
|
||||
<p>When you drive the simulation from an NC file for <strong>planning</strong>, you usually keep the workpiece and fixture wherever they are convenient and set the work offset to match. The G54 value may not be obtained yet, and the layout does <strong>not</strong> need to reflect the real machine.</p>
|
||||
<ul>
|
||||
<li>Keep the workpiece/fixture placement as-is.</li>
|
||||
<li>Read the machine coordinate at program zero with <a class="xref" href="../../api/Hi.Machining.MachiningEquipmentUtils.MachiningEquipmentUtil.html#Hi_Machining_MachiningEquipmentUtils_MachiningEquipmentUtil_GetMachinePositionAtProgramZero_">GetMachinePositionAtProgramZero</a> and store it into the ISO coordinate table (<code>IsoCoordinateTable.SetCoordinateOffset("G54", ...)</code>).</li>
|
||||
</ul>
|
||||
<h3 id="csv--real-time--online-mc-scenario-high-fidelity--align-program-zero-to-g54">CSV / real-time / online-MC scenario (high-fidelity) — align program zero to G54</h3>
|
||||
<p>When you drive the simulation from a <strong>controller CSV log</strong> (see <a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_PlayCsvFile_">PlayCsvFile</a>) or a real-time / online machine coordinate feed, the data is in <strong>absolute machine coordinates</strong>. To reproduce the real cut faithfully (高還原度), the workpiece + fixture must sit at their <strong>real positions</strong> so that collisions, overcut, and engagement match reality.</p>
|
||||
<pre><code class="lang-csharp">// Places workpiece + fixture so ProgramZeroAnchor coincides with the
|
||||
// world position the spindle reaches when the machine coordinate equals G54.
|
||||
AlignWorkpieceProgramZeroToIso("G54");
|
||||
</code></pre>
|
||||
<p>The same action is available in the web UI on the Controller page's ISO Coordinate Table (<code>Align P0</code> per row, with a one-shot <code>Revert Align</code>).</p>
|
||||
<p><code>AlignWorkpieceProgramZeroToIso</code> mutates only <code>Fixture.GeomToTableTransformer</code>. The three buckle transformers must already be placed per the rule below.</p>
|
||||
<h2 id="buckle-general-rule">Buckle General Rule</h2>
|
||||
<p>The workpiece/fixture assembly is built from buckle anchors (see <a href="anchor.html">Component Assembly and Anchors</a>). A typical block-on-plate setup places them at the geometry bounding-box centers:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Transformer</th>
|
||||
<th>Position</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>Workpiece.WorkpieceGeomToFixtureBuckleTransformer</code></td>
|
||||
<td>bottom center of the workpiece geom</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>Workpiece.WorkpieceGeomToProgramZeroTransformer</code></td>
|
||||
<td>top center of the workpiece geom (or any chosen top tip)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>Fixture.GeomToWorkpieceTransformer</code></td>
|
||||
<td>top center of the fixture geom</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><code>AlignWorkpieceProgramZeroToIso</code> then derives the final <code>Fixture.GeomToTableTransformer</code> from the live assembly topology (anchor-to-anchor vectors), so it works for any chain — it does not assume the buckles are at bounding-box centers.</p>
|
||||
<h2 id="verifying-the-setup">Verifying the Setup</h2>
|
||||
<p>A wrong setup (incorrect work offset or workpiece position) shows up as <strong>overcut</strong>, <strong>collision</strong>, or <strong>nocut</strong>. These are observable <strong>early</strong> — typically within the first ~100 NC lines or ~1 minute — so verify with a quick, cheap pass before a full run:</p>
|
||||
<ol>
|
||||
<li>Set a coarse <a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_MachiningResolution_">MachiningResolution</a> ≈ <strong>1/8 of the cutter diameter</strong> for fast feedback.</li>
|
||||
<li>Run and watch the <strong>opening Z plunge (下刀)</strong>. This is where overcut/collision most often appears when the work offset or workpiece Z is wrong.</li>
|
||||
</ol>
|
||||
<div class="TIP">
|
||||
<h5>Tip</h5>
|
||||
<p>If the tool plunges far deeper than the programmed depth and the holder crashes into the workpiece (a visible gouge on the rendered stock), the work offset Z is almost certainly wrong — the workpiece is modeled higher (or lower) than its real position.</p>
|
||||
</div>
|
||||
<div class="NOTE">
|
||||
<h5>Note</h5>
|
||||
<p>Rare false positive: a roughing cut with a <strong>spiral entrance on tough material</strong> can legitimately exceed the modeled cutting conditions yet still be a <em>correct</em> setup. This is uncommon — in most cases early overcut/collision/nocut means the setup is wrong.</p>
|
||||
</div>
|
||||
<h2 id="high-fidelity-caution-work-offset-must-reflect-the-real-machine">High-Fidelity Caution: Work Offset Must Reflect the Real Machine</h2>
|
||||
<p>In the CSV / online-MC scenario, the work offset (G54/G55/...) you align to must be the <strong>actual offset used on the machine</strong>, not a planned/nominal value. Operators frequently re-zero between setups (manual tool changes, re-cut stock), so a planned G54 can differ from the real one — by an amount you cannot assume in advance.</p>
|
||||
<p>When driving from a controller log, <strong>derive the offset from the log's own machine coordinates</strong> rather than trusting a planned value: invariants that survive operator edits — a known cutting depth, a feature span — mapped onto the recorded machine coordinates, recover the real offset on those axes. (Positions the operator may have shifted are not recoverable this way.) A work-offset Z that is wrong places the workpiece away from its true height, so the tool over- or under-plunges; if too high, the holder crashes the stock at the opening plunge — exactly the failure the rough-resolution check above catches.</p>
|
||||
<h2 id="see-also">See Also</h2>
|
||||
<ul>
|
||||
<li><a href="anchor.html">Component Assembly and Anchors</a> — buckle anchors (<code>WorkpieceBuckle</code>, <code>TableBuckle</code>, <code>SpindleBuckle</code>)</li>
|
||||
<li><a class="xref" href="../../workflows/force-training.html">Workflow: Milling Force Parameter Training</a> — milling force training, which depends on a correct setup</li>
|
||||
<li><a class="xref" href="../../workflows/basic-simulation.html">Workflow: Basic Machining Simulation</a> — driving simulation from NC or CSV</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>
|
||||
+121
@@ -0,0 +1,121 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 720 540" font-family="'Segoe UI',Arial,sans-serif">
|
||||
<!-- nameplate background -->
|
||||
<rect x="2" y="2" width="716" height="536" rx="10" fill="#f7f3df" stroke="#9a8f5c" stroke-width="2"/>
|
||||
|
||||
<!-- header -->
|
||||
<text x="30" y="46" font-size="22" font-weight="700" fill="#333" letter-spacing="2">FANUC</text>
|
||||
<text x="30" y="72" font-size="15" font-weight="600" fill="#333" letter-spacing="3">AC SPINDLE MOTOR</text>
|
||||
|
||||
<text x="30" y="106" font-size="13" fill="#777">MODEL</text>
|
||||
<text x="92" y="106" font-size="15" font-weight="700" fill="#222">αiI 6/12000</text>
|
||||
<text x="30" y="130" font-size="13" fill="#777">TYPE</text>
|
||||
<text x="92" y="130" font-size="14" fill="#222">A06B-1466-B123#0S21</text>
|
||||
|
||||
<text x="430" y="106" font-size="13" fill="#777">DATE</text>
|
||||
<text x="480" y="106" font-size="14" fill="#222">2015.01</text>
|
||||
<text x="430" y="130" font-size="13" fill="#777">NO.</text>
|
||||
<text x="480" y="130" font-size="14" fill="#999">——</text>
|
||||
|
||||
<text x="30" y="158" font-size="12" fill="#777">FANUC CORPORATION · YAMANASHI, MADE IN JAPAN</text>
|
||||
<line x1="20" y1="170" x2="700" y2="170" stroke="#cabf8c" stroke-width="1"/>
|
||||
|
||||
<!-- rating table grid -->
|
||||
<g stroke="#8a7f4c" stroke-width="1">
|
||||
<!-- verticals -->
|
||||
<line x1="20" y1="182" x2="20" y2="444"/>
|
||||
<line x1="110" y1="182" x2="110" y2="444"/>
|
||||
<line x1="230" y1="182" x2="230" y2="444"/>
|
||||
<line x1="360" y1="182" x2="360" y2="444"/>
|
||||
<line x1="600" y1="182" x2="600" y2="444"/>
|
||||
<line x1="700" y1="182" x2="700" y2="444"/>
|
||||
<!-- top / header / bottom -->
|
||||
<line x1="20" y1="182" x2="700" y2="182"/>
|
||||
<line x1="20" y1="210" x2="700" y2="210"/>
|
||||
<line x1="20" y1="444" x2="700" y2="444"/>
|
||||
<!-- row separators (skip WINDING column) -->
|
||||
<line x1="110" y1="236" x2="700" y2="236"/>
|
||||
<line x1="110" y1="262" x2="700" y2="262"/>
|
||||
<line x1="110" y1="288" x2="700" y2="288"/>
|
||||
<line x1="110" y1="314" x2="700" y2="314"/>
|
||||
<line x1="110" y1="340" x2="700" y2="340"/>
|
||||
<line x1="110" y1="366" x2="700" y2="366"/>
|
||||
<line x1="110" y1="392" x2="700" y2="392"/>
|
||||
<line x1="110" y1="418" x2="700" y2="418"/>
|
||||
<!-- winding group separator -->
|
||||
<line x1="20" y1="340" x2="110" y2="340"/>
|
||||
</g>
|
||||
|
||||
<!-- header labels -->
|
||||
<g font-size="12" font-weight="700" fill="#444" text-anchor="middle">
|
||||
<text x="65" y="200">WINDING</text>
|
||||
<text x="170" y="200">RATING</text>
|
||||
<text x="295" y="200">kW</text>
|
||||
<text x="480" y="200">min⁻¹</text>
|
||||
<text x="650" y="200">A(~) max</text>
|
||||
</g>
|
||||
|
||||
<!-- winding group labels -->
|
||||
<g font-size="14" font-weight="700" fill="#333" text-anchor="middle">
|
||||
<text x="65" y="279">Y · LOW</text>
|
||||
<text x="65" y="396">Δ · HIGH</text>
|
||||
</g>
|
||||
|
||||
<!-- rating rows -->
|
||||
<g font-size="13" fill="#222">
|
||||
<!-- RATING column (left aligned) -->
|
||||
<g text-anchor="start">
|
||||
<text x="120" y="228">S1 CONT</text>
|
||||
<text x="120" y="254">S2 30min</text>
|
||||
<text x="120" y="280">S3 60%</text>
|
||||
<text x="120" y="306">S3 25%</text>
|
||||
<text x="120" y="332">S3 15%</text>
|
||||
<text x="120" y="358">S1 CONT</text>
|
||||
<text x="120" y="384">S2 30min</text>
|
||||
<text x="120" y="410">S3 60%</text>
|
||||
<text x="120" y="436">S3 25%</text>
|
||||
</g>
|
||||
<!-- kW column (centered) -->
|
||||
<g text-anchor="middle">
|
||||
<text x="295" y="228">5.5 / 2.2</text>
|
||||
<text x="295" y="254">7.5 / 3.7</text>
|
||||
<text x="295" y="280">7.5 / 3.7</text>
|
||||
<text x="295" y="306">13 / 7.5</text>
|
||||
<text x="295" y="332">15 / 13</text>
|
||||
<text x="295" y="358">5.5</text>
|
||||
<text x="295" y="384">7.5</text>
|
||||
<text x="295" y="410">7.5</text>
|
||||
<text x="295" y="436">18.5 / 11</text>
|
||||
</g>
|
||||
<!-- min^-1 column (centered) -->
|
||||
<g text-anchor="middle">
|
||||
<text x="480" y="228">1500–8000 / 12000</text>
|
||||
<text x="480" y="254">1500–8000 / 12000</text>
|
||||
<text x="480" y="280">1500–8000 / 12000</text>
|
||||
<text x="480" y="306">1500–4000 / 8000</text>
|
||||
<text x="480" y="332">1500–3000 / 4000</text>
|
||||
<text x="480" y="358">4000–12000</text>
|
||||
<text x="480" y="384">4000–12000</text>
|
||||
<text x="480" y="410">4000–12000</text>
|
||||
<text x="480" y="436">4000–7000 / 12000</text>
|
||||
</g>
|
||||
<!-- A column (centered) -->
|
||||
<g text-anchor="middle">
|
||||
<text x="650" y="228">37</text>
|
||||
<text x="650" y="254">47</text>
|
||||
<text x="650" y="280">47</text>
|
||||
<text x="650" y="306">77</text>
|
||||
<text x="650" y="332">86</text>
|
||||
<text x="650" y="358">43</text>
|
||||
<text x="650" y="384">43</text>
|
||||
<text x="650" y="410">36</text>
|
||||
<text x="650" y="436">81</text>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<!-- footer electrical specs -->
|
||||
<g font-size="12" fill="#333">
|
||||
<text x="20" y="470">MOTOR INPUT (~) 122 / 226 V · AMP INPUT 200 / 230 V · 4 POLES · 3 PHASES</text>
|
||||
<text x="20" y="492">50 / 60 Hz · IP40 · POWER FACTOR 71 % · AMB TEMP 0–40 °C · INS. CLASS H</text>
|
||||
</g>
|
||||
<text x="700" y="520" font-size="11" fill="#998" text-anchor="end">範例銘牌(已移除單機序號)· example plate, unit serial removed</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.1 KiB |
@@ -0,0 +1,488 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Project Data Checklist | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Project Data Checklist | 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 "{query}"">
|
||||
<meta name="loc:searchNoResults" content="No results for "{query}"">
|
||||
<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="Setup-ProjectDataChecklist">
|
||||
<h1 id="project-data-checklist">Project Data Checklist</h1>
|
||||
|
||||
<p>A HiNC project (<code>.hincproj</code>) is a <strong>digital twin</strong> of a real machining setup: machine, spindle, workpiece, fixture, tooling, controller, and the NC program. To build one, you must first collect the data that describes the physical setup.</p>
|
||||
<p>This page is the single, canonical list of that data. Hand it to the machine owner / customer as a <strong>data-collection checklist</strong> before a project is built. It mirrors the <a href="https://superhightech.com.tw/hinc/index.en.html#parameters-for-analysis"><em>Parameters for Analysis</em></a> grouping shown on the HiNC product site.</p>
|
||||
<p>You do not need a strict form — write the items here up as a short free-text note and hand it over <strong>with the CAD and NC files</strong>; that is what a HiNC engineer needs to build the <code>.hincproj</code> (see the <a href="#examples">worked examples</a> below).</p>
|
||||
<p>This page is the list to collect <em>before</em> a project is built. For what the engineer then does with it — build order, mission structure, and how completeness is verified — see <a href="../../workflows/project-construction.html">Project Construction</a>.</p>
|
||||
<div class="IMPORTANT">
|
||||
<h5>Important</h5>
|
||||
<p><strong>Identifiers beat half-remembered numbers.</strong> Customers rarely have every detail. Where a value is missing, give an <strong>identifier</strong> — <em>cutter brand + product ID</em>, <em>spindle/machine make + model</em> — and the HiNC engineer sources the rest (cutter geometry from the catalog, the power–torque chart from the spindle datasheet). Capture what you can; the engineer fills the gaps.</p>
|
||||
</div>
|
||||
<pre><code class="lang-mermaid">graph TD
|
||||
subgraph Equipment["Equipment (one-time, fixed)"]
|
||||
M["Machine Configuration"]
|
||||
S["Spindle Capability"]
|
||||
E["Environment"]
|
||||
end
|
||||
subgraph Job["Job (per part)"]
|
||||
W["Workpiece"]
|
||||
F["Fixture"]
|
||||
T["Tooling"]
|
||||
C["Controller + NC Program"]
|
||||
end
|
||||
Equipment --> P[".hincproj"]
|
||||
Job --> P
|
||||
</code></pre>
|
||||
<h2 id="at-a-glance">At a Glance</h2>
|
||||
<p>Each item is marked:</p>
|
||||
<ul>
|
||||
<li><strong>Required</strong> — a project cannot be built without it.</li>
|
||||
<li><strong>Optional</strong> — improves realism but the project still runs without it.</li>
|
||||
<li><strong>Conditional</strong> — only needed for a specific check <em>beyond</em> the core cutting-force simulation (e.g. collision detection, geometry validation, spindle-overload analysis), noted in <em>Used for</em>.</li>
|
||||
</ul>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Category</th>
|
||||
<th>Item</th>
|
||||
<th>Required?</th>
|
||||
<th>Used for</th>
|
||||
<th>Detail</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Machine</td>
|
||||
<td>Kinematic model & axis configuration (3-/5-axis, motion methods)</td>
|
||||
<td><strong>Required</strong></td>
|
||||
<td>Toolpath, collision</td>
|
||||
<td><a href="machine-tool.html">Machine Tool</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Machine</td>
|
||||
<td>Simplified component CAD/STL (table, column, spindle housing…)</td>
|
||||
<td>Conditional</td>
|
||||
<td>Collision detection</td>
|
||||
<td><a href="machine-tool.html">Machine Tool</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Machine</td>
|
||||
<td>Travel/stroke limits</td>
|
||||
<td>Conditional</td>
|
||||
<td>Stroke-overrun check</td>
|
||||
<td>—</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Machine</td>
|
||||
<td>Rapid feedrate, max spindle & rotary speeds</td>
|
||||
<td>Optional</td>
|
||||
<td>Feedrate precision → tighter optimization & physics/timing estimates</td>
|
||||
<td>—</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Spindle</td>
|
||||
<td>Brand/model + product description (so the chart can be sourced)</td>
|
||||
<td>Conditional</td>
|
||||
<td>Power/torque & overload analysis — a default spindle capability is applied if omitted (fine for light cuts in small/soft stock)</td>
|
||||
<td>—</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Spindle</td>
|
||||
<td>Speed–power–torque diagram (kW & Nm vs RPM, duty ratings)</td>
|
||||
<td>Conditional (sourced from the brand/model above)</td>
|
||||
<td>Power/torque & overload analysis</td>
|
||||
<td><a href="../analysis/spindle-capability.html">Spindle Capability</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Environment</td>
|
||||
<td>Coolant type (other thermal values keep their defaults)</td>
|
||||
<td>Optional</td>
|
||||
<td>Thermal / wear analysis — a default is applied if omitted</td>
|
||||
<td><a href="coolant.html">Coolant</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Workpiece</td>
|
||||
<td>Material (named or property set)</td>
|
||||
<td><strong>Required</strong></td>
|
||||
<td>Force, thermal</td>
|
||||
<td>—</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Workpiece</td>
|
||||
<td>Initial (stock) CAD + Finished CAD (STL or parametric)</td>
|
||||
<td><strong>Required</strong> (stock)</td>
|
||||
<td>Cut simulation; finished = geometry check</td>
|
||||
<td><a href="../../workflows/geometry-validation.html">Geometry Validation</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Workpiece</td>
|
||||
<td>Program-zero position in plain words (e.g. “G54 = top centre”)</td>
|
||||
<td><strong>Required</strong></td>
|
||||
<td>Correct engagement</td>
|
||||
<td><a href="program-zero-alignment.html">Program Zero Alignment</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Fixture</td>
|
||||
<td>Fixture CAD/STL</td>
|
||||
<td>Optional</td>
|
||||
<td>Collision detection</td>
|
||||
<td>—</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Tooling</td>
|
||||
<td>Per tool: geometry + cutter & coating material (ideally via <strong>cutter brand + product ID</strong>)</td>
|
||||
<td><strong>Required</strong></td>
|
||||
<td>Force, deflection, geometry</td>
|
||||
<td><a href="cutter.html">Cutter</a>, <a href="apt.html">APT</a>, <a href="insert-cutter.html">Insert Cutter</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Tooling</td>
|
||||
<td>Per tool: holder brand+ID (or rough height/radius)</td>
|
||||
<td>Conditional</td>
|
||||
<td>Collision check; how deep the tool reaches</td>
|
||||
<td>—</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Controller</td>
|
||||
<td>CNC brand/type (Fanuc, Heidenhain, Siemens…)</td>
|
||||
<td><strong>Required</strong></td>
|
||||
<td>NC interpretation</td>
|
||||
<td><a href="controller-iso.html">Controllers</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Controller</td>
|
||||
<td>NC / CL program(s)</td>
|
||||
<td><strong>Required</strong></td>
|
||||
<td>The process to simulate</td>
|
||||
<td><a href="controller-iso.html">ISO / General NC</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Controller</td>
|
||||
<td>Work offsets (G54…) and tool offset table</td>
|
||||
<td>Optional</td>
|
||||
<td>Estimated/relative values work for evaluation; HiNC can set an assumed offset</td>
|
||||
<td><a href="program-zero-alignment.html">Program Zero Alignment</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<hr>
|
||||
<h2 id="1-machine-configuration">1. Machine Configuration</h2>
|
||||
<p>The machine is <strong>one-time, fixed</strong> data: collected once, reused across every job on that machine.</p>
|
||||
<ul>
|
||||
<li><strong>Kinematic model & axis configuration</strong> — number of axes and how each axis moves (the motion chain from ground → table and ground → spindle). <strong>Required.</strong> On a multi-axis machine the <strong>rotary configuration matters most</strong>: name each rotary axis and its <strong>pivot location</strong> (e.g. <em>table-C / spindle-B</em>). The pivot defines the entire kinematic chain, rotary swings are the most collision-prone motions, and the rotary bodies' geometry makes that motion intelligible — so describe it carefully.</li>
|
||||
<li><strong>Simplified component CAD/STL</strong> — table, column, spindle housing, and other bodies, exported from a single coordinate system. <strong>Only needed for collision detection</strong> — though on a multi-axis machine the <strong>rotary bodies (table, cradle, tilt head)</strong> are especially worth including, as their geometry also makes the machine's motion intelligible. Keep the mesh simplified; too many triangles slow loading and collision checks.</li>
|
||||
<li><strong>Travel/stroke limits</strong> — from the machine spec sheet. <strong>Conditional.</strong> Only matters when a stroke-overrun check is the goal — and the operator has usually already confirmed the program fits the machine, so it is not needed unless that is the specific thing you want to test.</li>
|
||||
<li><strong>Rapid feedrate, max spindle & rotary speeds</strong> — from the machine spec sheet. <strong>Optional.</strong> Real values let the simulation use a more accurate achievable feedrate, which tightens the optimization and the physics / timing estimates. Helpful but not essential — defaults still produce a valid run.</li>
|
||||
</ul>
|
||||
<p>See <a href="machine-tool.html">Machine Tool</a> for how the kinematic chain and anchors are built, and <a href="anchor.html">Anchor</a> for coordinate anchors.</p>
|
||||
<h2 id="2-spindle-capability">2. Spindle Capability</h2>
|
||||
<ul>
|
||||
<li><strong>Spindle brand / model + product description</strong> — name the spindle (or the machine) make and model, with a short description or catalog link, so the chart can be <strong>sourced and verified</strong> by whoever builds the project. <strong>Conditional</strong> — needed only when spindle power/torque/overload could matter. Omit it and a <strong>default spindle capability</strong> is applied; light cuts in small or soft stock rarely stress the spindle, so the default is fine.</li>
|
||||
<li><strong>Speed–power–torque diagram</strong> — the spindle's power (kW) and torque (Nm) against RPM, including duty ratings (e.g. S1 continuous / S6 / 15-minute). From the machine or spindle spec sheet. <strong>Required for power, torque, and spindle-overload analysis.</strong></li>
|
||||
</ul>
|
||||
<p>This is the kind of chart needed — power and torque vs spindle speed, with the continuous (S1) and short-duration (S3) ratings:</p>
|
||||
<p><img src="../analysis/spindle-capability-img/fanuc-at12-12000i.jpg" alt="Spindle power and torque vs speed (FANUC aT12/12000i)"></p>
|
||||
<div class="TIP">
|
||||
<h5>Tip</h5>
|
||||
<p><strong>Easier than transcribing: photograph the spindle motor nameplate.</strong> The same ratings are printed on the spindle <strong>motor's spec nameplate</strong>, usually attached to the machine (on the spindle or motor body). A clear photo of it is enough — the model, type, and the S1/S2/S3 rating table (kW and speeds) recover the power–torque behaviour. Example (a FANUC αiI 6/12000 plate, unit serial removed):</p>
|
||||
<p><img src="project-data-checklist-img/spindle-motor-label.svg" alt="Example spindle motor spec nameplate"></p>
|
||||
</div>
|
||||
<p>See <a href="../analysis/spindle-capability.html">Spindle Capability</a>.</p>
|
||||
<h2 id="3-environment">3. Environment</h2>
|
||||
<ul>
|
||||
<li><strong>Coolant type</strong> — which coolant is used. <strong>Optional</strong> — if omitted, a default coolant setting is applied. The remaining coolant/thermal values (temperature, convection, background temperature) keep their defaults too; they only affect thermal and wear results.</li>
|
||||
</ul>
|
||||
<p>See <a href="coolant.html">Coolant</a>.</p>
|
||||
<h2 id="4-workpiece">4. Workpiece</h2>
|
||||
<ul>
|
||||
<li><strong>Material</strong> — a named material from the database, or its mechanical/thermal properties. <strong>Required.</strong></li>
|
||||
<li><strong>Raw (stock) geometry</strong> — STL or simple parametric dimensions (e.g. block <code>120 x 80 x 40</code> or round billet <code>Ø65 x 50</code>). Used for the starting shape and size. <strong>Required.</strong> For a <strong>casting or forging</strong>, give the as-cast shape as an <strong>STL</strong> and note its <strong>casting tolerance</strong> (the stock scatters part-to-part). <strong>Finished/design CAD</strong> is <strong>optional</strong>, used to compare the simulated shape against the target (geometry validation).</li>
|
||||
<li><strong>Program-zero position, in plain words</strong> — where each work offset (G54, G55…) sits on the part, e.g. <em>“G54 = top centre of the stock; Z0 at the top face, X0/Y0 on the axis”</em>. <strong>Required.</strong></li>
|
||||
</ul>
|
||||
<div class="NOTE">
|
||||
<h5>Note</h5>
|
||||
<p>Describe the program zero by <strong>position on the part</strong>, not the machine-coordinate offset numbers — for evaluation/planning a relative or assumed alignment is fine and HiNC aligns it for you. See <a href="program-zero-alignment.html">Program Zero Alignment</a>.</p>
|
||||
</div>
|
||||
<h2 id="5-fixture">5. Fixture</h2>
|
||||
<ul>
|
||||
<li><strong>Fixture CAD/STL</strong> — <strong>optional</strong>, only needed when the fixture participates in collision detection.</li>
|
||||
</ul>
|
||||
<h2 id="6-tooling">6. Tooling</h2>
|
||||
<p>For <strong>each</strong> tool used by the program, collect:</p>
|
||||
<ul>
|
||||
<li><strong>Cutter brand + product ID</strong> — the maker and catalog number (with datasheet/link if handy). <strong>The single most useful field, when the cutter has one</strong>: from it the engineer looks up the geometry, flute count, helix, and grade, so give it even if the geometry below is incomplete. Off-brand cutters with no brand, manual, or traceable vendor are common (it depends on the shop) — then skip this and provide the geometry below directly, measured if needed.</li>
|
||||
<li><strong>Cutter geometry</strong> — <strong>Required</strong> (or derivable from the brand + product ID above):
|
||||
<ul>
|
||||
<li>type (flat-end / ball / corner-radius / insert), <strong>diameter</strong> <code>D</code>, <strong>corner radius</strong> <code>R</code></li>
|
||||
<li><strong>flute (cuttable) length</strong> — the cutting portion</li>
|
||||
<li><strong>overall tool length / stick-out</strong> — how far the cutter reaches from the holder to the flute tip; this sets where the holder grips and affects deflection and reach. A plain cylindrical cutter can use a small default exposed length (~5 mm); a cutter that is <strong>not a simple cylinder</strong> — a stepped or necked shank, or a body wider than the cutting diameter — needs a longer stick-out so the wider non-cutting part clears the workpiece.</li>
|
||||
<li><strong>flute count</strong>, <strong>helix angle</strong>, <strong>rake angle</strong> (relief angle if known)</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><strong>Cutter & coating material</strong> — body material and coating layers. <strong>Required.</strong></li>
|
||||
<li><strong>Holder</strong> — give the <strong>brand + product ID</strong>, or at least a <strong>rough height + radius</strong> (e.g. <code>Ø40 x 60 mm</code>). Full CAD is <strong>optional</strong> and only needed for collision detection; the rough size is enough to see whether the holder would hit the workpiece and how deep the tool can reach. Where the holder grips the tool comes from the cutter's stick-out above, so the tool can be placed even without holder geometry.</li>
|
||||
</ul>
|
||||
<div class="TIP">
|
||||
<h5>Tip</h5>
|
||||
<p>The cutter <strong>brand + product ID</strong> (or a datasheet image) is usually faster and more reliable than transcribing every dimension — the engineer reads the geometry off the catalog.</p>
|
||||
</div>
|
||||
<p>See <a href="cutter.html">Cutter</a>, <a href="apt.html">APT Tool</a>, <a href="insert-cutter.html">Insert Cutter</a>, and <a href="smart-tool-holder.html">Smart Tool Holder</a>.</p>
|
||||
<h2 id="7-controller">7. Controller</h2>
|
||||
<ul>
|
||||
<li><strong>CNC brand/type</strong> — determines how the NC code is interpreted. <strong>Required.</strong></li>
|
||||
<li><strong>NC / CL program(s)</strong> — the actual programs that run on the machine. <strong>Required.</strong></li>
|
||||
<li><strong>Work offsets (G54…) and tool offset table</strong> — <strong>not required</strong> for evaluation/planning. Relative or estimated values work; HiNC can set a workable assumed tool offset for you. Provide the real values only when a high-fidelity match is needed.</li>
|
||||
<li><strong>Stroke limits and machine-specific configuration parameters</strong> — <strong>optional</strong>.</li>
|
||||
</ul>
|
||||
<p>See <a href="controller-iso.html">ISO / General NC</a> and <a href="controller-heidenhain.html">Heidenhain Support</a>.</p>
|
||||
<hr>
|
||||
<h2 id="delivery-formats">Delivery Formats</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Data</th>
|
||||
<th>Preferred format</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Machine / fixture geometry</td>
|
||||
<td><strong>STL</strong>, all exported from the <em>same</em> coordinate system (see <a href="machine-tool.html">Machine Tool</a> best practices)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Workpiece geometry</td>
|
||||
<td>STL (stock + finished) or parametric dimensions</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cutter</td>
|
||||
<td><strong>Brand + product ID</strong> (best), or geometry parameters / datasheet image</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Holder</td>
|
||||
<td>Brand + product ID, or rough height + radius</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Spindle capability</td>
|
||||
<td><strong>Brand + model</strong>, plus spec-sheet table or chart image (power & torque vs RPM)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>NC program</td>
|
||||
<td>The original <code>.nc</code> / <code>.cl</code> files</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="examples">Examples</h2>
|
||||
<p>The examples below show how to write it. Provide the item values together with the CAD and NC files; mark estimates, and give the spindle model and cutter brand + product ID where you can, so the engineer can fill any gap.</p>
|
||||
<p>These files include spindle chart photos, cutter catalog pages (e.g. <code>cmtec-CEXCRSH3120005.pdf</code>), CAD (STL/STEP), and NC programs; note the filename next to the matching item.</p>
|
||||
<h3 id="example-1--pocketed-plate-3-axis-steel">Example 1 — Pocketed plate, 3-axis, steel</h3>
|
||||
<pre><code class="lang-markdown"># Cover plate — TMV-720A 3-axis
|
||||
|
||||
Pocketed S50C cover plate roughed and finished on a 3-axis vertical machining center (VMC).
|
||||
Goal: verify spindle load on the deep pocket and trim cycle time.
|
||||
|
||||
## Machine
|
||||
Model: TongTai TMV-720A, 3-axis VMC
|
||||
Tool mount: (0, 0, 0) mm (where the tool is equipped; taken as the reference point)
|
||||
Table mount: (-450, -340, -630) mm (fixture & workpiece, relative to the tool mount)
|
||||
Controller: Fanuc
|
||||
Strokes: X720 Y420 Z460 mm ; rapid 20000 mm/min ; max spindle 8000 rpm
|
||||
|
||||
## Spindle
|
||||
Brand/model: TongTai TMV-720A standard 8000 rpm spindle (BT40)
|
||||
Source: TMV-720A catalog power–torque chart — attachment fanuc-at12-12000i.png (15-min rating below; with the image you need not transcribe these)
|
||||
Power (kW vs rpm): 0@0, 7.5@1500, 7.5@4500, 4@8000
|
||||
Torque (Nm vs rpm): 50@1500, 37@2000, 30@2600, 19@4000, 12@6000, 8@8000
|
||||
|
||||
## Workpiece
|
||||
Raw stock: block 140 x 90 x 50 mm
|
||||
Design: cover-plate.stl
|
||||
Material: S50C
|
||||
|
||||
## Program zero
|
||||
G54 = top centre of the block — Z0 at the top face, X0/Y0 at the block centre.
|
||||
|
||||
## Fixture
|
||||
Machine vise — vise.stl, clamps below the part top (collision only).
|
||||
|
||||
## Coolant
|
||||
Water-soluble emulsion (flood)
|
||||
|
||||
## Tools
|
||||
T1 face mill brand NTM, product TXE1000 (D50, exact P/N missing)
|
||||
D50 6 inserts flute 6 tool length 60 holder Ø60 x 50 mm stick-out 80
|
||||
T2 flat end brand cmtec, product CEXCRSH3120005 (catalog: cmtec-CEXCRSH3120005.pdf)
|
||||
D12 R0 4 flutes helix 30° rake 10° flute 30 tool length 90 holder Ø40 x 63 stick-out 95
|
||||
T3 flat end brand cmtec (no exact P/N)
|
||||
D6 R0 4 flutes helix 30° flute 20 tool length 70 holder Ø25 x 60 stick-out 75
|
||||
|
||||
## NC Files (folder `NC/`)
|
||||
O0010.NC face + rough the pocket with T1/T2 — watch spindle load near the deep pocket
|
||||
O0020.NC profile + floor finish with T3
|
||||
</code></pre>
|
||||
<h3 id="example-2--relief-part-5-axis-aluminum">Example 2 — Relief part, 5-axis, aluminum</h3>
|
||||
<pre><code class="lang-markdown"># Airplane relief — 5-axis VMC
|
||||
|
||||
Airplane + logo lettering milled from a round Al6061T6 billet on a
|
||||
5-axis vertical machining center (VMC). Goal: check the 5-axis toolpath for collisions/gouges, then optimize feed.
|
||||
|
||||
## Machine
|
||||
Model: 5-axis VMC (example machine) (machine file: MachineTool/Vmc5x/Vmc5x.mt)
|
||||
Config: table-C / spindle-B (C rotary on the table, B tilt on the spindle head)
|
||||
Pivots: C at (0, 0, 0), B at (-70, -180, 220) mm (relative to the C pivot)
|
||||
Tool mount: (-70, 70, 175) mm (where the tool is equipped)
|
||||
Controller: Fanuc
|
||||
Strokes: unbounded for this study ; rapid 20000 mm/min ; max spindle 8000 rpm
|
||||
|
||||
## Spindle
|
||||
Brand/model: built-in 8000 rpm spindle, ~5.5 kW (BT30 class)
|
||||
Source: machine builder spindle datasheet (power–torque chart; attachment b1-spindle-chart.png)
|
||||
Power (kW vs rpm): 0@0, 5.5@1500, 5.5@4500, 3@8000
|
||||
Torque (Nm vs rpm): 50@1500, 30@2000, 20@3000, 15@4000, 8@6000, 5@8000
|
||||
|
||||
## Workpiece
|
||||
Raw stock: round billet Ø65 x 50 mm
|
||||
Design: airplane.stl
|
||||
Material: Al6061T6
|
||||
|
||||
## Program zero
|
||||
G54 = top centre of the billet — Z0 at the top face, X0/Y0 on the axis. (G55+ unused.)
|
||||
|
||||
## Fixture
|
||||
Round fixture Ø100 x 10 mm under the billet (collision only).
|
||||
|
||||
## Coolant
|
||||
Air blast (dry)
|
||||
|
||||
## Tools
|
||||
<!-- brand given but NO product ID, so the engineer recovers the exact geometry
|
||||
and grade by measurement — slower and more error-prone. A brand + product ID
|
||||
is very helpful when the tool has one; off-brand tools without one must be measured. -->
|
||||
(all: brand cmtec, aluminum grade — product ID not given; carbide, 3 flutes,
|
||||
helix 37°, rake 15°, relief 5° [helix/rake estimated];
|
||||
holder Ø25 x 60 mm, 8 mm flute-to-nose clearance)
|
||||
T1 flat end D6 R0 flute 20 tool length 75
|
||||
T2 ball end D6 flute 20 tool length 75
|
||||
T3 ball end D3 flute 20 tool length 75
|
||||
T4 ball end D2 flute 8 tool length 75
|
||||
|
||||
## NC Files (34 programs in folder `NC/`; actual filenames below)
|
||||
01-ED6L20.NC, 02-ED6L20.NC … 10-ED6L28.NC roughing with T1 (flat D6)
|
||||
11-R3L25.NC … 22-R3L25.NC semi-finish with T2 (ball D6)
|
||||
23-R2L25.NC … 30-R2L25.NC finishing
|
||||
airplane-R1L12.NC, logo1-R1L12.NC, logo2-R1L12.NC, logo3-R1L12.NC detail airplane + logo with T4 (ball D2)
|
||||
(filename = seq-toolcode+cutlength; ED6 = flat end mill D6, R3/R2/R1 = ball, digit = nose radius)
|
||||
</code></pre>
|
||||
<div class="NOTE">
|
||||
<h5>Note</h5>
|
||||
<p>Example 2 mirrors a real <code>.hincproj</code> (machine name anonymized); Example 1 is representative with estimated values. The spindle model and the cutter <strong>brand + product ID</strong> are the anchors from which the engineer recovers the geometry and the power–torque chart.</p>
|
||||
</div>
|
||||
<h2 id="see-also">See Also</h2>
|
||||
<ul>
|
||||
<li><a class="xref" href="../../workflows/basic-simulation.html">Workflow: Basic Machining Simulation</a> — set up and run a simulation once the data is collected</li>
|
||||
<li><a href="machine-tool.html">Machine Tool</a> — build the kinematic model from CAD</li>
|
||||
<li><a href="program-zero-alignment.html">Program Zero Alignment</a> — how HiNC aligns the program zero</li>
|
||||
<li><a href="../analysis/spindle-capability.html">Spindle Capability</a> — the speed–power–torque model</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>
|
||||
@@ -15,12 +15,18 @@
|
||||
<li>
|
||||
<a href="index.html" name="" title="Overview">Overview</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="project-data-checklist.html" name="" title="Project Data Checklist">Project Data Checklist</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="machine-tool.html" name="" title="Machine Tool">Machine Tool</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="anchor.html" name="" title="Anchor">Anchor</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="program-zero-alignment.html" name="" title="Program Zero Alignment">Program Zero Alignment</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="coolant.html" name="" title="Coolant">Coolant</a>
|
||||
</li>
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
|
||||
{"items":[{"name":"Overview","href":"index.html","topicHref":"index.html"},{"name":"Machine Tool","href":"machine-tool.html","topicHref":"machine-tool.html"},{"name":"Anchor","href":"anchor.html","topicHref":"anchor.html"},{"name":"Coolant","href":"coolant.html","topicHref":"coolant.html"},{"name":"Controllers","items":[{"name":"Heidenhain","href":"controller-heidenhain.html","topicHref":"controller-heidenhain.html"},{"name":"ISO / General NC","href":"controller-iso.html","topicHref":"controller-iso.html"}]},{"name":"Cutting Tools","items":[{"name":"Cutter","href":"cutter.html","topicHref":"cutter.html"},{"name":"APT Tool","href":"apt.html","topicHref":"apt.html"},{"name":"Insert Cutter","href":"insert-cutter.html","topicHref":"insert-cutter.html"},{"name":"Smart Tool Holder","href":"smart-tool-holder.html","topicHref":"smart-tool-holder.html"}]}]}
|
||||
{"items":[{"name":"Overview","href":"index.html","topicHref":"index.html"},{"name":"Project Data Checklist","href":"project-data-checklist.html","topicHref":"project-data-checklist.html"},{"name":"Machine Tool","href":"machine-tool.html","topicHref":"machine-tool.html"},{"name":"Anchor","href":"anchor.html","topicHref":"anchor.html"},{"name":"Program Zero Alignment","href":"program-zero-alignment.html","topicHref":"program-zero-alignment.html"},{"name":"Coolant","href":"coolant.html","topicHref":"coolant.html"},{"name":"Controllers","items":[{"name":"Heidenhain","href":"controller-heidenhain.html","topicHref":"controller-heidenhain.html"},{"name":"ISO / General NC","href":"controller-iso.html","topicHref":"controller-iso.html"}]},{"name":"Cutting Tools","items":[{"name":"Cutter","href":"cutter.html","topicHref":"cutter.html"},{"name":"APT Tool","href":"apt.html","topicHref":"apt.html"},{"name":"Insert Cutter","href":"insert-cutter.html","topicHref":"insert-cutter.html"},{"name":"Smart Tool Holder","href":"smart-tool-holder.html","topicHref":"smart-tool-holder.html"}]}]}
|
||||
|
||||
Reference in New Issue
Block a user