Archived
deploy.
This commit is contained in:
BIN
Binary file not shown.
|
After Width: | Height: | Size: 251 KiB |
BIN
Binary file not shown.
|
After Width: | Height: | Size: 561 KiB |
@@ -0,0 +1,199 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Optimized Feed Rate at Corners Is Lower Than Empirically Feasible | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Optimized Feed Rate at Corners Is Lower Than Empirically Feasible | 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="Technique-CornerBehavior">
|
||||
<h1 id="optimized-feed-rate-at-corners-is-lower-than-empirically-feasible">Optimized Feed Rate at Corners Is Lower Than Empirically Feasible</h1>
|
||||
|
||||
<p>See also <a class="xref" href="nc-optimization-principles.html">NC Optimization</a> and the script command <a class="xref" href="../../workflows/nc-optimization.html">Workflow: NC Optimization</a>.</p>
|
||||
<h2 id="phenomenon">Phenomenon</h2>
|
||||
<p>During NC feed rate optimization, corners often exhibit significant feed rate reductions — sometimes even lower than what is empirically known to be feasible. This puzzles users: actual machining at corners doesn't require such drastic reductions, so why does the optimization produce these results?</p>
|
||||
<h2 id="controller-deceleration-at-corners">Controller Deceleration at Corners</h2>
|
||||
<p>At corners, the controller <strong>automatically decelerates</strong> at high speeds. This is a built-in controller behavior as well as a hardware limitation, designed to ensure the machine can safely and accurately complete direction changes. The controller also provides parameters to adjust this acceleration/deceleration behavior.</p>
|
||||
<h3 id="relationship-between-buffer-distance-and-speed">Relationship Between Buffer Distance and Speed</h3>
|
||||
<p>The higher the speed, the longer the required buffer distance. The figure below shows machining conditions for several straight-line paths:</p>
|
||||
<p><img src="corner-behavior-img/StraightLine-path.png" alt="Straight-line path machining conditions"></p>
|
||||
<p>The figure labels the spindle speed (S) and feed rate (F) settings for different segments:</p>
|
||||
<ul>
|
||||
<li>through1/through2: S500, F200/F100</li>
|
||||
<li>low1/low2/low3: S1200, F200/F400/F600</li>
|
||||
<li>high1/high2/high3: S7200, F1200/F2400/F3600</li>
|
||||
</ul>
|
||||
<h2 id="why-corners-produce-force-peaks">Why Corners Produce Force Peaks</h2>
|
||||
<p>Independently of feed-rate optimization, corners themselves generate force peaks that can be 3–4× the straight-line steady force. The mechanism is geometric:</p>
|
||||
<ul>
|
||||
<li><strong>Contact area grows at the corner.</strong> Two cut segments share the corner's swept volume, so during the turn the engaged arc on the cutter exceeds the steady-state arc.</li>
|
||||
<li><strong>Friction force scales with contact area.</strong> For ductile materials (aluminum, nickel) friction is a large share of the cutting force, so the area increase translates directly into a torque/force peak. Both bending moment and torque feel it.</li>
|
||||
<li><strong>CAM can amplify the contact area.</strong> Layer-to-layer drift or imperfect corner alignment in CAM-generated NC leaves residual ridges that increase the corner sweep on subsequent layers; the peak then reflects both the geometric corner effect and the CAM-side drift. See <a class="xref" href="../machine-capability/cam-floating-point-drift.html">CAM Floating-Point Drift</a> for the floor-contact mechanism that compounds with this.</li>
|
||||
<li><strong>Peaks are expected, not artifacts.</strong> As long as the corner geometry is correctly aligned, peaks will appear in simulation; absent them, suspect a misalignment.</li>
|
||||
</ul>
|
||||
<p>A peak contained inside a single revolution is itself a partial safety margin — controller corner smoothing and spindle inertia together absorb a single-rev overshoot. Sustained peaks across multiple revolutions are a different story: they drag the spindle below commanded rpm and compound through feed-per-tooth growth. See <a href="nc-optimization-principles.html#tuning-peak-tolerance">Tuning Peak Tolerance</a> for which metrics can be relaxed in response and which cannot.</p>
|
||||
<h2 id="force-simulation-error-analysis">Force Simulation Error Analysis</h2>
|
||||
<p>The figure below shows the force simulation error after applying and comparing dynamometer data, with blue-to-red indicating error ratio from low to high:</p>
|
||||
<p><img src="corner-behavior-img/corner-force-overview.png" alt="Corner force error overview"></p>
|
||||
<h3 id="error-characteristics">Error Characteristics</h3>
|
||||
<p>The following characteristics can be observed from the figure:</p>
|
||||
<ol>
|
||||
<li><strong>Errors increase closer to tool retraction (corners toward the Z direction)</strong></li>
|
||||
<li><strong>Higher feed rates result in longer high-error intervals</strong></li>
|
||||
</ol>
|
||||
<h3 id="error-sources">Error Sources</h3>
|
||||
<p>The errors mainly originate from <strong>controller deceleration</strong>. From the per-revolution waveform at the <code>F3600</code> corner in the lower part of the figure:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Data Source</th>
|
||||
<th>Description</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Left (simulated ideal force)</td>
|
||||
<td>Ideal cutting force calculated based on the set feed rate</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Right (dynamometer data)</td>
|
||||
<td>Measured cutting force, approximately one-third of the ideal force</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>The test material was S45C. At that location, <strong>the actual feed should be even lower than one-third of the ideal feed</strong>.</p>
|
||||
<h2 id="why-is-the-optimized-value-lower-than-the-empirical-value">Why Is the Optimized Value Lower Than the Empirical Value?</h2>
|
||||
<p>During NC feed rate optimization, corners often show significant feed rate reductions. Beyond the fact that corners typically produce higher cutting forces, the reason the optimized value is lower than the empirically feasible feed rate is:</p>
|
||||
<blockquote>
|
||||
<p><strong>The controller has already reduced the feed rate on its own; the optimization simply reveals this.</strong></p>
|
||||
</blockquote>
|
||||
<p>In other words, the optimization result reflects the feed rate actually executed by the controller, not the feed rate specified in the NC program. This “excessively low” optimized value is in fact the real machine behavior.</p>
|
||||
<h2 id="conclusion">Conclusion</h2>
|
||||
<p>When you find that the optimized feed rate at corners is unusually low, this is typically not a system error but rather:</p>
|
||||
<ol>
|
||||
<li>The controller has already automatically reduced the actual feed rate for safe cornering</li>
|
||||
<li>The optimization function faithfully reflects this deceleration behavior</li>
|
||||
<li>Even if you set the empirical value, the controller would still decelerate to a similar value during actual machining</li>
|
||||
</ol>
|
||||
<p>Understanding this phenomenon allows you to evaluate optimization results more rationally and adjust cornering strategies or machine parameters as needed.</p>
|
||||
<h2 id="tracking-the-limiting-physical-quantity-per-step">Tracking the Limiting Physical Quantity per Step</h2>
|
||||
<p>To find out which physical quantity limits the feed rate at each individual step, refer to the <a href="nc-optimization-principles.html#tracking-physical-quantity-constraints-of-individual-steps">Tracking Physical Quantity Constraints of Individual Steps</a> section in <a class="xref" href="../../workflows/nc-optimization.html">Workflow: NC Optimization</a>.</p>
|
||||
<h2 id="feed-rate-acceleration-is-not-simulated">Feed Rate Acceleration Is Not Simulated</h2>
|
||||
<p>HiNC applies the programmed feed rate from the NC directly; it does not model the controller's
|
||||
acceleration and deceleration. The error that introduces is <strong>in the safe direction</strong>: the real
|
||||
machine slows into a corner, so the real cutting force there is lower than the simulated one, and
|
||||
a program that passes in simulation has margin in hand on the machine.</p>
|
||||
<p>The recovery is quick. A corner feed rate typically returns to the programmed value within about
|
||||
<strong>five spindle revolutions — roughly 100 ms</strong> — though the exact figure depends on the
|
||||
controller's own settings. That is short enough that the simulated force is a good description of
|
||||
everything except the corner itself, and it is the reason the corner is the one place where the
|
||||
optimizer's answer and the machinist's experience disagree.</p>
|
||||
<h2 id="see-also">See Also</h2>
|
||||
<ul>
|
||||
<li><a class="xref" href="../machine-capability/cam-floating-point-drift.html">CAM Floating-Point Drift</a> — how drift in the CAM output shows up at corners</li>
|
||||
<li><a href="machining-time-estimation.html">Machining Time Estimation</a> — the same omitted dynamics, and what they mean for a quoted cycle time</li>
|
||||
</ul>
|
||||
|
||||
</article>
|
||||
|
||||
<div class="contribution d-print-none">
|
||||
</div>
|
||||
|
||||
<div class="next-article d-print-none border-top" id="nextArticle"></div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="affix">
|
||||
<nav id="affix"></nav>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<div class="container-xxl search-results" id="search-results"></div>
|
||||
|
||||
<footer class="border-top text-secondary">
|
||||
<div class="container-xxl">
|
||||
<div class="flex-fill">
|
||||
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,132 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>NC Optimization | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="NC Optimization | 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="nc-optimization">NC Optimization</h1>
|
||||
|
||||
<p>How HiNC rewrites feed rates against the physical limits of a cut, and how to read a result that
|
||||
looks wrong. The optimizer is conservative by construction: it lowers feed until every tracked
|
||||
ratio sits under its ceiling, so an unexpectedly low value is usually a report of a real limit
|
||||
rather than a fault.</p>
|
||||
<p>Ordered from the general rule to the case that most often prompts the question.</p>
|
||||
<ul>
|
||||
<li><a href="nc-optimization-principles.html">NC Optimization Principles</a> — The optimization objective, what limits each step, velocity smoothing, and the per-metric utilization factors that decide which peaks may be tolerated</li>
|
||||
<li><a href="corner-behavior.html">Corner Feedrate Behavior</a> — Why the optimized feed at a corner falls below the empirically feasible value, and why that is the controller's own deceleration being reported back</li>
|
||||
<li><a href="machining-time-estimation.html">Machining Time Estimation</a> — What the quoted cycle times are computed from, why they agree with controller simulators, and why the ratio is sounder than the absolute</li>
|
||||
</ul>
|
||||
<h2 id="see-also">See Also</h2>
|
||||
<ul>
|
||||
<li><a href="../milling-physics/index.html">Milling Physics</a> — the per-step criteria the optimizer holds under 100%</li>
|
||||
<li><a href="../machine-capability/index.html">Machine Capability</a> — the spindle, controller and workstation ceilings the optimizer works against</li>
|
||||
<li><a href="../scripting/index.html">Scripting</a> — the <code>Opt*</code> settings a script uses to drive the optimizer</li>
|
||||
<li><a href="../nc-dialects/index.html">NC Dialects</a> — the engine that reads the program before it is rewritten</li>
|
||||
</ul>
|
||||
|
||||
</article>
|
||||
|
||||
<div class="contribution d-print-none">
|
||||
</div>
|
||||
|
||||
<div class="next-article d-print-none border-top" id="nextArticle"></div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="affix">
|
||||
<nav id="affix"></nav>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<div class="container-xxl search-results" id="search-results"></div>
|
||||
|
||||
<footer class="border-top text-secondary">
|
||||
<div class="container-xxl">
|
||||
<div class="flex-fill">
|
||||
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,163 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Machining Time Estimation | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="Machining Time Estimation | 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="Technique-MachiningTimeEstimation">
|
||||
<h1 id="machining-time-estimation">Machining Time Estimation</h1>
|
||||
|
||||
<p>Every optimization result is quoted as a time — 303 minutes down to 95 — so it matters what that
|
||||
number is and is not. HiNC's machining time is computed from the <strong>ideal feed rate in the NC or CL
|
||||
program</strong> together with the <strong>maximum rotary-axis speed limits</strong>. It does not model dynamic
|
||||
behaviour: no acceleration and deceleration ramps, no look-ahead, no servo lag.</p>
|
||||
<h2 id="why-it-matches-controller-simulators">Why It Matches Controller Simulators</h2>
|
||||
<p>That simplification is the same one the controller vendors' own simulators make, which is why the
|
||||
two agree closely. On a five-axis impeller program:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Estimator</th>
|
||||
<th>Cutting time</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Heidenhain simulator</td>
|
||||
<td>15 h 02 min</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>HiNC</td>
|
||||
<td>15 h 05 min</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Difference</td>
|
||||
<td>0.39%</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>Agreeing with the vendor's simulator is a useful check that the program was read correctly. It is
|
||||
not evidence that either number matches the shop floor.</p>
|
||||
<h2 id="why-the-shop-floor-differs">Why the Shop Floor Differs</h2>
|
||||
<p>Real machining time can differ substantially from any of these estimates — the vendor's included —
|
||||
because the dynamics they all omit are real. Acceleration limits at direction changes, look-ahead
|
||||
window size, and block processing rate all cost time that no ideal-feed estimate contains. The
|
||||
same NC on two controllers with different look-ahead settings takes different times.</p>
|
||||
<p>The consequence for reading an optimization result: <strong>trust the ratio, not the absolute</strong>. Before
|
||||
and after are computed the same way and omit the same dynamics, so a reported reduction from 303
|
||||
to 95 minutes is a sound statement about what the optimization achieved, even where neither number
|
||||
will be observed on the machine.</p>
|
||||
<p>Feed rate acceleration is also the reason an optimized corner feed is conservative rather than
|
||||
wrong — see <a href="corner-behavior.html">Optimized Feed Rate at Corners</a>.</p>
|
||||
<h2 id="see-also">See Also</h2>
|
||||
<ul>
|
||||
<li><a href="corner-behavior.html">Optimized Feed Rate at Corners</a> — the same missing dynamics, seen from the corner where they matter most</li>
|
||||
<li><a href="nc-optimization-principles.html">NC Optimization Principles</a> — what the optimizer changes to produce the reduction this page quantifies</li>
|
||||
<li><a class="xref" href="../validation/optimization-results.html">Optimization Results</a> — the tables whose ratios this page says to trust</li>
|
||||
</ul>
|
||||
|
||||
</article>
|
||||
|
||||
<div class="contribution d-print-none">
|
||||
</div>
|
||||
|
||||
<div class="next-article d-print-none border-top" id="nextArticle"></div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="affix">
|
||||
<nav id="affix"></nav>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<div class="container-xxl search-results" id="search-results"></div>
|
||||
|
||||
<footer class="border-top text-secondary">
|
||||
<div class="container-xxl">
|
||||
<div class="flex-fill">
|
||||
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,232 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>NC Optimization | HiAPI-C# 2025 </title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="title" content="NC Optimization | 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="NcOptimization">
|
||||
<h1 id="nc-optimization">NC Optimization</h1>
|
||||
|
||||
<p>Also refer to the script commands section <a class="xref" href="../../workflows/nc-optimization.html">Workflow: NC Optimization</a>.</p>
|
||||
<h2 id="optimization-objective">Optimization Objective</h2>
|
||||
<p>Optimization aims to make the physical quantities during machining as close to the target values as possible.</p>
|
||||
<p>Since the optimization uses a conservative feed rate strategy, the physical quantities in the optimized NC code will be as close to <strong>equal to or less than</strong> the target values as possible.</p>
|
||||
<h3 id="factors-determining-the-optimized-feed-rate">Factors Determining the Optimized Feed Rate</h3>
|
||||
<p>The optimized feed rate is determined by:</p>
|
||||
<ol>
|
||||
<li><strong>Physical quantity constraints of individual <a class="xref" href="../scripting/step.html">steps</a></strong>: Feed rate limits calculated for each step based on target force, yielding stress, spindle torque, etc. For detailed descriptions of indicators such as yielding stress ratio and spindle torque ratio, refer to "<a class="xref" href="../milling-physics/machinability.html">Evaluating Process Machinability</a>".</li>
|
||||
<li><strong>Inter-step smoothing</strong>: Interactions such as acceleration/deceleration limits and extended distances.</li>
|
||||
</ol>
|
||||
<h2 id="differences-in-simulation-results-after-optimization">Differences in Simulation Results After Optimization</h2>
|
||||
<p>Simulation with modified feed rates produces different interpolation points than before, resulting in:</p>
|
||||
<ol>
|
||||
<li>Different simulation mesh errors</li>
|
||||
<li>Surface morphology changes at the surface roughness level</li>
|
||||
</ol>
|
||||
<p>Therefore, the simulated physical quantities after optimization may not always be equal to or below the target values — they may also be slightly above.</p>
|
||||
<p>The influence of interpolation point density on surface morphology is greater at rounded corners than on straight lines, so this effect may be more pronounced at corners.</p>
|
||||
<div class="TIP">
|
||||
<h5>Tip</h5>
|
||||
<p>For abnormally low optimized feed rates at corners, refer to <a class="xref" href="corner-behavior.html">Corner Feed Rate Optimization</a>.</p>
|
||||
</div>
|
||||
<h2 id="velocity-smoothing">Velocity Smoothing</h2>
|
||||
<p>The smoothing range terminates at macro commands or line commands with unresolvable paths.</p>
|
||||
<p><em>Velocity smoothing</em> applies acceleration/deceleration limits based on the path length traversed by the current line command.
|
||||
Therefore, <em>velocity smoothing</em> is effective for <em>re-interpolatable</em> regions;
|
||||
however, for non-re-interpolatable regions, although acceleration/deceleration limits still apply, the excessively long path length of a single line may render them impractical in actual use.</p>
|
||||
<h2 id="impact-of-geometric-errors">Impact of Geometric Errors</h2>
|
||||
<p>Current NC optimization is based on an ideal geometric model. If the workpiece is a casting or has installation errors, a conservatively larger workpiece geometry should be configured in the system to prevent the system from misidentifying cutting regions as non-cutting regions, which could cause tool crashes.</p>
|
||||
<h2 id="tool-breakage-solutions">Tool Breakage Solutions</h2>
|
||||
<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>
|
||||
<p>For detailed descriptions of these indicators and tool breakage criteria, refer to "<a class="xref" href="../milling-physics/machinability.html">Evaluating Process Machinability</a>".</p>
|
||||
<h2 id="tuning-peak-tolerance">Tuning Peak Tolerance</h2>
|
||||
<p>Optimization defaults treat the 100 % line on every ratio as a hard ceiling. In practice some metrics tolerate routine excursions and others don't. The per-metric <code>Opt*UtilizationFactor</code> levers let the optimizer accept higher peaks where physically safe.</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Metric</th>
|
||||
<th>Factor (API)</th>
|
||||
<th>When to raise</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>Yielding stress</td>
|
||||
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_OptYieldingUtilizationFactor">OptYieldingUtilizationFactor</a></td>
|
||||
<td><strong>Per-instant.</strong> Safe to raise. If 150 % is routinely tolerated without breakage, set <code>1.5</code>. Controller corner smoothing and spindle inertia absorb a single-revolution overshoot.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Spindle torque</td>
|
||||
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_OptSpindleTorqueUtilizationFactor">OptSpindleTorqueUtilizationFactor</a></td>
|
||||
<td><strong>Cumulative.</strong> Keep at 1. Sustained excursions stall the spindle: feed continues, rpm drops, feed-per-tooth grows, forces spike further.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Spindle power</td>
|
||||
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_OptSpindlePowerUtilizationFactor">OptSpindlePowerUtilizationFactor</a></td>
|
||||
<td><strong>Cumulative.</strong> Keep at 1. Same reason as torque.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Thermal yield</td>
|
||||
<td><a class="xref" href="../../api/Hi.MachiningProcs.SessionShell.html#Hi_MachiningProcs_SessionShell_OptThermalYieldUtilizationFactor">OptThermalYieldUtilizationFactor</a></td>
|
||||
<td><strong>Long-term.</strong> Can be raised modestly if the calibrated tool material is more thermally tolerant than the conservative defaults — see <a href="../milling-physics/machinability.html#thermal-plastic-deformation-of-cutting-edge">Thermal Plastic Deformation of Cutting Edge</a>.</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>Rule of thumb: relax per-instant per-step metrics based on observed stable extremes; never relax cumulative metrics.</p>
|
||||
<p>For a complementary feed-rate floor lever — useful when the NC cannot be modified to remove single-revolution peaks — see <a class="xref" href="../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_MinFeedPerTooth_mm">MinFeedPerTooth_mm</a> (API) and <a href="../machine-capability/cam-floating-point-drift.html#when-the-nc-cannot-be-modified">When the NC Cannot Be Modified</a>.</p>
|
||||
<h2 id="thermal-edge-chipping-solutions">Thermal Edge Chipping Solutions</h2>
|
||||
<p>After addressing tool breakage issues, reduce the spindle speed to allow sufficient time for the cutting edge to dissipate heat.</p>
|
||||
<p>Note that whether the coolant is properly directed at the cutting edge has a significant impact.</p>
|
||||
<h2 id="tracking-physical-quantity-constraints-of-individual-steps">Tracking Physical Quantity Constraints of Individual Steps</h2>
|
||||
<p>Every optimization already writes the per-step log — one <code>.IndependentStepAdjustment.log</code> beside each
|
||||
optimized NC file that had steps to solve — so nothing has to be switched on to obtain it. What that
|
||||
log cannot answer on its own is which physical quantity limited an individual step, because
|
||||
smoothing carries neighbouring steps into the feed it records. Disable the smoothing settings before
|
||||
the run:</p>
|
||||
<pre><code class="lang-csharp">OptMaxAcceleration_mmds2 = double.PositiveInfinity;
|
||||
OptFeedrateAssignmentRatio = 0;
|
||||
OptExtendedPreDistance_mm = 0;
|
||||
OptExtendedPostDistance_mm = 0;
|
||||
</code></pre>
|
||||
<p>After running the optimization, inspect the <code>.IndependentStepAdjustment.log</code> file to view the independent optimization calculation results for each step and identify which physical quantity limited the feed rate.</p>
|
||||
<p>For detailed field descriptions of the log file, refer to the <a href="../../workflows/nc-optimization.html#optimization-logs">Optimization Logs</a> section in the <a class="xref" href="../../workflows/nc-optimization.html">Workflow: NC Optimization</a> workflow.</p>
|
||||
<h2 id="when-a-step-cannot-be-solved">When a Step Cannot Be Solved</h2>
|
||||
<p>A step whose solve fails does not stop the optimization. That step keeps the feed rate the simulation ran it at instead of a solved one, and every other step is optimized as usual, so a completed optimization can contain steps no physical criterion ever set the feed of. Three records name them:</p>
|
||||
<ul>
|
||||
<li>an <strong>Error</strong> message per failed step, carrying the step index, the NC file and line, and the underlying exception — the first twenty failures of a run, after which only the summary is kept;</li>
|
||||
<li>one <strong>Warning</strong> at the end of the pass, giving the number of failed steps and the first of them;</li>
|
||||
<li>a <code>StepFailed</code> row in that file's <code>.IndependentStepAdjustment.log</code>, in place of the step's usual per-criterion row.</li>
|
||||
</ul>
|
||||
<p>What such a step does not keep is that feed all the way to the file. The stages after the solve treat
|
||||
it like any other step, constraining it against the extended segment and the acceleration limit, and
|
||||
where the step shares one feed word with the rest of its line, the value written is the lowest that
|
||||
line allowed. So the output NC marks nothing and the feed in it names nothing either: a failed step
|
||||
is indistinguishable in the file both from a step the optimizer had no reason to change and from one
|
||||
it had every reason to slow down. The messages are the only place that difference is stated, so read
|
||||
them before sending an optimized program to a machine.</p>
|
||||
<p>Failures also do not shorten the pass. The per-step solve closes with exactly one row of its own in
|
||||
every run — <strong>Optimization Feedrate built.</strong> when it reached the end of the steps, <strong>Optimization
|
||||
Feed Process canceled.</strong> when Stop caught it first — and that row follows the failure summary rather
|
||||
than replacing it. The run then carries on through the stages after the solve. A pass that reported
|
||||
failures still produces optimized files, and neither of those two rows having appeared yet means the
|
||||
solve is still working, not that it gave up.</p>
|
||||
<p>A run ended with <strong>Stop</strong> leaves the per-step log short. Its buffered tail is dropped rather than
|
||||
flushed, so the lines written since the last batch — batches go out at most once a second — never
|
||||
reach the file, and neither does any step line still held back waiting for a lower step index the
|
||||
stopped run never solved. A log that ends before the last step the run reached is the stop showing,
|
||||
not a gap in what the optimizer reports.</p>
|
||||
<h3 id="a-nan-feed-boundary-is-refused-by-name">A NaN Feed Boundary Is Refused by Name</h3>
|
||||
<p>Each step's feed-per-tooth boundary is composed from the option's feed-rate limits and feed-per-tooth limits, the step's tooth-arc duration, and the cutter's own optimization limits. A boundary that comes out <code>NaN</code> is refused before the solver runs, and the message names the values it was given — <a class="xref" href="../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_MinFeedrate_mmdmin">MinFeedrate_mmdmin</a>, <a class="xref" href="../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_MaxFeedrate_mmdmin">MaxFeedrate_mmdmin</a>, <a class="xref" href="../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_MinFeedPerTooth_mm">MinFeedPerTooth_mm</a>, <a class="xref" href="../../api/Hi.NcOpt.NcOptOption.html#Hi_NcOpt_NcOptOption_MaxFeedPerTooth_mm">MaxFeedPerTooth_mm</a> and the step's tooth-arc duration — because a <code>NaN</code> trial feed otherwise reaches the physics and is reported far from its cause. The usual source is a script writing <code>NaN</code> into the per-step option from a step event; see <a class="xref" href="../scripting/script-command.html">Script Commands</a>.</p>
|
||||
<h2 id="see-also">See Also</h2>
|
||||
<ul>
|
||||
<li><a class="xref" href="../milling-physics/cutter-adjustment-levers.html">Cutter Adjustment Levers</a> — what to change on the cutter when feed optimization runs out of room</li>
|
||||
<li><a class="xref" href="../scripting/script-command.html">Script Commands</a> — the script side of the per-step options, including the one that fails a step</li>
|
||||
<li><a href="machining-time-estimation.html">Machining Time Estimation</a> — what the cycle-time reduction this produces is measured against</li>
|
||||
<li><a class="xref" href="../validation/optimization-results.html">Optimization Results</a> — measured before-and-after on a hardened mould and a five-axis titanium job</li>
|
||||
</ul>
|
||||
|
||||
</article>
|
||||
|
||||
<div class="contribution d-print-none">
|
||||
</div>
|
||||
|
||||
<div class="next-article d-print-none border-top" id="nextArticle"></div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="affix">
|
||||
<nav id="affix"></nav>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<div class="container-xxl search-results" id="search-results"></div>
|
||||
|
||||
<footer class="border-top text-secondary">
|
||||
<div class="container-xxl">
|
||||
<div class="flex-fill">
|
||||
<span> Copyright © 2025 <a href='https://superhightech.com.tw'>Tech Coordinate</a>. All rights reserved. <a href='https://superhightech.com.tw'>超級高科技股份有限公司</a> © 2025 版權所有 </span>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,31 @@
|
||||
|
||||
<div id="sidetoggle">
|
||||
<div>
|
||||
<div class="sidefilter">
|
||||
<form class="toc-filter">
|
||||
<span class="glyphicon glyphicon-filter filter-icon"></span>
|
||||
<span class="glyphicon glyphicon-remove clear-icon" id="toc_filter_clear"></span>
|
||||
<input type="text" id="toc_filter_input" placeholder="Filter by title" onkeypress="if(event.keyCode==13) {return false;}">
|
||||
</form>
|
||||
</div>
|
||||
<div class="sidetoc">
|
||||
<div class="toc" id="toc">
|
||||
|
||||
<ul class="nav level1">
|
||||
<li>
|
||||
<a href="index.html" name="" title="Overview">Overview</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="nc-optimization-principles.html" name="" title="NC Optimization Principles">NC Optimization Principles</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="corner-behavior.html" name="" title="Corner Feedrate Behavior">Corner Feedrate Behavior</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="machining-time-estimation.html" name="" title="Machining Time Estimation">Machining Time Estimation</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,2 @@
|
||||
|
||||
{"items":[{"name":"Overview","href":"index.html","topicHref":"index.html"},{"name":"NC Optimization Principles","href":"nc-optimization-principles.html","topicHref":"nc-optimization-principles.html"},{"name":"Corner Feedrate Behavior","href":"corner-behavior.html","topicHref":"corner-behavior.html"},{"name":"Machining Time Estimation","href":"machining-time-estimation.html","topicHref":"machining-time-estimation.html"}]}
|
||||
Reference in New Issue
Block a user