目錄
一、CANopen簡介
二、OD對象字典
2.1 OD對象字典簡介
2.2 CANopen預定義連接集
三、PDO過程數據對象
四、SDO過程數據對象
五、特殊協議
5.1 同步協議
5.2 時間戳協議
5.3 緊急報文協議
六、NMT網絡管理
6.1 NMT節點狀態
6.2 NMT節點上線報文
6.3 NMT心跳報文
6.4 NMT模塊控制報文
一、CANopen簡介
本文對CANopen基本理論進行總結性的簡單描述,面向初學者;
閱讀本文須先掌握CAN基本知識,本文不再贅述。
CANopen基于CAN。在OSI的7層網絡模型中,CAN僅規定了物理層和數據鏈路層,而CANopen作為其擴展,在此之上規定了應用層。
二、OD對象字典
2.1 OD對象字典簡介
對象字典(Object Dictionary)是一個有序的對象組,舉例具象化來說,每個對象就類似于一份身份信息表,記載著其具體信息:
每個對象采用一個16位索引值以尋址,類似于公民身份證。而每個公民都有其具體信息,如生日住址等,為了訪問對象數據結構的單個元素,又采用了一個8位子索引值。
下表為對象字典索引區域定義,其中通訊對象子協議區及其通用通訊對象為需要關注的區域:
Index Range | Description |
---|---|
0000h | 保留 |
0001h - 025Fh | 數據類型 |
0260h - 0FFFh | 保留 |
1000h - 1FFFh | 通訊對象子協議區 |
2000h - 5FFFh | 制造商特定子協議區 |
6000h - 9FFFh | 標準化設備子協議區 |
A000h - AFFFh | 網絡變量 |
B000h - BFFFh | 路由網關系統變量 |
C000h - FFFFh | 保留 |
通訊對象子協議區:
通用通訊對象:
CANopen(NMT)主站在啟動時,通常需要讀取所有從站中通用通訊對象中的索引,所以所有的通用通訊對象都必須在CANopen從站中實現。
?
2.2 CANopen預定義連接集
對于PDO和SDO的報文ID分配,CANopen基于11位CAN-ID的標準幀格式,預定義了缺省標識符分配表:
CAN-ID / COB-ID | ||||||||||
Function-ID | Node-ID | |||||||||
10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Node-ID:范圍1~127(0不允許被使用)。
預定義的連接集定義表如下所示:
SDO服務器指CANopen從節點,SDO客戶指CANopen主節點。
PDO分為TXPDO(發送PDO)和RXPDO(接收PDO),這里的發送和接收都以CANopen從節點為參考;而NMT錯誤控制包括節點守護報文,心跳報文和Boot-up協議。
三、PDO過程數據對象
PDO采用”生產者/消費者“模式,PDO數據傳送以一對一/多的方式進行。每條PDO包含了TXPDO和RXPDO,其傳送方式定義在PDO通訊參數對象字典索引:
所有的PDO傳送數據須透過對象字典映像到對應的索引區上,如圖(OD取值為舉例需要,不具備實際意義):
PDO DLC為1-8 Bytes,其傳輸方式分為:
- 同步傳輸(通過同步報文讓所有節點同時互發);
- 異步傳輸(通過特定事件觸發)。
四、SDO過程數據對象
SDO特點為“服務確認”,對于每個“問”都會生成一個“答”。其DLC均為8 Bytes,通訊原則為:
- SDO客戶端發送(問)數據:COB-ID為580h+服務器Node-ID;
- SDO服務器發送(答)數據:COB-ID為600h+服務器Node-ID。
快速SDO協議:
若讀寫數據不大于32位,可采用快速SDO,即一次問答完成數據發送:
若讀寫值超過32位,則須使用普通SDO協議進行分幀傳輸。
五、特殊協議
對于主站對從站的方便管理,CANopen中預定義了特殊報文,主要為:
- 同步協議;
- 時間戳協議;
- 緊急報文協議。
5.1 同步協議
該報文對象主要實現整個網絡的同步傳輸。
DLC | CAN-ID |
0-1 | 80h(在OD索引1006h和1007h中分別約束同步幀循環周期和同步幀發送后從節點發送PDO的時效) |
5.2 時間戳協議
NMT主機發送自身時鐘,為各節點提供公共時間參考網絡對時。
DLC | CAN-ID |
6 | 100h(存于OD索引1012h中) |
5.3 緊急報文協議
設備內部發生錯誤觸發,以提示NMT主站,但不影響CANopen通訊。
DLC | CAN-ID | ||
8 | 80h+Node-ID (存于OD索引1014h中) | ||
0 - 1 | 2 | 3 - 7 | |
EEC(緊急錯誤代碼) | ER(錯誤寄存器) | MEF(廠商自定義錯誤代碼) |
六、NMT網絡管理
6.1 NMT節點狀態
一主多從,每個CANopen從節點的CANopen協議棧中必須具備NMT網絡管理的相應代碼。
NMT網絡管理涉及CANopen節點的六種狀態:
- 初始化(CAN控制器初始化);
- 應用層復位(對象字典索引范圍2000h - FFFFh復位);
- 通訊復位(對象字典索引范圍1000h - 1FFFh復位);
- 預操作狀態(該節點CANopen通訊就緒,可通過SDO參數配置和NMT網絡管理操作,但不能PDO通信);
- 操作狀態(可通過SDO參數配置和NMT網絡管理操作,也可根據OD規定進行PDO通信);
- 停止狀態(PDO通信停止,但能SDO參數配置和NMT網絡管理操作)。
NMT網絡中的任一CANopen節點的狀態可自行切換,亦可接收NMT主機發送的NMT命令切換。
6.2 NMT節點上線報文
NMT從節點上線時必須發布NMT節點上線報文以通知NMT主節點,表示自身狀態已從初始化進入預操作。
COB-ID | DLC | Byte0 |
0x700 + Node-ID | 1 | 0 |
6.3 NMT心跳報文
NMT從節點可通過向主站發送NMT心跳報文以確認自身是否在線和自身目前的節點狀態。
COB-ID | DLC | Byte0 | Description |
0x700 + Node-ID | 1 | 04h | 停止狀態 |
05h | 操作狀態 | ||
7Fh | 預操作狀態 |
NMT節點守護報文:NMT主站通過輪詢模式監視從站狀態,主從一應一答, 與心跳報文模式二者不能并存。
由于遠程幀在CAN發展中逐漸被淘汰,而節點守護由于需要更多的主站開銷與增加網絡負載,CiA協會已經不建議使用,被心跳報文所取代。
6.4 NMT模塊控制報文
只有NMT主節點能發送NMT模塊控制報文以切換NMT從節點狀態。
COB-ID | DLC | Byte0 | Byte1 | Description |
0x000 | 2 | 0x01 | Node-ID | 啟動命令(進入操作狀態) |
0x02 | 停止命令(進入停止狀態) | |||
0x80 | 進入預操作狀態 | |||
0x81 | 復位節點應用層 | |||
0x82 | 復位CANopen通訊 |