跳轉到

工作流程:感測器資料映射

本工作流程說明如何將外部感測器資料(動力計、智慧刀把、加速規)映射至仿真刀具路徑,使仿真步能索引到實際量測資料。

flowchart TD
    Prepare["準備感測器 CSV 資料"]
    Configure["設定時間映射"]
    Simulate["執行仿真"]
    Map["將資料映射至仿真步"]
    View["檢視映射結果"]

    Prepare --> Configure --> Simulate --> Map --> View

概覽

資料映射將外部感測器量測與仿真加工步建立關聯。映射後,每個步皆可參照真實的力、力矩、加速度資料,用於:

  • 檢視加工狀態
  • 訓練銑削係數(見 銑削力參數訓練
  • 校正銑削係數
  • 比較仿真與量測力

依資料量與用途,映射可分為 一對一(每步映射至一筆資料)或 一對多(每步映射至多筆來自高取樣率感測器的資料)。


1. 準備感測器 CSV 資料

感測器資料格式

CSV 檔須有一行標頭,包含 ActualTime 與感測器通道:

來源 標頭 別名
動力計 FxFyFz Workpiece.FxWorkpiece.FyWorkpiece.Fz
智慧刀把 MxMyMz Holder.MxHolder.MyHolder.Mz
加速規 AxAyAz
ActualTime,Mx,My,Mz
18:23:54.703,-0.02923,0.10733,0.00409
18:23:54.704,0.04155,-0.04457,0.00448
...

時間格式為 <時>:<分>:<秒>.<毫秒>。可包含其他欄位(如 CH1CH2),這些欄位映射後也會可用。

控制器資料格式(兩層映射)

控制器 CSV 至少需含 FileNoLineNoActualTime

FileNo,LineNo,ActualTime,MC.X,MC.Y,MC.Z,...
1,6,00:00:00.030,0,0,0.37,...

2. 設定時間映射

策略 A:一對一映射(MapSingleByCsvFile)

MapSingleByCsvFile 讀取 CSV 並使用時間插值將每筆資料映射至一個仿真步。

PlayNcFile("NC/file1.nc");
MapSingleByCsvFile("Data/sensor.csv");

策略 B:以 PlayCsvFile 一對一映射

PlayCsvFile 可直接由 CSV 驅動仿真,每行成為一個步。CSV 中的自訂欄位映射後即可在每步上存取。

PlayCsvFile("Data/controller.csv");

策略 C:一對多全域映射(MapSeriesByCsvFile)

對高取樣率資料,先以一對一映射建立 ActualTime,再映射時間序列:

PlayNcFile("NC/file1.nc");
MapSingleByCsvFile("Data/controller.csv");  // 建立 ActualTime
MapSeriesByCsvFile("Data/sensor.csv");       // 映射高取樣率資料

策略 D:一對多局部映射(以錨點為基準)

使用錨點將感測器資料映射至特定 NC 路徑段。

步驟 1 — 指定輸入資料與時間範圍:

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

步驟 2 — 指定 NC 路徑錨點(嵌入 NC 碼):

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

跨多個 NC 行的範圍映射使用 BeginSelection / EndSelection

;@BeginSelection("region1", LineBegin, null);
...
;@EndSelection("region1", LineEnd, null);

錨點旗標:

旗標 說明
LineBegin 該行的運動起始點
LineEnd 該行的運動結束點
FirstTouch 第一個接觸工件的點
LastTouch 最後一個接觸工件的點

偏移選項:

偏移 說明
null 無偏移
ShiftTime_s(<秒>) 時間偏移(正值為向後)
ShiftDistance_mm(<毫米>) 距離偏移(正值為向後)

Note

對於不支援 ; 作為註解字元的 FANUC 控制器,將腳本命令包在註解區塊中:

X13. F20 (;@LineSelection("lineA", FirstTouch, null, LineEnd, null);)

選擇結束時自動映射

EnableMapOnSelectionEnd 控制選擇結束時是否自動映射(預設:true):

EnableMapOnSelectionEnd = true;  // EndSelection 自動觸發 Map

清除映射資料

映射資料會跨播放器重置而保留。要清除:

ClearTimeMappingData();

3. 執行仿真

PlayNcFile("NC/file1.nc");

為何要解譯 NC 而非直接播放 CSV?

系統 NC 解譯器產生的仿真路徑比直接控制器 CSV 回放更準確;後者取樣解析度有限,會扭曲刀具路徑。


4. 映射資料

仿真後,套用步驟 2 選定的映射策略。兩層串聯方式:

// 第一層:控制器資料 → 仿真步(透過 FileNo/LineNo → ActualTime)
MapSingleByCsvFile("Data/controller.csv");

// 第二層:感測器資料 → 仿真步(透過 ActualTime → 感測器讀值)
MapSeriesByCsvFile("Data/sensor.csv");

串聯之所以可行:

  • 仿真步與控制器資料共享 FileNo/LineNo 錨點
  • 控制器資料與感測器資料共享 ActualTime 錨點
  • 串聯後,仿真步即可索引感測器資料

Tip

由於工具機加減速行為,仿真時間與實際時間在較長時段會發散。以錨點為基準的線性投影可修正此漂移。


5. 檢視映射結果

映射後,感測器資料便附在每個步上。可由 UI:

  • 在工件幾何上檢視顏色梯度圖
  • 檢視時間序列圖
  • 點擊追蹤特定資料通道

匯出映射結果:

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

完整兩層映射範例

// 配置解析度
MachiningResolution_mm = 0.125;
EnablePhysics = true;

// 清除既有映射資料
ClearTimeMappingData();

// 用 NC 解譯器產生準確路徑的仿真
PlayNcFile("NC/machining.nc");

// 映射控制器資料(含 FileNo、LineNo、ActualTime)
MapSingleByCsvFile("Data/controller.csv");

// 映射高取樣率感測器資料(含 ActualTime 與力/力矩)
MapSeriesByCsvFile("Data/sensor.csv");

// 匯出結果
WriteStepFiles("Output/[NcName].step.csv");

延伸閱讀