毛為民, 楊義偉
(1.浙江凱靈船廠,浙江 舟山 316000; 2.上海船舶運輸科學研究所,上海 200135)
基于STM32CAN-Ethernet網(wǎng)關(guān)的設(shè)計
毛為民1, 楊義偉2
(1.浙江凱靈船廠,浙江 舟山 316000; 2.上海船舶運輸科學研究所,上海 200135)
采用數(shù)據(jù)包拆分解析并重新打包發(fā)送的方式,實現(xiàn)不同網(wǎng)絡協(xié)議的數(shù)據(jù)轉(zhuǎn)換。設(shè)計編寫控制器局域網(wǎng)絡(Controller Area Network, CAN)控制器、以太網(wǎng)控制芯片、SD卡及相關(guān)硬件設(shè)備的驅(qū)動程序。以Real-Time Operation System UCOS-II為操作平臺,移植嵌入式TCP/IP協(xié)議棧LWIP和小型文件管理系統(tǒng)FATFS,完成具有實時數(shù)據(jù)存儲功能的CAN-Ethernet網(wǎng)關(guān)的設(shè)計。
CAN-Ethernet;CAN總線協(xié)議;RTOS;LWIP
當前,新造船舶上安裝的監(jiān)控報警系統(tǒng)通常是集散式監(jiān)控報警系統(tǒng)[1](見圖1),一般分為3層:
1) 最下層為設(shè)備層,每個現(xiàn)場設(shè)備作為一個從站,有自己的數(shù)據(jù)采集處理單元 ;
2) 中間層作為數(shù)據(jù)通信存儲、轉(zhuǎn)發(fā)的中轉(zhuǎn)站和報警顯示處理單元,將下層從站的數(shù)據(jù)轉(zhuǎn)發(fā)到上層,將上層的命令及請求信息轉(zhuǎn)發(fā)給下層;
3) 上層由信息處理單元和數(shù)據(jù)分析單元等組成,用于數(shù)據(jù)集中處理,一般為終端計算機。
下層的各從站間的通信及下層的各從站與中間層的通信通過現(xiàn)場總線完成,而上層和中間層的數(shù)據(jù)通信則通過以太網(wǎng)實現(xiàn)。
目前,國際及國內(nèi)實現(xiàn)以太網(wǎng)(Ethernet)和現(xiàn)場總線協(xié)議轉(zhuǎn)換的方法[2]主要有以下3種:
1) 封裝法。其實現(xiàn)方式是將總線報文中的有效數(shù)據(jù)封裝到TCP/IP格式的數(shù)據(jù)報文中,并以TCP/IP協(xié)議的形式傳輸給上層網(wǎng)絡[3]。
2) 拆分法。該方式與封裝法正好相反,其將TCP/IP數(shù)據(jù)包拆分后提取出有用的信息,并將該信息封裝到現(xiàn)場總線數(shù)據(jù)包中,然后在接收終端從總線報文中提取出之前封裝的有效數(shù)據(jù),并再次封裝到以太網(wǎng)數(shù)據(jù)包中[4]。
3) 網(wǎng)關(guān)/代理服務器法。該方法直接采用網(wǎng)關(guān)的方式進行兩者之間的協(xié)議轉(zhuǎn)換,在不改變現(xiàn)有設(shè)備的前提下使整個網(wǎng)絡構(gòu)架的利益最大化[5]。
這里自定義該系統(tǒng)的控制器局域網(wǎng)絡(Controller Area Network, CAN)總線協(xié)議,采用數(shù)據(jù)包拆分解析并重新打包發(fā)送的方法進行協(xié)議轉(zhuǎn)換;此外,加入數(shù)據(jù)存儲功能,實現(xiàn)網(wǎng)絡中通信數(shù)據(jù)的實時備份。
為解決Ethernet和CAN總線網(wǎng)絡協(xié)議不兼容的問題,提出一種新型的嵌入式網(wǎng)關(guān)系統(tǒng)。該嵌入式網(wǎng)關(guān)需至少具備以下6個功能:
1) 網(wǎng)關(guān)需具備Ethernet路由功能,可通過Ethernet對現(xiàn)場設(shè)備進行實時的監(jiān)控;
2) 網(wǎng)關(guān)需能與CAN總線協(xié)議兼容,以便將CAN總線上的設(shè)備監(jiān)控信息傳輸至上層監(jiān)控網(wǎng)絡,同時將上層的監(jiān)控指令下發(fā)給現(xiàn)場設(shè)備;
3) 網(wǎng)關(guān)需具有協(xié)議轉(zhuǎn)換的功能,能實現(xiàn)Ethernet與CAN現(xiàn)場總線之間的數(shù)據(jù)交互,將2種不同網(wǎng)絡協(xié)議的數(shù)據(jù)包重新打包分組,使其符合另一種網(wǎng)絡協(xié)議,達到不同網(wǎng)絡協(xié)議間協(xié)議轉(zhuǎn)換的目的;
4) 為保障網(wǎng)絡數(shù)據(jù)的完整性,網(wǎng)關(guān)需具有數(shù)據(jù)存儲功能,以便在網(wǎng)絡連接出現(xiàn)故障時防止數(shù)據(jù)丟失;
5) 船舶監(jiān)控報警系統(tǒng)對數(shù)據(jù)傳輸?shù)膶崟r性和可靠性有較高要求,因此網(wǎng)關(guān)應具有較高的實時性和可靠性;
6) 出于經(jīng)濟性和實用性考慮,需采用輕量級的嵌入式網(wǎng)關(guān)。
根據(jù)以上要求,設(shè)計網(wǎng)關(guān)結(jié)構(gòu)見圖2。從圖2中可看出,給出的網(wǎng)關(guān)主要分為硬件部分、軟件部分和應用層程序等3部分。選用STM32F103ZET6作為硬件處理器,其32位的運算能力可在一定程度上為實時性及高效的數(shù)據(jù)處理等網(wǎng)關(guān)需要的特點提供硬件基礎(chǔ)。此外,硬件結(jié)構(gòu)還包括以太網(wǎng)協(xié)議控制芯片M9000模塊、CAN協(xié)議控制芯片JTA1050模塊及數(shù)據(jù)存儲單元SD卡模塊。
網(wǎng)關(guān)既要進行多任務調(diào)度,還要確保實時性。因此,試驗采用嵌入式操作系統(tǒng),綜合考慮開發(fā)周期、系統(tǒng)占用內(nèi)存及所需功能等因素,選用UCOS-II作為網(wǎng)關(guān)的RTOS[6];綜合網(wǎng)關(guān)硬件的契合度、功能的完整性、協(xié)議棧對系統(tǒng)功能的相符性及構(gòu)造相關(guān)接口函數(shù)的難度等因素,網(wǎng)關(guān)采用輕量級的TCP/IP協(xié)議棧LWIP[7];考慮到網(wǎng)關(guān)的數(shù)據(jù)備份功能和網(wǎng)關(guān)硬件的設(shè)計及其尺寸,網(wǎng)關(guān)采用大容量SD卡作為數(shù)據(jù)存儲器,同時采用FATFS嵌入式文件系統(tǒng)管理SD卡[8];從實際應用方面考慮,在參考DeviceNet協(xié)議的基礎(chǔ)上設(shè)計編寫適用于該系統(tǒng)的CAN協(xié)議[9]。
網(wǎng)關(guān)的應用程序根據(jù)網(wǎng)關(guān)的功能主要可分為CAN總線收發(fā)模塊、CAN-Ethernet協(xié)議轉(zhuǎn)換模塊、數(shù)據(jù)存儲模塊、TCP/IP客戶端模塊及信息顯示模塊(即LCD驅(qū)動)。
2.1CAN總線收發(fā)模塊
CAN協(xié)議棧主要的應用函數(shù)包含在can.c文件中,這里只對其中的3個進行簡要介紹。
2.1.1 CAN控制器的初始化
CAN初始化函數(shù)的原型為u8 CAN_Mode_Init(u8 tsjw,u8 tbs2,u8 tbs1,u16 brp,u8 mode)。當其返回值為0時,表示初始化完成,否則初始化失敗。
2.1.2 CAN控制器的數(shù)據(jù)發(fā)送
CAN控制器的發(fā)送流程為:
(1) 當有數(shù)據(jù)需發(fā)送時,驅(qū)動程序選擇1個空的郵箱(TME=1);
(2) 設(shè)置CAN標示符(CID)、數(shù)據(jù)長度及需發(fā)送的數(shù)據(jù);
(3) 把CAN_TixR的TXRQ置于位置1,請求發(fā)送;
(4) 郵箱掛號排隊,等待當前郵箱的優(yōu)先級變?yōu)樽罡邇?yōu)先級;
(5) 預定發(fā)送,等待總線空閑;
(6) 發(fā)送數(shù)據(jù);
(7) 郵箱置空。
2.1.3 CAN控制器的數(shù)據(jù)接收
CAN控制器的接收流程為:關(guān)聯(lián)空FIFO→接收到有效報文→掛號_1(FIFO中的一個接收郵箱,由硬件決定)→接收到有效報文→掛號_2→接收到有效報文→掛號_3→接收到有效報文→溢出。
以上只是向FIFO中存入接收到的報文,在FIFO溢出之前,可從FIFO中讀取報文,每讀取一次報文,相應的掛號郵箱就減少一個。當掛號3個郵箱仍沒有讀出且接收到新的報文時,數(shù)據(jù)溢出。
2.2CAN-Ethernet協(xié)議轉(zhuǎn)換模塊
對于整個網(wǎng)關(guān)軟件系統(tǒng)來說,協(xié)議轉(zhuǎn)換模塊可實現(xiàn)將自定義的CAN總線協(xié)議與TCP數(shù)據(jù)報文協(xié)議相互轉(zhuǎn)換的目的。協(xié)議轉(zhuǎn)換模塊分為CAN總線協(xié)議轉(zhuǎn)換成TCP協(xié)議和TCP協(xié)議轉(zhuǎn)換成CAN總線協(xié)議2部分,在TCP連接中分為客戶端和服務器2種。在斷開網(wǎng)絡連接時,若作為服務器的一端發(fā)生故障導致網(wǎng)絡斷開,則客戶端會自動地不斷嘗試重新連接,而客戶端斷開網(wǎng)絡服務器則不會自動連接。因此,試驗中采用TCP客戶端模式,即網(wǎng)關(guān)為TCP客戶端,上位機為TCP服務器。
2.3SD卡文件讀寫模塊
采用SD卡的本質(zhì)目的是對網(wǎng)絡中的數(shù)據(jù)進行備份,創(chuàng)建小型數(shù)據(jù)庫。因此,SD卡文件存儲模塊在進行程序設(shè)計時,可實現(xiàn)以下功能:
1) 自動存儲功能。同樣使用狀態(tài)觸發(fā)機制,網(wǎng)關(guān)一旦接收到CAN從站的CAN報文,便把報文組的有效數(shù)據(jù)提取出并存儲到相應的文件夾中。
2) 加入地址辨別機制。從每個有效報文中提取出報文的目的地址或源地址(CID),根據(jù)不同的CID把數(shù)據(jù)存儲到不同的文件夾中,文件夾以CAN從站名稱命名(如:CWU,冷卻水單元;ABCU,輔鍋爐控制單元等)。
3) 時間標簽。結(jié)合系統(tǒng)實時時鐘(Real-Time Clock, RTC),在每次存儲數(shù)據(jù)時,在數(shù)據(jù)之前加入存儲時間。
4) 自動周期性創(chuàng)建文件。為避免單個文件內(nèi)數(shù)據(jù)過多,每隔一段時間自動創(chuàng)建從站數(shù)據(jù)文件,間隔時間在程序中設(shè)置。
5) 實時顯示內(nèi)存空間。通過LCD顯示器實時顯示剩余內(nèi)存空間的大小,以便提醒操作者及時處理、備份數(shù)據(jù)庫。
6) 數(shù)據(jù)讀取。通過程序設(shè)置內(nèi)部文件數(shù)據(jù)的讀取。
2.4網(wǎng)關(guān)客戶端模塊
網(wǎng)關(guān)客戶端模塊實現(xiàn)網(wǎng)關(guān)客戶端與上位機服務器之間的TCP格式報文的交互傳遞,主要是把網(wǎng)關(guān)中已提取出的CAN報文有效數(shù)據(jù)轉(zhuǎn)換成TCP數(shù)據(jù)報文格式并發(fā)送給上位機服務器,或接收上位機服務器發(fā)送的TCP格式的報文并把有效報文復制到相應的存儲空間。在TCP連接中,客戶端會自動檢測連接情況,若沒有連接或非人為斷開連接,客戶端會自動重新請求服務器連接。因此,試驗將網(wǎng)關(guān)設(shè)置為客戶端,將上位機設(shè)置為服務器。
2.5LCD顯示模塊
LCD顯示模塊在該試驗中有2個功能:
1) 驗證調(diào)試。在進行操作系統(tǒng)移植測試、LWIP協(xié)議棧移植測試、CAN總線數(shù)據(jù)收發(fā)測試及FATFS移植測試時,通過LCD顯示相關(guān)內(nèi)容幫助測試。
2) 在之后的整個試驗平臺運行時,作為人機界面,方便操作者觀察試驗狀態(tài)。
系統(tǒng)測試的主要步驟為:
1) 完成系統(tǒng)的硬件連接,并將2個網(wǎng)關(guān)的工作模式設(shè)為Normal Mode;
2) 打開網(wǎng)絡調(diào)試助手,在網(wǎng)絡調(diào)試助手的協(xié)議類型中選擇TCP Server,將本地端口號改為8087,點擊連接,若連接成功,則會出現(xiàn)圖中的“斷開”按鈕,且會在連接對象欄中出現(xiàn)一個有效的連接對象;
3) 連接成功后,網(wǎng)絡調(diào)試助手的接收窗口將開始接收數(shù)據(jù)。
具體報文解析已在網(wǎng)關(guān)中完成,解析結(jié)果與報文有效數(shù)據(jù)一起打包發(fā)送給網(wǎng)絡調(diào)試助手,具體見圖3。
經(jīng)過長時間的測試,網(wǎng)關(guān)在系統(tǒng)中工作良好,沒有出現(xiàn)數(shù)據(jù)丟失現(xiàn)象。從試驗結(jié)果中可知:設(shè)計的網(wǎng)關(guān)可在模擬系統(tǒng)中實現(xiàn)設(shè)計的功能;同時,系統(tǒng)的CAN協(xié)議表中預留了相關(guān)資源,以便之后進行系統(tǒng)升級擴展。該網(wǎng)關(guān)實現(xiàn)了底層現(xiàn)場CAN總線網(wǎng)絡與上層企業(yè)級管理網(wǎng)絡之間的互聯(lián),具有應用意義和推廣前景。
參考網(wǎng)關(guān)的功能可知,網(wǎng)關(guān)的系統(tǒng)比較復雜,受時間及研究水平限制,該試驗只是在實驗室的條件下結(jié)合模擬系統(tǒng)環(huán)境實現(xiàn)。因此,與真正的控制現(xiàn)場相比,該網(wǎng)關(guān)還有很大的不足和改進之處,針對這些問題,提出以下建議和改進意見。
1) 硬件系統(tǒng):該網(wǎng)關(guān)只有1路CAN總線,考慮到現(xiàn)場總線工作的可靠性等因素,網(wǎng)關(guān)最好有2個CAN接口,實現(xiàn)雙冗余互為備用,防止突發(fā)狀況下的網(wǎng)絡斷開。
2) 軟件系統(tǒng):該網(wǎng)關(guān)只是在實驗室的環(huán)境下實現(xiàn)設(shè)計功能,處理的數(shù)據(jù)量非常小,考慮到對大數(shù)據(jù)長時間的傳輸進行數(shù)據(jù)處理,網(wǎng)關(guān)的軟件系統(tǒng)還需進一步完善。
[1] 劉傳峰.船舶機艙監(jiān)控報警系統(tǒng)軟件設(shè)計與實現(xiàn)[D].武漢:武漢理工大學,2014.
[2] 劉志海.基于ARM9平臺的CAN-Ethernet網(wǎng)關(guān)設(shè)計與實現(xiàn)[D].成都:成都理工大學,2009.
[3] 張南杰.基于ARM的CAN-Ethernet網(wǎng)關(guān)設(shè)計[D].大連:大連交通大學,2013.
[4] 趙廣磊.基于嵌入式系統(tǒng)的CAN總線與以太網(wǎng)的網(wǎng)關(guān)設(shè)計[D].武漢:華中科技大學,2009.
[5] 何芳.基于全分布式網(wǎng)絡船舶機艙監(jiān)控系統(tǒng)的研究與設(shè)計[D].武漢:武漢理工大學,2012.
[6] LABROSSE J J.嵌入式實時操作系統(tǒng)uC/0S-III[M].宮輝,譯.北京:北京航空航天大學出版社,2012.
[7] 朱升林.嵌入式網(wǎng)絡那些事(LWIP協(xié)議深度剖析與實戰(zhàn)演練)[M].北京:中國水利水電出版社,2012.
[8] 李世奇,董浩斌,李榮生.基于FATFS文件系統(tǒng)的SD卡存儲設(shè)計[J].測控技術(shù),2011,30(12):79-81.
[9] 王康勝.基于嵌入式的DeviceNet協(xié)議分析和從站的開發(fā)[D].青島:青島科技大學,2014.
CAN-EthernetGatewayDesignwithSTM32forShipMonitoringSystem
MAOWeimin1,YANGYiwei2
(1.Zhejiang Kailing Ship Factory, Zhoushan 316000, China; 2.Shanghai Ship & Shipping Research Institute, Shanghai 200135, China)
The measure of splitting and repackaging data packets is used to perform data transformation between different network protocols. The drive programs of Controller Area Network(CAN) controller, Ethernet controller, SD card and related hardware are designed; The embedded TCP/IP protocol LWIP and embedded file management system FATFS are migrated to the UCOS-II OS. A complete CAN-Ethernet gateway with the function of real-time data storage is developed on the basis of the microcontroller STM32.
CAN-Ethernet; CAN bus protocol; RTOS; LWIP
TP273
A
2017-04-23
毛為民(1972—),男,湖北枝江人,工程師,博士,主要從事艦船維修保障工作。
1674-5949(2017)03-0046-04