//
CANopen是位于CAN總線之上的應用層協議。CAN報文由7個不同的位域組成,CANopen主要是規定了其中的仲裁域和數據域的使用情況。
01
CANopen報文格式
CANopen的報文格式為COB-ID+D0+D1+…..+D7, 放入CAN幀的數據,低字節優先。例如數據0x01020304對應如下組織:COB-ID 04030201。COB-ID= Function Code+Node ID(或其他),如圖所示:

Function Code(二進制):
EMCY:0001;
PDO:0011, 0100, 0101, 0110, 0111, 1000, 1001, 1010;
SDOrx : 1011;
SDOtx : 1100;
NMT error control : 1110;
NMT : 0000;
SYNC : 0001;
TIME STAMP : 0010;
例子:182H=0001 1000 0010(B)
11bit為 0011 0000 010:前四位0011為功能碼PDO,后四位為節點,10=2即節點為2.
02
CANopen報文測試
01
Boot-up報文
Boot-up報文為CAN-ID=700+node_ID。當某個節點在initializing模式之后,進入pre-operational模式將發送boot-up報文,例如CIO102在上電之后會收到報文如下圖。這個boot-up報文其實也是第一個心跳報文。

02
NMT報文

NMT狀態機:1)Power on上電 2)自動切換到預操作狀態3)6)網絡管理切換到操作狀態。4)7)網絡管理切換到預操作狀態。5)8)網絡管理切換到停止狀態。9)10)11)網絡管理切換到應用層復位狀態。12)13)14)網絡管理切換到通訊復位狀態。15)掉電或者硬件復位。
NMT協議:11-bit的CAN報文ID中只攜帶高4-bit的功能碼,CANID均為000h,具備最高的 CAN 優先級。數據為Node-ID放在數據域的D1處;具體的NMT命令編碼放在數據域的D0處!例:將節點1設置為operational狀態:000 01 01

如果要對整個網絡所有節點同時進行控制,則D1為0即可。例:將所有節點設置為operational狀態000 01 00

03
心跳報文
Stare:0=Boot-up 4=stopped 5=operational 7F=pre-operational
CAN-ID為700+Node-ID數據為一個字節。如圖,設備上電后處于pre-op狀態,通過SDO寫入心跳周期5s,每隔5s自動發送一次設備的狀態,通過000 01 01將設備的狀態切換為op。報文:601 2B 1710 00 88 13 00 00:601為CAN-ID(600+NODE_ID),2B代表寫兩個字節,17 10 表示索引(根據報文格式低位在前,此處代表對象1017h),00表示子索引,88 13 00 00代表數據內容(低位在前則該數據為00 00 13 88=5000).

04
Node guard
主站發送一幀遠程幀,節點應答700+Node_IDstate
State:0=初始化,1=斷開連接,2=連接,3=準備,4=stopped,5=operational,6=pre-operational


05
同步報文
同步窗口時間索引:1007h約束了同步幀發送后從節點發送PDO的時效即在這個時間內發送的PDO才有效超過時間的PDO將被丟棄;通訊循環周期:索引 1006 h 規定了同步幀的循環周期。
測試過程/Testing process
1)令設備處于op狀態
2)1800,1802的transmission type設為3


06
SDO
快速SDO
用于讀/寫某個節點的對象字典,其數據內容不超過四個字節。例如601 22 00 62 01 FF 00 00 00:601(600+Node_ID);22(不對傳輸數據的字節數做區分)=0010 0010(如下圖)001表示寫,0表示沒有用到的字節數,00表示剩下的字節數,1表示快速傳輸,0表示data區沒有字節數指示;01表示子索引;FF 00 00 00 表示數據區的內容。
SDO寫

CCS: 客戶端的命令碼 [1:寫入初始化請求]
X: unused bits
n: 字節數 (n表示后面4個字節數據剩余的數量)
e: transfer expedited (快速傳輸,無分段)
s: data區是否為字節數指示:0表示data區無,1表示data區的數值為要寫入的數據
SCS: 服務器命令碼 [3:寫入初始化響應]
SDO讀

CCS: 客戶端命令碼 [2:讀SDO初始化請求]
n: 當快速模式時,表示data區內空余的字節數
e: transfer type:1表示快速傳輸,無分段
s: data size indicator
SCS: 服務器端命令碼 [2:讀SDO初始化響應]
X: unused bits
SDO命令符

下圖為SDO測試的過程,包括讀6200 01和6200 02的讀寫操作。

分段SDO/塊傳輸
針對讀寫數據超過四個字節的情況,報文測試進行分段傳輸。報文傳輸如下圖所示,601 40 08 10 00 00 00 00表示讀取1008索引10子索引。41 01 10 00 0D 00 00 00;60 00 00 00 00 00 00 00;70 00 00 00 00 00 00 00該為確認報文信息。00 68 69 70 65 63 73 2D;13 43 49 4F 31 30 32 00為具體內容,其中00和13為命令碼;其他通過查ASCII表68:h;69:i;70:p;65:e;63:c;73:s;2D:-;43:C;49:I;4F:O;31:1;30:0;32:2;00:NULL;即內容為:hipecs-CIO02。


07
PDO
PDO有三種觸發機制:事件觸發、遠程幀、同步。
PDO的COB-ID組成如下方的表格所示:

此處的COB-ID就是文章開頭所說的其他的情況,這一應用主要在修改PDO映射中。其中PDO的COB-ID主要有以下這些:

PDO通訊中有兩個重要的概念,通訊參數與映射參數(CiA301中規定了他們的對象),通訊參數中定義了該設備所使用的COB-ID、傳輸類型、禁止時間、事件定時器觸發時間、同步起始值。

-
CAN
+關注
關注
59文章
3067瀏覽量
472743
發布評論請先 登錄
CANopen協議核心秘籍:NMT、SDO、PDO、心跳報文一網打盡
虹科動態 | 2026年1月精彩回顧
虹科動態 | KOTRA廣州韓國貿易館 韓國商工會領導來訪虹科總部
虹科動態 | 2025年12月精彩回顧
虹科答疑 | 使用虹科PCAN-Explorer 6進行.DBC解析總共分幾步?
虹科動態 | 2025年11月精彩回顧
虹科動態 | 虹科×長城汽車技術交流日圓滿落幕!
虹科干貨 | 嵌入式AI崛起,CAN總線如何重塑新角色?
圓滿收官 | 虹科CAN總線專題全系列直播精華回顧已上線!
虹科案例 | 礦業數字化轉型:虹科owa5X如何贏得日立Wenco信任?
智能制造新升級 | 看CEO陳秋苑揭秘虹科如何全流程賦能?
虹科方案 | 數據不缺位,監控不滯后:虹科車輛信息遠程監控系統
直播回顧 | 硬核干貨放送,虹科CAN總線應用層直播助您告別低效聯調,破解車載網絡開發核心難題
虹科活動 | 廣州示波器診斷體驗交流日圓滿落幕!NVH專場即將上線!
虹科干貨 | 讀不懂CANopen報文?看完這篇文章你就知道了!
評論