工作流程:NC 優化¶
本工作流程說明如何由物理為基礎的仿真產生優化後的 NC 檔。優化器調整進給率,將物理量(主軸功率、力矩、熱應力、切削力)保持在指定的安全範圍內,同時最大化加工效率。
flowchart TD
Prereq["前置條件<br>(已啟用物理計算的仿真、<br>切削參數)"]
Config["設定優化選項"]
Simulate["執行仿真"]
Output["產生優化 NC 檔"]
Verify["驗證優化結果"]
Prereq --> Config --> Simulate --> Output --> Verify
1. 前置條件¶
NC 優化需要 已啟用物理計算 的仿真環境與有效的 切削參數:
| 前置條件 | 說明 |
|---|---|
| 啟用物理計算 | EnablePhysics 須為 true |
| 切削參數 | 工件須已載入銑削係數(見 銑削力參數訓練) |
| 有效刀具定義 | 已配置刀具幾何、刃數與材料屬性 |
Note
優化以理想幾何模型為基礎。若工件為鑄件或有安裝誤差,請保守地放大工件幾何,以避免誤判切削區與非切削區。
2. 設定優化選項¶
進給率控制¶
| 屬性 | 說明 | 預設 |
|---|---|---|
OptEnableFeedrate |
啟用循序進給率優化 | true |
OptEnableInterpolation |
重新插補以平滑加減速 | — |
OptRapidFeed_mmdmin |
非切削區進給率 (mm/min) | — |
OptMinFeedrate_mmdmin |
切削區最小進給率 (mm/min) | — |
OptMaxFeedrate_mmdmin |
切削區最大進給率 (mm/min) | — |
OptMaxAcceleration_mmds2 |
加減速上限 (mm/s²) | — |
OptFeedrateAssignmentRatio |
重新插補的觸發門檻 | — |
延伸距離¶
| 屬性 | 說明 |
|---|---|
OptExtendedPreDistance_mm |
切削區等效計算前置距離 (mm) |
OptExtendedPostDistance_mm |
切削區等效計算後置距離 (mm) |
安全係數(物理約束)¶
| 屬性 | 說明 |
|---|---|
OptSpindlePowerSafetyFactor |
主軸功率安全係數(0 = 忽略) |
OptSpindleTorqueSafetyFactor |
主軸力矩安全係數(0 = 忽略) |
OptThermalYieldSafetyFactor |
熱屈服安全係數(0 = 忽略) |
OptPreferedForce_N |
目標切削力 (N) |
Note
目標值 = 100% / 安全係數。例如安全係數 1.5 代表物理量目標約為極限的 67%。
約束優先順序¶
切削區內,約束依下列順序套用:
- 直接進給率約束(最小/最大進給率,刀具設定中的最小/最大每刃進給)
- 加減速約束(
OptMaxAcceleration_mmds2) - 物理約束(主軸功率、力矩、熱屈服、偏好力)
同優先順位的約束衝突時,採用最低進給率。
腳本命令範例¶
OptEnableFeedrate = true;
OptEnableInterpolation = true;
OptRapidFeed_mmdmin = 4000;
OptMinFeedrate_mmdmin = 100;
OptMaxFeedrate_mmdmin = 4000;
OptMaxAcceleration_mmds2 = 10;
OptExtendedPreDistance_mm = 3;
OptExtendedPostDistance_mm = 2;
OptSpindlePowerSafetyFactor = 1.5;
OptSpindleTorqueSafetyFactor = 1.5;
OptThermalYieldSafetyFactor = 0;
OptPreferedForce_N = double.PositiveInfinity;
XML 配置(NC 碼內嵌)¶
優化設定可嵌入 NC 註解中:
N0110 X-3.064 Y6.378 (;@OptMaxAcceleration_mmds2=10;)
N0150 G01 X-3.068 Y40.776 (;@OptMaxAcceleration_mmds2=100; OptMaxFeedrate_mmdmin=12000;)
3. 執行仿真¶
設定可在多個 NC 檔之間交錯,會套用到後續檔案:
OptRapidFeed_mmdmin = 4000;
PlayNcFile("NC/file1.nc");
OptRapidFeed_mmdmin = 8000;
PlayNcFile("NC/file2.nc");
排除特定行不予優化¶
保留特定 NC 行不變:
排除一段範圍:
N0140 G03 X-2.66 Y38.193 (;@BeginPreserve();)
N0150 G01 X-3.068 Y40.776
N0160 X-3.555 Y43.338 (;@EndPreserve();)
Warning
請勿將 MachiningStep.UpdateNcOptOption 在 SessionStepBuilt 事件中與 NC 內嵌優化命令混用。由於並行運算,這可能導致未定義行為。
4. 產生優化 NC 檔¶
OptimizeToFiles 寫出優化後的 NC 程式:
[NcName] 樣板會替換為各輸入 NC 檔的檔名。
5. 驗證優化結果¶
優化日誌¶
啟用步級日誌以查看每步受到哪個約束限制:
.IndependentStepAdjustment.log 檔記錄每步的計算資料,包括:
FrtByPreferedForce_mm— 由目標力導出的每刃進給FrtByYieldingStressRatio_mm— 由屈服應力導出的每刃進給FrtBySpindleTorqueRatio_mm— 由主軸力矩導出的每刃進給FrtBySpindlePowerRatio_mm— 由主軸功率導出的每刃進給FrtByThermalYieldingRatio_mm— 由熱屈服導出的每刃進給
嵌入式日誌註解¶
以 EmbeddedLogMode 控制嵌入日誌的詳細程度:
| 模式 | 說明 |
|---|---|
None |
無日誌註解 |
SimpleLog |
重新插補的行有 StepIndex;每行原始 NC 的最後插補行有 LineNo |
FullLog |
所有行都有 StepIndex 與 LineNo |
範例輸出:G01 X10.0 Y20.0 F500 (src(LineNo: 140, StepIndex: 256))
追蹤個別步的物理量限制¶
要分離出每步受哪個物理量限制,停用平滑:
OptMaxAcceleration_mmds2 = double.PositiveInfinity;
OptFeedrateAssignmentRatio = 0;
OptExtendedPreDistance_mm = 0;
OptExtendedPostDistance_mm = 0;
EnableIndividualStepAdjustmentLog = true;
EmbeddedLogMode = NcOptimizationEmbeddedLogMode.FullLog;
優化後仿真差異¶
優化後的進給率產生不同的插補點,會造成:
- 不同的仿真網格誤差
- 表面形態變化(在表面粗糙度層級;轉角處更明顯)
優化後的仿真物理量可能略高於目標值,原因即為上述差異。
Tip
若轉角處出現異常低的優化進給率,請參閱 轉角進給率。
刀具斷裂的解決方案¶
若仿真顯示屈服應力比、主軸力矩比或主軸功率比超過 100%,可考慮:
- 修改刀具路徑以降低切削寬度/深度
- 使用 HiNC 優化調整進給率,使這些比值降至 100% 以下
熱崩刃情況,降低主軸轉速以利散熱。
完整腳本範例¶
EnablePhysics = true;
LoadCuttingParaByFile("Material.mp");
OptEnableFeedrate = true;
OptEnableInterpolation = true;
OptRapidFeed_mmdmin = 4000;
OptMinFeedrate_mmdmin = 100;
OptMaxFeedrate_mmdmin = 4000;
OptMaxAcceleration_mmds2 = 10;
OptExtendedPreDistance_mm = 3;
OptExtendedPostDistance_mm = 2;
OptSpindlePowerSafetyFactor = 1.5;
OptSpindleTorqueSafetyFactor = 1.5;
OptThermalYieldSafetyFactor = 0;
OptPreferedForce_N = double.PositiveInfinity;
PlayNcFile("NC/file1.nc");
OptimizeToFiles("Cache/Opt-[NcName]");
WriteStepFiles("Output/[NcName].step.csv");