跳轉到

工作流程:基礎加工仿真

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

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

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

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 次方。

Warning

每次將網格寬度減半,計算時間與 RAM 用量可能增加最多 8 倍。建議從較粗解析度起步,必要時再細化。

3.2 顯示快取

DispCache_Mb = 260;

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

3.3 加工運動解析度

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

模式 命令 說明
每轉一步 MachiningMotionResolution = FeedPerCycle; 每主軸一轉一個步
每轉縮放 MachiningMotionResolution = ScaledFeedPerCycle(0.5); 每主軸一轉乘以縮放比例
每刃一步 MachiningMotionResolution = FeedPerTooth; 每刃旋轉一步(預設)
固定步進 MachiningMotionResolution = FixedPace(1, 15); 固定線性 (mm) 與旋轉 (deg) 解析度

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.XMC.YMC.ZToolIdSpindleSpeed_rpmFeedrate_mmdmin。選用:MC.AMC.BMC.CActualTimeStepDuration

標頭與時間戳值可用雙引號包覆,解析器會自動去除。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_receivecnc_delay_sstatus)或使用替代欄名(X/Y/Zfeedratespindle_speed)時,請在傳入 PlayCsvFile (API) 前先前處理檔案,刪除或重新命名欄位。

Tip

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

4.4 播放器控制

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

5. 檢視結果

5.1 運行時幾何

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

WriteRuntimeGeom("Cache/file1.wct");
WriteRuntimeGeomToStl("Output/file1.stl");

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

ReadRuntimeGeom("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
幾何上有不規則凸起 用縮放模型尺寸代替解析度 僅使用解析度設定,見上方警告
顯示卡頓 DispCache_Mb 過大 降低顯示快取(建議 < 1000 Mb)
無步資料 未執行仿真或刀具未接觸工件 確認刀具路徑與工件相交

延伸閱讀