新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于LPC2294的CAN與以太網(wǎng)網(wǎng)關(guān)互聯(lián)的設(shè)計(jì)

基于LPC2294的CAN與以太網(wǎng)網(wǎng)關(guān)互聯(lián)的設(shè)計(jì)

作者: 時(shí)間:2016-10-29 來(lái)源:網(wǎng)絡(luò) 收藏

2 軟件設(shè)計(jì)
2.1 報(bào)文結(jié)構(gòu)
總線(xiàn)與互聯(lián)的軟件設(shè)計(jì)主要包括從中提取數(shù)據(jù)和將總線(xiàn)的數(shù)據(jù)轉(zhuǎn)換成的數(shù)據(jù)。其中,CAN報(bào)文結(jié)構(gòu)可分為兩種不同的幀格式,而兩種幀格式的區(qū)別在于其標(biāo)識(shí)符的長(zhǎng)度不同:標(biāo)準(zhǔn)幀中有11位標(biāo)識(shí)符,擴(kuò)展幀中有29位標(biāo)識(shí)符。本設(shè)計(jì)中采用的是擴(kuò)展幀,且在本網(wǎng)關(guān)模塊收到CAN板卡的報(bào)文時(shí),需按上述以太網(wǎng)數(shù)據(jù)傳輸報(bào)文格式對(duì)CAN數(shù)據(jù)進(jìn)行封裝及打包并通過(guò)以太網(wǎng)發(fā)送。在此過(guò)程中不必對(duì)CAN報(bào)文的13 Byte數(shù)據(jù)進(jìn)行高低位轉(zhuǎn)換和移位處理,采用透明轉(zhuǎn)換方式。便可減少數(shù)據(jù)解析及處理的時(shí)間,并提高了數(shù)據(jù)在傳輸過(guò)程中的可靠性。

本文引用地址:http://butianyuan.cn/article/201610/306066.htm

c.JPG


如圖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)首部和最終校驗(yàn)。本系統(tǒng)中主要采用的是UDP協(xié)議,目的是為了自定義控制字來(lái)區(qū)別不同類(lèi)型的報(bào)文,包括有:CAN數(shù)據(jù)報(bào)文、時(shí)統(tǒng)報(bào)文、工作狀態(tài)請(qǐng)求報(bào)文、心跳報(bào)文及設(shè)備故障診斷信息報(bào)文。其中時(shí)統(tǒng)報(bào)文是在開(kāi)機(jī)時(shí)或每30分鐘系統(tǒng)發(fā)送的對(duì)時(shí)請(qǐng)求。工作狀態(tài)報(bào)文是在各設(shè)備開(kāi)機(jī)或復(fù)位并正常工作后自動(dòng)發(fā)送的,還有收到詢(xún)問(wèn)報(bào)文或狀態(tài)改變后發(fā)送,主要發(fā)送時(shí)戳和設(shè)備ID信息。心跳報(bào)文是在各設(shè)備開(kāi)機(jī)或復(fù)位并正常工作后,每5 s周期發(fā)送,作用是通知其所在的網(wǎng)絡(luò),是否工作狀態(tài)正常。設(shè)備故障診斷信息報(bào)文是當(dāng)接收到故障診斷請(qǐng)求報(bào)文或網(wǎng)關(guān)根據(jù)CAN板卡數(shù)據(jù)接收情況,自行檢測(cè)到網(wǎng)關(guān)箱內(nèi)該板卡故障情況的變化,一般網(wǎng)關(guān)在30分鐘內(nèi)未收到參數(shù)設(shè)置報(bào)文中指定的CAN板卡對(duì)應(yīng)節(jié)點(diǎn)的數(shù)據(jù)和遠(yuǎn)程幀等,可認(rèn)定此節(jié)點(diǎn)故障,并發(fā)送故障信息報(bào)文。這增添了系統(tǒng)的一些管理信息,根據(jù)不同的報(bào)文類(lèi)型完成系統(tǒng)不同的通信功能。自定義UDP封裝格式如圖4所示。

d.JPG


在自定義UDP封裝格式中,字節(jié)0~3為固定的幀頭信息,用以識(shí)別本網(wǎng)關(guān)模塊的數(shù)據(jù)報(bào)信息,無(wú)論是CAN報(bào)文、時(shí)統(tǒng)報(bào)文或工作狀態(tài)請(qǐng)求報(bào)文均使用該格式,若不符合該幀頭的數(shù)據(jù)報(bào)網(wǎng)關(guān)模塊不進(jìn)行處理。需注意的是,第20 bit開(kāi)始才是真正的數(shù)據(jù),每個(gè)信息單元均有各自的序號(hào)、標(biāo)識(shí)和長(zhǎng)度等信息。其中信元的序號(hào)表示該信元在UDP數(shù)據(jù)報(bào)中的位置;標(biāo)識(shí)代表信息單元內(nèi)報(bào)文的類(lèi)型。
2.2 程序設(shè)計(jì)
網(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),通過(guò)裁剪、移植使其能順利運(yùn)行于2294控制器。另外,在系統(tǒng)中移植了TCP/IP協(xié)議的核心功能函數(shù),并編寫(xiě)了6個(gè)任務(wù)函數(shù),使其分工合作實(shí)現(xiàn)了模塊的各項(xiàng)功能,并通過(guò)μC/OS—II系統(tǒng)的任務(wù)調(diào)度管理機(jī)制來(lái)進(jìn)行系統(tǒng)資源的分配。
系統(tǒng)首先建立設(shè)備初始化任務(wù)Task0,將該任務(wù)函數(shù)主要完成上電自檢,兩路CAN故障自檢,網(wǎng)口斷線(xiàn)檢測(cè),本機(jī)IP、兩路CAN波特率及兩路網(wǎng)口等網(wǎng)關(guān)參數(shù)的初始化。在完成以上工作后,創(chuàng)建5個(gè)子任務(wù),按優(yōu)先級(jí)由高到低依次為T(mén)askB、TaskC、TaskF、TaskD、TaskE的5個(gè)子任務(wù)的具體功能如下:
TaskB:主要功能為接收UDP報(bào)文并解析,下發(fā)至CAN;若接收到時(shí)統(tǒng)報(bào)文,按照協(xié)議解析,并將時(shí)戳信息寫(xiě)入時(shí)鐘芯片。
TaskC:主要功能為接收TCP報(bào)文,按照協(xié)議解析并下發(fā)到CAN。
TaskD:完成接收CAN1口或CAN2口的數(shù)據(jù),根據(jù)規(guī)定的傳輸方式將數(shù)據(jù)封裝成報(bào)文格式,并發(fā)送至以太網(wǎng)。
TaskE:完成接收CAN1口或CAN2口的數(shù)據(jù),并按照TCP傳輸方式,將數(shù)據(jù)封裝并發(fā)送到以太網(wǎng)。
TaskF:主要功能為定時(shí)發(fā)送特殊報(bào)文,如:心跳報(bào)文、時(shí)統(tǒng)報(bào)文、工作狀態(tài)請(qǐng)求報(bào)文及設(shè)備故障診斷信息報(bào)文等,完成網(wǎng)關(guān)模塊的工作狀態(tài)檢測(cè)及參數(shù)配置等功能。
5個(gè)子任務(wù)創(chuàng)建完成后,TaskB和TaskC進(jìn)入阻塞狀態(tài),等待各自的信號(hào)量RecUdpQFlag和RecTcpQ一Flag,由于這兩個(gè)任務(wù)的優(yōu)先級(jí)較高,說(shuō)明網(wǎng)關(guān)模塊優(yōu)先轉(zhuǎn)換以太網(wǎng)向CAN總線(xiàn)方向的數(shù)據(jù)。因此,當(dāng)以太網(wǎng)中有數(shù)據(jù)到來(lái)時(shí)根據(jù)報(bào)文的類(lèi)型可得到相應(yīng)的信號(hào)量,TaskB或TaskC立即進(jìn)入就緒狀態(tài)等待執(zhí)行,若當(dāng)前執(zhí)行的任務(wù)優(yōu)先級(jí)低于這兩個(gè)任務(wù),TaskB和TaskC可進(jìn)行搶占執(zhí)行。當(dāng)網(wǎng)關(guān)模塊未收到以太網(wǎng)數(shù)據(jù)或處理完成后,任務(wù)函數(shù)TaskF檢測(cè)模塊的定時(shí)器,判斷是否需要發(fā)送工作狀態(tài)報(bào)文和心跳報(bào)文等特殊報(bào)文。執(zhí)行完成后,判斷CAN節(jié)點(diǎn)是否有數(shù)據(jù),并選擇用UDP或TCP方式發(fā)送到以太網(wǎng),即選擇執(zhí)行TaskD或TaskE,完成CAN向以太網(wǎng)方向的數(shù)據(jù)傳輸過(guò)程,在此期間允許TaskB和TaskC進(jìn)行搶占執(zhí)行。系統(tǒng)通過(guò)調(diào)度這5個(gè)任務(wù)函數(shù)完成以太網(wǎng)數(shù)據(jù)包與CAN數(shù)據(jù)幀間的格式轉(zhuǎn)換與傳輸,該程序流程如圖5所示。

e.JPG



3 測(cè)試
將該上位機(jī)IP地址設(shè)置為192.1.1.11,打開(kāi)網(wǎng)關(guān)參數(shù)設(shè)置界面對(duì)一些參數(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)接收端口號(hào)和CAN數(shù)據(jù)目標(biāo)IP地址等參數(shù)。隨后將CAN總線(xiàn)數(shù)據(jù)報(bào)文測(cè)試軟件ZLGCANTest打開(kāi),設(shè)置CAN總線(xiàn)的波特率為250 khit·s-1,將CAN報(bào)文發(fā)出后用ZLGCAN—Test、TcpUdp測(cè)試工具及EtherPeek NX軟件來(lái)查看網(wǎng)絡(luò)的通信情況。圖6便是由ZLGCANT est軟件所得到的,從圖中可知,CAN發(fā)送數(shù)據(jù)的幀類(lèi)型是擴(kuò)展幀,幀格式是數(shù)據(jù)幀,幀ID為0x0000 0000,每個(gè)CAN協(xié)議中發(fā)送8 bit的數(shù)據(jù)。而圖7是通過(guò)TcpUdp測(cè)試工具得到的數(shù)據(jù),并已在圖中標(biāo)出,此報(bào)文頭由Etherner協(xié)議報(bào)文頭、IP協(xié)議報(bào)頭、UDP協(xié)議報(bào)頭和自定義UDP報(bào)頭組成,并從自定義UDP報(bào)頭中的報(bào)文標(biāo)識(shí)可判別出CAN報(bào)文,而后面的數(shù)據(jù)正是圖6中CAN報(bào)文中的13 bit數(shù)據(jù),即對(duì)CAN報(bào)文采用透明轉(zhuǎn)換方式,將CAN網(wǎng)絡(luò)數(shù)據(jù)成功發(fā)送到以太網(wǎng)。同樣方法可測(cè)試到以太網(wǎng)中數(shù)據(jù)也成功發(fā)送至CAN。網(wǎng)絡(luò)中其他類(lèi)型的報(bào)文也同樣如此。

f.JPG



4 結(jié)束語(yǔ)
文中闡述了以ARM7系列2294為核心的以太網(wǎng)與CAN總線(xiàn)網(wǎng)絡(luò)互聯(lián)的通信網(wǎng)關(guān)實(shí)現(xiàn)過(guò)程,概述了本網(wǎng)關(guān)中采用的以太網(wǎng)和CAN總線(xiàn)的報(bào)文格式及其自定義UDP數(shù)據(jù)報(bào)文的結(jié)構(gòu)。并提出了網(wǎng)關(guān)的軟、硬件實(shí)現(xiàn)方法。通過(guò)實(shí)驗(yàn)該網(wǎng)關(guān)模塊實(shí)現(xiàn)了以太網(wǎng)與CAN總線(xiàn)間的數(shù)據(jù)傳遞,且具有穩(wěn)定性和較高的可靠性。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: LPC CAN 以太網(wǎng)

評(píng)論


相關(guān)推薦

技術(shù)專(zhuān)區(qū)

關(guān)閉