跳轉到

工作流程:銑削力參數訓練

本工作流程涵蓋從感測器資料訓練銑削力係數的完整流程,包含資料映射、係數訓練、品質評估與訓練參數的套用。

銑削係數是計算銑削力的關鍵參數。訓練即是從實驗感測器資料(動力計或智慧刀把)對映至仿真路徑後,推導出這些係數。

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 (選用) FileNoLineNoActualTime 的工具機控制器紀錄,用於兩層映射

訓練前務必先對齊程式原點(重要)

訓練前,工件 + 夾具必須相對於工件偏移正確擺放,否則仿真出的嚙合(以及訓練出的係數)就是錯的。見 程式原點對齊 —— 特別是高還原度注意事項:所用的 G54 必須反映真實機台偏移,以及用粗解析度檢查在開頭下刀處抓出錯誤設置。

感測器資料檔格式

CSV 必須含一行標頭,包含 ActualTime 與至少一條力/力矩通道:

來源 標頭
動力計 Fx (或 Workpiece.Fx)、FyFz
智慧刀把 Mx (或 Holder.Mx)、MyMz
加速規 (選用) AxAyAz
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. 設定解析度與啟用物理計算

解析度

訓練時須使用較正常運行更細的解析度以提高精度:

MachiningResolution_mm = 0.0625; // 等於或小於生產解析度的一半
MachiningMotionResolution = FeedPerTooth;

Tip

訓練解析度應 ≤ 生產解析度的 0.5 倍,以提升精度。

啟用物理計算

EnablePhysics 必須啟用以進行力的計算:

EnablePhysics = true;

銑削力周期分割數

於訓練前設定每轉的角度分割數。值越大,相位對齊越準確:

MillingForceCycleDivisionNum = 360;

Note

必須在執行 TrainMillingPara 之前設定。較大的值產生較準確的 AngleOffset 與較佳的銑削係數。


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 路徑(嵌入 NC 註解中):

X13. F20 ;@LineSelection("lineA", FirstTouch, ShiftTime_s(2), LineEnd, ShiftDistance_mm(-1));
X25. F10 ;@LineSelection("lineB", FirstTouch, null, LastTouch, null);

錨點選項:LineBeginLineEndFirstTouchLastTouch。 偏移選項:nullShiftTime_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 為仿真步與實際時間之間的橋樑;感測器資料則以 ActualTime 為實際時間與力/力矩讀值之間的橋樑。


4. 執行仿真

PlayNcFile("NC/file1.nc");

Warning

訓練期間禁止

  • 調整工件、刀具或控制器解析度設定
  • 使用 NC 播放器的重置鍵(請改用關閉專案)
  • 儲存專案(系統訓練設定可能覆寫刀具解析度設定)

5. 匯出仿真資料

匯出步資料與波形資料以供分析:

WriteStepFiles("Output/[NcName].step.csv");
WriteShotFiles("Output/[NcName].shot.csv", 1);

shot 檔包含時間解析的力欄位:Tool.Fx/Fy/FzWorkpiece.Fx/Fy/FzSpindle.Mx/My/Mz

座標系說明請見 銑削物理座標系


6. 訓練銑削參數

TrainMillingPara(新訓練)

TrainMillingPara 訓練全新係數,與既有工件參數無關。

TrainMillingPara(Fx|Fy|Fz, "StainlessSteel.mp");

ReTrainMillingPara(校正)

ReTrainMillingPara 對既有係數做校正(10% 原權重 + 90% 新樣本權重)。

ReTrainMillingPara(Fz|Mx|My|Mz, "StainlessSteel.mp");

樣本旗標需求

命令 最低資料類型 每刃進給需求
TrainMillingPara Fx\|Fy\|Fz(動力計)或 Fz\|Mx\|My\|Mz(智慧刀把) 至少一個樣本須有不同每刃進給
ReTrainMillingPara 無限制 無限制

Warning

僅使用 Mx|My|Mz 而無 Fz 會損失一個自由度(力矩 = r × F 中的 r 方向丟失),使係數訓練不可靠。使用力矩資料時務必包含 Fz

訓練條件

  • 樣本應有 至少兩個主軸轉的穩定且重複波形
  • 不穩定狀況下,犁切係數易被高估
  • 樣本穩定時,任何 NC 路徑形狀(槽銑、側銑,或任何刀具形狀)皆可

7. 評估訓練品質

訓練後系統會回報三個品質指標。

相關係數 (R)

代表整體結果的單一值。範圍 0–1;新刀具預期 0.95–0.999。

訓練誤差比 (TrainingErrRatio)

訓練後自動註冊的步級變數。值越小表示步級品質越佳:

\[ \text{TrainingErrRatio} = \sqrt{\frac{\sum_{i} e_i^2}{\sqrt{\sum_{i} y_i^2 \cdot \sum_{i} \hat{y}_i^2}}} \]

角度偏移 (AngleOffset)

代表量測與仿真資料間刀具旋轉相位差的步級變數:

\[ \theta_{offset} = \frac{2\pi \cdot i_{min}}{N_{div}} \]

Tip

若同一訓練批次中各段 AngleOffset 差異甚大,可能代表主軸經歷轉速變化、資料缺漏,或系統無法準確分析樣本。


8. 載入訓練參數

訓練後將新係數載入工件:

LoadCuttingParaByFile("StainlessSteel.mp");

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;
MillingForceCycleDivisionNum = 360;

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", 1);

延伸閱讀