三軸銑削標竿測試,零件 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–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) |

零件 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 回應本體、標準鍵、巢狀清單)也以同樣方式納入。由此得出的規則——在指南還是寫給別人用的時候——是:程序的變更要由另一次獨立執行來證明,而不是靠改寫文字。
- P0 必須在
-
證據。 四次建置都以參考數字通過每一項檢查:零件 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 在本頁,零件 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:只有槽的切深峰值隨解析度改變(D9),它的力峰值不變。
零件 2:兩種解析度下,孔都讀到完整的 4 mm 孔深;0.25 mm 下的力不到 1 mm 的一半。
零件 3:力峰值出在階面清料,3.93 mm 的切深峰值出在銑孔。

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