智慧刀把¶
智慧刀把是一種具備感測功能的工具機配件,能夠即時監測加工過程中的力和力矩數據。為了確保模擬結果的準確性,需要正確設定以下參數:
感測器設定¶
力臂高度設定¶
模擬出來、對感測器取的力矩,是在刀軸上的一個點——刀具的觀測點——取的。凡是要拿去與刀把的彎矩通道相比的東西,都在那裡計算:每一步對感測器的力矩結果、下文的安裝角估計,以及由刀把錄製資料做的係數訓練。把這個點沿著刀軸移動,軸向扭矩 Mz 不變,彎矩 Mx 與 My 則大致隨力臂成比例改變。因此高度填錯,只會是彎矩通道上的一個倍率誤差,而且沒有任何東西會報告它。
這個點是一個錨點加上一段沿刀軸的高度,朝主軸方向為正。它在刀具的「智慧刀把」節點上設定(「參照」與「相對於參照的 Z」)——控制樹只在「偏好設定」選單的「顯示物理選項」開啟時才顯示這個節點——也可以經由 HTTP API 以 PUT /api/ToolHouse/{id}/observation 設定,本體例如 {"reference": "HolderAnc", "relativeHeight_mm": 95};沒有給的欄位保留原值。
| 參照 | 錨點 | 感測器位置這樣給時適用 |
|---|---|---|
HolderAnc——刀把錨點 |
刀把鼻端,也就是夾住刀具本體的那一端(柱狀刀把輪廓的 Z = 0);刀具沒有刀把時則是主軸量規線 |
刀把鼻端之上的一段距離 |
ToolTip——刀尖 |
刀具本體的刀尖 | 刀尖之上的一段距離;刀具本體每重夾一次它就會變 |
SpindleMountAnc——主軸安裝點 |
主軸量規線,刀具與機台相接之處 | 距量規線的一段距離;感測器若在它下方,高度為負 |
None |
沒有點 | 都不適用:對感測器的力矩取在一個未定義的高度上,所以它的彎矩分量與大小都讀作 NaN(軸向分量仍等於對刀尖的扭矩) |
感測器內建在刀把裡時,HolderAnc 是自然的參照。應變規相對於刀把鼻端是固定的,所以填進去的高度在伸出量改變之後依然成立,而從刀尖起算的力臂就是伸出量加上這個高度:鼻端之上 95 mm 的應變規,配上伸出 30 mm 的刀具本體,力臂是 125 mm。刀把鼻端與伸出量在哪裡,見刀具幾何。
新刀具從 HolderAnc 與高度 0 開始——那是刀把鼻端,而應變規並不在那裡。就這樣留著的話,上面那個例子會以 30 mm 而不是 125 mm 的力臂計算,模擬出來的彎矩就會小了大約四倍。
「觀測環半徑」只決定刀具畫布上畫在觀測點的那個綠色圓環有多大,沒有任何計算會讀它。它從 0 開始,畫不出看得見的環;填刀把在感測器處的外半徑,會是個有用的值。
座標系對齊¶
-
基本原則
- 刀刃應對齊感測器的X軸
- 確保感測器XY坐標系與模擬XY坐標系一致
- 座標系對齊的影響程度相對力臂設定較小
-
安裝角度調整
- 如果無法完全對齊,請測量偏移的角度——或讓軟體由一小段錄製資料估出來,見下文「從錄製資料估計安裝角」一節
- 把角度填入刀具的安裝角欄位(刀具庫 → 該把刀具 → 夾持)——也就是刀具本體在刀把裡繞刀軸轉過的角度
- 物理計算把每一條刃擺在刀具本體的刃偏移角(該刃在刀具本體上的角位置)加上這個安裝角的位置,所以一把刃偏移角不為零的刀具本體,會與這裡填的角度疊加起來
- 均勻刃雕構型的偏差不會超過半個刃距——四刃 45°、三刃 60°、兩刃 90°——因為把刀具本體轉過整整一個刃距,就會有另一條一模一樣的刃落到軸上;刃距不等的自由刃雕構型沒有這種對稱性
從錄製資料估計安裝角¶
球頭銑刀沒有一條刃可以對齊感測器軸:刀刃沿著螺旋線彎向軸心,所以要填進去的角度只能用猜的。這個角度可以改由刀把自己的錄製資料估出來。把刀轉一個角度裝上去,對主軸旋轉座標系的力矩做了兩件事:每一筆 (Mx, My) 取樣都轉了那個角度,而波形也沿著旋轉方向平移。係數訓練本來就會做的逐步相位搜尋會把那個平移吸收掉,剩下的就是每一步共有的那一個旋轉。SessionShell.EstimateSetupAngle (API) 會對著由已知切削參數建出的模型,擬合出那個旋轉(連同一個自由的比例係數),並以刃距為模回報它——四刃刀是 90°——同時附上判斷可不可信所需的診斷值。套用的估計值會把刀具在「夾持」節點上的安裝角依該值往前推進,各種刃雕構型一視同仁;刀具本體的刃雕維持當初設計的樣子,不會被動到。
EstimateSetupAngle(Mx|My, "Output/setup-angle.json"); // 估計並回報
EstimateSetupAngle(Mx|My, "Output/setup-angle.json", true); // ……並套用到刀具上
ResetRuntime(); // 物理工作階段會快照刃形幾何:重播前先重置
錄製資料和任何訓練資料一樣會被對映到步驟上(見銑削力參數訓練);估計讀的是對映後的彎矩。取樣的那一刀必須提供什麼:
- 間歇接觸。 刀刃在每一轉之內切入又切出,才讓角度顯現出來。全嚙入、好幾刃同時接觸的一刀幾乎會把它抵銷掉:合力在一整轉內幾乎不變,刀把看到的是一個純粹在旋轉的向量,而旋轉此時與時間平移無法區分。刃數愈多、同時接觸愈多,估計就愈困難;估計會以偏低的
Contrast回報這件事並提出警告。輕量的側銑與薄壁穿越——如智慧刀把訓練所述——才是對的切削形狀。 - 兩個橫向通道都要,Mx 與 My。Mz 是選用的,只會讓相位對齊更銳利;它本身不帶任何角度資訊。
- 在刀具壽命的早期。 每一次裝刀估一次;取樣裝上之後的第一段切削,趁磨耗還沒把切削力帶離參數之前。寧可取好幾段約一秒的窗,也不要取單一的切入或切出事件——它們的暫態並不穩定。
- 一個不依賴這支刀把的參數。 安裝角與參數本身的力方向,是以一個合併後的旋轉進入刀把資料的。一個在未知安裝角下、由這支刀把自己訓練出來的參數,早已把角度吸收進係數裡,估出來會是零;請使用測力計訓練或資料庫的參數,或是在角度已知的情況下訓練的參數,而且不要在套用了對著它估出的角度之後,又去重訓那個參數。
怎麼讀報告:Angle_deg 是要加到刀具目前安裝角上的旋轉量,已折入刃距週期;Contrast 低於約 0.01 表示這一刀並不能約束角度;Scatter_deg 是逐步角度的離散程度;ScaleRatio 接近 1 表示參數量級與力臂都對得上;MirrorPreferred 表示感測器軸看起來是被對調或反號,而不是被旋轉——先檢查刀把的軸向對應,再決定要不要套用任何東西(兩刃刀不做這項檢查,因為它的波形幾乎就是自己的鏡像)。
播放過程中的線上估計¶
一支刀每裝一次就要辨識一次,而且要從它開始切削的前幾秒辨識——現場之後不會再記錄這個角度。因此估計可以在程式播放的同時自己跑完。在播放前(任務清單中排在播放指令之前的一行腳本)或播放中武裝它,指定刀具、要取樣的接觸時間,以及刀把的錄製檔:
ArmSetupAngleEstimation(1, 30, "Record/holder.csv"); // 刀具 1:它最初的 30 秒接觸
ArmSetupAngleEstimation(-1, 30, "Record/holder.csv", true, "Output/setup-angle.json"); // 下一支切削的刀,並輸出 JSON 報告
接觸時間只計算該刀有接觸的步驟,從武裝之後它的第一刀起算;窗內發生換刀並不會結束它。窗滿之後,播放器執行緒會在它的下一個步進點——所以沒有任何東西與播放同時進行,暫停中的播放也維持暫停——把錄製資料對映到正是那些步驟上、在該子集上估出安裝角,並在閘門不拒絕的前提下,把該刀的安裝角依估計值前進,再由已儲存的嚙合資料重新計算至今建好的每一步(SessionShell.RecomputeStepPhysics (API))。播放接著以新角度繼續,所以完成的步驟串從該刀的第一刀起只有一個角度。閘門會拒絕——而且只回報——Contrast 低於 0.01、Scatter_deg 高於 10°,或鏡像假說較被支持的情形;報告會說是哪一項。若估計值落在該刀目前角度的 SetupAngleEstimation.MinDeltaToApply_deg 之內——預設 0.5°,並折入刃距週期——則以 --NegligibleDelta 回報,既不寫入也不重算,免得對一支已經修正過的刀再估一次就白白重跑力核心。明示的形式對至今建好的步驟做同樣的事——排在任務清單的播放指令之後,或在播放結束後從主控台呼叫:
錄製檔:CSV 播放時,可以是被播放的檔案本身(控制器與刀把欄位在同一個檔內),也可以是寫在它旁邊的取樣檔——步驟帶著控制器的實際時鐘,資料列就以它配對。NC 播放沒有實際時鐘,所以檔案的 Time 欄會被讀成播放自身的時間碼;同一支程式、同一解析度下重播所產生的取樣檔,就會正好落在產生它的那些步驟上,這是整條鏈在仿真側的自我檢查。檔案會在觸發當下重新讀取,所以仍在寫入中的錄製也看得到最新內容。訊息:SetupAngle-Online--Armed、--Triggered 與 --Done 描繪正常路徑;--Refused 指出是哪一道閘門;--NegligibleDelta 表示估計值小到不值得套用;--NotReached 表示運行在窗滿之前就結束了;--NoPlayerRun 表示這次播放不在播放器上(一個直接的 PlayNcFile 請求)——請在它之後改用明示的形式;--Busy 拒絕的是運行正佔住播放器時、從主控台發出的明示形式——等運行結束,或把呼叫放進任務清單裡,那裡本來就在播放器執行緒上;--AppliedNotRecomputed 是真正要注意的警告——角度已經寫進刀具,但重算沒有跑,所以完成的那些步驟仍停在舊角度上,程式必須在 ResetRuntime() 之後重播。
套用對步驟串做了什麼、代價是什麼,是重新計算已完成的步驟串的主題:安裝角一改——刀具本體的刃偏移角一改也一樣——就會在該刀有接觸的步驟上重跑力核心,而那會消耗銑削力授權步數。
精度影響因素¶
座標轉換影響¶
- 安裝角偏差等於把量到的 (Mx, My) 轉一個角度。合力矩 |M| 不變,但單看一個通道,讀值可以是 0 到 |M| 之間的任何值——同樣偏 45°,往一邊轉會讓 Mx 變成對齊時的 √2 倍,往另一邊轉則讓它歸零
- 這種差異本質上是座標轉換的結果,而非測量精度的問題
- 即使使用相同的智慧刀把,不同的安裝角度也會產生不同的測量數據
① — 刀刃(藍色)壓在感測器 X 軸上,θ = 0;此例中切削產生的橫向力矩 M 位於 45°,所以 Mx = My = |M|/√2。
② — 同一支刀,裝上時刀刃順時針偏離 X 軸 45°。切削本身沒有任何改變,所以 M 跟著刀刃一起轉,落到 X 軸上:Mx′ = |M|,是 ① 的 √2 倍,My′ = 0。
③ — 同樣 45° 往另一邊轉,M 落到 Y 軸上,Mx′ = 0。一般而言 Mx′ = |M| · cos(M 與感測器 X 軸的夾角):合力矩永遠不變,單一通道卻可以讀到 0 到 |M| 之間的任何值——這是座標效應,不是量測誤差。
把 θ 填進刀具的安裝角,模擬就會以感測器自己的座標系回報。
最佳實踐建議¶
- 優先確保力臂高度設定的準確性
- 盡可能將刀刃對準感測器X軸
- 若無法完全對齊,務必測量並設定正確的安裝角度
只有正確設定上述參數,模擬的微觀波形才能與感測器實際測量結果保持一致。
延伸閱讀¶
- 智慧刀把訓練 — 讓一支設定正確的刀把訓練出銑削係數的三種切削形狀與條件
- 銑削物理座標系 — 刀把回報的力與力矩所在的座標系
- 銑刀 — 刀把的設定在應用程式裡從哪裡填
- 刀具幾何 — 觀測高度所從起算的刀把鼻端與伸出量
- 重新計算已完成的步驟串 — 套用的安裝角估計值會在已建好的步驟上重新推導哪些量,以及要耗用多少授權步數