基于LPC2294的CAN與以太網(wǎng)網(wǎng)關(guān)互聯(lián)的設(shè)計
2 軟件設(shè)計
2.1 報文結(jié)構(gòu)
CAN總線與以太網(wǎng)互聯(lián)的軟件設(shè)計主要包括從以太網(wǎng)中提取CAN數(shù)據(jù)和將CAN總線的數(shù)據(jù)轉(zhuǎn)換成以太網(wǎng)的數(shù)據(jù)。其中,CAN報文結(jié)構(gòu)可分為兩種不同的幀格式,而兩種幀格式的區(qū)別在于其標(biāo)識符的長度不同:標(biāo)準(zhǔn)幀中有11位標(biāo)識符,擴展幀中有29位標(biāo)識符。本設(shè)計中采用的是擴展幀,且在本網(wǎng)關(guān)模塊收到CAN板卡的報文時,需按上述以太網(wǎng)數(shù)據(jù)傳輸報文格式對CAN數(shù)據(jù)進(jìn)行封裝及打包并通過以太網(wǎng)發(fā)送。在此過程中不必對CAN報文的13 Byte數(shù)據(jù)進(jìn)行高低位轉(zhuǎn)換和移位處理,采用透明轉(zhuǎn)換方式。便可減少數(shù)據(jù)解析及處理的時間,并提高了數(shù)據(jù)在傳輸過程中的可靠性。本文引用地址:http://www.butianyuan.cn/article/201610/306066.htm
如圖3所示,該網(wǎng)關(guān)中規(guī)定的以太網(wǎng)幀格式包括5部分,按照封裝的先后順序分別為:封裝的數(shù)據(jù)(如本系統(tǒng)中的CAN數(shù)據(jù)幀等)、自定義UDP首部、標(biāo)準(zhǔn)UDP/TCP首部、IP首部、以太網(wǎng)首部和最終校驗。本系統(tǒng)中主要采用的是UDP協(xié)議,目的是為了自定義控制字來區(qū)別不同類型的報文,包括有:CAN數(shù)據(jù)報文、時統(tǒng)報文、工作狀態(tài)請求報文、心跳報文及設(shè)備故障診斷信息報文。其中時統(tǒng)報文是在開機時或每30分鐘系統(tǒng)發(fā)送的對時請求。工作狀態(tài)報文是在各設(shè)備開機或復(fù)位并正常工作后自動發(fā)送的,還有收到詢問報文或狀態(tài)改變后發(fā)送,主要發(fā)送時戳和設(shè)備ID信息。心跳報文是在各設(shè)備開機或復(fù)位并正常工作后,每5 s周期發(fā)送,作用是通知其所在的網(wǎng)絡(luò),是否工作狀態(tài)正常。設(shè)備故障診斷信息報文是當(dāng)接收到故障診斷請求報文或網(wǎng)關(guān)根據(jù)CAN板卡數(shù)據(jù)接收情況,自行檢測到網(wǎng)關(guān)箱內(nèi)該板卡故障情況的變化,一般網(wǎng)關(guān)在30分鐘內(nèi)未收到參數(shù)設(shè)置報文中指定的CAN板卡對應(yīng)節(jié)點的數(shù)據(jù)和遠(yuǎn)程幀等,可認(rèn)定此節(jié)點故障,并發(fā)送故障信息報文。這增添了系統(tǒng)的一些管理信息,根據(jù)不同的報文類型完成系統(tǒng)不同的通信功能。自定義UDP封裝格式如圖4所示。
在自定義UDP封裝格式中,字節(jié)0~3為固定的幀頭信息,用以識別本網(wǎng)關(guān)模塊的數(shù)據(jù)報信息,無論是CAN報文、時統(tǒng)報文或工作狀態(tài)請求報文均使用該格式,若不符合該幀頭的數(shù)據(jù)報網(wǎng)關(guān)模塊不進(jìn)行處理。需注意的是,第20 bit開始才是真正的數(shù)據(jù),每個信息單元均有各自的序號、標(biāo)識和長度等信息。其中信元的序號表示該信元在UDP數(shù)據(jù)報中的位置;標(biāo)識代表信息單元內(nèi)報文的類型。
2.2 程序設(shè)計
網(wǎng)關(guān)模塊的主要功能是以太網(wǎng)數(shù)據(jù)包與CAN數(shù)據(jù)幀之間的格式相互轉(zhuǎn)換,進(jìn)而完成以太網(wǎng)和CAN網(wǎng)絡(luò)間通訊。本模塊使用嵌入式μC/OS—II作為操作系統(tǒng),通過裁剪、移植使其能順利運行于LPC2294控制器。另外,在系統(tǒng)中移植了TCP/IP協(xié)議的核心功能函數(shù),并編寫了6個任務(wù)函數(shù),使其分工合作實現(xiàn)了模塊的各項功能,并通過μC/OS—II系統(tǒng)的任務(wù)調(diào)度管理機制來進(jìn)行系統(tǒng)資源的分配。
系統(tǒng)首先建立設(shè)備初始化任務(wù)Task0,將該任務(wù)函數(shù)主要完成上電自檢,兩路CAN故障自檢,網(wǎng)口斷線檢測,本機IP、兩路CAN波特率及兩路網(wǎng)口等網(wǎng)關(guān)參數(shù)的初始化。在完成以上工作后,創(chuàng)建5個子任務(wù),按優(yōu)先級由高到低依次為TaskB、TaskC、TaskF、TaskD、TaskE的5個子任務(wù)的具體功能如下:
TaskB:主要功能為接收UDP報文并解析,下發(fā)至CAN;若接收到時統(tǒng)報文,按照協(xié)議解析,并將時戳信息寫入時鐘芯片。
TaskC:主要功能為接收TCP報文,按照協(xié)議解析并下發(fā)到CAN。
TaskD:完成接收CAN1口或CAN2口的數(shù)據(jù),根據(jù)規(guī)定的傳輸方式將數(shù)據(jù)封裝成報文格式,并發(fā)送至以太網(wǎng)。
TaskE:完成接收CAN1口或CAN2口的數(shù)據(jù),并按照TCP傳輸方式,將數(shù)據(jù)封裝并發(fā)送到以太網(wǎng)。
TaskF:主要功能為定時發(fā)送特殊報文,如:心跳報文、時統(tǒng)報文、工作狀態(tài)請求報文及設(shè)備故障診斷信息報文等,完成網(wǎng)關(guān)模塊的工作狀態(tài)檢測及參數(shù)配置等功能。
5個子任務(wù)創(chuàng)建完成后,TaskB和TaskC進(jìn)入阻塞狀態(tài),等待各自的信號量RecUdpQFlag和RecTcpQ一Flag,由于這兩個任務(wù)的優(yōu)先級較高,說明網(wǎng)關(guān)模塊優(yōu)先轉(zhuǎn)換以太網(wǎng)向CAN總線方向的數(shù)據(jù)。因此,當(dāng)以太網(wǎng)中有數(shù)據(jù)到來時根據(jù)報文的類型可得到相應(yīng)的信號量,TaskB或TaskC立即進(jìn)入就緒狀態(tài)等待執(zhí)行,若當(dāng)前執(zhí)行的任務(wù)優(yōu)先級低于這兩個任務(wù),TaskB和TaskC可進(jìn)行搶占執(zhí)行。當(dāng)網(wǎng)關(guān)模塊未收到以太網(wǎng)數(shù)據(jù)或處理完成后,任務(wù)函數(shù)TaskF檢測模塊的定時器,判斷是否需要發(fā)送工作狀態(tài)報文和心跳報文等特殊報文。執(zhí)行完成后,判斷CAN節(jié)點是否有數(shù)據(jù),并選擇用UDP或TCP方式發(fā)送到以太網(wǎng),即選擇執(zhí)行TaskD或TaskE,完成CAN向以太網(wǎng)方向的數(shù)據(jù)傳輸過程,在此期間允許TaskB和TaskC進(jìn)行搶占執(zhí)行。系統(tǒng)通過調(diào)度這5個任務(wù)函數(shù)完成以太網(wǎng)數(shù)據(jù)包與CAN數(shù)據(jù)幀間的格式轉(zhuǎn)換與傳輸,該程序流程如圖5所示。
3 測試
將該上位機IP地址設(shè)置為192.1.1.11,打開網(wǎng)關(guān)參數(shù)設(shè)置界面對一些參數(shù)進(jìn)行設(shè)置,如:網(wǎng)關(guān)參數(shù)回復(fù)IP地址、網(wǎng)關(guān)參數(shù)回復(fù)端口、網(wǎng)關(guān)模塊IP地址、網(wǎng)關(guān)接收端口號和CAN數(shù)據(jù)目標(biāo)IP地址等參數(shù)。隨后將CAN總線數(shù)據(jù)報文測試軟件ZLGCANTest打開,設(shè)置CAN總線的波特率為250 khit·s-1,將CAN報文發(fā)出后用ZLGCAN—Test、TcpUdp測試工具及EtherPeek NX軟件來查看網(wǎng)絡(luò)的通信情況。圖6便是由ZLGCANT est軟件所得到的,從圖中可知,CAN發(fā)送數(shù)據(jù)的幀類型是擴展幀,幀格式是數(shù)據(jù)幀,幀ID為0x0000 0000,每個CAN協(xié)議中發(fā)送8 bit的數(shù)據(jù)。而圖7是通過TcpUdp測試工具得到的數(shù)據(jù),并已在圖中標(biāo)出,此報文頭由Etherner協(xié)議報文頭、IP協(xié)議報頭、UDP協(xié)議報頭和自定義UDP報頭組成,并從自定義UDP報頭中的報文標(biāo)識可判別出CAN報文,而后面的數(shù)據(jù)正是圖6中CAN報文中的13 bit數(shù)據(jù),即對CAN報文采用透明轉(zhuǎn)換方式,將CAN網(wǎng)絡(luò)數(shù)據(jù)成功發(fā)送到以太網(wǎng)。同樣方法可測試到以太網(wǎng)中數(shù)據(jù)也成功發(fā)送至CAN。網(wǎng)絡(luò)中其他類型的報文也同樣如此。
4 結(jié)束語
文中闡述了以ARM7系列LPC2294為核心的以太網(wǎng)與CAN總線網(wǎng)絡(luò)互聯(lián)的通信網(wǎng)關(guān)實現(xiàn)過程,概述了本網(wǎng)關(guān)中采用的以太網(wǎng)和CAN總線的報文格式及其自定義UDP數(shù)據(jù)報文的結(jié)構(gòu)。并提出了網(wǎng)關(guān)的軟、硬件實現(xiàn)方法。通過實驗該網(wǎng)關(guān)模塊實現(xiàn)了以太網(wǎng)與CAN總線間的數(shù)據(jù)傳遞,且具有穩(wěn)定性和較高的可靠性。
評論