跳轉到

工作流程:基礎加工仿真

本工作流程從零開始說明如何建立並執行加工仿真,包含專案配置、選項調整、NC 執行與結果檢視。

至於組建一個專案的方法——建置順序、如何界定任務範圍,以及「重播並讀訊息」這項判定專案已完成的驗收測試——見 專案建構。

flowchart TD
    Equipment["設定工具機與<br>控制器品牌/型號"]
    Job["設定工件、夾具、<br>刀具庫、NC 檔案、<br>控制器補正"]
    Option["調整仿真選項<br>(解析度、物理計算等)"]
    Run["執行仿真"]
    View["檢視結果"]

    Equipment --> Job --> Option --> Run --> View

從客戶交付物開始

真實專案通常從客戶交來的一包資料開始:NC 程式、零件/毛胚 CAD、刀具表,有時還有工具機模型,以及幾句關於零件如何夾持與歸零的說明。在動手建置任何東西之前,先把這包資料對照專案資料盤點清單核對一遍,再把每一項對應到下面的步驟:

客戶交付物 對應到 設置頁面
NC 程式(.nc、.anc…) NC 檔案 + 控制器品牌 通用 NC 碼支援
刀具表(直徑、圓角半徑、刃數、伸出量) 刀具庫 刀具幾何
零件 CAD + 毛胚 CAD 工件 IdealGeom + InitGeom 錨點與角色;若改為從 CAM 匯出的單一網格:由參照網格建立工件
工具機模型 + 軸配置(3 軸、3+1、5 軸) 工具機運動鏈 工具機
「程式原點在哪裡?」的說明、工件偏移清單 程式原點 + 工件偏移表 程式原點對齊
材料名稱 工件材料 + 切削參數 專案資料盤點清單

Note

CAD 幾何通常以 STEP(.step / .stp)交來。工件與工具機實體則以 STL(或參數化基本體)讀入,所以匯入前請先把 STEP 轉成 STL。刀具表上的直徑與圓角半徑是權威值;刃長、刃數、螺旋角與伸出量常常缺漏,可能得從規格字串推估,再向客戶確認。

Tip

交付物不完整時(沒有毛胚 CAD、工件偏移未知、工具機模型未經驗證),仍可先架起一個粗略的專案:用 NC 中的刀具直徑、指名的材料、一個包住刀具路徑的佔位毛胚方塊,以及一個恆等的工件偏移——然後跑一次粗解析度(見 §3.1),在等待缺漏資料的同時先抓出明顯的過切/碰撞。把每個假設值都記下來,以便日後確認。

1. 設定工具機與控制器

工具機與控制器為固定設備,定義仿真的物理環境。

工具機

工具機檔(.mt 檔)提供運動模型與 STL 實體。一旦選定,通常仿真之間不會更動。

控制器

選擇控制器品牌與型號(如 Fanuc、Heidenhain、Siemens)。此設定決定 NC 碼的解讀方式。詳見 Heidenhain 支援 與 通用 NC 碼支援。

GUI 操作

於 HiNC 應用程式中開啟或建立專案,並透過對應面板設定工具機與控制器,再進行作業設定。


2. 設定作業元件

設備固定後,配置每次仿真會變動的作業專屬元件。

Tip

建立專案前要蒐集的完整資料清單(以及一份可交付客戶的盤點表),見 專案資料盤點清單。

作業元件

元件 說明
工件 幾何(STL 或參數化)、材料與座標系
夾具 (選用) 參與碰撞檢測的夾具幾何
刀具庫 一支或多支切削刀具,含幾何與刃形定義
NC 檔案 要仿真的 NC 程式
控制器補正 刀具補正表、工件偏移表與其他控制器專屬預設值

Tip

腳本命令中的所有檔案路徑,若未指定絕對路徑,皆相對於專案目錄。

腳本存取

工件與夾具物件可透過 SessionShell.Workpiece (API) 與 SessionShell.Fixture (API) 取得。

var workpiece = Workpiece;
var fixture = Fixture;

GUI 操作

在「設備」頁面控制樹的「機構」群組下設定工件與夾具(工件、夾具),在「刀具庫」頁面設定刀具(銑刀)。


3. 調整仿真選項

仿真選項控制精度與速度之間的取捨。

3.1 工件實體解析度

MachiningResolution_mm (API) 設定工件網格的最小立方體寬度。

MachiningResolution_mm = 0.125;

合法值為 2 的次方(如 4、2、1、0.5、0.25、0.125)。若提供非 2 次方的值,系統會把它取到下一個更細的 2 次方——0.4 會以 0.25 執行(網格解析度)。

Warning

每次將網格寬度減半,計算時間可能增加最多 8 倍,網格本身的記憶體則增加 4 倍或更多。建議從較粗解析度起步,必要時再細化。選擇之前,先由 NC 程式與工件估算這次運行的記憶體:表面大而複雜、程式又短的工件,網格幾乎就是全部,寬度決定這次運行放不放得進;而長程式產生的每步結果不會因為網格變粗而縮小——見記憶體規劃。

Note

變細才是花掉那 8 倍的地方——而在真實 NC 加工所需的細解析度下,幾何移除通常就是瓶頸。變粗只在幾何移除仍是瓶頸時才省時間。一旦網格粗到幾何移除已經很便宜(對 NC 而言 1–2 mm 已經非常粗),每步的固定成本便成為主導,再調大 MachiningResolution_mm 對總時間幾乎沒有影響(這就是為什麼 1.0 mm 與 2.0 mm 可以跑出幾乎相同的速度)。在這種情況下要加速,請透過加工運動解析度減少步數。見仿真 CPU 使用率。

3.2 顯示快取

DispCache_Mb = 260;

顯示解析度取決於快取大小。建議值不超過 1000 Mb。

3.3 加工運動解析度

加工運動解析度決定每個仿真步的間隔。可選模式:

模式 命令 說明
每轉一步 MachiningMotionResolution = FeedPerCycle; 每主軸一轉一個步(預設)
每轉縮放 MachiningMotionResolution = ScaledFeedPerCycle(2); 每(一轉 × 縮放比例)一個步:比例 > 1 → 步數較少(較快);比例 < 1 → 步數較多(較細)
每刃一步 MachiningMotionResolution = FeedPerTooth; 每刃通過一個步(一轉 ÷ 刃數)
固定步進 MachiningMotionResolution = FixedPace(1, 15); 固定線性 (mm) 與旋轉 (deg) 解析度;以步與步之間的掃掠進行切削

總仿真時間由較慢的一方決定(重要)

總仿真時間由較慢的那一方決定:幾何移除,或每步的固定成本。 幾何移除的成本由網格解析度決定;每步的固定成本(物理計算、熱/磨耗、每步的簿記)則由步數決定——即運動解析度模式加上刀具路徑上的主軸轉數,與網格解析度及工件尺寸無關。在真實 NC 加工所需的細解析度下,幾何移除通常是瓶頸(越細 = 慢很多)。只有當網格粗到幾何移除已經很便宜時,每步的固定成本才成為主導——此時再調大 MachiningResolution_mm 不會加快速度(這就是為什麼 1.0 mm 與 2.0 mm 可以跑出幾乎相同的速度);請改為減少步數——例如 ScaledFeedPerCycle(2) 每 2 轉走一步,步數減半,代價是力曲線的取樣變疏。見仿真 CPU 使用率。

Warning

不要用縮放模型尺寸來代替調整網格寬度。 縮放模型尺寸會使內部演算法門檻(最小可切量、浮點轉分數的範圍)失效,產生不規則的幾何瑕疵。請改用解析度設定。

3.4 XML 配置

解析度也可在 .hincproj 檔內設定,或在仿真中途由嵌在程式自己註解裡的腳本調整——@@ 在該單節的運動之前執行,寫在控制器所用的註解符號裡(見 NC 碼中的腳本命令):

T01 M06 (@@MachiningResolution_mm=0.03125;)

4. 執行仿真

有四種方式驅動仿真,另有播放器控制。

4.1 PlayNcFile — 從檔案執行

PlayNcFile (API) 讀取並執行 NC 檔。

PlayNcFile("NC/file1.nc");

4.2 PlayNc — 從字串執行

PlayNc (API) 直接從字串執行 NC 碼,適合程式化或動態產生的命令。

double x = 10.0;
PlayNc($"G01 X{x} Y20 F100", "Generated Command");

4.3 PlayCsvFile — 由 CSV 資料驅動

PlayCsvFile (API) 由 CSV 檔(含軸位置、主軸轉速、進給率)驅動仿真。

PlayCsvFile("Data/file1.csv");

必要的 CSV 欄位(預設標頭):MC.X、MC.Y、MC.Z、ToolId、SpindleSpeed_rpm、Feedrate_mmdmin。選用:MC.A、MC.B、MC.C、ActualTime、StepDuration。

標頭與時間戳值可用雙引號包覆,解析器會自動去除。ActualTime 接受 HH:mm:ss.fff 或絕對時間 yyyy-MM-dd HH:mm:ss.ffffff 兩種格式(與 MapSeriesByCsvFile (API) 串接時必須用絕對格式,因其以 TimeTag 比對):

"ActualTime","Feedrate_mmdmin","MC.X","MC.Y","MC.Z","SpindleSpeed_rpm","ToolId"
"2026-03-16 15:57:45.559000",10000.0,-351.745,-244.799,-215.799,1270,1
"2026-03-16 15:57:45.705000",10000.0,-351.745,-244.799,-215.799,1270,1

當真實控制器紀錄含有額外欄位(如 t_receive、cnc_delay_s、status)或使用替代欄名(X/Y/Z、feedrate、spindle_speed)時,請在傳入 PlayCsvFile (API) 前先前處理檔案,刪除或重新命名欄位。

Tip

WriteStepFiles (API) 輸出的 CSV 檔可直接由 PlayCsvFile (API) 讀回。

4.4 PlayClFile — 由刀位檔驅動

PlayClFile (API) 直接把 NX 刀位檔(CLSF / APT 原始碼,.cls)當作刀具運動重播——也就是與機台無關的 CAM 刀具路徑,在它被後處理成特定機台的程式之前。

PlayClFile("CL/part-op10.cls");

Note

與上面幾種檔案播放器不同,CL 播放驅動的是 ClMillingDevice (API) 鏈——刀位直接套用到刀具上——不是 §1 的工具機鏈。用它來驗證程式路徑本身,不受機台與後處理器影響。支援的記錄集合、由 TLDATA 建立刀具,以及對機構鏈的要求,見刀位 (CL) 播放。

4.5 播放器控制

命令 用途
Pace (API) 插入可暫停的檢查點
Pause (API) 暫停執行
Reset (API) 重置播放器狀態
PlayNcFile("NC/file1.nc");
if (someCondition)
    Pause();

Note

任務的兩次播放之間要先重置。一次執行完成後再開始任務,並不會重置它:新的執行會疊在上一次留下的已加工工件、步與訊息之上播放,而第一次播放時會讀取的記錄網格幾何項目,這次改為寫入。透過 HTTP API 操作時,就是在每一次 POST /api/Execution/start 之前先 POST /api/Execution/reset——見透過 HTTP API 進行重播驗收。


5. 檢視結果

5.1 網格幾何

仿真後工件幾何為 網格幾何(立方體網格)。可儲存後重新載入,避免重新運算初始形狀:

WriteMeshedGeom("Cache/file1.wct");
ExportMeshedGeomToStl("Output/file1.stl");

下一次運行時讀回已儲存的幾何:

ReadMeshedGeom("Cache/init.wct");
PlayNcFile("NC/file1.nc");

5.2 步資料檢視

每個仿真步都帶有豐富資料(力、力矩、功率、熱、磨耗)。存取個別步:

var step = GetMillingStep(100);
Message($"ToolId={step.ToolId}, Force={step.MaxAbsForce_N} N");

總步數:

var total = StepCount;
Message($"Total steps: {total}");

5.3 匯出資料

匯出步級 CSV:

WriteStepFiles("Output/[NcName].step.csv");

匯出波形(shot)CSV:

WriteShotFiles("Output/[NcName].shot.csv", 1);

5.4 訊息

利用訊息記錄與追蹤仿真進度:

Message("Simulation complete");
AppendMessagesToFile("Output/messages.txt");

疑難排解

現象 可能原因 處理
仿真極慢,刀具後方拖著一大段淡粉色軌跡 幾何移除是瓶頸(網格過細) 增大 MachiningResolution_mm(更粗的網格)
仿真極慢,但網格調粗也沒幫助 受限於步數(每步物理計算) 透過 MachiningMotionResolution 減少步數(如 ScaledFeedPerCycle(2))
幾何上有不規則凸起 用縮放模型尺寸代替解析度 僅使用解析度設定,見上方警告
顯示卡頓 DispCache_Mb 過大 降低顯示快取(建議 < 1000 Mb)
無步資料 未執行仿真、始終沒有裝上任何刀具,或刀具未接觸工件 確認有刀具裝上——沒裝上刀時,NC 訊息往往不留任何痕跡,所以要看有沒有產生加工步——並確認刀具路徑與工件相交

延伸閱讀