1 引言
在上期文章中介紹了CAN總線,本期文章中將介紹CANopen協議相關概念及其組網方式。
CANopen協議是在20世紀90年代末,由CIA(CAN in Automation)組織在CAL(CAN Application Layer)的基礎上發展而來,一經推出便在歐洲得到了廣泛的認可與應用。經過對CANopen協議規范文本的多次修改,使得CANopen協議的穩定性、實時性、抗干擾性都得到了進一步的提高。并且CIA在各個行業不斷推出設備子協議,使CANopen協議在各個行業得到更快的發展與推廣。目前CANopen協議已經在運動控制、車輛工業、電機驅動、工程機械、船舶海運等行業得到廣泛的應用。
2 CANopen協議簡介
圖1所示為CANopen設備結構,CANopen協議通常分為用戶應用層、對象字典以及通信三個部分。其中最為核心的是對象字典,這部分將在本文以下章節中介紹。CANopen通信是CANopen關鍵部分,其定義了CANopen協議通信規則以及與CAN控制器驅動之間對應關系,熟悉這部分對全面掌握CANopen協議至關重要,這部分將在以下章節中進行介紹。用戶應用層是用戶根據實際需求編寫的應用對象,本文對此將不作介紹。
?
3 CANopen對象字典
CANopen對象字典OD(Object Dictionary)是CANopen協議最為核心的概念。所謂的對象字典就是一個有序的對象組,每個對象采用一個16位的索引值來尋址,這個索引值通常被稱為索引,其范圍在0x1000~0x9FFF之間。為了允許訪問數據結構中的單個元素,同時也定義了一個8位的索引值,這個索引值通常被稱為子索引。
每個CANopen設備都有一個對象字典,對象字典包含了描述這個設備和它的網絡行為的所有參數,對象字典通常用電子數據文檔EDS(Electronic Data Sheet)來記錄這些參數,而不需要把這些參數記錄在紙上。對于CANopen網絡中的主節點來說,不需要對CANopen從節點的每個對象字典項都訪問。
CANopen對象字典中的項由一系列子協議來描述。子協議為對象字典中的每個對象都描述了它的功能、名字、索引、子索引、數據類型,以及這個對象是否必需、讀寫屬性等等,這樣可保證不同廠商的同類型設備兼容。
CANopen協議的核心描述子協議是DS301,其包括了CANopen協議應用層及通信結構描述,其他的協議子協議都是對DS301協議描述文本的補充與擴展。在不同的應用行業都會起草一份CANopen設備子協議,子協議編號一般是DS4xx。
CANopen協議包含了許多的子協議,其主要劃分為以下三類:
(1)通信子協議(Communication Profile)
通信子協議,描述對象字典的主要形式和對象字典中的通信對象以及參數。這個子協議適用所有的CANopen設備,其索引值范圍從0x1000~0x1FFF。
(2)制造商自定義子協議(Manufacturer-specific Profile)
制造商自定義子協議,對于在設備子協議中未定義的特殊功能,制造商可以在此區域根據需求定義對象字典對象。因此這個區域對于不同的廠商來說,相同的對象字典項其定義不一定相同,其索引值范圍為0x2000~0x5FFF。
(3)設備子協議(Device Profile)
設備子協議,為各種不同類型的設備定義對象字典中的對象。目前已有十幾種為不同類型的設備定義的子協議,例如DS401、DS402、DS406等,其索引值范圍為0x6000~0x9FFF。
4 CANopen通信
在CANopen協議中主要定義了管理報文對象NMT(Network Management)、服務數據對象SDO(Service Data Object)、過程數據對象PDO(Process Data Object)、預定義報文或特殊功能對象等四種對象。
(1)管理報文NMT
管理報文負責層管理、網絡管理和ID分配服務,例如,初始化、配置和網絡管理(其中包括節點保護)。網絡管理中,同一個網絡中只允許有一個主節點及一個或多個從節點,并遵循主從模式。
(2)服務數據對象SDO
SDO主要用于主節點對從節點的參數配置。服務確認是SDO的最大特點,為每個消息都生成一個應答,確保數據傳輸的準確性。在一個CANopen系統中,通常CANopen從節點作為SDO服務器,CANopen主節點作為客戶端。客戶端通過索引和子索引,能夠訪問數據服務器上的對象字典。這樣CANopen主節點可以訪問從節點的任意對象字典項的參數,并且SDO也可以傳輸任何長度的數據(當數據長度超過4 B時就拆分成多個報文來傳輸)。
(3)過程數據對象PDO
PDO用來傳輸實時數據,其傳輸模型為生產者消費者模型,如圖2所示。數據長度被限制為1~8 B。PDO通信對象具有如下的特點:
①PDO通信沒有協議規定,PDO數據內容由它的CAN-ID(也可稱為COB-ID)定義。
②每個PDO在對象字典中用2個對象描述:
· PDO通信參數,該通信參數定義了該設備所使用的COB-ID、傳輸類型、定時周期;
· PDO映射參數,映射參數包含了一個對象字典中的對象列表,這些對象映射到相應的PDO,其中包括數據的長度(單位為bit),對于生產者和消費者都必須要知道這個映射參數,才能夠正確地解釋PDO內容。
? ③PDO消息內容是預定義的,如果PDO支持可變PDO映射,那么該PDO可以通過SDO進行配置。
④PDO可以有多種傳輸方式:
· 同步傳輸(通過接收同步對象實現同步),同步傳輸又可分為非周期和周期傳輸。非周期傳輸是由遠程幀預觸發或者由設備子協議中規定的對象特定事件預觸發傳送。周期傳輸則是通過接收同步對象(SYNC)來實現,可以設置1~240個同步對象觸發。
· 異步傳輸(由特定事件觸發),其觸發方式可有兩種,第一種是通過發送與PDO的COB-ID相同的遠程幀來觸發PDO的發送,第二種是由設備子協議中規定的對象特定事件來觸發(例如定時傳輸、數據變化傳輸等)。
(4)預定義報文或特殊功能對象
預定義報文或特殊功能對象為CANopen設備提供特定的功能,方便CANopen主站對從站管理。在CANopen協議中,已經為特殊的功能預定義了COB-ID,其主要有以下幾種特殊報文:
①同步(SYNC),該報文對象主要實現整個網絡的同步傳輸,每個節點都以該同步報文作為PDO觸發參數,因此該同步報文的COB-ID具有比較高的優先級以及最短的傳輸時間;
②時間標記對象(Time Stamp),為各個節點提供公共的時間參考;
③緊急事件對象(Emergency),當設備內部發生錯誤觸發該對象,即發送設備內部錯誤代碼;
④節點/壽命保護(Node/Life Guarding),主節點可通過節點保護方式獲取從節點的狀態,從節點可通過壽命保護方式獲取主節點的狀態;
⑤啟動報文對象(Boot-up),從節點初始化完成后向網絡中發送該對象,并進入到預操作狀態。
5 CANopen預定義連接集
CANopen預定義連接是為了減少網絡的組態工作量,定義了強制性的缺省標識符(CAN-ID)分配表,該分配表是基于11位CAN-ID的標準幀格式。將其劃分為4位的功能碼和7位的節點號(Node-ID)。如圖3所示,在CANopen中也通常把CAN-ID稱為COB-ID(通信對象編號)。
其中節點號由系統集成商給定,每個CANopen設備都需要分配一個節點號,節點號的范圍為1~127(0不允許被使用)。預定義連接集定義了4個接收PDO(Receive-PDO)、4個發送PDO(Transmit-PDO)、1個SDO(占用2個CAN-ID)、1個緊急對象和1個節點錯誤控制(Node-Error-Control)ID。也支持不需確認的NMT模塊控制服務、同步(SYNC)和時間標志(Time Stamp)對象報文。
6 CANopen網絡結構
圖4所示為CANopen典型的網絡結構,該網絡中有一個主節點,三個從節點以及一個CANopen網關掛接的其他設備。由于CANopen是基于CAN總線,因此其也屬于總線型網絡,在布線和維護等方面非常方便,可最大限度地節約組網成本。
CAN總線作為新型成熟的現場總線已經應用到生活生產的各個領域。其中基于CAN總線的CANopen協議,以其獨特的優勢已經成為行業標準,CANopen也必將成為現場總線的發展趨勢。
廣州致遠電子有限公司提供各種接口的CANopen接口卡、CANopen終端設備(包括數據采集,電機控制等)、CANopen分析儀、網關及網橋、OPC服務器以及基于CANopen協議的整套組網方案及應用開發。