1.CANopen協議總述
CANopen 是一個基於 CAN 串行總線的網絡傳輸系統的應用層協議,遵循 ISO/OSI 標准模型。
網絡中不同的設備通過對象字典或者對象來相互交換數據,其中,主節點可以通過過程數據對象 (PDO) 或者服務數據對象 (SDO) 來獲取或者修改其它節點對象字典列表中的數據。
CANopen協議主要內容分為三大塊,如下圖CANopen 的設備模型。
推薦書籍:周立功的《CANopen輕松入門》,建議詳細拜讀,可以帶大家入門。
2.通訊接口
入門之后若要深入理解,我建議參看官網的《CANOpen CiA 301》標准這本文檔
CiA(CAN in Automation) 301也是大家所說的DS301,為CANopen 基礎協議。
我們還常看到類似CiA 401 402這些協議,其實它們是在CiA 301 之上,對各個行業不斷推出設備子協議。
所謂的子協議,就是針對不同行業的應用對象,對 CANopen 內部的數據含義進行重新定義,或者添加新的控制邏輯。
按照CANOpen CiA 301協議文檔,提取了通信接口的主要內容,如下圖:
2.1 網絡管理(NMT),包括 Boot-up(上線) 消息, Heartbeat(心跳) 協議及 NMT 消息,基於主從通信模式,
NMT 用於管理和監控網絡中的各個節點,主要實現三種功能:節點狀態控制、錯誤控制和節點啟動。
CANOpen網絡一般是一個主站,多個從站的局域網絡;
NMT節點具有6種狀態:初始化、應用層復位、通訊復位、預操作狀態、操作狀態、停止狀態。可以自己切換狀態,也可主站切換狀態;
任何一個 CANopen 從站上線后發出節點上線報文(boot-up)。
2.2 過程數據對象 PDO
每個 CANopen 設備包含 8 個缺省的 PDO 通道, 4 個發送 PDO 通道和 4 個接收 PDO 通道。
PDO用來傳輸實時數據,包括接收 PDO(RPDO) 和發送 PDO(TPDO),數據從一個創建者傳到一個或多個接收者,屬於“生產消費”模型,數據傳送限制在 1 到 8 個字節。
COB-ID( CAN Object Identifier,CANID是其一部分,NodeID是CANID的低7位) 定義只是預定義。
PDO 的兩種傳輸方式:同步傳輸和異步傳輸,由該 PDO 對應的通信參數決定。
PDO 的通信參數可通過對象字典工具配置。
PDO 消息的內容是預定義的,由該 PDO 對應的映射參數決定。PDO 的映射參數是一個相對難理解的參數,請結合《CANopen 輕松入門》圖文理解。
2.3 服務數據對象 SDO
包括接收 SDO(R-SDO) 和發送 SDO(T-SDO)。
通過使用索引和子索引, SDO 使客戶機能夠訪問設備對象字典中的項。
SDO 通過 CAL 中多元域的 CMS 對象來實現,允許傳送任何長度的數據,當數據超過 4 個字節時分拆成幾個報文。
協議是確認服務類型,為每個消息生成一個應答。 SDO 請求和應答報文總是包含 8 個字節。
SDO為請求應答方式;
發送方(客戶端)、接收方(服務器) ;
通常從節點為 SDO 服務器,主節點為客戶端;
兩種協議:快速、普通 SDO 協議;
CS命令符含義需熟記(查表);
2.4 特殊協議
2.4.1.常見的就是羅列出來的3種:
同步協議,包含同步對象,同步對象是由 CANopen 主站周期性地廣播到 CAN 總線的報文,用來實現基本的網絡時鍾信號,
每個設備可以根據自己的配置,決定是否使用該事件來跟其它網絡設備進行同步通信。
時間戳協議。
緊急報文協議,設備內部通信故障或者應用故障錯誤時發送的報文。
2.4.2.特殊協議CAN-ID定義(查表);
2.4.3.緊急報文錯誤代碼分類及含義;
3.對象字典
CANopen設備最重要的一個部分就是對象字典。對象字典本質上是一種被預先安排的對象序列,可通過網絡訪問。字典里面的每一對象均可使用一個16-bit主索引和8-bit子索引尋址到。
對象字典下面主要包含:數據類型、通信對象、應用對象。
3.1 通信子協議區,如上圖1000h 到 1FFFh這個區域。也就是通信接口(或通信對象)協議區。
關於創建對象字典,可以使用Canfestival工具,詳見:http://www.elecfans.com/d/1153555.html