跳轉到

工作流程:幾何驗證

本工作流程說明仿真後的加工幾何驗證工具,包含碰撞檢測、幾何差異比對、缺陷掃描與離料移除。

flowchart TD
    Simulate["執行仿真"]
    Collision["碰撞檢測"]
    Diff["幾何差異比對"]
    Defect["幾何缺陷掃描"]
    FlyPiece["離料移除"]

    Simulate --> Collision
    Simulate --> Diff
    Simulate --> Defect
    Simulate --> FlyPiece

1. 碰撞檢測

碰撞檢測在仿真期間監測刀具、刀把或主軸是否與工件、夾具或工具機相撞。需在執行仿真之前啟用。

腳本命令

EnableCollisionDetection = true;
EnablePauseOnCollision = false;  // 設為 true 則發生碰撞時暫停
屬性 說明
EnableCollisionDetection 啟用仿真期間的碰撞檢查
EnablePauseOnCollision 發生碰撞時暫停執行

與失敗暫停結合

EnablePauseOnFailure 提供更廣泛的失敗暫停機制:

EnablePauseOnFailure = true;
EnableCollisionDetection = true;
PlayNcFile("NC/file1.nc");  // 發生碰撞即暫停

GUI 操作

於主選項面板中,仿真前啟用碰撞檢測。

Tip

碰撞檢測會增加運算負擔。探索性仿真重視速度時可停用,最終驗證時再啟用。


2. 幾何差異比對

Diff 命令將仿真後的工件形狀與目標(設計)形狀比對,找出過切與欠切區域。

腳本命令

Diff(<DetectionRadius_mm>);

檢測半徑 為目標形狀的表面延伸距離。超過此距離的偏差不予計算。值越大耗時越久。

Diff(1);  // 檢測半徑 = 1 mm

結果判讀

比對完成後,工件表面以顏色標示:

  • 綠色:在公差範圍內
  • 紅色(正向):超過門檻的過切
  • 藍色(正向):超過門檻的欠切

Note

執行 Diff 後,工件表面的路徑索引會 失效。若需檢視個別步路徑,請先做完路徑檢視再呼叫 Diff

案例:往復斜面干涉

CAM 產生的 NC 碼可能含有非經幾何比對難以察覺的細微錯誤。透過 Diff 常見發現:

議題 說明
直角壁面欠切 目標幾何有銳角時,壁面附近欠切
Z 軸下刀不一致 往復下刀區段 Z 值不一致造成過切
半徑空間不足 往復邊緣刀具未退出半徑距離造成欠切
條紋狀欠切 往復路徑間距過大造成的條紋狀欠切

Tip

沒有軟體比對的話,這些問題往往要實際加工後才能發現,對精密製造影響甚大。


3. 幾何缺陷掃描

幾何缺陷掃描有助於除錯異常的工件或刀具幾何。通常只在懷疑幾何建構有問題時使用。

ScanRuntimeGeomInfDefect

ScanRuntimeGeomInfDefect 在運行時幾何中掃描無限邊切削缺陷。掃描後缺陷區會以彩色標記呈現。

ScanRuntimeGeomInfDefect();

回傳值:

  • true — 偵測到缺陷
  • false — 無缺陷
  • null — 無法執行(如工件不存在)

流程:仿真前掃描

ScanRuntimeGeomInfDefect();
Pause();                    // 視覺檢視缺陷
ClearDefectDisplayee();     // 清除標記
PlayNcFile("NC/file1.nc");

ClearDefectDisplayee

ClearDefectDisplayee 移除工件上的缺陷標記:

ClearDefectDisplayee();

Note

工件重新載入或運行時幾何重置時,缺陷標記會自動清除。工件初始化時若偵測到建構缺陷,標記會自動顯示。


4. 離料移除

五軸切削中,可能會出現未連接的小塊殘料(「離料」)。使用 RemoveFlyPiece 清除。

腳本命令

RemoveFlyPiece();

Tip

在仿真後、幾何輸出(WriteRuntimeGeomToStl)之前執行 RemoveFlyPiece,可產生乾淨的輸出。


綜合驗證腳本範例

// 啟用碰撞檢測並執行仿真
EnableCollisionDetection = true;
EnablePauseOnCollision = false;
EnablePhysics = true;
MachiningResolution_mm = 0.125;

PlayNcFile("NC/file1.nc");

// 移除離料
RemoveFlyPiece();

// 與目標幾何比對(1 mm 檢測半徑)
Diff(1);

// 掃描幾何缺陷
var hasDefects = ScanRuntimeGeomInfDefect();
if (hasDefects == true)
{
    WarningMessage("Geometry defects detected");
}

// 匯出最終幾何
WriteRuntimeGeomToStl("Output/final.stl");
WriteStepFiles("Output/[NcName].step.csv");

延伸閱讀