摘 要: 提出一種CAN總線與以太網(wǎng)互聯(lián)" title="互聯(lián)">互聯(lián)的系統(tǒng)設(shè)計方案,實現(xiàn)了CAN總線與以太網(wǎng)的數(shù)據(jù)互聯(lián)。
關(guān)鍵詞: 網(wǎng)關(guān) CAN總線? 以太網(wǎng)? 嵌入式? μC/OS-II
?
CAN總線是一種設(shè)備互聯(lián)的總線型控制網(wǎng)絡(luò),與其他現(xiàn)場總線相比,CAN總線的數(shù)據(jù)通信具有突出的可靠性、實時性" title="實時性">實時性和靈活性。這些特點使其可以滿足過程控制和制造業(yè)自動化的需求,因此被認為是最具發(fā)展前途的現(xiàn)場總線之一。但是,由于其收發(fā)器驅(qū)動能力的限制,約束了CAN總線的最遠直接傳輸距離和總線上可以掛接的最大節(jié)點數(shù),給系統(tǒng)組網(wǎng)帶來了一定的困難。另一方面,由于以太網(wǎng)的低成本、開放性、應(yīng)用軟硬件的支持以及強大的組網(wǎng)能力,目前已經(jīng)是應(yīng)用最廣泛的局域網(wǎng)絡(luò)技術(shù)。越來越多的工程師們開始采用CAN總線與以太網(wǎng)結(jié)合的技術(shù)。針對這一情況,本文提出一種CAN總線與以太網(wǎng)互聯(lián)的系統(tǒng)設(shè)計方案,實現(xiàn)CAN總線網(wǎng)和以太網(wǎng)的數(shù)據(jù)互聯(lián)。
1 系統(tǒng)結(jié)構(gòu)
CAN現(xiàn)場總線與以太網(wǎng)互聯(lián)系統(tǒng)的網(wǎng)絡(luò)架構(gòu)圖如圖1所示。

互聯(lián)網(wǎng)關(guān)的嵌入不僅使管理深入到控制現(xiàn)場,同時給系統(tǒng)組網(wǎng)帶來了很大方便,這主要體現(xiàn)在:
(1)增大了系統(tǒng)的最大CAN節(jié)點數(shù)。一個CAN子網(wǎng)" title="子網(wǎng)">子網(wǎng)在不接中繼器的條件下,最多可以掛接110個節(jié)點,而每個網(wǎng)關(guān)可以連接一個子網(wǎng),通過多個網(wǎng)關(guān)可以把多個子網(wǎng)聯(lián)系在一起,從而增加了系統(tǒng)的節(jié)點數(shù)。
(2)擴大了系統(tǒng)的組網(wǎng)范圍。CAN的直接通信距離只有10千米左右,系統(tǒng)按照現(xiàn)場區(qū)域和節(jié)點數(shù)構(gòu)建子網(wǎng),子網(wǎng)與子網(wǎng)通過以太網(wǎng)連接,從而突破了區(qū)域和距離的限制。
(3)實現(xiàn)了具有不同傳輸速度的現(xiàn)場總線子網(wǎng)的相互通信。網(wǎng)關(guān)提供一個友好的人機接口,用戶可以根據(jù)需要設(shè)置IP地址和CAN控制器的傳輸速率。
網(wǎng)關(guān)的應(yīng)用給系統(tǒng)帶來方便的同時,也付出了一定的代價。在設(shè)計中必須考慮實時性與安全性,以提高系統(tǒng)的整體效率。
(1)實時性。由于使用網(wǎng)關(guān),對數(shù)據(jù)的處理必須經(jīng)歷先存儲、再轉(zhuǎn)換、最后再發(fā)送的過程,這增加了存儲轉(zhuǎn)發(fā)延時。因此在設(shè)計中必須考慮系統(tǒng)的實時性,要求系統(tǒng)在存儲新接收到的數(shù)據(jù)后,立即啟動協(xié)議轉(zhuǎn)換和數(shù)據(jù)轉(zhuǎn)發(fā)任務(wù),盡量減小系統(tǒng)延時。
(2)安全性。若網(wǎng)關(guān)出現(xiàn)故障,會對CAN子網(wǎng)和以太網(wǎng)間的通信產(chǎn)生影響,甚至導(dǎo)致子網(wǎng)與整個系統(tǒng)的通信癱瘓。因此在硬件設(shè)計中,要盡量避免干擾等問題的出現(xiàn),軟件必須具備對可糾正錯誤及時作出反應(yīng)、并把錯誤信息返回給用戶的能力。
2 系統(tǒng)硬件設(shè)計
系統(tǒng)硬件設(shè)計分為三部分:CAN接口、以太網(wǎng)網(wǎng)絡(luò)接口、人機接口。
2.1 主控制器的選擇
主控制器采用Philips公司生產(chǎn)的ARM控制器LPC2292。LPC2292是一個基于實時仿真和跟蹤的16/32位ARM7TDMI-STM CPU,CPU內(nèi)核工作電壓為1.8V,引腳工作電壓為3.3V。
LPC2292嵌入256KB的高速Flash存儲器,無需外擴存儲器,完全可以滿足系統(tǒng)代碼的容量。獨特的加速結(jié)構(gòu)使32位代碼能夠在最大時鐘速率下運行,可實現(xiàn)TCP/IP" title="TCP/IP">TCP/IP協(xié)議棧中的ARP、TCP、UDP、ICMP等網(wǎng)絡(luò)協(xié)議。
LPC2292內(nèi)部集成兩個CAN控制器,以方便系統(tǒng)采用冗余設(shè)計。CAN控制器主要特性有:單個總線上的數(shù)據(jù)傳輸速率高達1Mbps;32位寄存器和RAM訪問;兼容CAN2.0B,ISO11898-1規(guī)范;全局驗收濾波器可以識別所有的11位和29位Rx標識符;驗收濾波器為選擇的標準標識符提供了FullCAN-style自動接收。
CPU外部靜態(tài)存儲控制器為CPU內(nèi)部系統(tǒng)總線與外部存儲器或外部I/O器件提供了一個接口。利用這種外部總線可以方便地與以太網(wǎng)網(wǎng)卡控制器連接。
2.2 CAN接口部分
考慮系統(tǒng)的安全性,CAN接口采用冗余設(shè)計。當(dāng)正常通道發(fā)生故障,可自動調(diào)用冗余通道進行傳輸。如果冗余通道也發(fā)生故障,則進入故障處理。其硬件接口如圖2所示。LPC2292兩路通道分別通過高速總線驅(qū)動器TJA1050與總線相連,總線驅(qū)動器采用帶隔離的DC/DC單獨供電,不僅實現(xiàn)了兩路通道之間的電氣隔離,也實現(xiàn)了網(wǎng)關(guān)與總線之間的電氣隔離。
2.3 網(wǎng)絡(luò)接口部分
網(wǎng)卡控制器采用臺灣RETACK公司的10Mbps以太網(wǎng)控制芯片RTL8019。RTL8019支持全雙工工作模式,軟件兼容8位或16位的NE2000模式;內(nèi)部集成DMA控制器、ISA總線控制器以及16KBRAM、網(wǎng)絡(luò)PHY收發(fā)器等。其與LPC2292的連接如圖2所示。RTL8019使用LPC2292外部存儲控制的BANK3部分,其數(shù)據(jù)地址范圍為:0x83400000~0x8340001F。RTL8019的工作電壓為+5V,而LPC2292的引腳工作電壓為3.3V,所以還應(yīng)在連接線上串聯(lián)470Ω的保護電阻。網(wǎng)絡(luò)傳輸線采用雙絞線。
2.4 人機接口
硬件部分還包括LED數(shù)碼管顯示和鍵盤。LED用來顯示工作狀態(tài),鍵盤用來根據(jù)具體情況修正總線傳輸速率和網(wǎng)關(guān)的IP地址。
3 軟件設(shè)計
3.1 引入RTOS
網(wǎng)關(guān)對系統(tǒng)的實時性要求比較高,若采用傳統(tǒng)的前后臺設(shè)計方法,設(shè)計會顯得過于復(fù)雜,且實時性不能保證。解決這個問題的最好方法是采用實時操作系統(tǒng)RTOS。μC/OS-II" title="C/OS-II">C/OS-II操作系統(tǒng)是一種源代碼公開的嵌入式實時操作系統(tǒng),具有代碼短小精悍、簡單易學(xué)的特點。針對網(wǎng)關(guān)的設(shè)計,這是一個理想的選擇。
μC/OS-II完全是占先式的實時內(nèi)核,基于優(yōu)先級。即總是讓就緒態(tài)中優(yōu)先級最高的任務(wù)先運行,因此實時性比非占先的內(nèi)核要好。其大部分代碼是用C語言編寫的,可移植性強。
3.2 系統(tǒng)構(gòu)成
嵌入式網(wǎng)關(guān)的主要功能是進行以太網(wǎng)數(shù)據(jù)報文與CAN數(shù)據(jù)幀之間的協(xié)議轉(zhuǎn)換,實現(xiàn)以太網(wǎng)與CAN總線的互聯(lián);其次是根據(jù)應(yīng)用環(huán)境,通過人機交互接口改變網(wǎng)關(guān)的IP地址和CAN總線的傳輸速率。整個嵌入式系統(tǒng)的構(gòu)成如圖3所示。任務(wù)設(shè)計的前期工作有:
(1)實時操作系統(tǒng)的移植:μC/OS-II絕大部分代碼是用C語言編寫的,可移植性強,可以在大多數(shù)8位、16位、32位以至64位微處理器、微控制器、數(shù)字信號處理器(DSP)上運行。μC/OS-II在LPC2292上的移植可參考文獻[1]。
(2)TCP/IP協(xié)議和CAN協(xié)議的嵌入:μC/OS-II操作系統(tǒng)只包含了實時內(nèi)核、任務(wù)管理、時間管理、任務(wù)間的通信同步(信號量、郵箱、消息隊列)和內(nèi)存管理等功能,用戶必須根據(jù)需要添加相應(yīng)的功能模塊。網(wǎng)關(guān)的設(shè)計將TCP/IP和CAN協(xié)議嵌入到操作系統(tǒng)中,并提供API接口函數(shù)供用戶調(diào)用。

3.3 系統(tǒng)實現(xiàn)
采用RTOS使整個設(shè)計簡單、易調(diào)試,各個任務(wù)相互獨立且具有不同的優(yōu)先級來保證緊急任務(wù)及時響應(yīng),從而有效地對任務(wù)進行調(diào)度。系統(tǒng)軟件設(shè)計由操作系統(tǒng)和一系列用戶應(yīng)用程序構(gòu)成。
主函數(shù)是程序首先執(zhí)行的一個函數(shù),主要實現(xiàn)系統(tǒng)硬件和操作系統(tǒng)的初始化,該函數(shù)永遠不返回。硬件初始化包括中斷、鍵盤、顯示等初始化;操作系統(tǒng)初始化包括任務(wù)控制塊、事件控制塊的初始化,而且在啟動多任務(wù)調(diào)度之前,必須至少創(chuàng)建一個任務(wù)。此系統(tǒng)創(chuàng)建了一個啟動任務(wù),主要負責(zé)時鐘的初始化和啟動、中斷的啟動、CAN控制器的初始化與啟動、端口與IP地址的初始化、RTL8019的初始化與啟動,并且對各個應(yīng)用任務(wù)進行了劃分。在交出CPU的使用權(quán)后,自做空閑處理。
(1)任務(wù)的劃分
要完成多任務(wù)系統(tǒng)的各種功能,必須對任務(wù)進行劃分。本程序根據(jù)各個任務(wù)的重要性和實時性,把整個模塊分成7個具有不同優(yōu)先級的應(yīng)用任務(wù),即系統(tǒng)監(jiān)控、CAN數(shù)據(jù)發(fā)送、鍵盤掃描、以太網(wǎng)數(shù)據(jù)發(fā)送、協(xié)議轉(zhuǎn)換、LED顯示、系統(tǒng)配置。表1為任務(wù)劃分表。

除了7個主要應(yīng)用任務(wù)外,還有兩個中斷服務(wù)子程序。一個是時鐘節(jié)拍中斷,用于提供周期性信號源;另一個是接收中斷,用于把接收到的數(shù)據(jù)寫入緩沖區(qū)。
(2)任務(wù)的具體實現(xiàn)
任務(wù)劃分后,各任務(wù)便具有獨立的堆??臻g,彼此爭奪CPU的使用權(quán)。一旦獲得CPU的使用權(quán),就會獨立運行,完成特定的功能。
CAN總線通信模塊包括數(shù)據(jù)傳輸和總線管理兩部分。數(shù)據(jù)傳輸實現(xiàn)的功能有CAN初始化、CAN報文發(fā)送和CAN報文接收。CAN初始化及報文的接收在啟動任務(wù)與中斷服務(wù)程序中實現(xiàn),CAN報文發(fā)送和總線管理作為一個單獨的任務(wù)獨立運行??偩€管理功能塊的主要功能是總線檢測,判斷一路總線是否良好。如否,則進入另一路總線檢測;如果冗余總線良好,則采用冗余總線通信。CAN數(shù)據(jù)發(fā)送任務(wù)需要系統(tǒng)調(diào)度器通知是否有待發(fā)送數(shù)據(jù)進入發(fā)送隊列,任務(wù)的實現(xiàn)如圖4所示。
以太網(wǎng)通信模塊由以太網(wǎng)數(shù)據(jù)收發(fā)功能塊和數(shù)據(jù)協(xié)議管理功能塊構(gòu)成。數(shù)據(jù)的收發(fā)功能塊主要實現(xiàn)RTL8019的初始化、數(shù)據(jù)報文的發(fā)送與接收。同理,RTL8019的初始化在系統(tǒng)的啟動任務(wù)中實現(xiàn)。數(shù)據(jù)的接收在RTL8019的中斷服務(wù)程序中實現(xiàn)。數(shù)據(jù)協(xié)議管理主要實現(xiàn)對接收數(shù)據(jù)報文的解析及給待發(fā)送數(shù)據(jù)添加協(xié)議報頭。以太網(wǎng)數(shù)據(jù)發(fā)送與協(xié)議管理分別作為獨立任務(wù)運行。

以太網(wǎng)數(shù)據(jù)發(fā)送任務(wù)同樣需要系統(tǒng)調(diào)度器通知發(fā)送隊列中是否有待發(fā)送數(shù)據(jù)。若沒有數(shù)據(jù)發(fā)送,則將該任務(wù)掛起,系統(tǒng)運行其他任務(wù)。以太網(wǎng)數(shù)據(jù)發(fā)送任務(wù)主要對RTL8019進行操作,根據(jù)RTL8019的狀態(tài),將發(fā)送隊列中數(shù)據(jù)通過DMA傳送到8019的發(fā)送緩沖區(qū),啟動發(fā)送,并根據(jù)發(fā)送結(jié)果對發(fā)送隊列指針調(diào)整。
以太網(wǎng)協(xié)議管理即協(xié)議轉(zhuǎn)換任務(wù)在用戶數(shù)據(jù)與8019驅(qū)動需要的數(shù)據(jù)報文之間進行協(xié)議轉(zhuǎn)換。TCP/IP協(xié)議為四層模型:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層和數(shù)據(jù)鏈路層,每層具有不同的功能,并有相應(yīng)的子協(xié)議,層與層之間在邏輯上相互獨立。在編程時,可以直接調(diào)用嵌入的TCP/IP協(xié)議的API函數(shù),對數(shù)據(jù)報文進行分層。該任務(wù)對從8019傳過來的數(shù)據(jù)處理過程如圖5所示:不同的子協(xié)議具有不同的功能號,任務(wù)根據(jù)功能號對協(xié)議進行區(qū)別。將用戶數(shù)據(jù)傳遞給8019驅(qū)動的示意圖則為圖5的逆序表示。
(3)任務(wù)間的同步與調(diào)度
通常多任務(wù)操作系統(tǒng)的任務(wù)不同于一般的函數(shù),它是一個無限循環(huán),而且沒有返回值。如果沒有更高優(yōu)先級的任務(wù)進入就緒態(tài),當(dāng)前任務(wù)不會放棄對CPU的使用權(quán)。為了實現(xiàn)操作系統(tǒng)的正常運行和有關(guān)事件的同步,必須正確處理任務(wù)間的通信和事件標志的設(shè)置。系統(tǒng)的功能結(jié)構(gòu)如圖6所示。
各任務(wù)具有不同的優(yōu)先級,通過調(diào)用系統(tǒng)掛起函數(shù)或延時函數(shù),可以啟動具有更高優(yōu)先級的進入就緒態(tài)的任務(wù)。高優(yōu)先級的任務(wù)(例如1、2、3、4號任務(wù))由于申請某個資源而發(fā)生阻塞,進入掛起態(tài)。系統(tǒng)調(diào)度器啟動低優(yōu)先級的任務(wù),通過對延時參數(shù)的設(shè)置,每隔一定時鐘節(jié)拍就啟動鍵盤掃描或LED顯示任務(wù)。如果其中有任何一事件發(fā)生就啟動相關(guān)的任務(wù)。這個過程通過信號量的通信機制實現(xiàn)。對每個事件分配一個信號量,一旦事件發(fā)生就啟動信號量的等待任務(wù)列表中進入就緒態(tài)的任務(wù),從而保證任務(wù)與事件同步。
在嵌入式硬件平臺的基礎(chǔ)上,用μC/OS-II實時操作系統(tǒng)開發(fā)應(yīng)用程序有其獨到之處,用戶可以直接利用系統(tǒng)的接口函數(shù)編寫應(yīng)用程序,毋需另行開發(fā)。這極大方便了用戶編程,縮短了軟件的開發(fā)周期,提高了開發(fā)效率?;贏RM LPC2292 CAN總線和以太網(wǎng)間的網(wǎng)關(guān),在實驗調(diào)試過程中,運行狀況良好,工作穩(wěn)定。
參考文獻
1 周立功.ARM微控制器基礎(chǔ)與實戰(zhàn).北京:北京航空航天大學(xué)出版社,2003
2 Jean.Labrosses著,邵貝貝譯.嵌入式實時操作系統(tǒng)μC/OS-II.北京:北京航天航空大學(xué)出版社,2003
3 饒運濤.現(xiàn)場總線CAN原理與應(yīng)用技術(shù).北京:北京航空航天大學(xué)出版社,2003
4 莫傳孟.基于嵌入式系統(tǒng)μC/OS-II的雙CAN通信構(gòu)件.微計算機信息,2004;20(3)
5 Jean J.Labrosses著,袁勤勇譯.嵌入式系統(tǒng)構(gòu)件.北京:機械工業(yè)出版社,2002
6 村三公保.TCP/IP網(wǎng)絡(luò)試驗程序篇.北京:科學(xué)出版社,2003



