simulation_singular1_without_singularity_algorithm(下稱 sim1,1,116 行)。配套論文 L. Wu、H. Liu、Z. Cui、W. Zong,Fabrication of randomly distributed V grooves on the great circles of a spherical surface using ultra-precision five-axis milling,Precision Engineering 85(2024)48–64,doi:10.1016/j.precisioneng.2023.09.005,不是開放取用,沒有讀。
NC codes for a research in fabrication of randomly distributed V grooves on a spherical surface、bcskc575nm、simulation_singular1_without_singularity_algorithm用機械座標寫的五軸程式,只在算它的那台機上才對。sim1 用 T01 刻槽 A(第 6–560 行)、用 T04 刻槽 B(第 563–1114 行)。每條槽從赤道附近(B 約 60°)爬到槽頂:那裡 B 約 0、刀軸直立,刀尖在 Z 3.631、離 C 軸 4.12 mm;再下到另一側的赤道。程式假設刀尖剛好在 B 軸上,基礎案也正是靠這個假設反推出機台。真機上刀尖在哪裡由對刀決定,永遠會差一點。差 10 µm 時,這兩條槽長什麼樣子?控制器知不知道這個誤差,有沒有差別?
AI 代理把這個誤差放進基礎案的機台:B 軸中心比刀尖高 10 µm,等於刀比程式假設的 70 mm 長了 10 µm,或主軸鼻端在 B 頭裡低了 10 µm。它是一個沿刀軸 10 µm 的靜態平移,名叫 TipOffB,放在 B 軸與主軸之間一條自己的連接上,標成誤差項。HiNC 的誤差項放在一軸或主軸的連接正前方,而這台機的主軸連接沒有帶旋轉,不擔任主軸角色;所以代理先把它改成繞刀具自身軸線轉的主軸(這條軸線穿過刀尖),再綁上主軸角色。HiNC 的控制器算機械座標時,當作這條標記的連接不存在;專案的「啟用誤差項」開著時,模擬的機台卻帶著它移動、切削,就像一台控制器不知道這個誤差的真實機台。在 B 0 碰數,會把這 10 µm 吃進 G54 Z;HiNC 的 P0 量的是照設計的機台,不會吃進去,所以有誤差的那幾趟照 HiNC 手冊重現工廠切削結果的做法,手動打入 G54 (−15, 0, +0.010)。程式一行都沒改。
第一次播放前,代理先提交計畫:預期的刀尖偏移、每個特徵的偏差,以及七條通過標準。先播的是修剪案:sim1 的縮短複本,第 1–288 行加上第 289 行的前半,進刀到 B 60°、刻完槽 A 的前半,最後讓刀停在第一個坑的坑底。它用來驗建置、驗公式、驗碰數姿態與坑,也看真實的 10 µm 到底讀不讀得到。接著把 sim1 整案播三次,和這裡每一趟一樣用 0.0625 mm、只看幾何:
修剪案除了名目與有標記的兩趟,還有一趟清掉標記,相當於做過運動學校正、知道這個誤差的控制器。程式照寫的數字加上工件座標直接送到各軸,完全不經機台的運動鏈,所以計畫預期這一趟與有標記的逐位相同,不只是接近;在修剪案跑一趟就足以說明。
畫面由 HiNC 在基礎案的通用機台上繪出,機台上帶著代理加進去的誤差項連接;程式是作者的,照原樣播放,只有第一張畫面背後是縮短的複本。顏色是 HiNC 的幾何差異(色條上的 Df),比對對象是名目那一趟切出的工件;色階 ±0.007 mm,正負對稱:紅=過切、藍=留料、綠=0。畫面是把記下的工件連同 Diff 放回畫布拍的,不是重播;第一張另播縮短的程式,把刀帶進畫面。格距 0.0625 mm。圖表由 HiNC 的逐步結果與匯出的切削網格畫成。
| 關鍵數字 | 意思 |
|---|---|
| 10 µm | 誤差:B 軸中心沿刀軸比刀尖高 10 µm,等於刀比程式假設的 70 mm 長了 10 µm;照 ISO 230-7 的說法,是 B 軸相對主軸、沿刀軸方向的位置誤差。這是代理選的典型值,這台通用機沒有量過。在 B 0 碰數會把它吃進 G54 Z,所以有誤差的那幾趟打入 G54 (−15, 0, +0.010) |
| 1.8×10⁻¹⁴ mm | 4,961 個切削步量到的刀尖偏移,與第一次播放前寫下的公式 ΔCl = dz·(−sin B·cos C, −sin B·sin C, 1 − cos B)(dz = 10 µm)的最大差:B = 0 時是 0,B 59.97° 時 9.996 µm。機械座標的 X、Y、B、C 與名目逐位相同 |
| 48.6° | 兩條槽從頭到尾,刀軸對球面法向都保持這個角度,所以槽深方向的誤差只看刀尖高度:Δr = −dz·(3.631 − Z)/5.4943,槽頂是 0,四個槽端預測 −7.0 µm |
| −6.45 · −7.33 µm | 四個槽端的槽:127 個頂點的槽底中位數(逐點預測 −6.54 µm),以及最深處(設計 −7.0 µm)。這 7 µm 是這道程式名目切深 25 µm 的 28% |
| 0.29 µm | 沿高度分 31 格,槽底中位數與計畫公式的最大差。陡壁讀到 0.71 倍 Δr、槽底 0.97 倍,都與預測相符;只有最深處讀到的就是 Δr |
| 3.63084 · 4.52138 mm | 兩個坑裡切削離球心最近的距離,有誤差與沒誤差相同,也與基礎案相同:奇異單節發生在 B≈0,那裡刀尖最多只偏 0.047 µm。坑區 13,784 個頂點 99.91% 在 0.5 µm 內 |
| 逐位相同 | 修剪案清掉標記的那一趟,相當於知道誤差的控制器:3,037 個配對步的機械座標與有標記的相同,切削件的網格距離檔逐位元組相同。只有第 16 行(空中的 C 定位)是 2,806 步,有標記的是 2,807 步 |
| 1 小時 35 分 | 六趟 0.0625 mm 播放在共用的 32 執行緒伺服器上的時間:修剪三趟,每趟 10.0–12.0 分鐘;整案三趟,每趟 20.6–21.0 分鐘、16,018 或 16,019 步。記憶體峰值最高的一趟是 3.67 GB(3.42 GiB) |
旋轉軸的誤差,這一系列誤差項案例通常放成軸正上游的一條平移:旋轉中心偏離設計位置。這台機上,這樣做零件上什麼都留不下。B 上游的平移會把 B 的樞點連同吊在它下面的主軸與刀一起搬,刀尖仍在 B 軸上,任何 B 都只差同一個常數,碰數就把它吃掉了。C 上游同理,因為球吊在 C 底下。B 軸傾斜只會讓刀軸繞著不動的刀尖轉;直線軸的垂直度,在這裡 ±4 mm 的行程上只有 0.2 µm。這些是設計代理在這顆球上逐一算的,一個都沒有播。能留下微米級痕跡的定值誤差只有一種:刀尖不在 B 軸上,而這正是這道程式所倚賴的假設。所以誤差放在 B 下游、緊接主軸之前,有誤差的那幾趟打入在 B 0 碰數會量到的 G54。打入的 G54 生效之後,B = 0 的 856 個配對步與名目差不到 1.5×10⁻¹⁴ mm。
V 槽比一格還小:刀的平端中心只在毛胚面下 25 µm,平端外緣 62.5 µm;槽端預期的 7 µm 只有格寬的 11%。把誤差放大,就得為每張畫面說明換算,還要多播一趟整案。設計留了 ×50 的備案(dz 0.5 mm、色階 ±0.35 mm),並先寫好判準:修剪案的槽端窗比名目深至少 5 µm,而且對照趟的 99 百分位在 2 µm 內,就用真實值。修剪案沒有對照趟,所以做決定時只量得到前半:槽 A 起點的槽底中位數 −6.47 µm。於是整案用真實的 10 µm、色階 ±0.007 mm,×50 那一趟沒有播。後半是事後在整案的對照趟補量的,也通過:99 百分位 4.2×10⁻¹⁰ mm。
槽有兩個面:刀的 30° 錐面切出的長而緩的槽底,與球面只差 11.4°;刀的平端切出的陡壁,法向就是刀軸,與球面法向差 48.6°。兩面在平端外緣相交,那裡是槽的最深處。網格距離量的是各面沿自己法向的位移,不是槽深方向:槽底讀到 0.97 倍 Δr,陡壁 0.71 倍,只有最深處讀到的就是 Δr。混在一起看,陡壁會像是誤差模型不準。分析用自己定的規則把槽的頂點分到兩個面,計畫的標準以槽底判;再把名目的刀整支平移該步的 ΔCl,逐點算出每個頂點的預測:量到減預測的中位數,槽底 3,243 個頂點是 +0.02 µm,陡壁 899 個頂點是 +0.01 µm。槽端的陡壁讀到 −4.63 µm,預測 −4.82 µm。把陡壁併進槽底,標準照樣通過:31 格與公式都差在 0.44 µm 內。
誤差項開切出的工件對名目工件,讀到 −253 到 +130 µm,是最大刀尖偏移的二十幾倍。距離搜尋只看最近 12 個三角形的重心,可能把距離算大,所以搜尋讀到超過 8 µm 的 243 個頂點,都用精確的點到三角形距離重算:全部是真的距離,與搜尋值差不到 1.5×10⁻⁸ mm。其中 213 個在槽 B 末端下方一塊未切的毛胚球面上,離名目切削最近的三角形 8.1 到 253.3 µm:名目那一趟匯出的切削網格在那裡沒有面,重播它的對照趟也沒有。所以這既不是切削的差,也不是搜尋的假象;為什麼缺這一塊,紀錄說不出來。這一塊(327 個頂點)排除在分區統計之外。另外 30 個在兩條槽底邊的尖稜上,−19.4 到 −8.1 µm,也是真的:0.0625 mm 的網格在兩件切削件上把這道尖稜削圓的方式不同。HiNC 自己的 Diff 在這一趟回報 72 個 NaN 葉,對照趟只有 1 個,紀錄沒有位置;第一張畫面裡槽 B 末端下方那一小塊灰斑就在這一塊上,可能就是它們,這一點沒有查證。
其餘四個都在完整紀錄裡:主軸連接原本不擔任角色,代理先把它改成繞刀具自身軸線轉的主軸,誤差才放得到它前面,兩個坑證明切削沒有因此改變;誤差項開的那一趟多一步,所以兩趟改以程式行配對,沒有照計畫寫的方式對齊,而且 B = 0 的零偏差要等打入的 G54 生效才成立;不標記那一趟在第 16 行少一步;以及一個沒有成真的疑慮:在固定的運動解析度下,HiNC 每一步切除的是刀在前後兩個姿態之間的凸包,刀繞著不動的點轉時,凸包會退化;開了誤差,刀改繞刀尖外 10 µm 的點轉,六趟都順利跑完。
六趟都播到結束,沒有碰撞、沒有行程警報,sim1 會動到軸的程式行都有播到,共 1,094 行。警告只有程式本身的 G14 與 M25(HiNC 不解讀這兩個碼),以及 Diff 提醒它的目標是匯出的切削件、不是封閉網格。第一次播放前寫下的七條標準,五條照原文通過:建置、每趟乾淨跑完、對照趟、槽與成本紀錄。兩條照原文各有一部分沒過:刀尖那一條在碰數姿態 B = 0 的部分,打入的 G54 Z 生效前、停在空中的 909 步正好偏 10 µm;不標記那一條要求逐步相同,差在第 16 行。
誤差項開、控制器不知道時,4,961 個切削步的刀尖都落在第一次播放前寫下的公式上,最大差 1.8×10⁻¹⁴ mm。偏移在 B = 0 時是 0,照 2dz·sin(B/2) 長大,進刀時 B 59.97° 達到 9.996 µm;它只看 B,C 只轉它的方向,與刀在球上的哪一點無關。沿著槽拆開:槽深方向分量 Δr;朝槽頂的沿槽分量 0.021 到 7.071 µm,槽端最大;離開槽平面的分量,槽 A 是 0、槽 B 0.007 µm,槽仍留在原本的平面上。機械座標的 X、Y、B、C 與名目逐位相同,Z 差打入的 +0.010 mm,只有停在機械零點的步不差。誤差項開的那一趟多了兩個切削步:第 20、576 行進刀的最後一步,刀尖往球心深了約 7 µm,碰到了毛胚。
刀軸對球面法向恆成 48.6°,所以槽深方向的分量只看刀尖高度:Δr = −dz·(3.631 − Z)/5.4943,槽頂是 0,往赤道越深;在五軸單節的 4,250 步上,與這條式子差不到 0.0003 µm。零件上,以誤差項開切出的工件每個頂點到名目工件的帶號距離來量,槽底的中位數在四個槽端是 −6.45 µm,B≈50° −4.88 µm,40° −3.20、30° −1.79、20° −0.82、10° −0.21,槽頂 −0.03 µm。把名目的刀整支平移該步的 ΔCl、逐點算出的預測,與這些中位數差在 0.1 µm 內;沿高度分 31 格,槽底中位數與計畫公式差在 0.29 µm 內。槽端最深處讀到 −7.33 µm,設計 −7.0 µm。槽也變寬了:由兩面的角度推得是 5.86 倍 |Δr|,槽端約 41 µm;0.0625 mm 的網格只看得出趨勢。
其他地方都沒動。兩個坑離球心最近仍是 3.63084 與 4.52138 mm,與沒有誤差時相同,坑區 13,784 個頂點 99.91% 在 0.5 µm 內。未切的球面(排除名目網格缺面的那一塊)99.999% 的頂點也在 0.5 µm 內,柄與腳全部都在。排除那一塊之後,整件 235,812 個頂點 98.5% 在 0.5 µm 內,偏離 0 的都在兩條槽裡或槽邊;最低的 −19.42 µm 在槽 B 底邊的尖稜上,用精確距離核對過。程式自己的錯(B≈0 的坑)與機台的錯(隨 B 長大的槽深),在同一顆球上留下不同的指紋。
對照趟(誤差項關、做 Diff)其實就是名目趟再播一次:16,018 步的刀尖、機械座標與每步是否碰到毛胚,全部逐位相同,235,904 個頂點與名目工件都差在 5.0×10⁻¹⁰ mm 內。代理補上的主軸沒有改變切削:證據不是對照趟(兩趟都帶著這個改動),而是兩個坑。名目切削的 3.63084 與 4.52138 mm,與基礎案的結果相同:sim1 的 3.6308 mm,以及 sim2 的 4.5214 mm(sim2 是作者的另一支程式,它的第 288–289 行就是 sim1 的第 844–845 行)。
清掉標記,相當於做過運動學校正、知道這個誤差的控制器;開關仍開著、G54 照樣打入,修剪案切出同一件工件:3,037 個配對步的機械座標與有標記的逐位相同,刀尖差在 1.8×10⁻¹⁵ mm 內,切削件的網格距離檔逐位元組相同,HiNC 的 Diff 統計也一樣。程式是機械座標,沒有 G43.4、G68,也不是 CL,控制器把程式加上工件座標直接送到各軸;知道誤差,也沒有東西可以補。唯一的差別在第 16 行,一段在空中、從 C0 轉到 C144.756 的定位,刀尖離 C 軸 14.7 mm:不標記 2,806 步,有標記 2,807 步,兩端點相同。HiNC 依運動解析度(這裡是 0.01 mm、0.5°)把一行分成「刀尖弦長/0.01 mm」與「轉角/0.5°」兩者較大的步數,而這裡的刀尖是控制器自己算的:有標記時用名目的鏈,刀尖離 C 軸 14.7247 mm,弦長 28.0674 mm,2,807 步;不標記時含誤差,14.7162 mm、28.0514 mm,2,806 步。兩個數都對得上;這是讀數字得到的一致,沒有追程式碼。
要讓刀尖回到程式上,後處理得把每個單節寫成 X′ = X + dz·sin B、Z′ = Z − dz·(1 − cos B),搭配碰數的 G54:B 60° 時是 +8.66 與 −5.0 µm。這是由公式推得的,沒有播放。另一條路是在機台上把刀尖調回 B 軸上。只有 RTCP 程式,才輪得到校正過的控制器出手。
這裡只放了一個固定的誤差:刀尖沿刀軸偏離 B 軸。真實的 B 頭同時還有別的誤差:B 0 時刀尖橫向偏離 B 軸,會讓槽端移位、槽離開原本的平面,槽深也不再只看高度;B 軸的傾斜;C 的徑向跳動。主軸熱伸長會讓 dz 隨時間變,固定值的誤差項表達不了。大小與正負號是選的:10 µm 是典型值,不是量測值。刀尖每低 1 µm,槽端多深 0.70 µm;若刀尖反而高於 B 軸中心,正負全部反過來,槽往赤道越切越淺,槽端留料 7 µm。碰數是打入的,並假設在 B 0 碰數。這裡 T01 與 T04 刀長相同;真機上第二把刀會有自己的刀長誤差。播放只看幾何,沒有切削力、撓曲與熱,也沒有播作者的修正版程式。一切都是模擬,沒有真的切過任何一顆球。
看完整的案例紀錄:球面 V 槽,刀尖低於 B 軸中心 10 µm
機台、毛胚與刀具怎麼只憑 NC 推出來,寫在那份紀錄裡;基礎案沒有自己的對外頁。