NC優化
組態在NC仿真前設定,然後執行輸出優化NC檔指令。
可同時參考閱讀說明章節NC優化。
組態
Note
指令格式
OptEnableFeedrate = <布林值>;
OptEnableInterpolation = <布林值>;
OptRapidFeed_mmdmin = <實數>;
OptMinFeedrate_mmdmin = <實數>;
OptMaxFeedrate_mmdmin = <實數>;
OptMaxAcceleration_mmds2 = <實數>;
OptExtendedPreDistance_mm = <實數>;
OptExtendedPostDistance_mm = <實數>;
OptSpindlePowerSafetyFactor = <實數>;
OptSpindleTorqueSafetyFactor = <實數>;
OptThermalYieldSafetyFactor = <實數>;
OptPreferedForce_N = <實數>;
OptEnableFeedrate(API):啟用順序式(Sequential)進給率優化。
順序式係指該功能從下指令開始作用。與其相對的設定在刀具端,刀具端也能設定進給率優化,但是在裝刀時才會發揮作用。
OptEnableFeedrate(API)與所有其他啟用進給率優化的指令需同時為真,進給率優化才會啟用。 即與刀具設定端必須同時為真(true),進給率優化才會啟用。
OptEnableFeedrate(API)預設值為真。
OptEnableInterpolation(API):優化程序用重新插補。
重新插捕後NC碼會增加,可以更好地控制加減速。
- OptFeedrateAssignmentRatio(API):進給賦值倍率。
當優化程序用重新插補並且進給率變化超過進給賦值倍率時,系統會依據OptMaxAcceleration_mmds2(API)插入附帶進給率指令的NC碼。
進給賦值倍率越小,插補點越密集。進給賦值倍率越大,則偏離優化標的的程度越大。
在改進給賦值倍率的同時也要對應加大安全係數。 進給賦值倍率若是0.01,就是1%,每變更1%進給率就會給個新的插補點。 如果改大,比方說10%,可能會變成該處理論值應該是F100,可是優化後卻是F110,所以要配合安全係數修改。
- OptRapidFeed_mmdmin(API):優化程序中的無切削區域進給率。單位mm/min。
沒有切到工件的NC路徑,為無切削區域。優化後該路徑將採用無切削區域進給率。
- OptMinFeedrate_mmdmin(API):優化程序中的有切削區域最小進給。單位mm/min。
- OptMaxFeedrate_mmdmin(API):優化程序中的有切削區域最大進給。單位mm/min。
有切到工件的NC路徑,為有切削區域。有切削區域的最大最小進給的設定通常依據經驗法則。
OptMaxAcceleration_mmds2(API):優化程序中的加減速限制。優化後NC碼的F值變化在該限制之內。單位 \(mm/s^2\)。
OptExtendedPreDistance_mm(API):優化程序中的有切削區域等效計算的前長度。單位mm。
OptExtendedPostDistance_mm(API):優化程序中的有切削區域等效計算的後長度。單位mm。
OptSpindlePowerSafetyFactor(API):主軸功率安全係數。
於優化後的NC碼,主軸功率將盡可能趨近於目標值。
設為0則忽略此限制。
OptSpindleTorqueSafetyFactor(API):主軸扭力安全係數。
優化後的NC碼,主軸扭力將盡可能趨近於目標值。
設為0則忽略此限制。
OptThermalYieldSafetyFactor(API):刀刃熱降伏安全係數。
刀刃表面溫度超過一定值時,刀刃表面會因溫差產生的壓力造成塑性變形。
優化後的NC碼,刀刃表面度將盡可能趨近於目標值。
設為0則忽略此限制。
Note
目標值算法
目標值 = 100% / 安全係數
- OptPreferedForce_N(API):優化程中的目標力。單位N。 在符合所有限制的條件下,優化程序中的加工路徑產生的力會盡可能的趨近目標力。
限制的優先序
在有切削區域中:
進給率的直接限制 優先於 加減速限制(OptMaxAcceleration_mmds2(API)) 優先於 基於物理特性算出的限制。
進給率的直接限制 包含
- 腳本指令
- OptMinFeedrate_mmdmin(API)
- OptMaxFeedrate_mmdmin(API)
- 刀具設定
- 每刃最小進給
- 每刃最大進給
- 腳本指令
基於物理特性算出的進給率限制 包含
- 腳本指令
- 刀具設定
- 降伏力安全係數
若同級項目中的限制有衝突,則採取其中的最低進給率。
NC碼中的優化腳本指令
於指定NC行不啟用優化
在執行 Preserve(API)() 的NC行中,不啟用優化。
Tip
指令範例
在 N0140 行不啟用優化。
...
N0130 X-1.965 Y17.053
N0140 G03 X-2.66 Y38.193 I-103.796 J7.172 (;@Preserve();)
N0150 G01 X-3.068 Y40.776
...
於指定NC範圍不啟用優化
使用BeginPreserve(API)()的NC行及EndPreserve(API)()的NC行及包含的NC範圍,不啟用優化。
Tip
指令範例
在 N0140、N0150、N0160 行不啟用優化。
...
N0130 X-1.965 Y17.053
N0140 G03 X-2.66 Y38.193 I-103.796 J7.172 (;@BeginPreserve();)
N0150 G01 X-3.068 Y40.776
N0160 X-3.555 Y43.338 (;@EndPreserve();)
N0170 X-4.125 Y45.875
...
優化日誌
優化過程提供兩種日誌功能,方便分析與除錯。
優化過程日誌檔
<xref:Hi.MachiningProcs.RuntimeApi.OptEnableSituStepAdjustmentLog*>(API):啟用優化過程日誌檔輸出。預設為真。
啟用後,優化過程會為每個NC檔輸出一個 .flatproc.log 檔案,記錄各步階的優化條件經OptExtendedPreDistance_mm(API)及OptExtendedPostDistance_mm(API)展開後獨立優化計算的資訊(不包含步階間的交互關係,如加減速)。
日誌檔案內容依步階順序輸出(即使平行計算時也會保持順序),每行包含:
- 原始NC行位置與步階索引
- 各項優化限制的計算結果,例如:
FrtByPreferedForce_mm: 依目標力計算的每刃進給FrtByYieldingStressRatio_mm: 依降伏應力比計算的每刃進給FrtBySpindleTorqueRatio_mm: 依主軸扭力比計算的每刃進給FrtBySpindlePowerRatio_mm: 依主軸功率比計算的每刃進給FrtByThermalYieldingRatio_mm: 依熱降伏比計算的每刃進給FrtByReliefAngle_mm: 依餘隙角碰撞計算的每刃進給
嵌入式日誌註解
OptEnableEmbeddedLog(API):啟用嵌入式日誌註解。預設為真。
啟用後,優化後的NC檔中會在NC行後方加上 (src(...)) 註解,包含:
LineNo: 原始NC檔的行號StepIndex: 對應的步階索引
例如:G01 X10.0 Y20.0 F500 (src(LineNo: 140, StepIndex: 256))
此功能方便對照原始NC碼與優化後的NC碼,並可追蹤每行NC碼對應的步階資訊。
Note
指令格式
OptEnableSituStepAdjustmentLog = <布林值>;
OptEnableEmbeddedLog = <布林值>;
輸出優化NC檔
使用 OptimizeToFiles(API) 方法輸出優化後的NC檔。
Note
指令格式
OptimizeToFiles(<路徑樣板>);
<路徑樣板>支援 檔案路徑樣板。
Tip
指令範例
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");
OptRapidFeed_mmdmin = 8000;
PlayNcFile("NC/file2.nc");
OptimizeToFiles("Cache/Opt-[NcName]");
組態設定可以穿插在NC仿真間,將會作用在組態設定後的NC仿真。
Warning
在 MachiningStepBuilt(API) 事件內使用 UpdateNcOptOption(API) 時,不能與NC碼內嵌優化指令併用,否則可能因平行計算產生未定義行為。
以上範例為例,優化後的NC程式file1.nc的無切削區域快速進給為4000,file2.nc則為8000。
Tip
NC碼中的優化指令範例
...
N0110 X-3.064 Y6.378 (;@OptMaxAcceleration_mmds2=10;)
N0120 X-2.411 Y11.712
N0130 X-1.965 Y17.053
N0140 G03 X-2.66 Y38.193 I-103.796 J7.172 (;@Preserve();)
N0150 G01 X-3.068 Y40.776 (;@OptMaxAcceleration_mmds2=100; OptMaxFeedrate_mmdmin=12000;)
N0160 X-3.555 Y43.338
N0170 X-4.125 Y45.875
...
N0110至N0150前,優化區加速度設為10 \(mm/s^2\); N0140單行不做優化; N0150及以後,優化區加速度設為100 \(mm/s^2\); N0150及以後,優化區切削區域最大進給設為12000 \(mm/min\);