工作流程:銑削力參數訓練¶
本工作流程涵蓋從感測器資料訓練銑削力係數的完整流程,包含資料映射、係數訓練、品質評估,以及套用訓練後的參數。
銑削係數是計算銑削力的關鍵參數。訓練即是從實驗感測器資料(動力計或智慧刀把)映射至仿真路徑後,推導出這些係數。
flowchart TD
Prereq["前置條件<br>(感測器資料、專案設置)"]
Resolution["設定解析度並啟用物理計算"]
Mapping["設定資料映射"]
Simulate["以 NC 檔執行仿真"]
Export["匯出仿真資料<br>(WriteShotFiles, WriteStepFiles)"]
Map["映射感測器資料到仿真"]
Train["訓練銑削參數"]
Evaluate["評估訓練品質"]
Apply["載入訓練後的參數"]
Prereq --> Resolution --> Mapping --> Simulate --> Export
Simulate --> Map --> Train --> Evaluate --> Apply
1. 前置條件¶
Tip
專案背後完整的資料蒐集清單,見 專案資料盤點清單。
訓練前需要:
| 項目 | 說明 |
|---|---|
| HiNC 專案 | 已配置工具機、工件、夾具、刀具庫 |
| NC 檔 | 實際切削實驗使用的 NC 程式 |
| 感測器資料 CSV | 含時間戳的力/力矩資料(來自動力計或智慧刀把) |
| 控制器資料 CSV (選用) | 含 FileNo、LineNo、ActualTime 的工具機控制器紀錄,用於兩層映射 |
訓練前務必先對齊程式原點(重要)
訓練前,工件 + 夾具必須相對於工件偏移正確擺放,否則仿真出的嚙合(以及訓練出的係數)就是錯的。見 程式原點對齊 —— 特別是高還原度注意事項:所用的 G54 必須反映真實機台偏移,以及用粗解析度檢查在開頭下刀處抓出錯誤設置。
感測器資料檔格式¶
CSV 必須含一行標頭,包含一個時間欄與至少一條力/力矩通道。每條通道接受不只一種拼法,因此為舊版寫的檔案仍然讀得進來:
| 來源 | 標頭 |
|---|---|
| 時間 | ActualTime,或以 ActualDateTime 給絕對時刻。TimeTag 與 Time 為相容舊檔而讀取。 |
| 動力計 | Fx 或 Workpiece.Fx(y、z 同理) |
| 智慧刀把 | Mx 或 Holder.Mx(y、z 同理)。Spindle.Mx 是已作廢的拼法,只讀不寫。 |
| 加速規 (選用) | Ax、Ay、Az —— 只有一種拼法 |
ActualTime,CH1,CH2,Mx,My,Mz
18:23:54.703,-0.00398,-0.00034,-0.02923,0.10733,0.00409
18:23:54.704,-0.00194,0.00285,0.04155,-0.04457,0.00448
...
Tip
保留完整的訓練專案存檔。HiNC 訓練演算法更新後,可從同一份專案重新訓練。
2. 設定解析度與啟用物理計算¶
解析度¶
訓練時須使用較正常運行更細的解析度以提高精度:
Tip
訓練解析度應 ≤ 生產解析度的 0.5 倍,以提升精度。
啟用物理計算¶
EnablePhysics (API) 必須啟用以進行力的計算:
銑削力週期分割數¶
MillingCycleDivisionNum (API) 是力評估在每一主軸轉內所用的角度分割數。預設值 36 是為正常仿真設計的——力回放並不會因更細的分割而受益,調高只會拖慢物理計算。訓練是例外:相位對齊與係數品質會隨更細的分割而改善,所以在訓練腳本裡設定它:
Note
必須在 TrainMillingPara 所消耗的那次仿真執行之前設定。
多少才夠——實測(2 刃 D8、Al6061-T6、MachiningResolution_mm 0.03125、感測器序列以 0.1 ms 取樣):
MillingCycleDivisionNum |
R | Fc 誤差 @ t=0.2 | Fn 誤差 @ t=0.2 | 犁切係數 |
|---|---|---|---|---|
| 36(預設) | 91.5 % | −6.7 % | −8.8 % | 嚴重偏離(Kpc +40 %) |
| 180 | 95.2 % | −6.6 % | −6.1 % | Kpc +10 % |
| 720 | 95.2 % | −6.9 % | −6.3 % | Kpc +11 % |
180 是甜蜜點:預設的 36 對訓練來說確實太粗(犁切係數嚴重劣化),而 720 什麼都買不到,卻要付出 4 倍的物理計算。 不要假設「越大一定越好」。
Warning
這個值是全程序的,不是每專案的:它不會存進 .hincproj,而且會跨過 ResetRuntime() 與專案切換而留存。兩個後果:(a) 訓練腳本必須一律明確設定它——新啟動的服務實例從 36 開始;(b) 訓練後,同一個實例會一直保持這個大值,後續的正常仿真都會跑得比較慢,直到你把它設回去(或重啟實例)。
3. 設定資料映射¶
依資料型態選擇下列映射策略之一。
3.1 局部映射(以錨點為基準)¶
將感測器資料映射至特定 NC 路徑段:
步驟 A — 指定輸入資料:
ClearTimeMappingData();
AddTimeDataByFile("lineA", "Mapping/sensor1.csv", "18:25:51.7100", "18:26:12.9910");
AddTimeDataByFile("lineB", "Mapping/sensor1.csv", "18:26:30.5750", "18:27:12.2880");
步驟 B — 指定 NC 路徑,寫在程式自己的註解裡。@@ 標記讓錨點在該單節的運動之前執行,而註解符號取決於控制器本身——下面是 Fanuc 家族的括號寫法:
X13. F20 (@@LineSelection("lineA", FirstTouch, ShiftTime_s(2), LineEnd, ShiftDistance_mm(-1));)
X25. F10 (@@LineSelection("lineB", FirstTouch, null, LastTouch, null);)
錨點選項:LineBegin、LineEnd、FirstTouch、LastTouch。
偏移選項:null、ShiftTime_s(<秒>)、ShiftDistance_mm(<毫米>)。
錨點選取什麼、找不到接觸步時會怎麼做,以及內嵌腳本需要的授權:見 感測器資料映射。
3.2 兩層串聯映射(控制器 + 感測器)¶
當同時擁有控制器資料與感測器資料時:
PlayNcFile("NC/machining.nc");
MapSingleByCsvFile("Data/controller.csv"); // 映射 FileNo/LineNo → ActualTime
MapSeriesByCsvFile("Data/sensor.csv"); // 映射 ActualTime → 感測器系列
為何使用兩層映射?
透過系統解譯器執行 NC 比直接 CSV 回放產生更準確的仿真路徑。控制器資料以 FileNo/LineNo 為仿真步與實際時間之間的橋樑;感測器資料則是實際時間與力/力矩讀值之間的橋樑。
⚠ 在切削的穩態段訓練——這是最大的單一槓桿¶
MapSeriesByCsvFile (API) 把每個步與一個感測器樣本窗配對。這個窗錨定在該步的結束時刻,向前延伸一個週期長度,所以一個步拿來擬合的樣本,是它的鄰居產生的,從來不是它自己的。
只要切削是穩態的,這不花任何代價。 相鄰的步在同一段弧、同樣的切屑負荷下切削,在給定的旋轉角度上會產生與本步相同的力,所以借來的樣本是多出來的資料,而不是多出來的誤差。這種配對只有在刀具–工件嚙合在窗內發生變化的地方——刀具切入、刀路切出、轉角、切深改變——才會變成系統性偏差。
在 D8 2 刃 Al6061-T6 案例上實測(同一個取樣週期 1 ms 的來源檔;只有訓練集與 CycleSamplingMode 窗不同):
| 訓練集 | 窗 | Fc 誤差 @ t=0.2 | Fn 誤差 @ t=0.2 | R |
|---|---|---|---|---|
| 整條路徑(1076 個切削步) | SpindleCycle(預設) |
−9.3 % | −9.9 % | 94.3 % |
| 整條路徑 | FluteCycle |
−7.1 % | −8.1 % | 95.7 % |
| 只取穩態段(約 800 步) | SpindleCycle(預設) |
−3.3 % | −2.3 % | 98.5 % |
| 只取穩態段(約 800 步) | FluteCycle |
−3.2 % | −2.4 % | 98.6 % |
從中可以讀出兩件事。第一,把訓練限制在穩態段,比任何其他設定都值錢——這裡它把誤差砍掉超過一半,而且是在最粗的取樣週期下做到的。第二,一旦暫態拿掉,窗的選擇就不再重要(兩種模式只差 0.06 個百分點,整條路徑則差 2.2):FluteCycle 在整條路徑上的優勢,從頭到尾只是對切入與切出斜坡的暴露較短而已。保留 SpindleCycle 預設與它較大的樣本數。
在這個案例裡,暫態佔了 1076 個切削步中的 272 個:切入斜坡,徑向嚙合從 0.09 mm 建立到名目的 2 mm;以及刀路切出,刀具跑過遠端轉角時嚙合爬升到 5 mm。選取訓練段時,要求嚙合為常數——CuttingWidth_mm 與 CuttingDepth_mm 在相鄰步之間保持穩定——而不是用肉眼看刀具路徑。
感測器資料的缺口會被處理
配對窗內沒有任何量測列的步——擷取中斷,或為了只保留穩態段而移除的列——會從映射中排除,並由單一則 Map-ShotGap--StepsSkipped 警告回報跳過了多少步。窗邊界上的列只在夾住邊界的兩列相距至多兩個主軸轉時才做插值;相距更遠的列橫跨在缺口兩側,不會從它們捏造出任何值。映射量測資料後留意這則警告:數字很大,表示擷取與播放的重疊方式和你以為的不一樣。
Warning
MachiningResolution_mm (API) 對訓練來說不能太粗:在刀具直徑的 1/16 或更粗(D8 案例:0.0625 與 0.125)時,可用樣本掉了一半,相位配對嚴重劣化——在 0.0625 時它直接認不出六段切削刀路中的一段,係數也錯得離譜(Fc −12 % 到 −33 %)。到了直徑的 1/256 左右(此處為 0.03125)結果就飽和了;再細化也看不到好處。
4. 執行仿真¶
Warning
訓練期間禁止:
- 調整工件、刀具或控制器解析度設定
- 使用 NC 播放器的重置鍵(請改用關閉專案)
- 儲存專案(系統訓練設定可能覆寫刀具解析度設定)
5. 匯出仿真資料¶
匯出步資料與波形資料以供分析:
WriteStepFiles("Output/[NcName].step.csv");
WriteShotFiles("Output/[NcName].shot.csv", 0.1); // 第 2 個引數 = 取樣週期(ms)
shot 檔開頭是 FileNo、LineNo、Time 與該任務的 M 碼,接著才是時間解析的力欄位:Tool.Fx/Fy/Fz、Workpiece.Fx/Fy/Fz、Holder.Mx/My/Mz——寫出來的是與讀取端相同的 holder 拼法,不是已作廢的 Spindle.M*。由控制器 CSV 驅動的播放會在最後補上 ActualDateTime 欄;NC 仿真的播放沒有控制器時刻可戳,不會有這一欄。
⚠ shot 取樣週期是主導精度的槓桿¶
WriteShotFiles (API) 的第二個引數是取樣週期,單位毫秒;當仿真出的 shot 檔被回饋進訓練時,決定精度上限的是它——不是角度分割數、也不是加工解析度。每一列都是從每分割的力波形插值出來的,所以每轉的資訊量是 min(MillingCycleDivisionNum, 每轉樣本數),其中
在同一案例上實測(2 刃 D8、Al6061-T6、MachiningResolution_mm 0.03125、S1270 → 一轉 = 47.2 ms):
| 取樣週期 | 每轉樣本數 | R | Fc 誤差 @ t=0.2 | Fn 誤差 @ t=0.2 |
|---|---|---|---|---|
| 1 ms | 47 | 94.2 % | −9.3 % | −9.9 % |
| 0.1 ms | 472 | 95.2 % | −6.6 % | −6.1 % |
在 1 ms 時波形每轉只取樣約 47 次,把 MillingCycleDivisionNum 從 180 提到 720 什麼都不會改變,因為多出來的格點只是同一份資料的純插值。先決定取樣週期:對仿真資料做訓練時,用等於或短於分割週期(60000 / (rpm × MillingCycleDivisionNum) ms)的週期;與實際量測比對時,把取樣週期對到實體 DAQ 的取樣率,否則兩邊的資訊密度不同,比較就會有偏差。
Note
細的週期會產生大檔案——上述案例一支 6 刀的程式,從 1 ms 時的 13 MB 變成 0.1 ms 時的 128 MB。據此預留磁碟空間,也不要把這種檔案提交到儲存庫。
座標系說明請見 銑削物理座標系。
6. 訓練銑削參數¶
TrainMillingPara(新訓練)¶
TrainMillingPara (API) 訓練全新係數,與既有工件參數無關。
ReTrainMillingPara(校正)¶
ReTrainMillingPara (API) 對既有係數做校正(10% 原權重 + 90% 新樣本權重)。
樣本旗標需求¶
| 命令 | 最低資料類型 | 每刃進給需求 |
|---|---|---|
TrainMillingPara |
Fx\|Fy\|Fz(動力計)或 Fz\|Mx\|My\|Mz(智慧刀把) |
至少一個樣本須有不同每刃進給 |
ReTrainMillingPara |
無限制 | 無限制 |
Warning
僅使用 Mx|My|Mz 而無 Fz 會損失一個自由度(力矩 = r × F 中的 r 方向丟失),使係數訓練不可靠。使用力矩資料時務必包含 Fz。
上表的每刃進給欄寫的是「命令不給就不跑」的門檻,不是一次可用的訓練所需要的。一個不同進給的樣本就滿足它;要把剪切係數與犁切係數分開,需要的是刀路之間有一段切屑負荷的範圍。
訓練條件¶
- 樣本應有 至少兩個主軸轉的穩定且重複波形
- 不穩定狀況下,犁切係數易被高估
- 樣本穩定是必要條件,不是充分條件。 一組刀路究竟能不能回推出係數,取決於它跨到哪裡,而不是它有多乾淨:只有單一螺旋角的集合,會讓剪切係數的某個組合完全不可觀測;每刃進給範圍太窄的集合,則分不開剪切與犁切。切之前先把集合設計好——見訓練切削集的設計
7. 評估訓練品質¶
訓練後系統會回報三個品質指標。
相關係數 (R)¶
代表整體結果的單一值。範圍 0–1;新刀具預期 0.95–0.999。
R 量的是相位對齊之後的波形吻合度,並不為產生它的係數排序。 一組讓某個係數組合不可觀測的切削集,仍然會回報 0.95 以上的 R,而剪切值卻大了好幾個數量級;而對同一份資料跑兩次,係數最接近真值的那一次反而可能 R 較低,因為精確的步對 shot 配對窗,得分會低於寬到足以把波形抹平的窗。把 R 讀成資料必須跨過的地板,然後用它隨時間重現出來的力來評斷那次訓練。這組集合到底能決定什麼,在切之前就已經定了——見訓練切削集的設計。
訓練誤差比 (TrainingErrRatio)¶
訓練後自動註冊的步級變數。值越小表示步級品質越佳:
角度偏移 (AngleOffset)¶
代表量測與仿真資料間刀具旋轉相位差的步級變數:
Tip
若同一訓練批次中各段 AngleOffset 差異甚大,可能代表主軸經歷轉速變化、資料缺漏,或系統無法準確分析樣本。
8. 載入訓練後的參數¶
訓練後將新係數載入工件:
Warning
若訓練輸出檔路徑與刀具既有切削參數檔相同,訓練後請 重新載入專案,新參數才會生效。
XML 配置(GUI 流程)¶
使用 GUI 訓練流程時,於 .hincproj 檔配置:
<MillingParaGridTrainingDestinationFile>MillingPara/trainedPara.mp</MillingParaGridTrainingDestinationFile>
<MillingParaTraining>
<IsMzEnabled>false</IsMzEnabled>
<ForceOutlierRatio>2</ForceOutlierRatio>
<LeadParaTemplate>
<RakeFaceCuttingParaMap>
<FluteFormNum>1</FluteFormNum>
<NAngleDivisionNum>0</NAngleDivisionNum>
<EcAngleDivisionNum>0</EcAngleDivisionNum>
</RakeFaceCuttingParaMap>
</LeadParaTemplate>
<ResultParaTemplate>
<RakeFaceCuttingParaMap>
<FluteFormNum>1</FluteFormNum>
<NAngleDivisionNum>0</NAngleDivisionNum>
<EcAngleDivisionNum>0</EcAngleDivisionNum>
</RakeFaceCuttingParaMap>
</ResultParaTemplate>
</MillingParaTraining>
若映射資料含智慧刀把的軸向主軸力矩,將 IsMzEnabled 設為 true。
完整腳本範例¶
MachiningResolution_mm = 0.0625;
EnablePhysics = true;
MillingCycleDivisionNum = 180; // 僅訓練用;預設 36 適合正常仿真,720 什麼都買不到
ClearTimeMappingData();
AddTimeDataByFile("lineA", "Mapping/sensor1.csv", "18:25:51.7100", "18:26:12.9910");
AddTimeDataByFile("lineB", "Mapping/sensor1.csv", "18:26:30.5750", "18:27:12.2880");
PlayNcFile("NC/file1.nc");
TrainMillingPara(Fx|Fy|Fz, "MillingPara/trained.mp");
LoadCuttingParaByFile("MillingPara/trained.mp");
WriteStepFiles("Output/[NcName].step.csv");
WriteShotFiles("Output/[NcName].shot.csv", 0.1);
延伸閱讀¶
- 銑削物理座標系 — 座標系統參考
- 感測器映射工作流程 — 詳細映射流程
- 基礎仿真工作流程 — 基礎仿真設置
- NC 優化工作流程 — 訓練後的優化
- 步 (Step) — 步資料參考
- SessionShell — SessionShell 速查
- 使用動力計訓練(範例)
- 串聯映射(範例)