跳轉到

刀具幾何 (Cutter Geometry)

一把刀具怎麼被描述給仿真:它是哪一類刀、它的切削包絡形怎麼表達,以及力、磨耗與熱模型會去讀的每一個量。這裡的每一個值都是刀具自身的屬性而非某一刀的屬性,所以每把刀只填一次,之後那把刀走過的每一步都沿用。

由分類排起,經過表達包絡形的兩種方式與刀刃以上的組件,到掛在它上面的各個量,以及刀具表漏列它們時該填什麼。

刀身形式

刀身(Cutter)形式包含:

  • 銑削 凡刀具以旋轉形式加工的,於HiNC中歸類為銑削,包含鑽、搪。
  • 自由減法 切割刀、放電加工模具。

銑削刀具描述參數

  • 材料:刀柄材料、刀身材料、(多層)鍍層材料及厚度。
  • 刃旋轉包絡形:可使用簡化參數 (APT) 或自訂 ZR 表。
  • 簡化(屈服等效)刃中心旋轉包絡形:
  • 刃旋轉包絡形的實體空間比率。
  • 自訂 ZR 表。
  • 夾持端(非切削區)形狀:自訂 ZR 表。
  • 每刃形狀(含側刃、底刃):
  • 簡化參數:螺旋角度位置、前角、離隙角。
  • 自訂每 Z 值:螺旋角度位置、前角、離隙角、半徑長。
  • 刃磨半徑(Hone Radius)、刀具重量、刀片重量及(熱傳等效)厚度。

關於前角與離隙角的量測方法,請參閱徑向角度量測。

APT —— 簡化的刃旋轉包絡形

APT (Automatically Programmed Tool) 是一種通用刀具定義,也是刃旋轉包絡形除了自訂 ZR 表以外的另一種簡化表達方式。參照 APT 參數圖例:

Note

APT

APT 參數說明:

  • D:直徑
  • Rc:圓角半徑
  • Rr:圓角中心至刀具中心線距離
  • Rz:圓角中心至刀尖水平面距離
  • Alpha:水平面與刀尖側錐面夾角
  • Beta:刀具中心線與刀壁側錐面夾角

錐刀該用哪一種 APT

D 量的是錐面線往下延伸、與底線相交之處——Alpha 為 0 時就是刀尖平面——而不是圓角中心所在的高度。所以一般 APT 的六個值必須彼此一致;底部為平面時:

D / 2 = Rr + Rc·cos(Beta) − (Rz − Rc·sin(Beta))·tan(Beta)
  • Taper APT 是由 D、Alpha、Beta 與有效切削長度定義的尖角錐刀。它的 Rz 就是 D/2 · tan(Alpha)——底部為平面時是 0——不會是別的值:網頁 API 自行推導它,PUT /api/Cutter/{id}/shaper-profile 帶了與此不符的 rz_mm 會得到 400,刀具庫的表單也不會問這個值。已儲存的尖角 APT 若其尖角落在兩條線之外——在此之前寫下的檔案,或 Rc 為 0、改到一半的 General APT——會在換刀時以 Cutter-ShaperProfile--AptRefused 被拒絕:刃包絡形不會建立,而這把刀在刃包絡形自我一致之前不移除任何材料,也不跑任何物理計算。
  • 錐度球刀是球心落在刀軸上的一般 APT:Rr 為 0、Rz 等於 Rc,且 D = 2·Rc·(1 − sin Beta) / cos Beta。型錄若給的是刀尖平面處的半徑,那就直接是 D;Rc = (D/2)·cos Beta / (1 − sin Beta)。一把 6° 的錐刀,其錐面在刀尖平面處的半徑為 3 mm:D 6、Rc = Rz = 3.332、Rr 0、Beta 6°。圓角與錐面或底面錯開超過容差的 General APT 會像尖角落在兩條線之外一樣被拒絕——換刀時以 Cutter-ShaperProfile--AptRefused 回報,並說出圓角所決定的 D,D = 2·(Rr + Rc·cos Beta − (Rz − Rc·sin Beta)·tan Beta) / (1 − tan Alpha·tan Beta),或圓角與底線相切時的 Rz,Rz = Rr·tan Alpha + Rc / cos Alpha;在輪廓自我一致之前,刃包絡形不會建立。在容差之內,輪廓會靜默地吸附到圓角的精確切點,所以只保留幾位小數的 D 建出的仍是精確的刀具。負的 Rc,或負的 Rr(圓心或尖角跨到刀軸另一側——Column APT 的 Rr 是 D/2 − Rc,所以它的 Rc 不能超過 D/2),同樣被拒絕。

沒有圓角(Rc 為 0)時,尖角同時落在兩條線上:Rz = Rr·tan(Alpha),且 D/2 = (Rr − Rz·tan(Beta)) / (1 − tan(Alpha)·tan(Beta)),而且錐面線必須與底線相交:Alpha + Beta 小於 90°。每一條關係式的容差是 D 的 1e-4,最少 0.1 µm;在容差之內尖角會吸附到精確的點,超過就拒絕整個輪廓。

刀具補正表顯示的是刃頂處的半徑;對錐刀而言,這是檢查錐面是否照預期建出來的快捷方式(上面那把刀的刃長為 28 mm 時,3 + 28·tan 6° = 5.943 mm)。

夾持柱(夾持端/刀柄)幾何

夾持柱(upper beam)指刀刃以上的刀柄/刀身,也就是非切削的夾持區;它可以用數種幾何形式建模,常用的兩種是:

  • Cylindroid —— 明確的 ZR 表。每一組 (Z, r) 都由你自己填,所以刀柄半徑(以及任何階梯/頸縮輪廓)就是你打進去的值。這能忠實重現一支已知的刀柄,但每一個值都是你必須提供的資料。
  • Extended Cylinder —— 一個圓柱,其起始(底部)輪廓由刀刃決定,唯一參數是總長度。它的半徑自動跟隨刀具(刃頂)半徑,因此不需要任何刀柄量測值,只需要一個足以伸進刀把的長度。

Warning

FullLength 是從 Z=0(刀尖)量起的夾持柱全長,因此包含刃長——它不是從刃頂到外露端的剩餘段。所以它必須大於刃長:例如刃長 20 mm、其上有 10 mm 刀柄 → FullLength = 30,不是 10。等於或小於刃長的值會讓夾持柱實體反轉;熱物理因而無法建立刀柄的殼層,並在換刀時回報 Cutter-UpperBeam--ExtendedCylinderFullLengthTooShort 設定錯誤(網頁編輯器會直接拒收這種值)。

慣例——刀柄資料未知時優先用 Extended Cylinder。 多數刀具表(尤其在報價階段)只列切削直徑、圓角半徑與伸出量,不給刀柄直徑,也不給階梯/頸縮輪廓。這種情況請用 Extended Cylinder:它把刀刃延伸一段長度,而不會發明一個資料本身並不支持的半徑。在這裡手工填一組 Cylindroid,等於把一個猜出來的刀柄半徑烘進模型——猜太粗會產生假的間隙/碰撞結果,猜太細則低估了刀身。Cylindroid(明確 ZR)留給刀柄或頸部輪廓確實已知或已量測的刀具,例如階梯、頸縮或倒錐刀柄,那些用刃半徑延伸就會是錯的。

Tip

因為 Extended Cylinder 的半徑跟隨刀刃,長度請設得比刀尖至刀把鼻端高度再寬裕一些,讓夾持柱無縫伸進刀把;重疊對間隙檢查無害。

Cylindroid 的各組數對從刀尖量起

和 Extended Cylinder 的長度一樣,Cylindroid 夾持柱的 Z 是在刀尖之上的距離,不是在刃頂之上。第一組數對位於刃頂(有效切削長度),Z 逐組遞增,最後一組是刀具全長;高過伸出量的那一段位在刀把裡面,而真正的刀柄正是在那裡。夾持柱的頂端也決定刀具本體的全高,而夾持柱在刀把鼻端以下的那一段,是屈服應力比背後那項彎曲檢查的一部分。

若夾持柱的 Z 改從刃頂起算,它會被照樣接受、不帶任何訊息:它與刀刃重疊,並且短少一個有效切削長度。會被回報的——編輯時出現在「夾持柱」區段的警告裡,換刀時再以設定錯誤回報一次——是從未高過刃頂的輪廓(Cutter-UpperBeam--BelowFluteHeight),或 Z 往下走、以致體積算出來為零或負值的輪廓(Cutter-UpperBeam--DegenerateGeometry)。經由 HTTP API 時,以 POST /api/Cutter/{id}/upper-beam/create?kind=Cylindroid 建立夾持柱,回應是該夾持柱發布時所用的鍵;以 POST /api/Cylindroid/UpdateAllPairs?cylindroidKey=… 一次寫入全部數對,本體例如 [{"z": 3.5, "r": 1.45}, …];接著 POST /api/Cutter/{id}/upper-beam/resync 會傳回警告。空清單就是通過。

頸縮球刀是常見的例子:Ø3 的球頭、有效切削長度 3.5 mm,Ø2.9 的頸部延伸到距刀尖 16 mm 處,再以 10° 半角的錐度擴到 Ø6 的刀柄,全長 60 mm。錐段結束於距刀尖 16 + (3 − 1.45) / tan 10° ≈ 24.79 mm 處:

Z (mm) R (mm)
3.5 1.45
16 1.45
24.79 3
60 3

Extended Cylinder 描述不了這把刀。它的起始斷面就是刃頂,所以它的半徑就是球頭的半徑:頸部會變成 Ø3 而不是 Ø2.9,刀柄也停在 Ø3 而不是 Ø6。

刀把輪廓、伸出量與刀長

柱狀刀把是以 (Z, R) 數對給定的旋轉體,所在的座標系從刀把的鼻端——夾住刀具本體的那一端,Z = 0——起算,朝主軸方向升高。最後一組數對是主軸量規線,也就是刀把與機台相接之處,而刀把的量規長度就是最後一個 Z 減去第一個。所以輪廓從 Z = 0 開始:起點較高的輪廓長度不變,但畫出來會離鼻端偏移那麼多。

一支筒夾刀把:Ø25 的鼻部長 50 mm、Ø40 的本體,以及 Ø63 的凸緣,凸緣上表面就是量規線,位在鼻端之上 90 mm:

Z (mm) R (mm)
0 12.5
50 12.5
50 20
74 20
74 31.5
90 31.5

刀具本體以它的刀尖至刀把鼻端高度垂在鼻端之下——也就是伸出量,從刀把鼻端量到刀尖;刀具沒有刀把時則從量規線量起。因此刀具從量規線到刀尖的長度,就是刀把的量規長度加上伸出量——上面那支刀把配 28 mm 的伸出量,就是 90 + 28 = 118 mm——而控制器的補正表「從刀具庫更新」時,同一刀號的刀長列收到的正是這個數字(見刀具補正,英文,未鏡像)。

補正表隨刀具庫連動時(這是預設),就算這些數字有一個填錯,刀尖仍會落在程式指定的位置,因為補正表與模型中的刀具彼此一致。刀把長度或伸出量填錯,移動的是從機台那一側量起的一切:各機械軸的位置與對它們做的行程檢查,以及——伸出量填錯時——刀把離工件有多近。只有在補正表不隨刀具庫連動時,切削深度才會跟著動:此時從實機抄來的刀長列與模型中的刀具差了那個誤差,刀尖就落在離程式指定位置那麼遠的地方。

一步一步建起來的刀具會被兩個初始值絆住,而且兩者都不會有任何回報:

  • 新的柱狀刀把只是個佔位。 它的輪廓是從 Z = 40 到 Z = 80 的一段 Ø6 圓柱,而且在刀把依輪廓重新導出自己的長度之前,它不會替刀具增加任何長度——重新導出發生在刀把的「幾何」節點上做過編輯之後、下面那個重新同步呼叫之後,或專案重新載入時,而到那時,一個沒動過的佔位輪廓會算成 40 mm。請整個取代輪廓,而不是接在它後面追加。經由 HTTP API 時,在 POST /api/ToolHouse/SetHolderType?toolId=…&holderType=Cylindroid 之後:以 POST /api/CylindroidHolder/Get?toolId=…&sessionKey=… 讀取輪廓的鍵(只有給了工作階段鍵時才會傳回這個鍵),以 POST /api/Cylindroid/UpdateAllPairs?cylindroidKey=… 送出完整清單,再執行 POST /api/CylindroidHolder/UpdateGeometryContent?toolId=…,讓刀把重新導出它的長度。存成資源庫 Holder 資料夾裡 .Holder 檔的輪廓也用同樣方式放進去:它的 PairZr 項目就是這個座標系下的 (Z,R) 數對,而沒有任何端點會把該檔載入到刀具上。
  • 新刀具的「刀尖至刀把鼻端高度」是 0,這會把整個刀具本體藏進刀把裡,刀尖就停在鼻端。伸出量要從刀具表取得。

兩者的檢查方式,都是拿更新後的刀長列去對上面的算式。

前角設定

側向刃雕的前角是每個刃點的徑向前角,它不是一個調銳利度的旋鈕。對於資源庫隨附、係數為常數的前刀面參數檔,每個係數各自沿著刀刃、橫越前刀面或沿著其法向作用,所以前角轉動的是每個刃元素的力建立於其中的座標框架。它不會像真實刀具上更銳利的前角那樣降低比切削能:係數維持參數檔所寫的值,每個元素的力改指向另一個方向,而係數所作用的前刀面面積,會隨著刀面傾斜離開切屑而略微增加。參數檔也記錄了它校準時的前角;這個值決定最小未切削切屑厚度,並不會重新縮放係數。(訓練出來的前刀面對照表會依局部前角方位查出它的係數,所以在那裡前角確實會改變係數;徑向–切向–軸向參數則完全不讀前角。)

這個效應可能違反直覺。較大的前角轉動每個刃元素的力,而不是削弱它,因此更銳利的前角可能讓模擬出來的峰值力不變,甚至變大——轉過的各元素力可能疊加出更大的合力。所以前角要照刀具實際的樣子填——量測而得,見徑向角度量測,或如刀具表漏列數值時所述推定——絕不為了改變力而去調它;做那件事的槓桿在刀具調整槓桿。

離隙角設定

HiNC的離隙角設定為第一離隙角。用來計算刀緣磨耗寬度(Flank Wear, VB)。

刀身重量

刀身重量 用來計算熱傳。

  • 一體式刀具: 刀身重量 填寫一體式刀具的重量。
  • 組裝式刀具: 刀身重量 填寫刀片總重,不含刀具本體的重量。

新的刀具本體會由它的柱體體積與刀柄材料的密度估算刀身重量——還沒挑材料之前是預設的合金鋼,一體式刀具挑了材料之後則是刃部材料——這對一體式刀具是合理的值:除非刀具表給了重量,否則就留著它。在「刀柄質量」欄位打進去的重量,或以 PUT /api/Cutter/{id}/general 送出的 shankMass_g,會被當成自訂值保留:它在幾何編輯與專案的儲存、重新載入之後依然存在,刀具本體的 XML 會以 <ShankMass_g MassAssignmentMode="Custom"> 後接該值的形式記錄它。要回到估算值,按該欄位的「回到估算值」按鈕,或單獨送出 { "shankMassAssignmentMode": "EvaluateByVolume" };同一個請求裡同時帶質量與該模式會被拒絕,質量不是正的有限數值也會被拒絕。刀具詳細資料會在質量旁邊以 shankMassAssignmentMode 回報該模式。

刃磨半徑

刃磨半徑(Hone Radius)表示刀具銳利程度,為刀刃鋒利處的半徑。一般在 20 ~ 50 um。

用來切削易加工材料的刀具通常刃磨半徑小,如 Al6061-T6,可以假設為 20 um;用來切削難加工材料的刀具通常刃磨半徑大,如不鏽鋼,可以假設為 50 um。

刀具表漏列數值時

型錄會可靠地給出直徑、有效切削長度、刃數與螺旋角;前角與鍍層則常常缺漏,小的一體式端銑刀尤其如此。刀具表確實給出的資料優先——碳化鎢的晶粒、它指名或圖示的鍍層、該系列設計適用的硬度範圍——只有它漏掉的部分,才依這件工作所切削的工件材料推定,每個推定值都記錄成專案旁的一項假設:

工件材料 鍍層 徑向前角 刃磨半徑
鋁合金 無——光亮、無鍍層的碳化鎢刀具是常態 銳利且為正,約 15° 約 20 µm
鋼、不鏽鋼及更硬的材料 有鍍層;製造商為該系列列出的那一層 較小——淬硬鋼系列上為零到略負 較大——不鏽鋼約 50 µm,切屑比這還薄的小刀具則小一些

刀具常常不是因為工件材料而選的——它只是架上剛好有的那一把——所以要照刀具實際的樣子建模,而不是照材料該配的樣子。拿去切鋁的淬硬鋼系列刀具,仍保有它的鍍層、它的細晶粒碳化鎢與它那個系列的小前角;上表只補它的刀具表漏掉的部分,而兩者不相稱這件事要記進專案的假設裡,而不是被修正掉。

這兩個值都不是中性的,所以有根據的推測勝過放著不填。前角決定每個刃元素的力的方向(見前角設定),而經由 HTTP API 寫入、沒帶前角的刃雕構型會得到 0°——對鋁用刀具而言,這是往錯的方向猜。最外層的鍍層提供前刀面上摩擦熱背後的摩擦係數,鍍層的各層也會加入刀具的熱模型;沒有鍍層時,摩擦係數由刃部材料提供。因此鍍層移動的是摩擦熱與溫度,而不是力。

偏擺未納入模型

刀具模型沒有偏擺(runout)參數:對稱刃雕構型的每一條刃都落在名義輪廓上,所以模擬出來的各刃平均分擔負荷。交付資料裡的偏擺讀值——一個量錶讀數、一個以微米計的 TIR——要記錄成專案旁的一項假設,而不是填進任何地方。刃偏移角與安裝角這兩個角度都不能拿來代替它。刃偏移角說的是一條刃在刀具本體周圍的位置,刀具的安裝角說的是整個刀具本體在刀把裡轉了多少:兩者都只是讓刃繞著軸、相對於感測器軸移動,都不會改變一條刃切削時所在的半徑——而那正是偏擺做的事。

它會在模擬與量測資料交會之處顯現出來。有偏擺的刀具錄下的資料會在較重與較輕的刃之間交替,模擬則不會,所以比較時要讀每轉的峰值或平均值,而不是單一刃的峰值。

刃形與刃雕 —— 底部刃雕

底部刃雕在底刃為水平或內凹時需要設定,它會作用在有下行切削的段落。

鑽頭不用設定底部刃雕,設定側向刃雕就好。因為鑽頭底部不為水平或內凹,如果特製鑽頭底部為水平或內凹,則需要設定底部刃雕。

通常只有圓鼻刀要設定底部刃雕。注意平銑刀通常不會下行切削,也不應下行切削,但如果製程這麼做了,就需要設定底部刃雕。

刀片式刀具 —— 一份實例 ZR 表

刀片式刀具可以建立在虛擬環境中,見以下範例。

一枚刀片對著 Z、R 軸拍下的照片,上面標出兩個刃點的 Z、R 值、螺旋偏移量,以及前角與離隙角

同一把刀片式刀具依下方的 ZR 表在虛擬環境中重建的結果

Z R S.Ang. R.Ang.
0 8 1 3
0.2 8 0.5 3
0.4 8 0 3
0.5 8 0 3
3 8 3 3
6 8 4 3
8 8 4 3

延伸閱讀

  • 徑向角度量測 — 這裡填入的前角與離隙角怎麼量
  • 訓練切削集的設計 — 這裡填的螺旋角,為什麼決定了一次訓練回推不回推得出剪切係數
  • 刀位 (CL) 播放 — 一份 CL 檔的 TLDATA 餵進的就是這同一套刀具幾何模型
  • 刀具調整槓桿 — 這些量之中,製程工程師真正動得了、用來削掉力峰的三個
  • 銑刀 — 在應用程式裡哪裡建立與編輯一把帶有這些幾何的刀具
  • APT 刃形面板 — 「刃包絡形」節點上輸入上述 APT 參數的欄位
  • 刀具補正 — 刀把量規長度加上伸出量所寫入的那個刀長列(英文,未鏡像)
  • 柱狀刀把面板 — 刀把的「幾何」節點,以及編輯後讓刀把重新導出長度的那次重新同步(英文,未鏡像)
  • 智慧刀把 — 從這裡定義的刀把鼻端起算的觀測點
  • 重新計算已完成的步驟串 — 這份幾何被編輯後,對已播放步驟串的影響:刃形幾何改變會重跑切削力核心,刃口包絡改變則需要重播