This commit is contained in:
2026-09-09 17:35:23 +08:00
parent 2a98ae7556
commit 161af68fe3
1271 changed files with 58251 additions and 98639 deletions
@@ -87,9 +87,32 @@
<article data-uid="Equipment/Coolant">
<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>
<p>Two thermal settings sit beside each other in the equipment tree: how the cutting zone is cooled,
and how warm the shop is around it. Both feed the milling-temperature model, so they move computed
temperatures and everything downstream of them — and setting them needs no heat-transfer numbers at
all, because the cooling types ship as ready-made files.</p>
<h2 id="where-it-is">Where it is</h2>
<p>The General Setup page, at <code>/general-setup</code>, reached from the menu bar's <strong>Page</strong> dropdown.
<strong>Background</strong> (<code>/general-setup?tree=equipment/background</code>) and <strong>Coolant</strong>
(<code>/general-setup?tree=equipment/coolant</code>) are two leaves of the Control Tree, sitting together
between Spindle Capability and Fixture. Both are inert until a project is open: the fields are
disabled and the panel says so.</p>
<p>The <strong>Coolant</strong> leaf selected on a demo project. The panel under the tree opens with the file row —
the <strong>Select</strong> dropdown, the path field reading <em>No coolant file (saved inline)</em>, and <strong>Save As&hellip;</strong>
— then the read-only <strong>Name</strong> and <strong>Note</strong> of whatever file is loaded, and then the condition's own
values. Neither leaf puts anything in the middle column.</p>
<p><img src="coolant-img/coolant-leaf.en.png" alt="The Coolant leaf of the Control Tree selected on the General Setup page, its panel showing the Select dropdown and empty file path above read-only Name and Note fields, then a Coolant Temperature of 25 °C and a Flood Convection Coefficient of 1000 W/(m²·K) with the app's own guidance underneath it"></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&hellip;</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>
<p>The three standard cooling types ship as ready-made <code>.CoolantHeatCondition</code> files, so picking one
<em>is</em> the cooling-type selection — exactly the way a workpiece material file is picked.</p>
<ol>
<li>Select the <strong>Coolant</strong> leaf.</li>
<li>Open the <strong>Select</strong> dropdown at the left of the file row and choose <strong>Browse Resource&hellip;</strong>. It
opens the file picker in the shipped library's own coolant folder, so the three files below are
what it lists. <strong>Browse&hellip;</strong> above it opens the same picker without that jump, which is how a
condition you saved yourself is reached.</li>
<li>Pick the file that matches the machine.</li>
</ol>
<table>
<thead>
<tr>
@@ -104,7 +127,7 @@
</tr>
<tr>
<td><strong>StandardWaterSolubleCoolant</strong></td>
<td>Water-based emulsion coolant, the common flood coolant. (A fresh project already carries these values.)</td>
<td>Water-based emulsion coolant, the common flood coolant.</td>
</tr>
<tr>
<td><strong>StandardOilBasedCoolant</strong></td>
@@ -112,136 +135,74 @@
</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&hellip;</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>
<p>Loading a file fills the read-only <strong>Name</strong> and <strong>Note</strong> and every value below them, and reports the
name it loaded.</p>
<p><strong>A project nobody has touched here is not neutral.</strong> Every project carries a coolant condition from
the moment it exists, and it starts on the water-soluble numbers — 25 °C, a flood baseline of
1000 W/(m²·K), a mist ratio of 0.5 and 50 W/(m²·K) with the coolant off. The read-only <strong>Name</strong> is
blank, because no file has been picked, and that blank is the only sign that nobody chose these
values. A dry-cutting machine left alone therefore simulates as though it were flooded with
water-soluble coolant, and its computed temperatures come out low.</p>
<h2 id="the-four-values">The four values</h2>
<p>They are visible whether or not a file is loaded, and editing one tunes <em>this project's</em> copy rather
than the file it came from. Each carries the app's own working range as a hint:</p>
<table>
<thead>
<tr>
<th>M-code</th>
<th><code>CoolantMode</code></th>
<th>Coefficient source</th>
<th>Field</th>
<th>What it is</th>
<th>Range the panel suggests</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>M08</code></td>
<td><code>Flood</code></td>
<td><code>CoolantConvectionCoefficient_Wdm2K</code> (baseline of the chosen type)</td>
</tr>
<tr>
<td><code>M07</code></td>
<td><code>Mist</code></td>
<td>baseline × <code>MistFloodConvectionRatio</code></td>
</tr>
<tr>
<td><code>M09</code></td>
<td><code>Off</code></td>
<td><code>OffConvectionCoefficient_Wdm2K</code></td>
</tr>
</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 &ldquo;air blast on&rdquo; — 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>
<th>Property</th>
<th>Default</th>
<th>Notes</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>CoolantTemperature_C</code></td>
<td>25</td>
<td>Room temperature inside the enclosure.</td>
</tr>
<tr>
<td><code>CoolantConvectionCoefficient_Wdm2K</code></td>
<td>1 000</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>
<td>0.5</td>
<td>MQL is roughly half the heat removal of flood. See below.</td>
</tr>
<tr>
<td><code>OffConvectionCoefficient_Wdm2K</code></td>
<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><strong>Coolant Temperature</strong> (°C)</td>
<td>The temperature of the coolant as it arrives at the cut</td>
<td>—</td>
<td>From the loaded file / preset; <strong>Save As&hellip;</strong> renames the condition after the file. Legacy projects without a name still work.</td>
</tr>
<tr>
<td><strong>Flood Convection Coefficient</strong> (W/(m²·K))</td>
<td>Heat removal with the coolant on</td>
<td>Forced air 10–500; typical liquid coolant 1000–10000</td>
</tr>
<tr>
<td><strong>Mist / Flood Ratio</strong></td>
<td>Mist heat removal relative to flood</td>
<td>Typically 0.4–0.8</td>
</tr>
<tr>
<td><strong>Off (Air) Convection Coefficient</strong> (W/(m²·K))</td>
<td>Heat removal with the coolant off</td>
<td>Natural air 5–25; forced air inside an enclosure about 50</td>
</tr>
</tbody>
</table>
<h2 id="why-the-mist-ratio-defaults-to-05">Why the mist ratio defaults to 0.5</h2>
<p>MQL removes much less heat than flood because a thin oil aerosol has a tiny thermal mass; its main value is lubrication plus evaporative cooling, not convection. Industry handbooks place it at <strong>roughly half of flood</strong>, which gives the conservative default <code>0.5</code>. Override it when you have dynamometer / thermocouple data for your own MQL system.</p>
<div class="NOTE">
<h5>Note</h5>
<p>Further reading: UNIST <em>MQL Handbook</em> (source of the &ldquo;about half&rdquo; 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>
<p>Negative temperatures are accepted, for cryogenic coolant; the three convection coefficients cannot
go below zero.</p>
<p>Which of the three coefficients is in force at any moment is not decided here — the NC program's own
M07 / M08 / M09 decide it, step by step. That, and what the numbers do to the simulation, are
<a class="xref" href="../../technique/milling-physics/coolant-model.html">Coolant Model</a>.</p>
<h2 id="keeping-a-tuned-condition">Keeping a tuned condition</h2>
<p><strong>Save As&hellip;</strong> writes the current values out as a <code>.CoolantHeatCondition</code> file in the project folder
and starts tracking it, so the project saves a reference to the file instead of a copy of the
values. It offers a name taken from the loaded condition; a file picked from the shipped library
loses its <code>.default</code> marker on the way, because that marker means <em>shipped</em> and a file you saved is
yours.</p>
<p>The result is loadable into the next project through the same <strong>Select</strong> dropdown — which is the
point of saving one: a shop with its own measured coolant performance describes it once.</p>
<h2 id="background-temperature">Background temperature</h2>
<p>The <strong>Background</strong> leaf carries a single field, <strong>Background Temperature</strong> in °C: the surrounding
temperature the thermal model works against. It defaults to 25 °C, it belongs to the project exactly
as the coolant condition does, and it is read by the same milling-temperature model and by the feed
optimizer, so it is not a display setting.</p>
<p>Set it to the shop's real ambient. There is no file to load and nothing else to configure: one
number, applied to the whole project.</p>
<h2 id="see-also">See Also</h2>
<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>&lt;CoolantHeatCondition&gt;&lt;XmlSource&gt;relPath&lt;/XmlSource&gt;&lt;/CoolantHeatCondition&gt;</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&lt;CoolantHeatCondition&gt;</code>); a file loaded from the resource folder is copied into the project on the next save (self-contained project root).</li>
<li><a class="xref" href="../../technique/milling-physics/coolant-model.html">Coolant Model</a> — the coefficients, the M-code that selects one, the shipped presets and the file format</li>
<li><a class="xref" href="../../anatomy/general-setup/background-coolant.html">Background / Coolant Page</a> — the Control-Tree editor for these values, field by field</li>
<li><a href="index.html">Setup</a> — the rest of the pre-simulation configuration</li>
</ul>
<h2 id="xml">XML</h2>
<pre><code class="lang-xml">&lt;CoolantHeatCondition&gt;
&lt;Name&gt;StandardOilBasedCoolant&lt;/Name&gt;
&lt;Note&gt;Oil-based cutting fluid (neat oil).&lt;/Note&gt;
&lt;CoolantTemperature_C&gt;25&lt;/CoolantTemperature_C&gt;
&lt;CoolantConvectionCoefficient_Wdm2K&gt;300&lt;/CoolantConvectionCoefficient_Wdm2K&gt;
&lt;MistFloodConvectionRatio&gt;0.5&lt;/MistFloodConvectionRatio&gt;
&lt;OffConvectionCoefficient_Wdm2K&gt;50&lt;/OffConvectionCoefficient_Wdm2K&gt;
&lt;/CoolantHeatCondition&gt;
</code></pre>
<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>&lt;XmlSource&gt;</code> reference shown above.</p>
</article>