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

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

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