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