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