CANopen協議在工業自動化中無處不在,但復雜的對象字典、多樣的報文類型常讓開發者頭疼。本文將NMT網絡管理、SDO服務數據、PDO過程數據、心跳機制及COB-ID速查表一網打盡,助你快速掌握CANopen精髓。
NMT(網絡管理)
NMT負責設備的狀態切換、上線管理與心跳監控
1.1 從機狀態切換指令
NMT主站通過特定指令控制從機的運行狀態,指令格式:功能碼 + 節點ID
| 指令碼 | 功能 | 說明 |
|---|---|---|
| 01 + Node-ID | 啟動(START) | 從機進入運行狀態 |
| 02 + Node-ID | 停止(STOP) | 從機暫停工作 |
| 80 + Node-ID | 預操作(PRE-OPERATIONAL) | 從機進入配置狀態 |
| 81 + Node-ID | 復位應用層 | 重置從機應用參數(通信參數保留) |
| 82 + Node-ID | 復位節點通訊 | 重置從機通信參數 |
1.2 節點上線與心跳報文
- 節點上線:從機啟動后,主動發送700h + Node-ID報文(數據段為1字節00),告知主站“已就緒”。
- 心跳報文:從機周期性發送700h + Node-ID報文,數據段1字節標識當前狀態:
- 04:停止狀態
- 05:運行狀態
- 7F:預操作狀態
主站通過73F報文(無節點ID)廣播自身在線狀態。
SDO(服務數據對象)
SDO用于非實時的參數讀寫(如對象字典配置),采用“請求-響應”模式,報文格式固定。
2.1 SDO報文ID規則
| 方向 | COB-ID |
|---|---|
| 發送(主站→從機) | 600h + Node-ID |
| 響應(從機→主站) | 580h + Node-ID |
2.2 SDO讀報文格式
發送報文(主站請求讀參數)
| COB-ID | DLC | Data[0] | Data[1-2] | Data[3] | Data[4-7] |
|---|---|---|---|---|---|
| 0x600+NodeID | 8 | 命令字(固定0x40) | 對象索引(高+低) | 對象子索引 | 填充0x00 |
響應報文(從機返回數據)
| COB-ID | DLC | Data[0] | Data[1-2] | Data[3] | Data[4-7] |
|---|---|---|---|---|---|
| 0x580+NodeID | 8 | 命令字(隨數據長度變化) | 對象索引 | 對象子索引 | 返回數據(最大4字節) |
響應命令字規則:
- 1字節數據:0x4F
- 2字節數據:0x4B
- 3字節數據:0x47
- 4字節數據:0x43
- 讀取失敗:0x80
2.3 SDO寫報文格式
發送報文(主站請求寫參數)
| COB-ID | DLC | Data[0] | Data[1-2] | Data[3] | Data[4-7] |
|---|---|---|---|---|---|
| 0x600+NodeID | 8 | 命令字(固定0x23) | 對象索引(高+低) | 對象子索引 | 要寫的數據 |
響應報文(從機返回數據)
| COB-ID | DLC | Data[0] | Data[1-2] | Data[3] | Data[4-7] |
|---|---|---|---|---|---|
| 0x580+NodeID | 8 | 命令字(固定0x60) | 對象索引 | 對象子索引 | 要寫的數據 |
PDO(過程數據對象)
PDO是CANopen的實時數據傳輸載體,分為發送PDO(TPDO,從機→主站)和接收PDO(RPDO,主站→從機),最多支持4組PDO通道。
3.1 PDO報文ID規則
| PDO類型 | TPDO(從機發) | RPDO(主站發) |
|---|---|---|
| PDO1 | 180h + NodeID | 200h + NodeID |
| PDO2 | 280h + NodeID | 300h + NodeID |
| PDO3 | 380h + NodeID | 400h + NodeID |
| PDO4 | 480h + NodeID | 500h + NodeID |
3.2 PDO傳輸觸發條件
PDO的傳輸時機由傳輸類型決定,核心觸發條件包括同步(SYNC)、遠程幀(RTR)、事件(如數據變化):

3.3 PDO的傳輸類型
PDO的傳輸類型位于通信參數(RPDO:1400h~1403h,TPDO:1800h~1803h)的子索引02上。
傳輸觸發類型如下:

- (1) TPDO傳輸類型為0:映射數據改變且接收到一個同步幀時,發送該TPDO。
- (2) TPDO傳輸類型為1~240:接收到相應個數的同步幀時,發送該TPDO。
- (3) TPDO傳輸類型為254或255:映射數據改變或事件計時器到達時發送該TPDO。
- (4) RPDO傳輸類型為0~240:接收到一個同步幀時,將該RPDO最新數據更新到應用。
- (5) RPDO傳輸類型為254或255:將接收到的數據直接更新到應用。
對象字典(OD)
對象字典是所有可配置參數的倉庫,通過16位索引 + 8位子索引標識,分為4大區域:
| 索引范圍 | 區域 | 說明 |
|---|---|---|
| 1000h-1FFFh | 通訊對象子協議區 | 存儲PDO、SDO、NMT等通信配置 |
| 2000h-5FFFh | 制造商特定子協議區 | 廠商自定義參數,靈活擴展 |
| 6000h-9FFFh | 標準化設備子協議區 | 如電機控制參數 |
CANopen通信流程示例
- 設備上線:從機發700+NodeID(00),主站確認;
- 狀態配置:主站發NMT指令(如80+NodeID),從機進入預操作狀態;
- 參數配置:主站通過SDO(600+NodeID)讀寫從機對象字典,配置PDO映射、傳輸周期等;
- 啟動運行:主站發01+NodeID,從機進入運行狀態;
- 實時通信:主站發SYNC(080)觸發PDO,從機通過TPDO傳數據,主站通過RPDO發控制指令;
- 故障監控:從機故障時發緊急報文(080+NodeID),主站通過心跳報文監控設備狀態。
不同COB-ID的功能速查
6.1 網絡管理類(NMT)
| COB-ID(11位) | 功能說明 | 示例場景 |
|---|---|---|
0x000 | 網絡管理報文(NMT):啟動、停止、復位等網絡控制 | 主站發送0x000 + 數據0x01 0x02 → 讓節點2進入運行狀態 |
6.2 同步/時間類
| COB-ID(11位) | 功能說明 |
|---|---|
0x80 | 同步報文(SYNC):觸發多個節點同步傳輸PDO |
0x100 | 時間戳報文(TIME):傳遞系統時間,用于節點時鐘同步 |
6.3 緊急報文(EMCY)
| COB-ID(11位) | 功能說明 |
|---|---|
0x80 + 節點ID | 緊急報文:節點發生故障(如過流、超溫)時主動上報故障代碼 |
| 示例:節點3的EMCY → 0x83,發送故障代碼0x0500(硬件過流) |
6.4 服務數據對象(SDO)
| COB-ID(11位) | 功能說明 | 通信方向 |
|---|---|---|
0x600 + 節點ID | SDO客戶端發送報文:主站向從站發起讀寫對象字典請求 | 主站→從站 |
0x580 + 節點ID | SDO服務器回應報文:從站向主站返回讀寫結果/數據 | 從站→主站 |
示例:主站讀節點2 → 主站發0x602,從站回0x582
6.5 過程數據對象(PDO)
每個節點最多支持4個TPDO和4個RPDO,默認COB-ID如下:
| PDO類型 | 默認COB-ID(11位) | 功能說明 |
|---|---|---|
| TPDO1 | 0x180 + 節點ID | 從站主動發送過程數據(如傳感器值) |
| TPDO2 | 0x280 + 節點ID | 擴展發送數據 |
| TPDO3 | 0x380 + 節點ID | 擴展發送數據 |
| TPDO4 | 0x480 + 節點ID | 擴展發送數據 |
| RPDO1 | 0x200 + 節點ID | 主站向從站發送控制指令 |
| RPDO2 | 0x300 + 節點ID | 擴展控制數據 |
| RPDO3 | 0x400 + 節點ID | 擴展控制數據 |
| RPDO4 | 0x500 + 節點ID | 擴展控制數據 |
| 示例:節點4的TPDO1 → 0x184;主站發往節點4的RPDO1 → 0x204 |
6.6 心跳報文
CANopen標準中,從站的心跳報文COB-ID固定為 0x700 + 節點ID(11位標準幀)。
例:節點ID=2的從站,心跳報文COB-ID為0x700 + 0x02 = 0x702。
總結
CANopen協議通過清晰的報文分類(NMT、SDO、PDO、EMCY等)和靈活的對象字典機制,成為工業通信的事實標準。掌握NMT狀態機、SDO配置流程、PDO觸發模式以及各類COB-ID的用途,就能輕松應對大多數CANopen設備開發與調試任務。
小貼士:調試時可借助CAN分析儀抓包,對照本文速查表快速定位問題。
注:文中圖片為示意圖,實際使用時請參考具體設備手冊。
-
PDO
+關注
關注
0文章
10瀏覽量
4584 -
SDO
+關注
關注
0文章
6瀏覽量
6197 -
NMT
+關注
關注
0文章
8瀏覽量
3837
發布評論請先 登錄
【米爾-瑞薩RZ/G2UL開發板】5.CAN通訊進階CANopen
CANopen協議移植編譯,一直編譯不過的原因?
Canopen協議讀后感想
【下載有獎】Fluke紅外熱像資源中心,紅外熱像解讀,一網打盡!
【大聯大世平 NXP i.MX RT1064開發板試用體驗】CANopen通訊
PDO是什么
CANOpen輕松入門_數據對象(PDO)和服務數據對象(SDO)
CANopen | 對象字典OD 02 - 修改CANopen節點的心跳報文發送間隔
CANopen協議核心秘籍:NMT、SDO、PDO、心跳報文一網打盡
評論