賈文超, 王競恒, 劉柏松, 張 嘉
(1.長春工業大學電氣與電子工程學院,吉林長春 130012;2.長春天然氣有限責任公司,吉林長春 130033)
CANopen是CAN總線通信模型中的應用層協議。其可靠性、實時性、抗干擾性、容錯性等多方面優勢明顯,CAN總線和CANopen協議已經成為汽車工業、工廠自動化、分布式控制系統等眾多領域的應用標準[1]。CANopen協議定義了完備的設備模型,包括標準的通信協議、對象字典和設備應用子協議。其中,通信協議遵循CiA DS301協議,針對不同的設備CANopen制定了不同設備的應用子協議。這些子協議已經得到廣泛的認可并成為行業規范。CANopen完備的體系結構保證了不同廠商產品之間互聯的兼容性。
CANopen包括3個主要組成部分:通信模型(Communication)、對象字典(Object Dictionary)和設備子協議。文中對CANopen協議的各部分進行了詳細的分析,重點講述利用dsPIC30F4011單片機建立符合CANopen協議的從站節點,通過試驗對數據進行分析和驗證[2]。
在CANopen協議推出之前,歐洲公司推出了一個名為CAL的CAN總線高層協議。CAL定義了4種CAN總線應用層功能:CMS(基于CAN的報文應用),NMT(網絡控制),DBT(動態分配),LMT(層參數管理)。由于CAL對CMS對象的內容沒有進行規定,而CANAopen對其進行了定義。CANopen基于CAL的架構應用了CAL通訊和服務協議的子集。
CANopen網絡遵循主從結構(masterslave),系統有且只有一個NMT主站,NMT主站對所有的從站進行狀態控制。一條CAN總線上最多可有128個節點,其中0號地址節點為NMT主站,其余為NMT的從站,不同設備可通過CAN總線進行組網。CANopen設備模型如圖1所示[3]。

圖1 定位系統結構圖
CANopen通信協議遵循DS301標準,每一個節點都有一個狀態機,NMT主站可通過發送相應對象的報文使從站工作在不同的狀態,節點也可在特殊情況下進行狀態的轉換。在應用層面上不同的節點之間以發送通信對象的方式實現通信,主要的通信對象有NMT,PDO,SDO和特殊功能對象。其中PDO用于實時的數據傳遞,SDO用于訪問對象字典,NMT用于發送主站管理命令。
對象字典(OD:Object Dictionary)是CANopen的核心,不同的設備其對象字典的定義是不同的。實際上,OD是一個有序的對象組:對象用一個16位的索引進行尋址,同時,每個索引使用一個8位的子索引來尋址數據結構中的單個元素。在軟件編程過程中,可以定義一個結構體數組以實現對象字典。
CANopen協議從站硬件的核心是一片MICROCHIP公司生產的dsPIC30F4011芯片,該芯片具有24位寬的指令,16位寬的數據總線,48K的程序存儲空間,2K的RAM,1K的EEPROM,帶有17位*17位的硬件乘法器,性能優越,可滿足高頻率、高精度的要求。此外,dsPIC30F4011外設的功能豐富,帶有QEI模塊、PWM模塊、A/D模塊,以及UART,SPI,I2C,CAN等通信接口。
硬件設計分為3個部分:CAN通信模塊、CPU控制、外圍I/O。控制器模塊和CAN總線收發器之間使用高速光耦進行光電隔離,避免了模塊之間的相互干擾,具有良好的電磁兼容性。CANopen節點硬件框圖如圖2所示。
dsPIC30F4011片內外設含2個CAN控制器模塊,實現了CAN2.0A/B協議。設置C1NTE中斷使能寄存器的值,可使能或屏蔽相應中斷,并通過讀取C1INTF中斷標志寄存器的值來判斷當前中斷的中斷源。
PCA82C25對CAN總線提供差動發送、差動接收功能,是CAN協議控制器和物理總線的接口。PCA82C250完全符合“ISO11898”標準,最高速達1Mbps,具有抗瞬間干擾和熱保護的能力,可連接110個節點。有3種工作模式可供選擇:高速、待機、斜率控制。
使用3個旋轉撥碼開關對CAN總線的波特率和CANopen從站的節點地址進行設置;使用2個LED燈指示CANopen從站的運行狀態和錯誤警報。預留QEI模塊、PWM模塊、AD模塊等I/O。

圖2 CANopen節點硬件框圖
軟件設計分為CANopen通訊對象的定義、對象字典的創建以及設備子協議3個部分軟件實現。節點標識符分配采用CANopen的預定義連接集。每個對象的標識符有兩部分組成:功能碼和節點ID。
CANopen節點通信對象見表1。

表1 CANopen節點通信對象
設置節點地址,發送的對象標識符為:功能碼+節點ID。節點地址的范圍為1~127,下面以節點地址06進行說明。NMT對象為主站發送的網絡管理命令000H;SYNC對象標識符為080H,當從站收到一個SYNC報文時,發送一個同步報文;TPOD1對象的標識符為(180+6)H,發送報文的內容為實時數據;RPDO1對象標識符為(200+6)H,用于接受實時數據。SDO對象采用服務器/客戶的通信模式,分為加速傳輸和分段傳輸兩種傳輸機制。一個客戶的請求一定有來自服務器的應答,例如,如果想訪問地址為06這個節點的對象字典,那么訪問的節點就是一個客戶,標識符為600+節點地址,06節點做為一個服務器,標識符為(580+6)H;EMCY對象為緊急對象,在節點發生錯誤時發送緊急報文,緊急報文包含了錯誤代碼和錯誤信息,標識符為(080+6)H;除此之外,還有一個NMT錯誤控制對象,它通過發送心跳報文來報告節點所處的狀態,標識符為(700+6)H。
對象字典的有關范圍在0x1000~0x9FFF之間,索引值低于0x0FFF的范圍僅僅是一些數據類型的定義。對象字典描述了節點設備和它的網絡行為的所有參數。一個節點的對象字典是在電子數據文檔(EDS)中或記錄在紙上。一個標準的對象字典實體的格式如下[3]:

索引 子索引 對象 名稱 類型 屬性 訪問類型
不同設備對象字典的定義是不同的,DS301對通訊部分的對象字典做了詳細的說明,有些實體的定義是強制性的。對象字典大體分為3個部分:
1)通訊子協議區(0x1000~0x1FFF),描述了設備的類型、錯誤寄存器、支持PDO參數等。對于不同的設備子協議來說,其定義的PDO數量可能是不同的。
2)制造商特定子協議區(0x2000~0x5FFF),設備的制造商可以自行定義所需的實體。
3)標準的設備子協議區(0x6000~0x9FFF),實體的定義必須符合標準的設備子協議,如符合DS401,DS406等。
程序中對象字典可通過一個結構體數組實現,儲存在單片機的非易失性存儲器中。具體形式為:

其中,pData的值為EEPROM的地址,對象字典的實體數據值存放在EEPROM中。
以設備子協議DS401為例說明對象字典的建立:首先對對象字典中的內容在頭文件中進行預定義,例如屬性、實體內容。

索引為0x1A00H中映射PDO參數預定義:

這樣在對象字典實體的定義中,可用相應的預定義的名稱代替屬性代碼和數據值。
定義實體的具體格式為:

PDO1通信參數設置見表2[4]。

表2 PDO1通信參數設置
其在程序中的實體定義為:


PDO1映射參數設置見表3。

表3 PDO1映射參數設置
程序分為3個部分:初始化、主程序、中斷。具體流程如圖3所示。

圖3 CANopen節點流程
程序的初始化包括單片機硬件模塊的初始化、用戶程序的初始化設置、復位通信節點、中斷的初始化設置。主程序包括外圍接口的檢測,節點地址和波特率的輸入,判斷節點工作狀態,數據的采集和發送流程[5]。
初始化完成后程序發送一個BOOT-UP報文,并進入預操作狀態,當收到NMT主站命令后進入操作狀態。報文的接收和發送是通過中斷進行的,當CAN模塊接收到報文后即產生接收中斷,程序根據報文的標識符來判斷接收到報文的對象種類,進行報文長度和數據的錯誤檢測,然后,復制到相應的接收數字中并置位接收報文的標志位[6]。當有新報文發送而CAN模塊正被占用時,新報文會被存入發送緩沖數組并置位新標志位和新報文計數器,當前報文發送完后即進入發送中斷,程序檢查新報文標志位并將計數器減1,隨后進行報文發送直到計數器為0。
PDO報文和心跳報文是以事件觸發模式發送的,事件為1s定時發送,定時器設置為1ms中斷,每次中斷后計數器加1,當計數器計滿1 000個數后進行PDO報文和心跳報文的發送[7-8]。
搭建CAN總線網絡,上位機由一臺PCICAN卡實現,通過軟件實現數據的收發試驗,搭建實驗板,對PIC單片機進行在線調試,對單片機端口的I/O量進行傳送,結果見表4[4]。

表4 節點傳輸數據
節點在上電后進入預操作狀態,心跳報文發送的狀態代碼為0x7F。從站接收NMT,主站發送網絡控制命令,進入操作狀態,進行PDO報文的發送,心跳報文顯示了節點工作在操作狀態。
文中針對分布式網絡系統,應用高性能的16位PIC單片機實現了一種CANopen協議的從站節點,具有較高的可靠性和通用性。試驗結果表明,系統傳輸的數據精確、有效,有較強的抗干擾性,并且降低了系統成本,易于實現調試和擴展。此外,CANopen從站有利于國內自主開發智能型從站設備。
[1] 饒運濤,鄒繼軍,鄭勇蕓.現場總線CAN原理與應用技術[M].北京:北京航空航天大學出版社,2003:379-403.
[2] 梁濤,張江濤,孫鶴旭,等.CANOPEN總線智能多路溫度采集從站的研制[J].儀表技術與傳感器,2009(10):61-63.
[3] Ci A.CANopen:Application layer and communication profile[Z].DraftDtandard 301,2002.
[4] Ci A.CANopen:Device Profile for Generic I/O Modules[Z].CiA Draft Standard 401,2002.
[5] 孫樹文,楊建武,張慧慧,等.基于CANopen協議的分布式控制系統I/O從站設計[J].計算機測量與控制,2007,15(12):1706-1707.
[6] 劉永木,李慧,付志勇.CAN總線系統節點模塊的一種設計[J].長春工業大學學報:自然科學版,2002,23(3):16-18.
[7] 李秋菊,田秋艷.基于CAN總線的車身控制系統設計[J].長春工業大學學報:自然科學版,2008,29(2):226-229.
[8] 戴宏亮.基于CAN總線的實時數據采集系統[J].長春工業大學學報:自然科學版,2003,24(4):53-55.