跳轉到

THWS 鑰匙圈:沒有模型、沒有毛胚、沒有夾具的 Siemens 840D sl 程式

德國一所大學把它在一台 Siemens 840D sl 控制器的五軸機 Spinner U5-620 上跑過的程式,公開在一份關於機台換線的開放資料集裡。三支程式中最短的一支,加工一個鑰匙圈:用 90° 倒角刀在一塊金屬板上描出 THWS 標誌和「thws」字樣,再在一端鑽一個掛環用的孔。對這個零件,資料集給了 NC 程式、刀具表、一張照片,以及每次加工的機台逐秒紀錄,但沒有 CAD 模型、毛胚、夾具或刀把。

一個 AI 代理拿到這支程式,透過 HiNC 的 Web API 建出一個仿真,讓它照程式的指令切出鑰匙圈;反覆重播,直到每一則訊息都有交代;再讓第二個代理盲建一次;最後用它找出週期的時間花在哪裡:28.7 秒的仿真時間中有 13 秒(45 %)是刀具在輪廓之間以切削進給上下移動 16 mm,把安全高度改成 2 mm,每件可省 10.5 秒,切出來的東西完全一樣。本頁的一切都是仿真,沒有在真實機台上切過。

仿真中的雕刻:Ø8 倒角刀裝在熱縮刀把上,位於用虎鉗夾住的板子上方;「thws」已經刻好

案例

拿到的 缺少的
Keychain_Schluesselanhaenger.mpf,644 行 Siemens 840D sl 程式:兩道用 90° 倒角刀(ENTFRAESER_D8_N_90GRAD)的雕刻工序,一道用 Ø3.3 鑽頭(BOHRER_D3.3_VHM)的鑽孔工序 零件模型,因此沒有幾何差異可以比對
一份刀具表,列出每把刀的製造商與訂購碼;刀具廠的資料頁是公開的 毛胚尺寸與擺放位置、材料、夾具、刀把、伸出量、刀長
機台的型號與控制器、資料描述論文中成品鑰匙圈的照片,以及機台的逐秒紀錄(資料描述論文算出這個零件每次生產平均 83 筆,含中斷) 工件座標偏移、機台的座標與行程、原機台自有 M 碼的作用

資料集的三個產品,即資料描述論文的圖 2:鑰匙圈(Product A),一塊刻有 THWS 標誌與「thws」字樣、右端有一個小孔的板子;開瓶器(Product B);以及表示座標系的方塊(Product C)。圖:M. Martinez, A.-M. Schmitt, A. Schiffler, B. Engelmann,Scientific Data 12, 1067 (2025),圖 2,© The Author(s) 2025,CC BY 4.0

這支程式用的是 Siemens 使用者天天會碰到的語法:DEF REAL 變數、機械座標移動 SUPA、取消擺角的 CYCLE800()、高速設定 CYCLE832、鑽孔用的 MCALL CYCLE81、以名稱叫刀(T="…")並搭配刃號 D1,以及旋轉軸的 B、C 字——它們只會移到 0。

代理建了什麼

每個值都標明出處:讀取(來源寫明的)、推得(從來源推算的)、自選(來源沒說、由代理決定的)或量測(從 HiNC 讀回,並註明版本)。

項目 值 依據
機台 以腳本從簡單方塊與圓柱寫成的通用五軸機:主軸頭側 X、Y、Z;繞 Y 傾斜的搖籃(B)上載著 Ø360 旋轉台(C);行程 X ±400 mm、Y ±300 mm、Z -250 至 650 mm、B ±110°、C 不限 自選。 程式會下 B 和 C,所以機台必須有這兩軸,而 HiNC 資源庫裡沒有可公開使用的五軸機。行程與台面大小是配合本系列另一個五軸案例選的,那個案例需要超過 ±60° 的 B 與至少 Ø300 的台面。
夾具 一台通用虎鉗:板子放在兩根平行塊上、位於虎鉗正中,板底在虎鉗底座上方 90 mm,鉗口跨著 25 mm 的板寬夾住、比板面低 2 mm 自選。 鑽頭會穿透板子,所以孔的下方要留空;倒角刀絕不能碰到鉗口。
毛胚 25 × 64 × 5 mm 的方塊 推得,其中一項為自選。鑽孔循環的深度 DP = -6.1835 可以讀成 5 + 0.6835 + 0.5:5 mm 板厚、Ø3.3 名目 135° 鑽尖的高度(1.65 / tan 67.5°),以及 0.5 mm 的穿透量。雕刻與孔都以 X ≈ -12.5 為中心;把 X0、Y0 當成板緣(CAM 的工件原點通常這樣取),板寬就是 25 mm(照片以雕刻長度 48.6 mm 定比例,約 25.7)。照片給出的長度是 64–66 mm;自選:64。
目標模型 無 讀取。 來源沒有模型,所以沒有幾何差異可查;驗收只看切削本身。
程式原點 上表面的 +X/+Y 角;在這台機台上 G54 = (12.5, 32, -5) 推得(鑽孔循環的參考面是 Z0;雕刻與孔都在 X、Y 的負側);G54 的值由 HiNC 3.2.39 從模型量測。
控制器 Siemens;刀號 1、2 對應到程式的刀名;$TC_DP 補正列;宣告原機台的 M27、M29、M50、M51、M65;起始與換刀高度 Z610 讀取:廠牌與程式用到的碼。自選:刀號。推得:每一項怎麼設(見難題)。
材料 鋁;取資源庫中的 6061-T6 推得是鋁:照片是一塊亮面金屬板,而鑽頭的 S23632 在 Ø3.3 上是 245 m/min——正是刀具廠給短屑鋁的值。自選:以 6061-T6 代替。
倒角刀 錐形輪廓 Ø8、與水平面夾 45°、刃長 4 mm、尖頭、4 刃、全長 63 mm;螺旋角 0°、前角 0°、讓角 10°;伸出量 27 mm,裝在熱縮刀把上(鼻端 Ø24,量規長 80 mm) 讀取自刀具廠資料頁:直徑、輪廓角、刃長、全長、刃數、27 mm 的伸出量。推得:尖頭(4 mm 刃長等於 45° 下的 D/2)。自選:刀把、螺旋角(資料頁只寫「特殊螺旋角」),以及前角與讓角。
鑽頭 錐形輪廓 Ø3.3、135° 鑽尖、20 mm 刃溝、2 刃、Ø6 × 36 mm 刀柄、全長 62 mm;螺旋角 30°、前角 0°、讓角 10°;伸出量 26 mm,裝在 Ø6 刀把上 讀取自資料頁,包括 26 mm 的伸出量。自選:刀把、螺旋角,以及前角與讓角。
刀長 107 與 106 mm(刀把量規長 80 加伸出量) 推得。
雕刻深度 倒角刀補正列上 -0.3 mm 的長度磨耗 自選;見〈雕刻只擦過板面〉。
主軸 通用 24,000 rpm 電主軸,連續 7.5 kW 自選。 程式最高轉速 23,632 rpm;來源沒提主軸。
任務 原樣播放程式;開啟碰撞偵測;第一次用 1 mm,驗收用 0.0625 mm 自選。 刻線只有 0.6 mm 寬。

沿 X 軸看的通用五軸機,照比例,依寫出它的腳本中的數字繪製:床台;|y| 330–450 mm 的耳軸軸承座,掛在鏈上工作台這一側;繞 B 傾斜的搖籃,側板在 |y| 260–320 mm,虛線是第一版側板內面所在的 |y| 200 mm;在樞軸下方 100 mm 的 Ø360 C 旋轉台,上面是虎鉗與板子;立柱、滑枕與主軸頭,主軸頭有 R80 的鼻端,倒角刀的刀尖停在板面上

從程式讀出的板子,俯視,照比例:倒角刀在深度上的路徑由 NC 程式描出,畫成 0.6 mm 寬的線,THWS 標誌與「thws」位於 Y -4.153 到 -52.765 之間(48.6 mm);刀具以切削進給下降、再上升 16 mm 的 14 個點;距板緣 58 mm 的 Ø3.3 孔;上表面 +X/+Y 角的程式原點;以及雕刻(中心 -12.487)與孔共用的中心線 X -12.5,由此得出 25 mm 的板寬;板長 64 mm 是從照片的 64–66 mm 中選定的

鑽孔深度(照比例),穿過孔的剖面:循環讓 Ø3.3 鑽頭從 Z 3(參考面 Z 0 加上 3 mm 的安全距離)往下進給到最終深度,刀尖在 Z -6.1835,再退到 Z 10;6.1835 = 5 mm 板厚 + 0.5 mm 穿透量 + 0.6835 mm,也就是 Ø3.3 名目 135° 鑽尖的高度(1.65 / tan 67.5°)

兩把刀在 HiNC 裡的設定;程式以名稱叫刀,刀號是代理自己定的:

T1 T2
程式裡的名稱 ENTFRAESER_D8_N_90GRAD BOHRER_D3.3_VHM
實際刀具(刀具表與資料頁) Garant 208110 8,整體碳化鎢 90° 倒角刀,全長 63 mm Garant 122380 3,3,整體碳化鎢鑽頭,全長 62 mm
輪廓 錐形,Ø8,與水平面夾 45°,刃長 4 mm 錐形,Ø3.3,與水平面夾 22.5°(135° 鑽尖),刃溝 20 mm
刃數、螺旋角、徑向前角、徑向讓角 4、0°、0°、10° 2、30°、0°、10°
刀柄(從刀尖起算) Ø8,從 4 到 63 mm Ø3.3 到 23 mm,在 26 mm 處擴到 Ø6,Ø6 到 62 mm
刀把:熱縮刀把,鼻端以上各高度的半徑 鼻端 R12,到 55 mm 處漸增為 R16.5,接著 R22 到 63 mm,再以 R31.75 到 80 mm 的量規線 鼻端 R10.5,到 55 mm 處漸增為 R15,其餘同 T1
伸出量;刀長 27 mm;107 mm 26 mm;106 mm
刃部材料 碳化鎢,鈷含量 10 %,晶粒 600 nm,取自 HiNC 的資源庫 同左

代理怎麼管理這件工作

  • 先定通過標準,再開始跑。 在碰伺服器之前,代理逐行讀過程式,寫下一次正確的執行必須呈現什麼:哪些行會切到、切在哪裡、鑽頭鑽多深、程式原點落在哪裡、哪些字會發出訊息。每一次執行都拿這些來核對,第一次乾淨執行的數字則成為之後所有執行的基準——而不是看它「跑完了」。
  • 一切經 Web API,每次寫入都讀回。 代理用 HiNC 網頁本身用的同一組路由建案,每寫一個值就讀回來,存檔、重新載入後再讀一次。
  • 先粗後細。 先用 1 mm 在幾秒內檢查設定,之後才跑 0.0625 mm。
  • 研究交給別人,決定自己做。 兩個輔助代理平行閱讀 HiNC 的原始碼與文件——一個查機台檔格式,一個查 API 呼叫以及模擬器怎麼處理程式裡的每個 Siemens 字——代理本身則同時推算毛胚。
  • 共用的伺服器。 一個 HiNC 實例一次只開一個專案,而同一台伺服器上還有好幾個代理在建本系列的其他案例。代理先宣告自己用哪個實例,每次 reset 前確認沒有執行中的 run,用重新載入丟掉記憶體中的實驗,刪除暫存檔,做完後關閉專案。它把自己寫的五軸機台分享給需要的代理,對方也找出了這台機台的第一個缺陷(第二個難題)。
  • 盲建。 自己的建案通過後,代理只把書面指示與輸入檔交給第二個代理。那個代理從零建出專案,得到相同的步數、切深、時間與訊息;它的專案只在隨機產生的識別碼與自由文字註記的措辭上不同。
  • 對抗式審查。 另外三個代理被要求找出所有錯處:兩個審來源筆記與指示,一個審本頁。它們的發現都列在下面的難題裡,包括代理自己犯的三個錯。
  • 人在哪裡介入。 實例需要代理沒有的登入帳號;代理沒有去讀伺服器的設定,而是問擁有者,由擁有者提供。擁有者的常設規則決定了建法:不用任何客戶或授權不明的東西(所以代理自己寫機台)、每把刀都裝在工廠實際會用的刀把上(所以用熱縮刀把與型錄伸出量)、每個案例的專案放在自己的資料夾。擁有者核准結束這項已完成的工作。之後擁有者把本系列的目的從訓練教材改成這種代理工作紀錄,代理便加做了時間分析與安全高度實驗,展示仿真如何幫上忙,而不只是重播。

難題

以下數字除非另註版本,都是在 HiNC 3.2.41、0.0625 mm 下量得。

程式預設的機台,資源庫裡沒有

  • 情況。 程式會移動 B 和 C(G0 B0.0 C0.0、SUPA … B=_B_HOME C=_C_HOME);HiNC 資源庫裡唯一的通用機台只有三軸。
  • 錯過的風險。 在三軸機上,每個 B、C 字都不會被消化(Parsing--Unconsumed),重播永遠不會乾淨。
  • 怎麼發現。 在建任何東西之前先讀程式。
  • 解法。 用腳本寫一台通用機台:主軸頭側 X、Y、Z;繞 Y 傾斜的搖籃(B)載著旋轉台(C);兩個旋轉軸在鏈上都取負向,使 B+、C+ 成為刀具相對工件的 ISO 正向。
  • 證據。 HiNC 自行把 B、C 綁成旋轉軸,沒有任何一次重播發出 Parsing--Unconsumed。

搖籃太窄

  • 情況。 鑰匙圈只用到 B0 C0,但借用這台機台做真正五軸零件(一個傾斜 10°、偏離 C 軸 50 mm 的圓錐台)的代理,在 HiNC 3.2.39 上得到 3,436 則 Collided(B,Z)。
  • 錯過的風險。 一台在三軸工作上看起來沒問題的機台,對它原本也要支援的工作卻是錯的。
  • 怎麼發現。 那個代理用機台的運動學算出碰撞的範圍:與引擎回報的是同一段(第 96 至 3713 行,對上引擎的第 96 至 3714 句;引擎把「移往下一點」算在下一句),所以是真的干涉。主軸鼻端(半徑 80 mm)到達 |y| = 206 mm,而搖籃側板從 |y| = 200 開始。
  • 解法。 側板外移到 |y| 260–320 mm,軸承塔移到 330–450 mm。
  • 證據。 那個夥伴案例在加寬後的機台上重播了兩個零件的每一個點,沒有任何碰撞。

有些機台零件永遠不會被檢查碰撞

  • 情況。 HiNC 產生碰撞對時,沿著機台鏈從地面走到刀具、再走到工作台,並把兩條路上的地面 O 與底座 base 照名稱剔除;掛在 base 上的零件因此不會列入碰撞對。
  • 錯過的風險。 耳軸軸承座——搖籃傾斜時主軸頭最可能撞上的東西——會被畫出來,卻從不被檢查。
  • 怎麼發現。 寫鏈之前先讀機台文件。
  • 解法。 軸承座掛在鏈上工作台側、自己的元素下。
  • 證據。 夥伴案例的碰撞,報在搖籃上,那是鏈上同一側的零件。

存檔改寫了機台檔

  • 情況。 第一次存檔後,專案載入的機台檔變了樣:HiNC 把角色綁定寫成元素、加上位元組順序記號,並重新排版實體。
  • 錯過的風險。 被當成機台來源保存的檔案,會在每次有專案用它存檔時悄悄改變。
  • 怎麼發現。 存檔後,那個檔案顯示為已修改。
  • 解法。 代理自己做的設定檔留在自己的資料夾、保持原樣;建案時上傳副本到專案、載入的是副本,所以存檔只改寫專案的副本。
  • 證據。 每次存檔後,設定資料夾裡的機台檔都沒變,被改寫的只有專案的副本。

讀者拿到的檔案裡沒有機台

  • 情況。 這個案例的備份包原本只收來源本身的檔案與筆記;機台與虎鉗是代理的作品。
  • 錯過的風險。 沒有人能從這個包重建這個案例。
  • 怎麼發現。 交給盲建之前,先檢查這個包會包含什麼。
  • 解法。 代理自己做的設定檔放在自己的資料夾,並隨案例一起打包。
  • 證據。 盲建只用這個包,並且成功。

建案指南的工作台擺放會移動零件

  • 情況。 本系列的建案指南用一個平移來擺放它那台三軸機的工作台;這台機台已經在同一條連接上帶著工作台的擺放。
  • 錯過的風險。 照指南字面做,會蓋掉工作台 100 mm 的下降,整個設定都跟著移位。
  • 怎麼發現。 對照機台的鏈讀這一步。
  • 解法。 這個案例的指示跳過這一步。
  • 證據。 G54 算出來是 (12.5, 32, -5),正是虎鉗幾何放板子角落的位置。

程式的起始點是另一台機台的座標

  • 情況。 程式用 SUPA G0 Z=_Z_HOME 和 X=_X_HOME Y=_Y_HOME 回起始點,值是 610、-365、224——Spinner 的機械座標。一次執行從機械原點開始,而換刀會把 Z 送到機台的換刀位置,預設是 0。
  • 錯過的風險。 在機械原點時,主軸鼻端只在板面上方 5 mm;在 Z0 換刀,新刀會直直往下穿過板子。
  • 怎麼發現。 第一次執行前,比對程式的起始點與機台自己的原點。
  • 解法。 把起始與換刀高度設為 Z610,也就是程式自己的起始點。
  • 證據。 兩列都讀回 610;沒有任何重播發出碰撞或行程錯誤。

設定行程的捷徑只涵蓋 X、Y、Z

  • 情況。 本系列的三軸案例用一個呼叫同時設 X、Y、Z 的行程;這台機台還需要 B,而逐軸設定的路由接受帶正負號的下限。
  • 錯過的風險。 照本系列給三軸機的標準值在這裡用那個捷徑,X、Y、Z 的上限會是 0,程式的起始點 Z610 就超出行程。
  • 怎麼發現。 一位審查者讀了這兩個路由在控制器中的原始碼。
  • 解法。 逐軸設定 X、Y、Z 與 B 的行程,下限帶負號;無限旋轉的 C 不設。
  • 證據。 各行程讀回與送出的相同,沒有任何重播發出 StrokeLimit--*。

程式以名稱叫刀

  • 情況。 T="ENTFRAESER_D8_N_90GRAD" 與 T="BOHRER_D3.3_VHM";HiNC 的刀具庫以號碼為鍵。
  • 錯過的風險。 沒有對照時,模擬器發出 ToolChange--NameUnresolved、不換刀、什麼都沒切——卻仍回報執行已完成。
  • 怎麼發現。 一個輔助代理在剖析器的測試裡找到這種情況。
  • 解法。 一張名稱對刀號的表(1 與 2)。驗收從不依賴「已完成」。
  • 證據。 兩把刀都有切到:雕刻從第 292 步到第 4,252 步,鑽孔從第 5,161 步到第 5,201 步。

Siemens 補正表是另一張表

  • 情況。 Siemens 執行依刀號與刃號從自己的 $TC_DP 表讀刀長,而不是從 HiNC 由刀具庫填入的通用表;兩張表套用磨耗的正負號也相反。
  • 錯過的風險。 空的列會帶著警告退回;用通用表的正負號填磨耗,會讓刀具往錯的方向移動。
  • 怎麼發現。 讀 Siemens 補正的文件與剖析器。
  • 解法。 寫入 (1, 1) 與 (2, 1) 兩列,刀長 107 與 106 mm,並讀回。
  • 證據。 剩下唯一的補正警告是刀號 0 的那一則(見〈第一次叫刀之前的刀具補正〉)。

雕刻只擦過板面

  • 情況。 倒角刀的程式點停在上表面(Z 0 至 Z -0.009);尖頭 90° 刀在那裡只碰到表面。
  • 錯過的風險。 一次碰到零件、卻沒刻出標誌的執行——而且沒有模型可比對,不會有別的東西告訴你。
  • 怎麼發現。 代理問:在真實機台上,雕刻深度從哪裡來?不是程式,那就來自設定:刀具資料或工件座標偏移,而資料集沒有記錄。
  • 解法。 在倒角刀的 $TC_DP 列上給 -0.3 mm 的長度磨耗,就像操作員輸入雕刻深度那樣。這個深度是假設,並如此標明。
  • 證據。 有磨耗時,雕刻段的切深峰值是 0.3025 mm,逐步切屑體積加總為 9.55 mm³;磨耗為 0 時,峰值是 0.0025 mm、體積為 0,而鑽孔不受影響。

鑽尖不是資料頁上的那個

  • 情況。 板厚的推算依據是名目 135° 鑽尖,高 0.6835 mm;鑽頭資料頁寫的刃角到尖端距離是 0.73 mm。
  • 錯過的風險。 把名目值說成實際鑽頭的值是錯的,由它推出的板厚也可能有偏差。
  • 怎麼發現。 一位審查者拿來源筆記和資料頁比對。
  • 解法。 筆記現在寫明,程式作者顯然用的是名目錐:只有這個值能讓 6.1835 成為整數的 5 + 0.5;模型也用同一個錐。
  • 證據。 5 + 0.6835 + 0.5 = 6.1835 剛好成立;用 0.73 則湊不出整數板厚。

原機台的五個 M 碼

  • 情況。 開頭有 M50,結尾有 M27、M29、M51、M65。程式的註解說出其中三個:「Spuelung Spaenefoerderer Absaugung」——沖洗、排屑機、抽風。
  • 錯過的風險。 每個沒宣告的碼都會發出 Parsing--Unconsumed;把它們從程式刪掉,則會掩蓋程式真正做的事。
  • 怎麼發現。 一個輔助代理稽核了程式裡的每一個字。
  • 解法。 每一個都宣告為不會移動任何東西的機台功能,並附上註記。程式原樣播放。
  • 證據。 在 N80、N6400 與 N6410 有五則 DeclaredMCode--UnmodeledEffects,沒有 Parsing--Unconsumed。

第一次叫刀之前的刀具補正

  • 情況。 第 N190 行 SUPA G0 X=_X_HOME Y=_Y_HOME B=_B_HOME C=_C_HOME D1,在程式叫任何刀之前就選了刃號 D1。
  • 錯過的風險。 一則可能被誤認為設定錯誤的警告——或被人用改程式的方式「修掉」。
  • 怎麼發現。 它是最後剩下的那一則警告:(T0, D1) 的 SiemensToolOffset--TcdpRowMissing。
  • 解法。 保留原樣並加以說明:程式以 T0 / M6 結束,所以真實主軸在下一次開始時大概也是空的;而這一行是機械座標移動,不切任何東西。
  • 證據。 每一次執行都只有這一則警告,盲建的也一樣。

在 HiNC 中,SUPA 不套刀長

  • 情況。 HiNC 把 SUPA 當成 G53:該行把主軸量規線定位在機械座標上,不套框架,也不套刀長。
  • 錯過的風險。 期待 SUPA 期間刀長仍有效的程式,會落在別的位置。840D sl 是否保留刀長,代理沒有查證。
  • 怎麼發現。 一個輔助代理稽核剖析器。
  • 解法。 檢查程式:每一個移動 Z 的 SUPA 行都同時以 D0 取消補正(N180、N250、N6100、N6240、N6360),所以兩種讀法得到同樣的移動。NC 方言文件的 Siemens 段寫有這個行為。
  • 證據。 程式裡五個 SUPA 的 Z 移動都帶 D0,重播在這些地方都沒有發出行程或碰撞訊息。

MCALL 退回前一行的高度

  • 情況。 MCALL CYCLE81(10.,0.,3.,-6.1835) 指定了退刀面(RTP)10;HiNC 則退回鑽孔位置前一行的 Z。
  • 錯過的風險。 前一行的 Z 與 RTP 不同的程式,會退到另一個高度。
  • 怎麼發現。 剖析器稽核。
  • 解法。 這裡前一行(N6300)停在 Z10,與 RTP 相同,結果一樣。
  • 證據。 程式裡退刀面與前一行的 Z 都是 10。

T0 / M6 讓最後一把刀留在主軸上

  • 情況。 在真實機台上,程式結尾的 T0 與 M6 會把鑽頭收回;在 HiNC 中,換成刀號 0 什麼都不做。
  • 錯過的風險。 之後的任何移動,都會拖著一把真機已經不在手上的刀。
  • 怎麼發現。 剖析器稽核。
  • 解法。 這裡它是 M30 之前的最後一行,所以沒有影響;NC 方言文件寫有這個行為。
  • 證據。 它之後沒有任何移動。

指南的伸出量規則與全長固定的刀

  • 情況。 本系列的建案指南把伸出量定為刃長與最深切削兩者中較長者加 5 mm,再進位到 5 mm 的倍數:倒角刀 10 mm、鑽頭 25 mm。
  • 錯過的風險。 一把 63 mm 的倒角刀只露出 10 mm,就得把 53 mm 的刀柄塞進刀把。
  • 怎麼發現。 拿規則算出的數字對照刀具自己的全長。
  • 解法。 採用型錄的伸出量:27 mm(留 36 mm 刀柄夾持)與 26 mm(鑽頭 36 mm 刀柄全部夾入),並在旁邊寫明理由。代理也在建案指南裡加上:刀具本身的長度迫使伸出量較長時,寫明數值與理由。
  • 證據。 由刀長與程式算出:最深處時,刀把鼻端在毛胚上方 26.7 mm(倒角刀)與 19.8 mm(鑽頭)。

兩把刀位於最深處,照比例,穿過板子與虎鉗的剖面:Ø8 倒角刀從熱縮刀把伸出 27 mm,位於雕刻最深處 Z -0.309,刀把 Ø24 的鼻端在板面上方 26.7 mm;Ø3.3 鑽頭伸出 26 mm,位於孔底 Z -6.18,Ø21 的鼻端在板面上方 19.8 mm;兩支刀把在鼻端以上 55 mm 內以 4.7° 的錐度漸粗,再擴到 Ø44 本體與 Ø63.5 凸緣,量規線在鼻端上方 80 mm;虎鉗鉗口比板面低 2 mm

本系列建案指南對兩把刀做的刀把檢查:

檢查 T1 倒角刀 T2 鑽頭
刀把鼻端半徑對刀具半徑 12 > 4 mm 10.5 > 1.65 mm
伸出量對刃長 27 ≥ 4 mm 26 ≥ 20 mm
最深處;當時刀把鼻端的位置 Z -0.31(程式 Z -0.009,磨耗 0.3 mm);Z +26.7 Z -6.18;Z +19.8
指南的伸出量規則;實際採用 max(4, 0.31) + 5 → 10 mm;27 mm max(20, 6.18) + 5 → 25 mm;26 mm
刀長 107 = 80 + 27 mm 106 = 80 + 26 mm
驗收重播中的 Collision--Detected 無 無

reset 之前讀到的程式原點是錯的

  • 情況。 由模型算 G54 的路由,在剛擺好夾具和零件之後,回了一個錯的值。
  • 錯過的風險。 整支程式跑在錯的位置。
  • 怎麼發現。 夥伴案例在 reset 前讀到 (-62.7, 65.2, -134.9),reset 後才讀到預期的 (50, 0, -55.742)。
  • 解法。 先 reset 再計算:reset 是一個邊界,執行中的設定副本要到這時才會吃進工作階段內所做的修改。
  • 證據。 這次建案與盲建的 G54 都是 (12.5, 32, -5),雕刻也落在板子上。

共用的主軸檔在第一次存檔時改變

  • 情況。 本系列使用的主軸描述檔,在第一次存檔時被 HiNC 改寫成較新的格式(2,495 bytes 變成 3,111)。
  • 錯過的風險。 拿專案的副本和原檔比對的檢查,會無故失敗。
  • 怎麼發現。 盲建在存檔後比對了檔案大小。
  • 解法。 上傳當下就比對,而不是存檔之後。
  • 證據。 每一次上傳的長度都與本機檔案相符;重新載入沒有回報任何訊息。

只出現一次的訊息

  • 情況。 碰撞準備的那一對訊息(Collision-Prepare--Start 與 --Done)只在碰撞偵測由關轉開時出現:新建專案的第一次重播,或載入一個存檔時偵測關著的專案之後的第一次重播。本案的專案存檔時偵測是開的,所以載入或重新載入之後都不會出現。
  • 錯過的風險。 逐一核對每則訊息 id 的驗收,會把同一種執行一次判為乾淨、一次判為不乾淨。
  • 怎麼發現。 盲建在粗跑時看到它,細跑時沒有。
  • 解法。 預期訊息清單把這對訊息列為可能出現、不算異常。
  • 證據。 此後每一次執行的訊息都對得上這份清單。

步數比經驗法則多

  • 情況。 重播有 5,930 步;「切削時間 × 主軸轉速」預測約 3,800。
  • 錯過的風險。 以這條法則估的記憶體會偏低。
  • 怎麼發現。 盲建的報告。
  • 解法。 主軸轉著時,切削之間的移動也會被仿真成步;代理把建案指南改成以主軸轉動的全部時間估算。
  • 證據。 盲建重現了 5,930 步。

一張看得到刀把的圖

  • 情況。 選取某一步,並不會把畫出來的刀具移過去,而重播頁面預設也不畫刀具。
  • 錯過的風險。 一張沒有刀把的圖——本系列不接受。
  • 怎麼發現。 最早的幾張圖只拍到虎鉗與板子,刀具停在程式的起始點。
  • 解法。 打開刀具的繪製,並在切削途中暫停重播:雕刻時暫停一次,鑽孔則一行一行地推進去。
  • 證據。 本頁的兩張 HiNC 畫面。

讀取移除體積

  • 情況。 逐步切屑體積在整次執行上的加總,約是刻槽幾何體積的三分之一、孔的一半;它到底算的是什麼,沒有查清。
  • 錯過的風險。 把它當成移除體積引用,會是錯的。
  • 怎麼發現。 拿加總值與刻槽和孔的幾何體積比較。
  • 解法。 只用它比較同一支程式的不同執行,從不當作絕對值。
  • 證據。 原程式與安全高度變體的加總值,到小數第三位都相同。

代理自己的錯

  • 情況。 審查在代理的文字裡找到三個錯:標註句列了描述資料集那篇論文的四位作者,而資料集與檔案的署名分別是其中三位與兩位;指示用錯的理由解釋「先 reset」;以及第一次讀照片時,把孔之後的板長讀成 6 mm,照片實際顯示 7 到 7.5 mm。
  • 錯過的風險。 授權條件沒有做到;讀者去追一個不存在的原因;長度寫得比照片能支持的更精確。
  • 怎麼發現。 審查者拿標註句和資料集自己的紀錄比對、拿解釋和原始碼比對,並重新量了照片。
  • 解法。 三個都已更正;審查也讓每個推得的值(板子尺寸、材料、深度)都掛上明確的標示。
  • 證據。 下方的標註句與資料集的紀錄相符;長度寫成 64–66 mm,並註明取 64。

結果與效益

在 HiNC 3.2.41、0.0625 mm 下量得。仿真週期把換刀算成 0 秒,也沒有加減速。

結果 數值
步數;執行的程式行數 5,930;644 行全部
雕刻切深峰值 0.30 mm(0.3 mm 磨耗加上程式 0.009 mm 的起伏)
鑽孔每步切深峰值 0.88 mm(0.68 mm 鑽尖加上一轉的進給 0.14 mm,在 0.0625 mm 解析度之內)
仿真週期 28.70 s
刀具降伏應力比,雕刻 0.6 %
主軸功率比,雕刻 0.2 %
主軸扭矩比,雕刻 0.08 %
最大切削力分量,雕刻 19 N(Z);18 N(Y)
切削的累計主軸能量 174 J(主軸少轉 10 秒時仍是同一個值,所以只計切削)
最深處刀把鼻端在毛胚上方的高度(計算值) 26.7 mm(倒角刀)、19.8 mm(鑽頭)
鑽孔的負載(模型算出,不應引用:鑽頭被當成錐形銑刀仿真,見〈誠實的限制〉) 軸向力 1.6 N,X、Y 為 0(真實 Ø3.3 鑽頭在鋁上約上百 N);熱降伏比 0.60
訊息 Sys-Init--FileLines 1、DeclaredMCode--UnmodeledEffects 5、Msg--Display 3(程式的 MSG)、SiemensToolOffset--TcdpRowMissing 1(已說明);沒有 Collision--Detected,沒有 StrokeLimit--*

用來檢查設定的粗跑與驗收跑:

1 mm,HiNC 3.2.39 0.0625 mm,HiNC 3.2.41
步數 5,930 5,930
執行的程式行數 644 644
是否切到毛胚,整次執行與雕刻段(第 0–5,000 步) 是 是
雕刻段切深峰值,第 0–5,000 步 0.29 mm 0.3025 mm
鑽孔段每步切深峰值,第 5,000–5,930 步 1.61 mm 0.884 mm
仿真週期 28.70 s 28.70 s
在 32 執行緒的伺服器上重播一次 約 6 s 約 6 s

一次重播的每一則訊息,以及發出它的程式行:

訊息 嚴重性 數量 位置,以及為什麼在預期之內
Sys-Init--FileLines 訊息 1 程式檔有 644 行
DeclaredMCode--UnmodeledEffects 訊息 5 M50(N80)、M27(N6400)、M29、M51 與 M65(N6410):原機台自己的功能,已宣告為不移動任何東西
Msg--Display 訊息 3 程式的 MSG("MILL_FINISH")(N230)與 MSG("DRILL_METHOD")(N6220),以及第二個 MILL_FINISH 合併成的一則(N2740,「repeated 2x」)
SiemensToolOffset--TcdpRowMissing 警告 1 N190:在第一次叫刀之前、主軸還是空的(T0)時就選了 D1;見〈第一次叫刀之前的刀具補正〉
Parsing--Unconsumed、ToolChange--NameUnresolved、StrokeLimit--*、Collision--Detected -- 0 沒有

鑽頭夾在熱縮刀把裡,位於板子尾端,標誌與字樣都已經刻好

給加工工程師。 仿真告訴你時間花在哪裡。28.7 秒的仿真時間中,21.7 秒是 F2069 的進給,而這 749 mm 的進給路徑裡有 448 mm 是刀具在輪廓之間以切削進給上下 16 mm——13 秒。代理把程式複製一份,把 14 個退刀從 Z16 改成 Z2、兩道雕刻工序開頭以快移到達的進刀點(N330、N2810)保留 Z16,重播後得到 18.18 秒,切屑體積加總、切深峰值、切削能量與訊息都相同。只要真實的夾持低於板面,就像這台虎鉗一樣,每件可省 10.5 秒,而且在花任何機台時間之前就驗證過了。機台紀錄顯示真實每次約 83 秒(含換刀與中斷),所以在機台上的節省比較接近 13 %,而不是仿真的 37 %。機械負載離任何極限都很遠,所以這個零件的時間是由路徑決定,而不是由切削決定。還有,雕刻深度不在程式裡:它應該寫在設定單上。

仿真週期的時間花在哪裡,以堆疊長條表示:原樣時,沿深度上輪廓的進給 8.7 秒(F2069 走 301 mm)、在輪廓之間上下 16 mm 的進給 13.0 秒(448 mm)、快移(大多是往返程式起始點)與鑽孔循環 7.0 秒,共 28.70 秒;14 個退刀改成 Z2 時,8.7、2.4(84 mm)與 7.0 秒,共 18.18 秒;依機台的逐秒紀錄,真實的一次生產約 83 秒,同樣的 10.5 秒約是其中的 13 %

安全高度實驗的數字,在 HiNC 3.2.41 上,進給路徑取自程式:

原樣的程式 14 個退刀改成 Z2
仿真週期 28.70 s 18.18 s:少 10.5 s,-37 %
F2069 的進給路徑 749 mm,21.7 s 385 mm,11.2 s
其中在輪廓之間上下的部分 448 mm:14 次下刀與 14 次退刀,各 16 mm 84 mm:兩個進刀點之後的下刀仍是 16 mm,其餘 2 mm
切深峰值,雕刻/鑽孔 0.3025/0.8842 mm 相同
逐步切屑體積加總,雕刻/鑽孔——只作比較用(見〈讀取移除體積〉) 9.550/23.356 mm³ 到小數第三位都相同
切削的累計主軸能量 174 J(4.842 × 10⁻⁵ kWh) 相同
訊息 如上所列;沒有碰撞 相同

給老師或學生。 這一支短短的程式,涵蓋了 Siemens 840D sl 程式和 ISO G 碼大部分的不同之處:變數、機械座標移動、擺角與平滑及鑽孔的循環、以名稱叫刀與 $TC_DP 表,以及機台特有的 M 碼。這個案例也示範了在沒有模型時,能從程式讀出多少東西——從鑽孔深度讀出板厚、從對稱讀出板寬——以及讀取到哪裡為止、之後就必須標明是假設。

給評估這種做法值不值得的人。 在 32 執行緒的伺服器上,每次重播兩種解析度都約 6 秒;代理總共跑了約二十次,包括實驗與拍圖。一次執行約需 30 MB 的步結果,加上服務本身約 1 GB 的基底(依文件的規則估算,未實測)。除了建案的代理,還有七個輔助代理參與:三個做研究、一個盲建、三個審查。人只需要出手兩次:提供登入帳號,以及核准結束這項工作。審查找到的錯誤都在發佈前修正了。

誠實的限制

  • 板子的尺寸、材料與雕刻深度,是代理對程式與照片的解讀,不是來源的資料。5.5 mm 的板子不留穿透量、或 4.5 mm 的板子穿透 1 mm,也都符合鑽孔深度。
  • 機台不是 Spinner U5-620。它的座標不同,只用到 B0 C0,而真實的夾持方式未知。
  • 鑽孔的物理量不是鑽削模型:鑽頭被當成錐形銑刀仿真,軸向力(不到 2 N)遠低於真實鑽頭。它的幾何——切在哪裡、切多深——是對的;它的負載不應引用。
  • 仿真週期沒有加減速,換刀算成 0 秒。安全高度的節省只在仿真中驗證;切屑、冷卻液與真實機台的加減速都不在其中。
  • 刀把離板子的間隙是代理自己的檢查:最深處時刀把鼻端在板面上方多高,由刀具幾何與程式算出(見〈指南的伸出量規則與全長固定的刀〉);驗收重播的碰撞檢查不是它的證據。
  • 840D sl 在 SUPA 期間是否保留刀長,沒有查證;這支程式兩種情況結果都一樣。

讀者可以帶到自己案例的

  • 沒有模型時,程式本身仍帶著尺寸:固定循環的參考面與深度、對稱的特徵、孔的位置。
  • 用尖頭刀、路徑停在 Z0 的程式,深度來自設定。在相信一次乾淨的執行之前,先查清楚它從哪裡來。
  • 面對 Siemens 程式:對應刀名、填 $TC_DP、宣告機台自己的 M 碼、從程式的 SUPA 移動取起始與換刀高度,並檢查每個 SUPA 的 Z 移動是否帶 D0。
  • 在 reset 之後取程式原點。
  • 看時間分解。沒切到東西的進給移動,是最便宜能省下的秒數,而仿真能證明切削沒有改變——但要拿節省和真實週期比,而不是和仿真週期比。
  • 依證據驗收——步數、切到什麼、切深、時間、每一則訊息的 id——絕不依「已完成」。

來源與授權

  • 程式與刀具表:B. Engelmann, A.-M. Schmitt (THWS),https://github.com/ElMoe/Production-Data-Set-for-Five-Axis-CNC-Milling-with-Multiple-Changeovers,為 B. Engelmann, A.-M. Schmitt, M. Martinez, "Production Data Set for Five-Axis CNC Milling with Multiple Changeovers", https://doi.org/10.5281/zenodo.15735480 的外部資料。
  • 描述於 M. Martinez, A.-M. Schmitt, A. Schiffler, B. Engelmann, Scientific Data 12, 1067 (2025), https://doi.org/10.1038/s41597-025-05294-0。
  • 授權:Creative Commons Attribution 4.0 International,https://creativecommons.org/licenses/by/4.0/,依現狀提供,不附任何保證。
  • 修改之處:程式與刀具表原樣使用。安全高度實驗重播的是一份把 14 個退刀的 Z16 改成 Z2 的程式副本;這份副本不對外發佈。毛胚、機台、虎鉗、刀把與補正由代理推得或自選。兩張看得到刀把的圖是那個仿真的渲染畫面;示意圖與圖表由程式與代理的設定檔繪出;三個產品的照片是資料描述論文的圖 2(© The Author(s) 2025),依 CC BY 4.0 原樣重製。
  • 讀者請到原網站取得檔案;本頁不提供下載。連結失效時可搜尋:「Production Data Set for Five-Axis CNC Milling with Multiple Changeovers」、「Keychain_Schluesselanhaenger.mpf」。公司網站保留一份原始檔的副本,只作為原始連結失效時的備份。

從 GitHub repository 取得的檔案,可以用來源筆記給的 SHA-256,核對它是否就是本頁仿真所用的那一個:

檔案 commit b800366 時在 repository 中的路徑 SHA-256
Keychain_Schluesselanhaenger.mpf NC_code/Keychain_Schluesselanhaenger/Keychain_Schluesselanhaenger.mpf df1831facaed2c20fb3ab6735d8894bfe01fdf7ffc8412ceefb453f6fda5cb8f
Tool_information.csv Tool_information/Tool_information.csv 139243c00f0841ac6b10981eaf7c5afbcb3fe6b5d0d981bda4bfd09f43fa63af

另見