This commit is contained in:
2026-09-15 01:12:50 +08:00
parent 2db889ad89
commit 1a75503105
99 changed files with 4168 additions and 726 deletions
@@ -0,0 +1,68 @@
<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 990 350' width='990' height='350'>
<defs>
<marker id='axis' markerWidth='10' markerHeight='10' refX='8' refY='5' orient='auto' markerUnits='userSpaceOnUse'><path d='M0,0 L10,5 L0,10 z' fill='#222'/></marker>
<marker id='mom' markerWidth='12' markerHeight='12' refX='9' refY='6' orient='auto' markerUnits='userSpaceOnUse'><path d='M0,0 L12,6 L0,12 z' fill='#d0342c'/></marker>
<marker id='ang' markerWidth='9' markerHeight='9' refX='7' refY='4.5' orient='auto' markerUnits='userSpaceOnUse'><path d='M0,0 L9,4.5 L0,9 z' fill='#2a9d4a'/></marker>
<marker id='rot' markerWidth='9' markerHeight='9' refX='7' refY='4.5' orient='auto' markerUnits='userSpaceOnUse'><path d='M0,0 L9,4.5 L0,9 z' fill='#d0342c' opacity='0.6'/></marker>
</defs>
<rect width='990' height='350' fill='white'/>
<line x1='330' y1='30' x2='330' y2='320' stroke='#ddd' stroke-width='1'/>
<line x1='660' y1='30' x2='660' y2='320' stroke='#ddd' stroke-width='1'/>
<text x='28.0' y='42.0' font-size='26' fill='#444' text-anchor='middle' font-weight='bold' font-family='Segoe UI, Helvetica, Arial, sans-serif'></text>
<circle cx='150' cy='195' r='80' fill='#eef2f7' stroke='#9aa7b5' stroke-width='1.5'/>
<line x1='150.0' y1='195.0' x2='290.0' y2='195.0' stroke='#222' stroke-width='2' stroke-linecap='round' marker-end='url(#axis)'/>
<line x1='150.0' y1='195.0' x2='150.0' y2='55.0' stroke='#222' stroke-width='2' stroke-linecap='round' marker-end='url(#axis)'/>
<text x='296.0' y='201.0' font-size='19' fill='#222' text-anchor='start' font-weight='normal' font-family='Segoe UI, Helvetica, Arial, sans-serif' font-style='italic'>X</text>
<text x='146.0' y='49.0' font-size='19' fill='#222' text-anchor='end' font-weight='normal' font-family='Segoe UI, Helvetica, Arial, sans-serif' font-style='italic'>Y</text>
<line x1='150.0' y1='195.0' x2='70.0' y2='195.0' stroke='#9fbde6' stroke-width='5' stroke-linecap='round'/>
<line x1='150.0' y1='195.0' x2='230.0' y2='195.0' stroke='#1f5fbf' stroke-width='6' stroke-linecap='round'/>
<line x1='227.8' y1='195.0' x2='227.8' y2='117.2' stroke='#d0342c' stroke-width='1.5' stroke-linecap='round' stroke-dasharray='4 4' opacity='0.6'/>
<line x1='150.0' y1='117.2' x2='227.8' y2='117.2' stroke='#d0342c' stroke-width='1.5' stroke-linecap='round' stroke-dasharray='4 4' opacity='0.6'/>
<line x1='150.0' y1='195.0' x2='227.8' y2='117.2' stroke='#d0342c' stroke-width='3.5' stroke-linecap='round' marker-end='url(#mom)'/>
<text x='222.3' y='91.8' font-size='20' fill='#d0342c' text-anchor='middle' font-weight='bold' font-family='Segoe UI, Helvetica, Arial, sans-serif' font-style='italic'>M</text>
<line x1='227.8' y1='202.0' x2='227.8' y2='188.0' stroke='#d0342c' stroke-width='2.5' stroke-linecap='round'/>
<text x='227.8' y='209.0' font-size='17' fill='#d0342c' text-anchor='middle' font-weight='normal' font-family='Segoe UI, Helvetica, Arial, sans-serif' font-style='italic'>M<tspan font-size='13' dy='4'>x</tspan></text>
<text x='166.0' y='229.0' font-size='17' fill='#2a9d4a' text-anchor='start' font-weight='normal' font-family='Segoe UI, Helvetica, Arial, sans-serif' font-style='italic'>θ = 0</text>
<text x='165.0' y='328.0' font-size='19' fill='#333' text-anchor='middle' font-weight='normal' font-family='Segoe UI, Helvetica, Arial, sans-serif' font-style='italic'>M<tspan font-size='13' dy='4'>x</tspan><tspan dy='-4'> = |M| / √2</tspan></text>
<text x='358.0' y='42.0' font-size='26' fill='#444' text-anchor='middle' font-weight='bold' font-family='Segoe UI, Helvetica, Arial, sans-serif'></text>
<circle cx='480' cy='195' r='80' fill='#eef2f7' stroke='#9aa7b5' stroke-width='1.5'/>
<line x1='480.0' y1='195.0' x2='620.0' y2='195.0' stroke='#222' stroke-width='2' stroke-linecap='round' marker-end='url(#axis)'/>
<line x1='480.0' y1='195.0' x2='480.0' y2='55.0' stroke='#222' stroke-width='2' stroke-linecap='round' marker-end='url(#axis)'/>
<text x='626.0' y='201.0' font-size='19' fill='#222' text-anchor='start' font-weight='normal' font-family='Segoe UI, Helvetica, Arial, sans-serif' font-style='italic'>X</text>
<text x='476.0' y='49.0' font-size='19' fill='#222' text-anchor='end' font-weight='normal' font-family='Segoe UI, Helvetica, Arial, sans-serif' font-style='italic'>Y</text>
<line x1='480.0' y1='195.0' x2='423.4' y2='138.4' stroke='#9fbde6' stroke-width='5' stroke-linecap='round'/>
<line x1='480.0' y1='195.0' x2='536.6' y2='251.6' stroke='#1f5fbf' stroke-width='6' stroke-linecap='round'/>
<line x1='480.0' y1='195.0' x2='557.8' y2='117.2' stroke='#d0342c' stroke-width='2.5' stroke-linecap='round' stroke-dasharray='6 4' opacity='0.6'/>
<path d='M 561.7 121.4 A 110 110 0 0 1 588.0 174.0' fill='none' stroke='#d0342c' stroke-width='1.5' marker-end='url(#rot)' stroke-dasharray='3 4'/>
<line x1='557.8' y1='195.0' x2='557.8' y2='117.2' stroke='#d0342c' stroke-width='1.2' stroke-linecap='round' stroke-dasharray='4 4' opacity='0.35'/>
<line x1='590.0' y1='195.0' x2='590.0' y2='195.0' stroke='#d0342c' stroke-width='1.5' stroke-linecap='round' stroke-dasharray='4 4' opacity='0.6'/>
<line x1='480.0' y1='195.0' x2='590.0' y2='195.0' stroke='#d0342c' stroke-width='1.5' stroke-linecap='round' stroke-dasharray='4 4' opacity='0.6'/>
<line x1='480.0' y1='195.0' x2='590.0' y2='195.0' stroke='#d0342c' stroke-width='3.5' stroke-linecap='round' marker-end='url(#mom)'/>
<text x='540.5' y='179.0' font-size='20' fill='#d0342c' text-anchor='middle' font-weight='bold' font-family='Segoe UI, Helvetica, Arial, sans-serif' font-style='italic'>M</text>
<line x1='590.0' y1='202.0' x2='590.0' y2='188.0' stroke='#d0342c' stroke-width='2.5' stroke-linecap='round'/>
<text x='590.0' y='209.0' font-size='17' fill='#d0342c' text-anchor='middle' font-weight='normal' font-family='Segoe UI, Helvetica, Arial, sans-serif' font-style='italic'>M<tspan font-size='13' dy='4'>x</tspan><tspan dy='-4'></tspan></text>
<line x1='557.8' y1='201.0' x2='557.8' y2='189.0' stroke='#d0342c' stroke-width='1.5' stroke-linecap='round' opacity='0.45'/>
<text x='557.8' y='209.0' font-size='16' fill='#d0342c' text-anchor='middle' font-weight='normal' font-family='Segoe UI, Helvetica, Arial, sans-serif' font-style='italic' opacity='0.6'>M<tspan font-size='13' dy='4'>x</tspan></text>
<path d='M 532.0 195.0 A 52 52 0 0 1 516.8 231.8' fill='none' stroke='#2a9d4a' stroke-width='2' marker-end='url(#ang)'/>
<text x='540.9' y='241.4' font-size='17' fill='#2a9d4a' text-anchor='start' font-weight='normal' font-family='Segoe UI, Helvetica, Arial, sans-serif' font-style='italic'>θ = 45°</text>
<text x='495.0' y='328.0' font-size='19' fill='#333' text-anchor='middle' font-weight='normal' font-family='Segoe UI, Helvetica, Arial, sans-serif' font-style='italic'>M<tspan font-size='13' dy='4'>x</tspan><tspan dy='-4'> = |M|</tspan></text>
<text x='688.0' y='42.0' font-size='26' fill='#444' text-anchor='middle' font-weight='bold' font-family='Segoe UI, Helvetica, Arial, sans-serif'></text>
<circle cx='810' cy='195' r='80' fill='#eef2f7' stroke='#9aa7b5' stroke-width='1.5'/>
<line x1='810.0' y1='195.0' x2='950.0' y2='195.0' stroke='#222' stroke-width='2' stroke-linecap='round' marker-end='url(#axis)'/>
<line x1='810.0' y1='195.0' x2='810.0' y2='55.0' stroke='#222' stroke-width='2' stroke-linecap='round' marker-end='url(#axis)'/>
<text x='956.0' y='201.0' font-size='19' fill='#222' text-anchor='start' font-weight='normal' font-family='Segoe UI, Helvetica, Arial, sans-serif' font-style='italic'>X</text>
<text x='806.0' y='49.0' font-size='19' fill='#222' text-anchor='end' font-weight='normal' font-family='Segoe UI, Helvetica, Arial, sans-serif' font-style='italic'>Y</text>
<line x1='810.0' y1='195.0' x2='753.4' y2='251.6' stroke='#9fbde6' stroke-width='5' stroke-linecap='round'/>
<line x1='810.0' y1='195.0' x2='866.6' y2='138.4' stroke='#1f5fbf' stroke-width='6' stroke-linecap='round'/>
<line x1='810.0' y1='195.0' x2='887.8' y2='117.2' stroke='#d0342c' stroke-width='2.5' stroke-linecap='round' stroke-dasharray='6 4' opacity='0.6'/>
<path d='M 883.6 113.3 A 110 110 0 0 0 831.0 87.0' fill='none' stroke='#d0342c' stroke-width='1.5' marker-end='url(#rot)' stroke-dasharray='3 4'/>
<line x1='810.0' y1='195.0' x2='810.0' y2='85.0' stroke='#d0342c' stroke-width='1.5' stroke-linecap='round' stroke-dasharray='4 4' opacity='0.6'/>
<line x1='810.0' y1='85.0' x2='810.0' y2='85.0' stroke='#d0342c' stroke-width='1.5' stroke-linecap='round' stroke-dasharray='4 4' opacity='0.6'/>
<line x1='810.0' y1='195.0' x2='810.0' y2='85.0' stroke='#d0342c' stroke-width='3.5' stroke-linecap='round' marker-end='url(#mom)'/>
<text x='788.1' y='70.9' font-size='20' fill='#d0342c' text-anchor='middle' font-weight='bold' font-family='Segoe UI, Helvetica, Arial, sans-serif' font-style='italic'>M</text>
<line x1='887.8' y1='201.0' x2='887.8' y2='189.0' stroke='#d0342c' stroke-width='1.5' stroke-linecap='round' opacity='0.45'/>
<text x='887.8' y='209.0' font-size='16' fill='#d0342c' text-anchor='middle' font-weight='normal' font-family='Segoe UI, Helvetica, Arial, sans-serif' font-style='italic' opacity='0.6'>M<tspan font-size='13' dy='4'>x</tspan></text>
<path d='M 862.0 195.0 A 52 52 0 0 0 846.8 158.2' fill='none' stroke='#2a9d4a' stroke-width='2' marker-end='url(#ang)'/>
<text x='870.2' y='178.5' font-size='17' fill='#2a9d4a' text-anchor='start' font-weight='normal' font-family='Segoe UI, Helvetica, Arial, sans-serif' font-style='italic'>θ = 45°</text>
<text x='825.0' y='328.0' font-size='19' fill='#333' text-anchor='middle' font-weight='normal' font-family='Segoe UI, Helvetica, Arial, sans-serif' font-style='italic'>M<tspan font-size='13' dy='4'>x</tspan><tspan dy='-4'> = 0</tspan></text>
</svg>

After

Width:  |  Height:  |  Size: 9.5 KiB

@@ -104,10 +104,10 @@
<li>The impact of coordinate system misalignment is relatively smaller compared to the moment arm setting</li>
</ul>
</li>
<li><p><strong>Installation Angle Adjustment</strong></p>
<li><p><strong>Setup Angle Adjustment</strong></p>
<ul>
<li>If perfect alignment is not possible, measure the offset angle</li>
<li>Enter the measured angle in the &ldquo;Installation Angle&rdquo; field</li>
<li>Enter the measured angle in the cutter's <strong>Setup Angle</strong> field (Tool House → Cutter → Flute Contours)</li>
<li>The maximum possible deviation is 45 degrees</li>
</ul>
</li>
@@ -115,15 +115,24 @@
<h2 id="factors-affecting-accuracy">Factors Affecting Accuracy</h2>
<h3 id="coordinate-transformation-effects">Coordinate Transformation Effects</h3>
<ul>
<li>An installation angle deviation can cause up to a √2 factor difference in values</li>
<li>A setup angle offset rotates the measured (Mx, My) pair. The resultant |M| does not change, but a single channel can read anything from 0 to |M| — the same 45° offset takes Mx to √2 times its aligned value one way and to zero the other way</li>
<li>This difference is inherently a result of coordinate transformation, not a measurement accuracy issue</li>
<li>Even with the same smart tool holder, different installation angles will produce different measurement data</li>
<li>Even with the same smart tool holder, different setup angles will produce different measurement data</li>
</ul>
<p><img src="smart-tool-holder-img/setup-angle-rotation.svg" alt="Three top-view sketches of a two-flute cutter section: on the left the cutting edge lies on the sensor X axis and the moment vector M sits at 45°; in the middle the edge is turned 45° one way, M turns with it onto the X axis and Mx becomes the whole of |M|; on the right the edge is turned 45° the other way, M lands on the Y axis and Mx becomes zero">
<em>① — the cutting edge (blue) lies on the sensor X axis, θ = 0; in this example the transverse
moment M the cut produces sits at 45°, so Mx = My = |M|/√2. ② — the same cutter mounted with its
edge 45° clockwise of the X axis. Nothing about the cut has changed, so M is carried round with
the edge and lands on the X axis: Mx = |M|, √2 times the value in ①, and My = 0. ③ — the same
45° the other way puts M on the Y axis, and Mx = 0. In general Mx = |M| · cos(angle between M
and the sensor X axis): the resultant never changes, and one channel on its own can read anything
between 0 and |M| — a coordinate effect, not a measurement error. Entering θ as the cutter's
Setup Angle lets the simulation report in the sensor's own frame.</em></p>
<h3 id="best-practices">Best Practices</h3>
<ol>
<li>Prioritize accurate moment arm height configuration</li>
<li>Align the cutting edge with the sensor X-axis as closely as possible</li>
<li>If perfect alignment is not achievable, always measure and set the correct installation angle</li>
<li>If perfect alignment is not achievable, always measure and set the correct setup angle</li>
</ol>
<p>Only with these parameters correctly configured will the simulated micro-waveforms match the actual sensor measurements.</p>
<h2 id="see-also">See Also</h2>
@@ -101,7 +101,7 @@
</ul>
<p>For a known cutter, configure the matching material file under <code>Resource/CutterMaterial/</code> rather than guessing the grade.</p>
<h2 id="before-reaching-for-the-cutter">Before Reaching for the Cutter</h2>
<p>The cutter-side levers below are for when the cutting parameters have already been tried, because
<p>The cutter-side levers above are for when the cutting parameters have already been tried, because
the parameters are cheaper to change. In order:</p>
<ol>
<li><strong>Reduce feed per tooth.</strong> The most direct route to lower force, and the one the optimizer