本入門指南將介紹如何建立一個完整的 三軸路徑繪製控制系統 在 QEC-M-070T。操作人員可直接在 7 吋觸控螢幕上以手指繪製線條,控制器會自動將軌跡平滑化、轉換為路徑點(Waypoint),再交由一台 QEC-R11MP3S 的三個軸即時執行。
觸控介面、EtherCAT 主站、路徑規劃與位置記錄皆運行於同一台控制器上,不需要外接 PC、PLC 或獨立的運動控制卡。

1. 快速概覽
- 自由繪製路徑 — 直接在畫布上繪製路徑。繪製完成後,程式會自動將軌跡轉換為最多 600 個路徑點,無需預先建立任何固定圖形。
- 三軸連續運動 — X、Y、Z 三軸依照產生的路徑持續運動。所有運動指令皆以毫米(mm)為單位,不需要自行進行脈波換算。
- 平滑路徑執行 — 即將執行的路徑點會預先加入運動緩衝區,Motion86 會銜接相鄰的路徑區段,使整段軌跡保持連續且平順的運動。
- 即時極限開關保護 — 每個控制週期皆會檢查極限開關。一旦觸發,系統立即執行緊急停止並鎖定停止狀態,直到被觸發的極限開關解除。
- 三個操作頁面 — Draw 用於路徑繪製、 Jog 用於手動軸控制、 Data 用於查看路徑點與運動執行狀態。
所需設備
| 項目 | 說明 |
| QEC-M-070T | EtherCAT MDevice with a built-in 7″ 800 × 480 touch panel |
| QEC-R11MP3S × 1 | 主要機構: 三軸 CiA 402 馬達控制模組,用於執行繪製路徑 |
| QEC-R11MP3S × 2 | 選配機構 : 用於同步運動驗證,不影響主要繪圖路徑 |
| 24 V 電源 | Vs 提供系統電源,Vp 提供周邊設備電源 |
| 極限開關 | 分別連接至主要機構各軸的數位輸入 |
| 開發環境 | 86Duino IDE |
功能概覽
3.1 Draw — 路徑繪製與即時位置

- 橘黃色區域 — 安全繪製範圍。超出此區域的觸控輸入會在轉換成路徑點之前被排除,以避免操作人員建立可能造成機構碰撞的路徑。
- 綠色線條 — 轉換完成後的路徑。當手指離開螢幕時會立即完成計算,也可以使用右下角的
CONVERT按鈕重新計算。 - 紅色十字標記 — 顯示機構目前的實際位置。馬達 Enable 後即會顯示,可用於即時監看目前座標。
- 底部狀態列 — 顯示路徑點數量、總路徑長度、M0 即時 XYZ 座標,以及右側的狀態標籤 (
OFF/ON/READY/RUN/JOG/LIMIT).
畫面上方的提示列會依照目前系統狀態,提示操作人員下一個應執行的操作,並以不同顏色顯示狀態: 藍色代表機台尚未準備完成、綠色代表可以開始繪製、橘黃色代表路徑執行中,而紅色則表示極限開關已被觸發,運動系統目前處於鎖定停止狀態。
3.2 Jog — 手動移動

首先選擇需要控制的機構群組(M0 / M1 / M2),再選擇移動距離(1 mm 或 5 mm),接著即可操作: X- X+ Y- Y+ Z- Z+畫面右側會即時顯示目前所選群組的位置,以及各軸允許的運動範圍。
Jog 指令不會直接以未經處理的控制命令傳送至驅動器。系統會先將目標位置限制在允許的運動範圍內,再以絕對位置命令執行。因此,手動操作與程式控制皆受到相同的軟體限位保護。
3.3 Data — 路徑點與執行進度

此頁面會顯示完整的路徑資料,包括: 步驟編號、目標 X / Y / Z 座標、進給速度(Feedrate)以及目前狀態。 每一個路徑點皆會依序經過: Wait → Running → Finish執行路徑期間,頁面也會自動跟隨目前正在執行的步驟。
如果實際繪製結果與預期不同,可透過此頁面判斷問題是來自座標轉換,還是來自機構本身或運動參數設定。
4. 操作流程
| 步驟 | 按鈕 | 動作 |
| 1 | SERVO ON | 第一次按下會啟動 EtherCAT 並掃描模組;第二次按下則啟用驅動器 |
| 2 | HOME | M0 搜尋原點開關、建立座標系統,並離開原點開關 |
| 3 | READY | M0 移動至工作原點;M1 與 M2 將目前位置設定為各自的起始位置 |
| 4 | RUN PATH | M0 開始執行繪圖路徑;M1 與 M2 同步跟隨各段位移 |
| 5 | STOP | 可隨時停止所有馬達 |
5. Motion86 負責了哪些工作?
這個範例真正簡化開發工作的地方,在於 Motion86 已經將許多常見的運動控制功能整合完成:
- 直接使用毫米下達運動指令 :
config_PPU()設定一次「每毫米脈波數(Pulses Per Millimetre)」後,後續所有運動指令都可以直接使用毫米。即使之後修改齒輪比、螺桿導程或編碼器解析度,也只需要調整此參數。 - 自動執行軟體限位保護 : 透過
config_PosLimit()以及enableSoftLimit()設定後,超出有效行程範圍的目標位置會在任何脈波輸出之前被阻擋,不需要在每一條運動指令前自行加入範圍檢查。 - 內建原點復歸功能,並可自行決定開關讀取方式 : 原點復歸流程由 Motion86 負責執行,開發者只需要提供讀取原點開關的 Callback。即使使用特殊的 I/O 配線方式,仍可繼續使用 Motion86 其他功能。
- 將整條路徑作為連續運動執行 : 最多 600 個路徑點會透過 Buffer 持續送入,Motion86 自動銜接相鄰的路徑區段,因此不會變成 600 次獨立的「啟動-停止」運動。
- 一台主站控制三組機構 : 三組獨立座標系統都可以在相同的 500 µs 控制週期中更新,並可混合使用絕對座標與相對座標模式。
- 支援 G-code :
gcode()可隨時呼叫,並可自由搭配使用line().
最能體現 Motion86 設計概念的部分,是它與馬達驅動器之間的介面。 整個連接主要透過兩個 Callback 函式完成:
void setRemoteTargetPos0(int axis, long pos) {
if (servo[0][axis]) servo[0][axis]->setTargetPosition(pos);
}
long getRemoteTargetPos0(int axis) {
if (servo[0][axis]) return servo[0][axis]->getPositionActualValue();
return 0;
}
machine0.config_CustomActuators_CycleTime(ECAT_CYCLE_TIME);
machine0.config_CustomActuators_Callbacks(setRemoteTargetPos0, getRemoteTargetPos0);EtherCAT 函式庫負責處理編碼器脈波,而 Motion86 則負責處理毫米、進給速度與 G-code。這兩個簡單的 Callback 函式將兩者連接起來。 未來若更換不同的馬達,或先使用虛擬軸進行整套流程模擬,主要只需要重新實作這兩個函式;路徑規劃、軟體限位、原點復歸及 G-code 等功能都可以維持不變。
6. 安全設計
此範例將碰撞防護分成三個層級,分別在不同階段阻止異常操作:
| 防護層級 | 防止的問題 | 實作位置 |
| 畫面範圍限制 | 不合理的路徑 | ui.cpp |
| 軟體限位 | 不合理的運動命令 | .ino |
| 硬體極限開關 | 實體機構的碰撞風險 | .ino |
前兩層屬於軟體判斷,因此前提是程式內設定的限制值必須與實際機構相符。 當設定值與實際機構不一致時,最後一道保護就是實體極限開關。 一旦極限開關觸發,系統會 立即停止運動並鎖定目前狀態。 這是刻意採用的安全設計,因為極限開關在持續被壓住時可能產生接點彈跳(Bounce)。如果系統僅依靠「開關已經釋放」作為恢復條件,機台可能在操作人員尚未完成確認之前就重新開始移動。
7. 相關資源
- 開發指南(PDF): Motion86_DrawPath_Guide_EN | Motion86_DrawPath_Guide_CN
- 範例程式(ZIP): Motion86_DrawPath
- 影片展示: Motion86 Library: Draw Path to Control Axis | EP12 · Multi-axis Control
- 86Duino IDE 與 QEC 軟體工具: 軟體
我們將持續推出穩健且創新的 EtherCAT 自動化平台,讓機台整合更聰明、更快速。欲取得更多資訊或索取樣品,歡迎來信 info@icop.com.tw,致電離您最近的 ICOP分公司,或聯絡我們的 全球官方經銷商.