引言 CAN總線由于具有實時性和可靠性高、組網成本低等優點,近年來在汽車工業、樓宇自動化、工廠自動化、機器人控制等領域得到廣泛應用。CANopen協議不僅定義了通信規范,而且為可編程系統、不同器件、接口等設備應用子協議定義了大量的行規。遵循CANopen協議開發出的設備能實現不同生產廠家的產品間的互操作。 要掌握CANopen協議,重點是對對象字典和設備模型的理解以及對4類通信對象的掌握。本文先對CANopen協議進行削析,再重點介紹在 PICl8F458單片機上開發基于CANopen協議的節點,最后通過溫度測控系統實驗驗證了系統信息傳遞的可靠性、準確性和實時性。 1 CANopen通信協議簡介 CANopen協議是CiA協會基于CAN總線定義的應用層協議之一,在各種控制系統中得到了廣泛應用。它以CAN芯片為硬件基礎,有效利用CAN芯片所提供的簡單通信功能來滿足工業控制網絡的復雜應用層協議要求。CANopen網絡是主從站(Master—Slave)結構,系統的運行由主站控制,主站可以對127個從設備進行控制,不同設備通過CAN總線進行連接組網。圖1為CANopen設備模型。CANopen通信協議接口用于提供在總線上收發通信對象的服務,不同CANopen設備間的通信都是通過交換通信對象來完成的。CANopen協議中定義了4種通信對象(通信模式),用于對不同作用的信息進行處理:NMT對象(網絡管理對象)、SDO對象(服務數據對象)、PDO對象(過程數據對象)、特殊功能對象。 ![]() 設備對象字典是CANopen協議的核心概念,位于CANopen設備模型中通信層和用戶應用層之間,為用戶應用層提供接口。它是一個結構標準化的、有序的對象組,描述了該設備使用的所有數據類型、通信對象和應用對象。基于CANopen協議的網絡系統中每一個設備都要實現一個唯一的對象字典,區別在于設備類型不同其內容則不同。對象字典中每個對象擁有一個唯一的16位主索引和8位子索引,由此實現對其中各種對象的訪問。對象字典在系統軟件設計中得以實現,然后使用標準化的EDS文件對其進行描述。 2 溫度測控系統的軟、硬件設計 2.1 溫度測控系統組成 圖2所示溫度測控系統包含3個節點,它們構成一個CAN網絡。傳感溫度節點發送測到的溫度,此節點由主芯片和溫度傳感器組成。溫度調節節點接收到從傳感溫度節點發送的溫度數據后,低于下限溫度加熱,高于上限溫度降溫,并發送調節狀態;此節點由主芯片、狀態顯示燈和空調設備組成。命令節點接收從傳感溫度節點發送的溫度和溫度調節節點發送的狀態在液晶屏上顯示,并有按鈕可以發送NMT對象,對整個系統進行控制;此節點由主芯片、液晶屏、狀態顯示燈和按鈕組成。 ![]() 針對系統的要求,選用PICl8F458單片機作為從節點的主芯片。它是Microchip公司的單片16位高性能微控制器,具有片內CAN控制器,CAN模塊符合CAN2.0B標準,帶有3個發送緩沖區、2個接收緩沖區、2個接收屏蔽寄存器、6個完全接收濾波器。CAN收發器采用 PCA82C250芯片,它具有高速穩定的差動發送和接收能力,可作為CAN協議控制器和物理總線接口。此外,為了便于調試和與主控制器的通信,系統中還擴展了RS232接口。 ![]() 對于各個節點都采用預定義連接集中規定的11位ID。它由4位功能碼和7位節點ID組成。其中各通信對象具體分配的COB—ID為NMT SERVICE一000、EMER—GENCY一080、TIMESTAMP一100、SYNC一080、TPD01—180、RPD01—200、 TPD02—280、RPD02—300、TSDO一580、RSDO一600、HEARTBEAT一700。 設定傳感溫度節點的ID為6,以TPDO對象方式發送測到的溫度。所以發送對象的COB—ID分別為TP—D02(200+6)、TSD() (580+6)、HEARTBEAT(700+6)、EMERGENCY(080+6),接收對象的COB—ID分別為NMT SERVICE(000)、RSD()(600+6)。 設定溫度調節節點的ID為7,以RPDO對象方式接收從傳感溫度節點發送的溫度,并以TPDO對象方式發送調節狀態。所以發送對象的COB—ID分別為 TPD01(180+7)、TSDO(580+7)、HEARTBEAT(700+7)、EMERGENCY(080+7),接收對象的COB—ID分別為NMT SERVICE(000)、RSDO(600+7)、RPDO2(280+6)。 設定命令節點的ID為8,以RPDO對象方式分別接收從傳感溫度節點發送的溫度和從溫度調節節點發送的調節狀態,也可用NMT對象方式發送NMT報文。所以發送對象的COB—ID分別為TSDO(580+8)、HEART—BEAT(700+8)、EMERGENCY(080+8)、NMT MAS—TER(000),接收對象的COB—ID分別為NMT SERVICE(000)、RSD0(600+8)、RPD02(280+6)、RPD01(180+7)。 2.2 節點對象字典的建立 對象字典的內容除了包括CANopen協議規定的必需項外,還包括調用的各功能模塊和參數設定項。它的正確配置和使用,是保證整個 CANopen網絡正常運行的核心,是節點實現其預定功能的必要保證。對象字典的組建采用C語言在頭文件中編寫,通過Struct(結構)語句實現對象字典內容的尋址。對象字典的規劃賦值設計按照CANopen協議規定的格式完成,每個節點的對象字典都具有相同的結構,但具體內容要根據不同的設備而定義,包含了描述這個設備和它網絡的所有參數。對象字典的操作是CANopen協議軟件的核心,通過對象字典實現網絡間參數的映射從而完成各種數據的處理,需要編寫對象字典解碼子函數、讀對象字典子函數和寫對象字典子函數。下面以溫度調節節點為例介紹對象字典的創建、賦值和具體操作。表1顯示了此節點中PDO的各個參數。 OD_ENTRY(0x3000,Ox00,ATTR_RW | ATTR_ROM,TempLo),(對象主索引3000-下限溫度)OD_ENTRY(0x3001,0x00,ATTR_RW|ATTR_ROM,TempHi),(對象主索引3001-上限溫度) OD_ENTRY(0x3100,0x00,ATTR_RO,Status),(對象主索引3100一狀態) OD_ENTRY(0x3200,0x00,ATTR_RWW,RemoteTemperature),(對象主索引3200-遠程溫度)#define ODD_RPDO_PAR_COB_ID_0 Ox40000286L(RPDO的COB-ID為0x286) OD_ENTRY(0x160l,0x00,ATTR_RO | ATTR_ROM,ODE_RPDO_Mapping_NoOfEntries),OD_ENTRY(0x1601,0x01,ATTR_RO|ATTR_ROM,ODD_RPDO_MAP_0_1, (RPDO映射參數描述) #define ODD_RPDO_MAP_0_1 0x32000010L(RPDO定位對象字典索引3200子索引00長度2) OD_ENTRY(0xlA00,0x00,ATTR_RO|ATTR_ROM,ODE_TPDO_Mapping_NoOfEntries), OD_ENTRY(0xlA00,0x01,ATTR_RO|ATTR_ROM,ODD_TPD0_MAP_0_l,(TPDO映射參數描述) #define ODD_TPDO_MAP_0_1 0x31000008L(TP-DO定位對象字典索引3100子索引00長度1) if(RemoteTemperature else{Status=0;}(在設定溫度范圍內,為保持狀態) 在此例中,PDO報文是在對象字典中用通信參數和映射參數來描述的。通信參數決定哪個COB—ID將被PDO使用,此例中RPD0的COB—ID為 286,TPDO的COB—ID為187。映射參數包含映射到PDO里的對象在對象字典中的索引和子索引,以及對象的數據長度。此例中映射到RPDO里的對象在對象字典中的索引為3200,子索引為OO,長度為2;映射到TPDO里的對象在對象字典中的索引為3100,子索引為00,長度為1。另外某些相關變量也由對象字典所描述,可以通過sD0對象傳輸方式進行下載修改或上傳觀察。此例中的上限溫度、下限溫度,就由對象字典主索引3000、子索引00和主索引3001、子索引00分別描述。 2.3 節點的CANopen協議的軟件實現 在節點上實現CANopen協議軟件,首先要實現節點接收報文和發送報文的功能。接收報文的過程是,一旦有接收中斷產生,就把CAN接收緩沖區接收到的數據和地址放到一內部陣列中,對接收到的報文進行分析,并送去執行相應的子函數(NMT報文接收處理子函數、SDO報文接收處理子函數、心跳報文接收處理子函數、SDO報文接收處理子函數),最后返回主程序。發送報文的過程是,把需要發送的變量放到對象字典里,再把它們映射封裝成相應的對象,最后將報文發送到總線上。 主程序按照通信流程編寫,模塊上電后先進行通信初始化。其首先初始化CANopen協議中的通信相關參數、對象字典、節點號,再初始化CAN控制器的硬件,包括單片機的內部寄存器、定時器、串行口、CAN控制器。通信初始化后自動進入節點初始化,并進行一些特定用戶的初始化。完成后,發送一個啟動報文自動進入預操作狀態。此時用戶的程序循環執行著,在每個循環里,調用接收報文1次。這個模塊用來檢查接收到的對象,并作相應的處理。在NMT報文到來之前一直持續在預操作狀態。在 這個狀態里,節點可以通過SD0被配置和設置參數,但是不允許發送PDO。在相應的NMT報文到來后,即收到啟動遠程節點命令后,進入操作狀態,在這個狀態就可以進行正常的通信了。在收到NMT報文,即停止遠程節點命令,節點進入了停止狀態,從而停止PDO和SDO通信。 3 實驗結果 在軟件設計中編寫了與上位機的通信模塊程序,可以將每個節點接收和發送報文的ID號、數據長度、數據轉發到串口,便于上位機進行觀測。 圖3為系統傳輸數據的過程,溫度傳感節點發送報文過程為發送自啟動報文后以周期為1 s發送心跳報文,以周期為100 ms發送PDO1報文,發送數據為傳感溫度(分別為19°,20°,…,21°…)。上限溫度和下限高溫都為20°時,溫度調節節點接收報文過程為接收到 NMT報文命令后進入操作狀態,不斷接收PDOl報文。溫度調節節點發送報文過程為發送自啟動報文后以周期為1 s發送心跳報文,以事件觸發方式發送PDOO報文(發送數據為工作狀態長度為1,當接收到的溫度低于20°時發送數據為02表示加熱,當接收到的溫度高于 20°時發送數據為01表示降溫,當接收的溫度為20°時發送數據為OO表示保持),狀態顯示燈不斷閃爍紅色、黃色、藍色。如在命令節點中發送SDO報文改變對象字典中的上限溫度和下限溫度,再觀察各節點變化。情況1,當上限溫度低于20°(為15°)時,溫度調節節點一直在降溫狀態,狀態顯示燈為紅色。情況2,當下限溫度高于20°(為25°)時,溫度調節節點一直在加熱狀態,狀態顯示燈為黃色,情況3,當上限溫度高于20°(為25°),下限溫度低于 20°(為15°)時,溫度調節節點一直在保持狀態,狀態顯示燈為藍色。命令節點在液晶顯示屏中顯示實時溫度,在狀態顯示燈中顯示實時狀態。 ![]() 命令節點進行NMT對象操作時再觀察各節點狀態:當按下按鈕1時,節點進入欲操作狀態;當按下按鈕2時,節點重啟。 從以上兩個實驗可以看出,整個系統在運行過程中達到了滿意的控制效果,實現了基于CANopen協議的對象數據的交換,通信傳輸理想。 結語 應用PIC18單片機自行開發的基于CANopen協議的節點,實現了對4種通信對象信息的通信處理,并通過測試驗證了系統信息傳遞的可靠性、準確性和實時性,很好地滿足了基于CANopen協議的溫度測控系統的要求;對于CANopen在國內的應用和普及,以及CAN網絡和驅動產品盡早和國際接軌,具有重要的意義。 參考文獻 1. 鄧遵義 CANopen 協議剖析及其在伺服電機控制中的實現 [期刊論文] -機電工程2007(24) 2. CANopen high-level protocol for CAN-bus H.Boterenbrood NIKHEF 2000 3. 馬凱歌 基于DSP 的CANopen通信協議的實現 [期刊論文] -微計算機信息2006 4. Microchip Technology Inc PICI8F458 英文手冊 2003 作者:廣西大學 蔣智康 宋春寧 宋紹劍 來源:單片機與嵌入式系統 2008(9) |