canopen通訊協(xié)議
1.CANopen協(xié)議簡(jiǎn)介
從OSI 網(wǎng)絡(luò)模型的角度來(lái)看,CAN總線只定義了OSI網(wǎng)絡(luò)模型的第一層(物理層) 和第二層(數(shù)據(jù)鏈路層),而在實(shí)際設(shè)計(jì)中,這兩層完全由硬件實(shí)現(xiàn),設(shè)計(jì)人員無(wú)需再為此開發(fā)相關(guān)軟件或固件。
同時(shí),CAN只定義物理層和數(shù)據(jù)鏈路層,沒(méi)有規(guī)定應(yīng)用層,本身并不完整,因此需要一個(gè)高層協(xié)議來(lái)定義CAN報(bào)文中的11/29位標(biāo)識(shí)符和8字節(jié)數(shù)據(jù)的使用。而且,基于CAN總線的工業(yè)自動(dòng)化應(yīng)用中,越來(lái)越需要一個(gè)開放的、標(biāo)準(zhǔn)化的高層協(xié)議:這個(gè)協(xié)議支持各種CAN廠商設(shè)備的互用性、互換性,能夠?qū)崿F(xiàn)在CAN網(wǎng)絡(luò)中提供標(biāo)準(zhǔn)的、統(tǒng)一的系統(tǒng)通訊模式,提供設(shè)備功能描述方式,執(zhí)行網(wǎng)絡(luò)管理功能。
CANopen協(xié)議是CAN-in-Automation(CiA) 定義的標(biāo)準(zhǔn)之一,并且在發(fā)布后不久就獲得了廣泛的承認(rèn)。尤其是在歐洲, CANopen 協(xié)議被認(rèn)為是在基于CAN 的工業(yè)系統(tǒng)中占領(lǐng)導(dǎo)地位的標(biāo)準(zhǔn)。大多數(shù)重要的設(shè)備類型,例如數(shù)字和模擬的輸入輸出模塊、驅(qū)動(dòng)設(shè)備、操作設(shè)備、控制器、可編程控制器或編碼器,都在稱為“設(shè)備描述”的協(xié)議中進(jìn)行描述;“設(shè)備描述”定義了不同類型的標(biāo)準(zhǔn)設(shè)備及其相應(yīng)的功能。依靠CANopen協(xié)議的支持,可以對(duì)不同廠商的設(shè)備通過(guò)總線進(jìn)行配置。
在OSI 模型中, CAN標(biāo)準(zhǔn)、CANopen協(xié)議之間的關(guān)系如圖 1-1所示。

圖1-1 CAN標(biāo)準(zhǔn)、CANopen協(xié)議在OSI網(wǎng)絡(luò)模型中的位置框圖
CANopen和CAN報(bào)文的關(guān)系如圖 1-2所示。

圖1-2 CANopen和CAN報(bào)文的關(guān)系如所示。
CAN 報(bào)文由7個(gè)不同的位域組成,而CANopen就是規(guī)定其中的仲裁域(11 位標(biāo)識(shí)符) 和數(shù)據(jù)域(8 字節(jié)數(shù)據(jù)) 的使用情況。
2.CANopen設(shè)備結(jié)構(gòu)
CANopen是一個(gè)基于CAN串行總線系統(tǒng)和CAL(CAN應(yīng)用層)的高層協(xié)議。 CANopen的核心概念是設(shè)備對(duì)象字典(OD: ObjectDictionary),CANopen通訊通過(guò)對(duì)象字典(OD)能夠訪問(wèn)驅(qū)動(dòng)器的所有參數(shù)。CANopen設(shè)備結(jié)構(gòu)如圖 2-1所示。

圖2-1 CANopen設(shè)備結(jié)構(gòu)
2.1 CANopen對(duì)象字典
CANopen對(duì)象字典(Object Dictionary,OD)是CANopen協(xié)議最為核心的概念。所謂的“對(duì)象字典”,就是一個(gè)有序的對(duì)象組;每個(gè)對(duì)象采用一個(gè)16位的索引值來(lái)尋址。為了訪問(wèn)數(shù)據(jù)結(jié)構(gòu)中的元素,同時(shí)定義了一個(gè)8位的子索引,對(duì)象字典的結(jié)構(gòu)如表 2-1所示。
表2-1 對(duì)象字典結(jié)構(gòu)

CANopen網(wǎng)絡(luò)中每個(gè)節(jié)點(diǎn)都有一個(gè)對(duì)象字典。對(duì)象字典包含了描述這個(gè)設(shè)備和它的網(wǎng)絡(luò)行為的所有參數(shù)。
CANopen對(duì)象字典中的項(xiàng)由一系列子協(xié)議來(lái)描述。子協(xié)議描述對(duì)象字典中每個(gè)對(duì)象的功能、名字、索引、子索引、數(shù)據(jù)類型、讀/寫屬性,以及這個(gè)對(duì)象是否必需等,從而保證不同廠商的同類型設(shè)備兼容。
CANopen協(xié)議的核心描述子協(xié)議是DS301,包括CANopen協(xié)議應(yīng)用層及通信結(jié)構(gòu)描述,其他子協(xié)議都是對(duì)DS301協(xié)議描述文本的補(bǔ)充與擴(kuò)展。
CANopen協(xié)議包含許多子協(xié)議,其主要?jiǎng)澐譃橐韵?類:
1. 通信子協(xié)議
通信子協(xié)議(Communication Profile)描述對(duì)象字典的主要形式,以及對(duì)象字典中的通信對(duì)象和參數(shù)。這個(gè)子協(xié)議適用于所有的CANopen設(shè)備,其索引值范圍為0x1000~0x1FFF。
2. 制造商自定義子協(xié)議
對(duì)于在設(shè)備子協(xié)議中未定義的特殊功能,制造商可以在制造商自定義子協(xié)議(Manufacturer-specific Profile)中根據(jù)需求定義對(duì)象字典項(xiàng)。因此,這個(gè)區(qū)域?qū)Σ煌瑥S商來(lái)說(shuō),相同的對(duì)象字典項(xiàng)的定義不一定相同,其索引值范圍為0x2000~0x5FFF。
3. 設(shè)備子協(xié)議
設(shè)備子協(xié)議(Device Profile)為各種不同類型設(shè)備定義對(duì)象字典中的對(duì)象,其索引值范圍為0x6000~0x9FFF。
2.2 CANopen通信
在CANopen協(xié)議中主要定義網(wǎng)絡(luò)管理對(duì)象(NMT)、服務(wù)數(shù)據(jù)對(duì)象(SDO)、過(guò)程數(shù)據(jù)對(duì)象(PDO)、預(yù)定義報(bào)文或特殊功能對(duì)象4種對(duì)象。
2.2.1 網(wǎng)絡(luò)管理對(duì)象
網(wǎng)絡(luò)管理對(duì)象負(fù)責(zé)層管理、網(wǎng)絡(luò)管理和ID分配服務(wù),例如,初始化、配置和網(wǎng)絡(luò)管理。網(wǎng)絡(luò)管理中,同一個(gè)網(wǎng)絡(luò)中只允許有一個(gè)主節(jié)點(diǎn)、一個(gè)或多個(gè)從節(jié)點(diǎn),并遵循主/從模式。
2.2.2 服務(wù)數(shù)據(jù)對(duì)象
服務(wù)數(shù)據(jù)對(duì)象主要用于主節(jié)點(diǎn)對(duì)從節(jié)點(diǎn)的參數(shù)配置。服務(wù)確認(rèn)是SDO最大的特點(diǎn),為每個(gè)消息都生成一個(gè)應(yīng)答,以確保數(shù)據(jù)傳輸?shù)臏?zhǔn)確性。在一個(gè)CANopen系統(tǒng)中,通常CANopen從節(jié)點(diǎn)作為SDO服務(wù)器,CANopen主節(jié)點(diǎn)作為客戶端。客戶端通過(guò)索引和子索引能夠訪問(wèn)數(shù)據(jù)服務(wù)器上的對(duì)象字典,所以CANopen主節(jié)點(diǎn)可以訪問(wèn)從節(jié)點(diǎn)的任意對(duì)象字典項(xiàng)的參數(shù),并且SDO可以傳輸任何長(zhǎng)度的數(shù)據(jù)(當(dāng)數(shù)據(jù)長(zhǎng)度超過(guò)4字節(jié)時(shí),拆分成多個(gè)報(bào)文來(lái)傳輸)。
2.2.3 過(guò)程數(shù)據(jù)對(duì)象
過(guò)程數(shù)據(jù)對(duì)象用來(lái)傳輸實(shí)時(shí)數(shù)據(jù),其傳輸模型為生產(chǎn)者-消費(fèi)者模型,數(shù)據(jù)長(zhǎng)度被限制為1~8字節(jié)。
PDO通信對(duì)象具有如下特點(diǎn):
1. PDO通信沒(méi)有協(xié)議規(guī)定,PDO數(shù)據(jù)內(nèi)容由它的COB-ID定義。
2. 每個(gè)PDO在對(duì)象字典中用2個(gè)對(duì)象描述,分別是PDO通信參數(shù)和映射參數(shù)。
1) PDO通信參數(shù):定義該設(shè)備所使用的COB-ID、傳輸類型、定時(shí)周期。
2) PDO映射參數(shù):包含一個(gè)對(duì)象字典中的對(duì)象列表,這些對(duì)象映射到相應(yīng)的PDO,其中包括數(shù)據(jù)的長(zhǎng)度。對(duì)于生產(chǎn)者和消費(fèi)者,只有知道這個(gè)映射參數(shù),才能夠正確地解釋PDO的內(nèi)容。PDO內(nèi)容是預(yù)定義的,如果PDO支持可變PDO映射,那么可以通過(guò)SDO進(jìn)行配置。
3. PDO具有2種傳輸方式:同步傳輸和異步傳輸。
1) 同步傳輸:通過(guò)接收同步對(duì)象實(shí)現(xiàn)同步,按觸發(fā)方式又可分為非周期傳輸和周期傳輸。非周期傳輸由遠(yuǎn)程幀預(yù)觸發(fā),或者由設(shè)備子協(xié)議中規(guī)定的對(duì)象特定事件預(yù)觸發(fā)。周期傳輸則通過(guò)接收同步對(duì)象來(lái)實(shí)現(xiàn),可以設(shè)置1~240個(gè)同步對(duì)象觸發(fā)。
2) 異步傳輸:由特定事件觸發(fā)。按觸發(fā)方式又可分為2種:一種通過(guò)發(fā)送與PDO的COB-ID相同的遠(yuǎn)程幀來(lái)觸發(fā);另一種由設(shè)備子協(xié)議中規(guī)定的對(duì)象特定事件來(lái)觸發(fā)(如定時(shí)傳輸、數(shù)據(jù)變化傳輸?shù)?。
2.2.4 預(yù)定義報(bào)文或特殊功能對(duì)象
預(yù)定義報(bào)文或特殊功能對(duì)象為CANopen設(shè)備提供特定的功能,以方便CANopen主站對(duì)從站的管理。在CANopen協(xié)議中,已經(jīng)為特殊的功能預(yù)定義了COB-ID。主要有以下幾種特殊報(bào)文:
1. 同步報(bào)文(Sync)
主要實(shí)現(xiàn)整個(gè)網(wǎng)絡(luò)的同步傳輸,每個(gè)節(jié)點(diǎn)都以該同步報(bào)文作為PDO觸發(fā)參數(shù),因此該同步報(bào)文的COB-ID具有比較高的優(yōu)先級(jí)以及最短的傳輸時(shí)間。
2. 時(shí)間標(biāo)識(shí)報(bào)文(Time Stamp)
為每個(gè)節(jié)點(diǎn)提供公共的時(shí)間參考。
3. 緊急事件報(bào)文(Emergency)
當(dāng)設(shè)備內(nèi)部發(fā)生錯(cuò)誤時(shí)觸發(fā)該對(duì)象,即發(fā)送設(shè)備內(nèi)部錯(cuò)誤碼。
4. 節(jié)點(diǎn)/壽命保護(hù)報(bào)文(Node/Life Guarding)
主節(jié)點(diǎn)可通過(guò)節(jié)點(diǎn)保護(hù)方式獲取從節(jié)點(diǎn)的狀態(tài),從節(jié)點(diǎn)可通過(guò)壽命保護(hù)方式獲取主節(jié)點(diǎn)的狀態(tài)。
5. 啟動(dòng)報(bào)文(Boot up)
從節(jié)點(diǎn)初始化完成后向網(wǎng)絡(luò)中發(fā)送該對(duì)象,并進(jìn)入預(yù)操作狀態(tài)。
2.3 CANopen預(yù)定義連接集
為了減小簡(jiǎn)單網(wǎng)絡(luò)的組態(tài)工作量,CANopen定義了強(qiáng)制性的缺省標(biāo)識(shí)符(CAN-ID)分配表。這些標(biāo)識(shí)符在預(yù)操作狀態(tài)下可用,通過(guò)動(dòng)態(tài)分配可以修改它們。CANopen設(shè)備必須向它所支持的通訊對(duì)象提供相應(yīng)的標(biāo)識(shí)符。
CAN-ID分配表是基于11位CAN-ID的標(biāo)準(zhǔn)幀格式,劃分為4位功能碼和7位節(jié)點(diǎn)號(hào),如圖 2-2所示。

圖2-2 預(yù)定義連接集ID
Node-ID由系統(tǒng)集成商定義,每個(gè)CANopen設(shè)備都需要分配一個(gè)節(jié)點(diǎn)號(hào),節(jié)點(diǎn)號(hào)的范圍是1~127(0不允許被使用)。
預(yù)定義連接集定義了4個(gè)接收PDO,4個(gè)發(fā)送PDO,1個(gè)SDO(占用2個(gè)CAN-ID),1個(gè)緊急對(duì)象和1個(gè)節(jié)點(diǎn)錯(cuò)誤控制。支持無(wú)需確認(rèn)的NMT模塊控制服務(wù)、同步和時(shí)間標(biāo)識(shí)對(duì)象報(bào)文。缺省ID分配表如表 2-2所示。
表2-2 CANopen預(yù)定義主/從連接集CAN標(biāo)識(shí)符分配表
