CANopen是一種架構在控制局域網路(Controller Area Network, CAN)上的高層通訊協定,包括通訊子協定及設備子協定常在嵌入式系統中使用,也是工業(yè)控制常用到的一種現場總線。CANopen 實現了OSI模型中的網絡層以上(包括網絡層)的協定。CANopen 標準包括尋址方案、數個小的通訊子協定及由設備子協定所定義的應用層。 CANopen 支援網絡管理、設備監(jiān)控及節(jié)點間的通訊,其中包括一個簡易的傳輸層,可處理資料的分段傳送及其組合。一般而言數據鏈結層及物理層會用CAN來實作。除了 CANopen 外,也有其他的通訊協定(如EtherCAT)實作 CANopen 的設備子協定。CANopen由非營利組織CiA(CAN in Automaion)進行標準的起草及審核工作,基本的 CANopen 設備及通訊子協定定義在 CAN in Automation (CiA) draft standard 301中。針對個別設備的子協定以 CiA 301 為基礎再進行擴充。如針對 I/O 模組的 CiA401 及針對運動控制的 CiA402。
本說明是CAN上層協議CANOpen協議的嵌入式簡化,較原始CANOpen版本簡單易用,且更適應嵌入式模塊通訊的需要,并且兼容CANOpen協議。
下面按照協議支持的功能分別進行說明:
NMT網絡管理服務
網絡管理狀態(tài)表:

說明:一般終端主節(jié)點是指上位機,如上位用于網絡管理和監(jiān)控的PC機,從節(jié)點是指被管理的各模塊。
如果節(jié)點ID是0表示命令會被廣播至所有從節(jié)點,從節(jié)點必須執(zhí)行相應的命令。
命令說明符功能見下表:

網絡管理狀態(tài)表:


根據節(jié)點的狀態(tài)提供以下服務:

過程數據對象(PDO)服務
過程數據對象用于在節(jié)點之間傳送過程數據,如I/O模塊I/O狀態(tài)讀取和設定,模擬量采集和模擬量輸出等等,本協議考慮從機硬件限制最多支持4組PDO,每組包含一個RPDO和一個TPDO,現已I/O模塊為例進行說明:
設I/O模塊有24輸入,24輸出,24輸入通過TPDO傳給監(jiān)控終端或其他節(jié)點,24輸出通過RPDO由控制節(jié)點對其進行設定,采用發(fā)送和接收PDO1組,即標識符TPDO:0x180+NODE_ID,RPDO:0x200+NODE_ID,用3個字節(jié)就可以表示24個I/O量,因此發(fā)送和接收PDO可以表示如下(假設NODE_ID=1):

如果是8通道的模擬量采集模塊則需要兩個TPDO來傳送采集的數據,不需要RPDO,因為每個通道產生一個16位數據,一共是16字節(jié),每個TPDO只能夠傳送8字節(jié)。兩個TPDO標識符分別為:0x180+NODE_ID,0x280+NODE_ID。
每幀數據格式如下表(設NODE_ID=2):

I/O節(jié)點←監(jiān)控終端(RPDO)
I/O節(jié)點→監(jiān)控終端(TPDO)
服務數據對象(SDO)服務
服務數據對象用于讀寫節(jié)點的對象字典,現 只實現SDO下載和上傳的全速模式,不支持正常模式也不支持塊下載和上傳,因為數據量不大,實現的功能足夠用,SDO全速下載和上傳采用應答式服務,由監(jiān)控終端向節(jié)點發(fā)送服務請求,由節(jié)點返回應答。
現假設某節(jié)點NODE_ID=3,協議報文如下:
讀節(jié)點OD
假設,讀SDO index = 0x1018 subindex = 0x00,返回的是1字節(jié)data=0x04
監(jiān)控終端→節(jié)點(終端請求)

監(jiān)控終端←節(jié)點(節(jié)點應答)
COB-ID0字節(jié)1字節(jié)2字節(jié)3字節(jié)4字節(jié)5字節(jié)6字節(jié)7字節(jié)1411(0x583) 命令index subindex 數據湊夠8個字節(jié)0x4F0x18 0x10 0x00 0x04 0x00 0x00 0x00
寫節(jié)點OD
假設,寫SDO index=0x1017,subindex=0x00,寫數據為0x07D0
監(jiān)控終端→節(jié)點(終端請求)

節(jié)點返回的錯誤代碼如下:
SDO_ABORT_UNSUPPORTED 0x06010000UL 不支持該功能
SDO_ABORT_NOT_EXISTS 0x06020000UL 不存在的索引
SDO_ABORT_READONLY 0x06010002UL 只讀,不可寫
SDO_ABORT_TYPEMISMATCH 0x06070010UL 類型不匹配
SDO_ABORT_UNKNOWN_COMMAND 0x05040001UL 未知命令
SDO_ABORT_UNKNOWNSUB 0x06090011UL 未知子索引
注:命令字節(jié)含義請參考CANOpen協議文件DS301。
錯誤控制——心跳(或者叫脈動)協議(heatbeat)
錯誤控制用于了解總線上各節(jié)點的狀態(tài),本文只實現心跳協議,由各節(jié)點向監(jiān)控終端定期發(fā)送心跳報文,報告本節(jié)點的狀態(tài),報文如下:
設節(jié)點NODE_ID=2
節(jié)點→監(jiān)控終端

節(jié)點在啟動之后發(fā)出BOOTUP心跳,然后按固定頻率發(fā)出脈動消息幀,監(jiān)控終端接收該報文用以檢測該節(jié)點狀態(tài).
責任編輯:gt
-
嵌入式
+關注
關注
5200文章
20481瀏覽量
334547 -
協議
+關注
關注
2文章
619瀏覽量
41106 -
現場總線
+關注
關注
3文章
529瀏覽量
40013
發(fā)布評論請先 登錄
SIP協議在嵌入式Linux中的實現
CAN上層協議CANOpen協議的嵌入式簡化說明
Profinet協議轉換為CanOpen協議來連接CanOpen伺服驅動器的應用
CANopen嵌入式模塊的應用
介紹嵌入式網絡協議棧基礎知識
介紹嵌入式網絡協議棧基礎知識
OEM嵌入式通訊模塊介紹
主流的小型嵌入式網絡協議棧
嵌入式TCPIP協議的分析與研究
嵌入式系統中TCP/IP 協議的精簡與實現
TCP協議與基于Nagle算法的嵌入式介紹
一種適用于Nagle算法的簡化嵌入式TCP協議淺析
虹科干貨 | CANopen協議基礎知識——LSS服務
虹科方案 | 輕松實現CANopen設備開發(fā):虹科CANopen嵌入式通訊模塊與CANopen芯片
CANOpen協議的嵌入式簡化分析及功能介紹
評論