跳轉到

三軸銑削標竿測試,零件 1–3:從公開的 CAM 資料到通過驗收的仿真

一個 AI 代理 (agent) 拿到一套公開的三軸銑削標竿測試中的零件 1–3——每件只有一個 STEP 模型、一支 CAM 程式和一張渲染圖,別無其他——透過 Web API 把它們建成 HiNC 專案:資料集沒寫的,它自行選定並記錄下來;資料集寫錯的那一處,它加以更正。三支程式都在 HiNC 3.2.45 上原樣播放,並憑證據通過驗收:先用 1 mm 的粗加工解析度(組成仿真毛胚的那些立方體的邊長;越細越慢,也越吃記憶體,見網格解析度),再用 0.25 mm。代理把自己的做法寫成一份建案指南,並讓四個除此之外什麼都沒看過的獨立代理照著做,以此證明它可行。

本頁的一切都是仿真:沒有任何零件在真實機台上切削過。本頁記錄代理遇到的十四個難題(D1–D14,全文以編號引用),每一個都寫明它的風險、怎麼浮現、如何解決,以及證明解法成立的證據。建好的專案是代理的工作材料,不對外發佈。

案例

資料集是 M. Schmitz、J. Mertes、F. Schillinger 與 M. Wagner 的 Benchmark Dataset of 10 Multi-Feature Models for Single-Setup 3-Axis Milling:Zenodo 紀錄 17035762,第 1 版,2025-09-02,DOI 10.5281/zenodo.17035762,授權 CC BY 4.0。十個零件各自由一塊 80 × 80 × 50 mm 的料、用一支直徑至多 6 mm 的端銑刀一次裝夾切出,每件附一個 .step 模型、一支 .ngc 程式與一張 .png 渲染圖;紀錄上的 MD5 檢查碼與零件 1–3 的九個檔案全部相符。夥伴代理以同一份指南建了零件 4–10,自成一個案例。

零件 特徵(紀錄中的表) 幾何 程式 工序
1 Slots(槽) 一條寬 6 mm、深 6 mm、沿 X 貫穿的直槽 6,887 位元組,320 行;最深 Z−7 PLANEN1 面銑、NUT2 銑槽
2 4 holes(4 個孔) 四個 Ø10、深 4 mm 的盲孔,分布在 50 mm 見方的四角 14,483 位元組,514 行;最深 Z−5 PLANEN2 面銑、2D-TASCHE1 螺旋銑孔
3 4 holes, surrounding step (rectangular)(4 個孔、環繞的矩形階面) 一塊凸出 4 mm 的 70 × 70 mm 方台,上有四個 Ø10、深 7 mm 的孔 36,113 位元組,1,333 行;最深 Z−8 PLANEN2 面銑、2D ADAPTIVE2 階面清料、2D-TASCHE1 銑孔

資料集自己的零件 1、2、3 渲染圖,依編號排列:一塊 80 × 80 mm 的料,頂面橫過一條直槽;同樣的料,四個 Ø10 孔分布在 50 mm 見方的四角;以及一塊料上凸出 4 mm 的 70 × 70 mm 方台,台上有四個 Ø10 孔。圖:M. Schmitz、J. Mertes、F. Schillinger、M. Wagner,Zenodo 17035762,CC BY 4.0,經裁切、並排並加上零件編號

資料集渲染的零件 1–3,每個零件一個 .png 檔:也就是每支 .ngc 程式從料塊切出、每個 .step 模型所描述的完成件。

每支程式都只用一把刀 (T1 D=6. CR=0. - ZMIN=… - SCHAFTFRSER),也就是 Ø6 平端銑刀;工序以德文命名,面銑(以及零件 3 的自適應清料)用 S18000,之後用 S16000。由程式加總的進給路徑切削時間:2.8、4.8 與 7.3 min。只有零件 2 帶機台標頭(HERSTELLER AUTODESK、MODEL GENERIC 3-AXIS);.ngc 副檔名、G64 P Q 與 G91.1 指向 LinuxCNC 的後處理器——這是推論,紀錄並未寫明。

資料集沒有給材料、機台、主軸、刀把,刀具除了 D=6 與 CR=0 之外也沒有其他資料,也沒說程式原點在哪裡:模型以 X/Y 0 為中心、Z 從 2 到 52,程式用的卻是另一個原點(D2)。有一個寫明的值對不上:程式需要的料高 51 mm,而不是 50 mm(D3)。

代理建了什麼

一切都經由 HiNC 的 Web API 完成,依循的是公開的頁面——專案建構(建置順序與規則)、透過 HTTP 驅動網頁服務(各個呼叫;英文,未鏡像)與重播驗收(各次執行)——而不是內部筆記。每個值都標明出處:讀取(來源寫明的)、推得(代理由來源推算出來的)、自選(來源沒說、由代理決定的)或量測(在一次執行中量得的)。

項目 設定 依據
機台 隨附的通用三軸機構鏈,不帶任何形狀;工作臺以靜態平移 (−400, −250, +400) 擺放;行程 X −800..0、Y −500..0、Z −500..0 自選:切削結果不取決於機台的外觀(D5);擺放是針對這條機構鏈推得的:它的刀具端帶著 +1000 mm,所以工作臺放在 +400,位於刀具端下方 600 mm(建立虛擬工具機)
夾具 一塊 160 × 120 × 20 mm 的板,工件安裝點在它的上表面 自選:資料集沒有說明夾持方式
毛胚 一個 80 × 80 × 51 mm 的方塊,在程式座標中位於 X 0.5..80.5、Y 0.5..80.5、Z −51..0 推得:程式所需的高度(D3)
設計模型 STEP 轉成 STL(cascadio、trimesh;中間的 glTF 步驟以公尺為單位),平移 (40.5, 40.5, −53);封閉網格,分別有 28、1,148 與 1,164 個三角形 讀取,以推得的平移擺放(D2)
程式原點 工件座標系的原點;夾具安裝點在 (40.5, 40.5, −51);G54 (−440.5, −290.5, −529),由 P0 寫入——P0 是 HiNC 的程式原點呼叫(set-to-program-zero,也就是工件偏移列上的 P0 按鈕),從擺好的模型量出偏移 由刀具路徑推得(D2);G54 是 P0 傳回的值
控制器 Fanuc 品牌,程式原樣不改 自選:HiNC 沒有 LinuxCNC 品牌,而它的 Fanuc 讀取器只留下兩種無害的警告(D1)
材料 取自隨附資源庫的 Al6061-T6;刀具材料 WC-Co10-600nm 自選:紀錄沒有指名材料
刀具 Ø6 平端銑刀:刃長 13 mm、全長 57 mm、3 刃、螺旋角 45°、徑向前角 12°、徑向後角 10° 讀取:D=6、CR=0;自選:其餘各項,取合乎實際的比例
刀把 熱縮刀把,鼻端 Ø21、錐度 4.7°、量規長度 80 mm;Z–R 輪廓 (0, 10.5) (55, 15) (55, 22) (63, 22) (63, 31.75) (80, 31.75) 自選:不用隨附的刀把檔(D5)
伸出量 max(刃長, 最深切削) + 5 mm,再進位到 5 的倍數:三個零件都是 20 mm;刀長 100 mm 自選的規則(D5);20 mm 為推得;100 mm 從補正列讀回(idealHeight)
主軸 一支合成的通用 24,000 rpm 主軸:連續 7.5 kW、短時 10 kW,4,000 至 24,000 rpm 恆功率 自選:資源庫的主軸最高只到 12,000 rpm,程式卻要 18,000(D4)
任務 基準執行用加工解析度 1 mm,驗收用 0.25 mm;碰撞偵測開啟;最後做幾何差異 自選:先粗後細(D8)

HiNC 中的零件 1,等角視圖:一塊 80 x 80 mm 的料放在夾具板上,面銑過的頂面以藍色顯示,一條槽沿頂面延伸;鼻端細長帶錐度、法蘭寬大的熱縮刀把,夾著一支 6 mm 端銑刀停在槽裡。

零件 1,暫停在第 50,367 步(共 52,600 步),位於槽的 Z−5 層(執行頁,等角視圖,隱藏刀具路徑):量規長度 80 mm 的熱縮刀把以 20 mm 伸出量夾著 6 mm 端銑刀。

代理怎麼管理這件工作

  • 看證據,不看狀態。 每一次重播都依公開的重播驗收檢查項目,加上依 id 與次數的訊息盤點來判定(D7)。每個零件的參考數字都寫進它的筆記,所以四次獨立建置是拿它們執行之前就定好的數字來判定的(D10)。
  • 先粗後細,並先估算記憶體:用 1 mm 在幾秒內檢查基準,再用 0.25 mm 驗收(D8)。
  • 平行的研究子代理:代理重播零件 1 的同時,一個子代理閱讀剖析器處理每個 LinuxCNC 字的原始碼;兩邊結論一致之後,品牌才定案(D1)。
  • 由獨立代理證明書面指南——指南是一連串 API 呼叫,每一個之後都讀回核對:四個代理只憑指南、一個案例的檔案與一個伺服器位址重建零件,而它們不得不做的每一個猜測,都寫成了指南的文字(D10)。
  • 納入夥伴的發現。 夥伴代理同時用這份指南建了零件 4–10(十四次重播全部通過)、THWS 鑰匙圈(一個以 Siemens 語法編寫的零件),以及一個 NIST 五軸測試件(D2、D10)。
  • 對抗式審查。 一個夥伴代理逐條審查零件 4–10 的筆記,標出三段零件 1–3 也有的陳述;代理當天就更正了(D12)。
  • 共用的伺服器。 好幾個代理同時在同一台 HiNC 伺服器上工作;每個代理用自己的服務執行個體與鍵前綴,也從不停止不是自己開始的執行(D13)。
  • 人在哪裡介入。 主導這項工作的 HiNC 產品負責人訂下了這些規則,每一條都改變了代理的做法:
    • 合乎實際的刀把,搭配剛好夠用的最短伸出量,因為沒有刀把、直接從主軸懸出的刀具會斷。代理自行定義了刀把、伸出量規則與檢查(D5),本頁的每張 HiNC 畫面都看得到刀把。
    • 不用任何客戶資料:所以用不帶形狀的通用機台,以及在專案內定義的刀把(D5)。
    • 依公開文件建置:代理依循上面列出的公開頁面,而不是內部筆記。
    • 每個主題一個根資料夾,而且是一份紀錄、不是訓練教材:每個案例的來源、筆記與建好的專案都放在它自己的資料夾,每台機器上的配置都一樣(D14);指南、筆記與盲建則留作代理如何證明自己工作的紀錄。

難題

共十四個,依出現的先後排列;每一個都依情況、風險、怎麼發現、解法,以及證明解法成立的證據來敘述。

難題 解決它避免了什麼
D1 沒有控制器品牌能讀 LinuxCNC 改過的程式掩蓋了行為
D2 沒有給程式原點 擺錯位置卻照樣切得到東西
D3 寫明的料塊短了 1 mm 一層不存在的缺料誤報
D4 資源庫的主軸最高只到 12,000 rpm 功率數字出自一支轉不到那麼快的主軸
D5 不用隨附的刀把與帶形狀的機台 一套沒有加工師傅會這樣上機的設定
D6 P0 只填了兩張偏移表中的一張 頁面上的標記與執行互相矛盾
D7 「Finished」不等於「通過」 驗收了一次什麼都沒切的執行
D8 細的執行耗時又耗記憶體 把細的執行浪費在錯的基準上
D9 零件 1 的切深峰值在 0.25 mm 翻倍 把正確的基準「修正」掉
D10 指南離開作者還管用嗎? 各次建置之間悄悄出現的差異
D11 行尾轉換改動了來源檔 檢查碼不再相符
D12 標註的陳述 錯誤的授權聲明
D13 好幾個代理共用一台伺服器 一個代理的重置毀掉另一個代理的執行
D14 一個主題分在兩個資料夾 不知道某個結果來自哪一次建置

讀資料

D1. 沒有控制器品牌符合這種方言

  • 情況。 程式是 LinuxCNC 風格(G64 P Q 路徑混接、G91.1 增量圓心、G18 G3 … I K 斜向進刀、G53 G0 Z0);HiNC 的品牌有 Fanuc、Siemens、Heidenhain、Syntec 與 Mazak。
  • 風險。 為了「修正」這些字而改程式,會改動公開發佈的程式,也掩蓋控制器處理它們的方式。
  • 怎麼發現。 沒有任何品牌相符。代理以 Fanuc 重播零件 1 的同時,一個研究子代理針對每個字逐一閱讀剖析器原始碼;兩邊結論一致。
  • 解法。 Fanuc,程式原樣不改。G91.1 不改變任何東西,因為 Fanuc 的 I/J/K 一律是增量。G64 P Q 是 LinuxCNC 的路徑混接公差,在真實的 LinuxCNC 控制器上會讓轉角變圓;仿真沒有建模它,而是照程式的路徑走。兩者都會引發 Parsing--Unconsumed;帶 I/K 的 G18 G3、G53 G0 Z0、% 與註解則不引發任何訊息。依公開的規則,引發已知訊息、卻不改變運動的寫法維持交付原樣,列為預期訊息(專案建構 §1):零件 1 只有一個 G64 單節,每次播放兩則;零件 2 與 3 有兩個,每次播放三則。重複的訊息不會再列一次;它之後的出現,會在它最後出現的那個單節上合成一筆 [repeated 2x in this run, …],算作一則。
  • 證據。 每一次重播——代理自己的與盲建的——除了檔案行數那則說明之外,都恰好引發這幾則,並執行了每一行。

各零件筆記列出的每次播放 nc 訊息;步與 NC 操作兩份清單都是空的:

零件 Sys-Init--FileLines Parsing--Unconsumed 位置
1 1(320 行) 2 G91.1 在單節 N10;Q, P, G64 在 N45,也就是唯一的 G64 單節
2 1(514 行) 3 G91.1 在 N10;Q, P, G64 在 N45,並在 N1505 再出現一次,回報為 [repeated 2x in this run, …]
3 1(1,333 行) 3 G91.1 在 N10;Q, P, G64 在 N45,並在 N1500 再出現一次,回報為 [repeated 2x in this run, …]

D2. 程式原點在哪裡?

  • 情況。 STEP 模型以 X/Y 0 為中心、Z 從 2 到 52;程式的原點在別處,沒有寫明。
  • 風險。 擺錯位置仍然切得到東西,所以一次執行可能通過淺層的檢查。
  • 怎麼發現。 拿刀具路徑對照模型特徵:零件 1 的銑槽行程走在 Y40.5,而槽寬正好一個刀徑;零件 2 半徑 2 的螺旋銑孔圓弧(Ø10 孔、Ø6 刀)以 X/Y 15.5 與 65.5 為中心,模型的孔則在 ±25;零件 3 的自適應各層以 40.5 為中心。Z 方向,模型頂面落在 Z−1,也就是面銑深度;每個底面都落在程式切削的某個 Z 上,最深的那個則落在刀具註解的 ZMIN。
  • 解法。 模型平移 (40.5, 40.5, −53)。程式原點位於模型各側面之外 0.5 mm、頂面之上 1 mm,這指向(推論)一塊大了這麼多的 CAM 毛胚,原點在它頂面的左前角。處理零件 4–10 的夥伴代理起初只憑底面算出 40;側面特徵顯示是 40.5——這是底面看不出的誤差。規則:用側面特徵核對 X 與 Y。
  • 證據。 擺好的模型從 [0.5, 0.5, −51] 延伸到 [80.5, 80.5, −1],與毛胚的側面和底面齊平;零件 1 粗跑的切深峰值正好是它 2 mm 的層深(D9)。

D3. 寫明的料塊尺寸與程式矛盾

  • 情況。 紀錄給的是 80 × 80 × 50 mm。程式從頂面面銑掉 1 mm,而那個面之下 50 mm 高的模型,底部落在 Z−51。
  • 風險。 幾何差異會在每個零件底下回報一層 1 mm 的缺料,而那層缺料不可能是任何程式切出來的:一個假警報。
  • 怎麼發現。 由 D2 的算術:Z−51 低於一塊頂面在 Z0、高 50 mm 的料塊。
  • 解法。 用 80 × 80 × 51 mm 的毛胚,與模型的側面和底面齊平、高出模型頂面 1 mm;每個零件的來源筆記都寫明這一點與理由。
  • 證據。 毛胚與模型的底面同在 Z−51,沒有留下任何一層可回報。

設置

D4. 資源庫的主軸轉不到那麼快

  • 情況。 隨附的主軸最高 12,000 rpm;程式要 18,000。
  • 風險。 那個轉速下的功率或扭矩,會出自一支根本到不了那個轉速的主軸。
  • 怎麼發現。 比對程式的 S 字與資源庫。
  • 解法。 一支標明為通用、不取自任何廠商規格表的主軸:24,000 rpm、連續 7.5 kW、短時 10 kW、4,000–24,000 rpm 恆功率(主軸能力)。
  • 證據。 S16000 與 S18000 都落在它的恆功率範圍內;沒有任何重播引發預期清單以外的訊息。

D5. 不用隨附的刀把與帶形狀的機台

  • 情況。 每把刀都需要合乎實際的刀把,但本案例既不用唯一隨附的刀把檔,也不用帶形狀的隨附機台;切削結果不取決於機台的外觀。
  • 風險。 引擎播放沒有刀把的刀具時一聲不吭,所以案例可能呈現一套沒有加工師傅會這樣上機的設定。
  • 怎麼發現。 負責人的案例規則排除了隨附的檔案;引擎裡沒有任何東西會指出少了刀把。
  • 解法。 在專案內以 Z–R 輪廓定義的熱縮刀把、設定表中的伸出量規則,以及代理計算並回報的六點檢查:(1) 鼻端比刀具寬;(2) 伸出量至少等於刃長;(3) 在最深的 Z,鼻端至少高出毛胚頂面 5 mm;(4) 伸出量不超過所需;(5) 補正列 = 80 + 伸出量;(6) 重播中沒有 Collision--Detected——這出自 HiNC 的碰撞檢查,它涵蓋夾具,也涵蓋刀把與刀桿對毛胚。
  • 證據。 在最深的 Z,鼻端高出毛胚:零件 1(Z−7)13 mm、零件 2(Z−5)15 mm、零件 3(Z−8)12 mm;每個補正列都讀到 100;兩種解析度下的每一次重播,碰撞檢查都沒有回報任何接觸。

D6. 程式原點只落進兩張表中的一張

  • 情況。 set-to-program-zero 填的是執行所讀的偏移表,而不是執行頁座標標記所讀的 legacy ISO 座標表。
  • 風險。 執行與標記對程式原點的說法不一致,會誤導用眼睛檢查的人。
  • 怎麼發現。 公開的建構工作流程寫明這兩張表不會保持同步,而標記讀的是 legacy 那一張(專案建構 §4)。
  • 解法。 指南把同一個 G54 寫進兩張表。
  • 證據。 代理的建置與四次盲建都讀回參考 G54 (−440.5, −290.5, −529),並把同一列寫進 legacy 表。

驗證

D7. 「Finished」不等於「通過」

  • 情況。 Finished 只表示任務走到了終點。
  • 風險。 一次從未裝上刀具的執行,不切任何東西也會結束;只看狀態就會驗收它。
  • 怎麼發現。 這種失效模式有文件記載(重播驗收 §4);代理把自己的檢查建立在那份清單上。
  • 解法。 依七種證據驗收:步數大於零(一步是仿真執行中主軸的一轉);IsTouched 峰值為 1;每一行都執行;仿真時間;幾何差異已建立;依 id 與次數的訊息盤點,預期清單以外的任何訊息都是建置缺陷;以及切深峰值等於該零件的參考值。零件 1 的粗跑中,那是程式的 2 mm 層深,它釘住了 Z 基準(D9);零件 2 是 4 mm 的孔深,最後一圈螺旋與精修整圓在那裡吃到整段孔壁;零件 3 則是記錄下來的 3.93 mm,它落在銑孔工序裡,但尚未追溯到某個單節(見〈誠實的限制〉)。
  • 證據。 三個零件在兩種解析度下都通過每一項,步數為 52,600、84,637 與 126,971。

D8. 細的執行耗時又耗記憶體

  • 情況。 在證明設定的過程中,每個零件都要重播好幾次。
  • 風險。 把一次細的執行浪費在錯的基準上,或一次執行記憶體放不下。
  • 怎麼發現。 事先規劃:文件說先跑粗的(重播驗收 §3),記憶體規劃則給出估算方法。
  • 解法。 基準執行用 1 mm,驗收用 0.25 mm。依記憶體規劃的公式估算記憶體:約 1 GB 基底,加上每步約 5 KB(0.26、0.42 與 0.63 GB),再加上網格,得到 1.4、1.5 與 1.7 GB,遠低於一台普通 8 GB 電腦的容量。
  • 證據。 在一台 32 執行緒的伺服器上,1 mm 的重播花 15、20 與 25 秒,並確認基準;0.25 mm 的重播花 30、40 與 65 秒,步數相同。

D9. 較細解析度下切深峰值翻倍

  • 情況。 零件 1 的切深峰值在 1 mm 解析度下是 2 mm,在 0.25 mm 下卻是 4 mm。
  • 風險。 若讀成基準錯誤,這個跳動可能讓一個正確的擺放被「修正」。
  • 怎麼發現。 代理列出每一步的切深(widthHint=0),把 4 mm 的步追溯到它們的單節。
  • 解法。 槽寬正好一個刀徑,所以在較細的解析度下,刀具側刃會擦到上一層留在槽壁上的殘料。基準檢查用粗跑;零件的筆記列出兩個值與原因。
  • 證據。 全部 204 個 4 mm 的步都在 Z−5 層的單節 N1545 X80.5 中,每四步出現一次;最後一層沒有這種峰值,而粗跑的 2 mm 各層峰值正好是 2 mm。

以其他代理證明程序

D10. 另一個代理只憑書面程序能成功嗎?

  • 情況。 代理自己的建置,跑的是它自己的腳本,也仰賴它對每個陷阱的了解;指南則是寫給別人用的。
  • 風險。 只存在作者腦中的知識,會逼追隨者去猜,而每一個猜測都是建置可能悄悄產生差異的地方。
  • 怎麼發現。 代理實際測試。四個獨立代理,每個只拿到指南、一個案例的檔案與一個伺服器位址,並被告知不得閱讀其他任何東西,分別建了零件 1、零件 3、零件 2(就地,在它的案例資料夾中),以及再一次零件 1(覆蓋在既有的專案上),並各自回報哪裡不得不猜。
  • 解法。 每一個猜測都寫成了指南的文字。其中會改變結果或掩蓋失敗的有:

    • P0 必須在 Execution/reset 之後:執行中的設定副本只在工作階段邊界吃進修改,所以播放過的專案若不先重置,會得到過時的 G54(夥伴代理;第 4 次建置證實)。
    • 打錯的路由對 GET 會以 200 回應網頁的 HTML,而不是 404(POST 則回 405),所以只看狀態的 GET 檢查會讀成成功(夥伴代理)。
    • 刪除與插入之後,任務路徑會重新編號(一個過時的路徑回應了 CommandTypeMismatch),所以要在重新讀取的結果中依類型尋找項目(第 3 次建置)。
    • 用 widthHint=1 時,每個點的 xs 是它結束的那一步,而第一個點涵蓋整次執行(第 2 次建置讀錯了);碰撞準備訊息只出現在建立或載入之後的第一次重播(第 2 次建置);一則 [repeated 2x] 訊息算一筆(第 3 次建置)。
    • 新專案的解析度預設為 0.125 mm(第 1 次建置)。
    • 步數 ≈ 主軸轉動的分鐘數 × rpm;只用進給時間來算,零件 1 低估 3 %,鑰匙圈低估 36 %(夥伴代理)。

    關於回應形狀的較小發現(空的 200 回應本體、標準鍵、巢狀清單)也以同樣方式納入。由此得出的規則——在指南還是寫給別人用的時候——是:程序的變更要由另一次獨立執行來證明,而不是靠改寫文字。

  • 證據。 四次建置都以參考數字通過每一項檢查:零件 1 為 52,600 步(兩次)、零件 3 為 126,971 步、零件 2 為 84,637 步,G54 與訊息盤點也都相同。

與其他代理並行工作

D11. 讓來源檔在各台機器上逐位元組一致

  • 情況。 原始檔以 Windows 行尾(CRLF)結束每一行;一份設定為轉換行尾的 checkout 把它們存成 Unix 行尾(LF),文字不變,位元組卻變了。
  • 風險。 副本會不再符合來源筆記中的 SHA-256 檢查碼,「程式完全照公開原樣播放」的說法也就不成立。
  • 怎麼發現。 在第一次提交之前:即將存入的副本已經失去了 CRLF。
  • 解法。 來源檔、任務所播放的程式副本與設定檔,都不經轉換地存放。
  • 證據。 存放的檔案符合檢查碼,任務播放的每支程式都與原始檔逐位元組相同。

D12. 精確的標註

  • 情況。 每個零件的來源筆記都寫明作者、授權與出處,公開頁面也會重述。
  • 風險。 錯誤的標註或授權聲明被公開發佈。
  • 怎麼發現。 一個夥伴代理對零件 4–10 筆記做的對抗式審查——每個零件一位唯讀審查者——標出了三段零件 1–3 也有的陳述。
  • 解法。 當天更正:CC BY 4.0 沒有「相同方式分享」(ShareAlike) 條款,所以程式之所以受涵蓋,是因為它本身就是紀錄中的檔案之一,而不是因為改作物「繼承」了授權;紀錄沒有給作者所屬機構,只有它的聯絡人列出一個機構;Autodesk 的 Fusion 為 LinuxCNC 後處理出這些程式,是一個推論,並已如此標明。
  • 證據。 本頁依循更正後的筆記;CAM 毛胚的角落——第二輪審查發現零件 4–10 的筆記仍把它當成事實陳述——在這裡標為推論(D2)。

D13. 好幾個代理共用一台伺服器

  • 情況。 好幾個代理共用一台 HiNC 伺服器;每個服務執行個體持有一個開啟的專案。
  • 風險。 一個代理的重置、停止或關閉,毀掉另一個代理的執行。
  • 怎麼發現。 有一次另一個用戶端在重播途中關閉了專案,代理的輪詢程式便一直等著一個它認不得的狀態。
  • 解法。 每個代理用自己的服務執行個體與鍵前綴,不停止不是自己開始的執行;輪詢程式現在遇到 Running 或 Paused 以外的任何狀態都會停下。
  • 證據。 被中斷的那次執行,單純重跑一次,就得到參考數字。

D14. 每個主題一個根資料夾

  • 情況。 試建放在共用伺服器上的另一個資料夾,案例檔則在各案例資料夾中。
  • 風險。 一個主題分在兩處,某個結果來自哪一次建置就不清楚。
  • 怎麼發現。 產品負責人看到了分散的資料夾。
  • 解法。 一切都搬進各案例的資料夾,每台機器上的配置都一樣。
  • 證據。 每個案例資料夾都存放它的來源、筆記與建好的專案,這幾個零件沒有任何建置留在資料夾之外。

結果與效益

在 HiNC 3.2.45 上把每個存好的專案以 1 mm 與 0.25 mm 各重播一次量得,記憶體除外(事先估算,D8);兩張 HiNC 畫面擷取自 3.2.40,D9 的逐步追溯則是建案時在 3.2.39 上做的。除非另註,1 mm 與 0.25 mm 的結果相同。一步是仿真執行中主軸的一轉,所以步數跟著主軸走、不跟解析度走,可以事先以「主軸轉動的分鐘數 × rpm」估算。力只是背景資訊,不是驗收值,而且建立在假設的材料與刀具上。

零件 1 零件 2 零件 3
步數 52,600 84,637 126,971
執行的行數 320 / 320 514 / 514 1,333 / 1,333
有東西被切到(IsTouched 峰值) 1 1 1
切深峰值(CuttingDepth_mm) 1 mm 下 2 mm,0.25 mm 下 4 mm(D9) 4 mm,即孔深 3.93 mm
切削力峰值(MaxAbsForce_N),1 mm / 0.25 mm 99.8 / 99.9 N 54.5 / 54.5 N 101.9 / 101.8 N
仿真時間 177.3 s 296.9 s 447.9 s
幾何差異已建立 是 是 是
NC 訊息 1 則檔案行數說明(Sys-Init--FileLines)+ 2 則 Parsing--Unconsumed 1 + 3 1 + 3
其他訊息清單(步、NC 操作) 空 空 空
在 32 執行緒伺服器上重播,1 mm / 0.25 mm 15 s / 30 s 20 s / 40 s 25 s / 65 s
估計的記憶體峰值 1.4 GB 1.5 GB 1.7 GB

長條圖:標竿測試十個零件的仿真加工時間——零件 1 為 3.0 分、52,600 步,零件 2 為 4.9 分、84,637 步,零件 3 為 7.5 分、126,971 步;零件 4 到 10 為 7.0 到 22.6 分,零件 9 最長

全部十個零件的仿真時間與步數:零件 1–3 在本頁,零件 4–10 在它們自己的案例。

各支程式逐個工序來看:開啟該工序的註解所在的行、它的步數,以及它在 1 mm / 0.25 mm 下的峰值;兩次執行相同時只列一個值。

零件 工序(行) 切什麼 步數 切深峰值(mm) 力峰值(N)
1 PLANEN1(7) 從頂面面銑掉 1 mm 46,588 1 54.5
1 NUT2(302) 槽,分三層、每層 2 mm 切到 Z−7,吃滿整個刀寬 6,012 2 / 4(D9) 99.8 / 99.9
2 PLANEN2(11) 從頂面面銑掉 1 mm 47,002 1 54.5
2 2D-TASCHE1(307) 四個孔,螺旋銑到 Z−5 37,635 4 51.5 / 22.8
3 PLANEN2(7) 從頂面面銑掉 1 mm 47,002 1 54.5
3 2D ADAPTIVE2(303) 方台周圍的階面,分兩層、每層 2 mm 切到 Z−5 16,935 2 101.9 / 101.8
3 2D-TASCHE1(967) 四個孔,螺旋銑到 Z−8 63,034 3.93 57.5 / 26.2

零件 1 的兩道工序,分成切深峰值與力峰值兩欄,各列 1 mm 與 0.25 mm:面銑 PLANEN1 兩者都是 1 mm、54 N;銑槽 NUT2 在 1 mm 下 2 mm、0.25 mm 下 4 mm,力兩者都是 100 N;一條線標出 2 mm 的層深

零件 1:只有槽的切深峰值隨解析度改變(D9),它的力峰值不變。

零件 2 的兩道工序,分成切深峰值與力峰值兩欄,各列 1 mm 與 0.25 mm:面銑 PLANEN2 兩者都是 1 mm、54 N;銑孔 2D-TASCHE1 兩者都是 4 mm,力在 1 mm 下 51 N、0.25 mm 下 23 N

零件 2:兩種解析度下,孔都讀到完整的 4 mm 孔深;0.25 mm 下的力不到 1 mm 的一半。

零件 3 的三道工序,分成切深峰值與力峰值兩欄,各列 1 mm 與 0.25 mm:面銑 PLANEN2 為 1 mm、54 N;階面清料 2D ADAPTIVE2 兩者都是 2 mm、102 N;銑孔 2D-TASCHE1 兩者都是 3.93 mm,力在 1 mm 下 57 N、0.25 mm 下 26 N;一條線標出 2 mm 的清料層深

零件 3:力峰值出在階面清料,3.93 mm 的切深峰值出在銑孔。

HiNC 中的零件 3,等角視圖:料塊上凸起的方台與環繞它的階面,三個已完成的孔,以及夾在刀把裡、正在切第四個孔的端銑刀。

零件 3,暫停在第四個孔、約第 121,000 步(共 126,971 步):環繞 70 × 70 mm 島的 4 mm 階面已經切好,四個 10 mm 孔中有三個已完成。

給加工工程師。 程式在 HiNC 的 Fanuc 品牌讀取器上原樣播放,它唯一的抱怨是兩種已知、無害的警告;這是仿真器的解讀,沒有在任何真實控制器上測試過。程式原點——位於模型各側面之外 0.5 mm、頂面之上 1 mm——以及程式真正需要的料塊 80 × 80 × 51 mm,都是在第一次執行之前從程式本身得出的。仿真時間包含快速移動,但不含加減速(零件 1 的 177.3 s 是 2.95 min,進給路徑則是 2.83 min),所以它們不是機台的循環時間。在 0.25 mm 下,全刀寬槽的側壁在上一層留下殘料的地方讀到 4 mm 的接觸深度(D9)。以假設的材料與刀具幾何而言,Ø6 碳化鎢銑刀切 Al6061-T6,重播中的峰值力約 100 N(零件 1 的全刀寬槽 99.8–99.9 N,零件 3 的階面清料 101.8–101.9 N)。

給老師或學生。 一個把公開的 CAM 資料變成通過驗收之仿真的實例,連同讓它可信的那些檢查(見〈讀者可以帶到自己案例的〉);指南、筆記與盲建則示範了在實務上,證明一個代理的工作是什麼樣子。

給考慮是否使用代理的人。

  • 由人提供的:案例規則與負責人的裁決(見〈代理怎麼管理這件工作〉)。
  • 交付的:三個在 0.25 mm 下通過驗收的零件;十四個難題,每一個都記錄了怎麼發現、怎麼解決;一套四個獨立代理照著做、四次都得到相同參考數字的程序。
  • 代價:在 32 執行緒伺服器上,1 mm 的重播 15–25 s、0.25 mm 的重播 30–65 s,估計記憶體 1.4–1.7 GB。
  • 依賴的:一個研究子代理(D1)與一個夥伴的審查(D12)。
  • 無法告訴你的:任何在真實機台上量得的東西。

誠實的限制

  • 材料、刀具幾何、刀把、主軸與機台都是假設,力與功率取決於它們;沒有任何東西在真實機台上量過。
  • 仿真時間沒有加減速模型,G64 P Q 的混接也沒有建模。
  • 零件 3 的 3.93 mm 切深峰值是記錄下來的參考值;它在兩種解析度下都落在銑孔工序裡,但沒有像零件 1 的 4 mm 那樣追溯到某個單節。
  • 銑孔工序的力峰值取決於解析度:0.25 mm 的重播讀到的值不到 1 mm 的一半(零件 2 為 22.8 對 51.5 N,零件 3 為 26.2 對 57.5 N);面銑、銑槽與清料的峰值相差不到 0.1 N。
  • 擺放 (40.5, 40.5, −53) 是為零件 1–3 推得的。後面的零件中,4、7、9 與它相同,5、6、10 在 X 與 Y 為 41,零件 8 的模型則需要它自己的平移,所以每個零件都要各自推算擺放。

讀者可以帶到自己案例的

  1. 從側面特徵、而不是底面找回程式原點:孔心、槽的中心線與壁面定出 X 與 Y;底面只定出 Z(程式原點對齊、由參照網格建立工件)。
  2. 核對程式真正需要的毛胚,而不是寫明的那個:先擺好模型,再檢查寫明的料塊是否包得住它(幾何驗證)。
  3. 保留交付的程式,並依 id 與次數列出它的已知訊息;只有在某種寫法會改變結果時,才編輯一份副本(專案建構 §1、重播驗收 §5)。
  4. 憑證據驗收,而不是憑「Finished」(重播驗收 §4)。
  5. 先粗後細,並先估算記憶體(記憶體規劃)。
  6. 從幾何核對刀把間隙,並開著碰撞偵測,用合乎實際的刀把與剛好夠用的最短伸出量(銑刀、刀具幾何)。
  7. 在更正任何東西之前,先把出乎意料的數字追溯到它的單節。
  8. 寫下每一個假設:假設了什麼、依據什麼推斷,以及真實數值送到時會改變什麼(專案建構 §7)。

資料集在它的來源處,見下方。

來源與授權

零件 1–3 的模型、NC 程式與渲染圖取自 Zenodo 紀錄 https://zenodo.org/records/17035762;連結失效時,可搜尋資料集的標題或「zenodo 17035762」。紀錄沒有給四位作者所屬機構;它的聯絡人 Dipl.-Ing. Marius Schmitz 任職於 RPTU Kaiserslautern-Landau。本頁的數字與圖表是以仿真從這些檔案推得的,圖片則是那個仿真的渲染畫面,只有〈案例〉一節那張三個零件的圖例外:它是資料集自己的渲染圖。

Model, NC program and rendering: M. Schmitz, J. Mertes, F. Schillinger, M. Wagner, "Benchmark Dataset of 10 Multi-Feature Models for Single-Setup 3-Axis Milling", parts 1–3, https://doi.org/10.5281/zenodo.17035762, licensed CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/), provided without warranty. The simulation set-up is the agent's: the stock and the placement derived from the programs; the machine, spindle, tool geometry, holder and material chosen. The models were converted from STEP to STL and moved into program coordinates for the geometry difference; the NC programs were played unchanged; the renderings were cropped, set side by side and numbered.

本頁不提供下載;讀者請從上方的來源取得檔案。公司網站保留一份原始檔的副本,只作為原始連結失效時的備份。授權的法律條文在 https://creativecommons.org/licenses/by/4.0/legalcode。

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

零件 檔案 SHA-256
1 1.ngc 8e48a4bf3647fc3319bd53fe131c411a1b7e79a7838605167795c916c7c71d29
1 1.step 8c2142896328cb3af5d4bc7ea3ee8d9acec62d0128fab2f06d14fc4d81f7c349
1 1.png 99ffdf93e07444ad1bfb86e967d6fe78784c3d4c144cd37b43785ec466f90a45
2 2.ngc 4e45f52841ce0baaa4473cf3f80a276297ccbe4a7392b26927e6078acf64f11d
2 2.step e6c3d7d0638ca832e59ab0d5d1c45bacb78c0738df76c19d5a64196cd831db45
2 2.png 31c93f8753f8397d4ca4decd5d42f4f8ec74dfb3f1bc100df73861297bc5ff42
3 3.ngc 5363a4888613a1732bacf9999958893a72b60481d919071214e992f770eccaec
3 3.step 872917f49b6c8cb458260571e45df3ffd8476c5e2dccb27121fefb16002f2991
3 3.png d08cada9191732b333764785c545db96f5397471eb458ee185f83cce33518687