文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 0258-7998(2012)08-0026-04
以海底觀測(cè)節(jié)點(diǎn)為載體的海洋數(shù)據(jù)采集與傳輸系統(tǒng),可以實(shí)現(xiàn)海平面以下水環(huán)境監(jiān)測(cè)數(shù)據(jù)的實(shí)時(shí)、自動(dòng)獲取,它由各個(gè)傳感器、CPU控制器、數(shù)據(jù)傳輸接口以及水上遠(yuǎn)程監(jiān)測(cè)平臺(tái)組成,可為海洋的探索和監(jiān)測(cè)提供豐富的信息和資料。從我國(guó)開(kāi)始研制海洋數(shù)據(jù)采集與監(jiān)測(cè)系統(tǒng)至今,先后采用了多種數(shù)據(jù)傳輸方式[1],包括RS232、RS485、CAN總線等,各個(gè)傳輸方式各有利弊。RS232支持全雙工通信,雖然是眾多設(shè)備的直接連接渠道,但傳輸速率慢、抗干擾能力差、傳輸距離短;RS485只支持半雙工通信,抗噪聲干擾性好,傳輸距離較RS232遠(yuǎn),但傳輸速率慢;CAN總線只支持半雙工通信,通信距離遠(yuǎn),抗干擾能力強(qiáng),但傳輸速率仍有限制[2]。根據(jù)數(shù)據(jù)采集及傳輸系統(tǒng)對(duì)數(shù)據(jù)傳輸速率的要求,本文利用LwIP作為以太網(wǎng)協(xié)議棧,完成LwIP TCP/IP協(xié)議棧在STM32F207VGT6的移植;考慮到以太網(wǎng)支持全雙工通信,同時(shí)利用以太網(wǎng)中的UDP傳輸方式實(shí)現(xiàn)各類傳感器開(kāi)啟、采集間隔的控制以及對(duì)采集數(shù)據(jù)的實(shí)時(shí)監(jiān)測(cè),大幅度提高了系統(tǒng)遠(yuǎn)程的可控性及實(shí)時(shí)性。
1 系統(tǒng)工作原理
海洋數(shù)據(jù)采集與傳輸系統(tǒng)的整體結(jié)構(gòu)如圖1所示。其中數(shù)據(jù)采集板是本系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)的主要組成部分,本文主要闡述由傳感器、數(shù)據(jù)采集板和用戶遠(yuǎn)程檢測(cè)終端組成的海洋數(shù)據(jù)采集與傳輸系統(tǒng)。它主要完成對(duì)傳感器采集到的數(shù)據(jù)進(jìn)行存儲(chǔ)和傳輸以及對(duì)傳感器進(jìn)行實(shí)時(shí)監(jiān)測(cè),其目的是提高傳感器水下工作時(shí)長(zhǎng)、提供外部電源供電引腳、方便進(jìn)行長(zhǎng)期觀測(cè)。
海洋數(shù)據(jù)采集與傳輸系統(tǒng)工作原理為:當(dāng)水下傳感器采集到數(shù)據(jù)時(shí),即刻通過(guò)串口傳遞至數(shù)據(jù)采集板,采集板收到數(shù)據(jù)請(qǐng)求信號(hào),立即執(zhí)行SD卡數(shù)據(jù)存儲(chǔ)操作,并通過(guò)以太網(wǎng)對(duì)數(shù)據(jù)進(jìn)行接收,在UDP傳輸方式下通過(guò)網(wǎng)線將數(shù)據(jù)傳遞至用戶遠(yuǎn)程計(jì)算機(jī)終端。數(shù)據(jù)接收完畢后,水下傳感器繼續(xù)執(zhí)行數(shù)據(jù)的采集。與此同時(shí),遠(yuǎn)程計(jì)算機(jī)終端通過(guò)網(wǎng)絡(luò)發(fā)送控制命令,信號(hào)經(jīng)網(wǎng)絡(luò)傳輸至采集板CPU,CPU進(jìn)行命令解析,針對(duì)不同的解析結(jié)果對(duì)傳感器發(fā)送相應(yīng)控制命令,實(shí)現(xiàn)對(duì)傳感器開(kāi)啟、采集間隔設(shè)置的實(shí)時(shí)控制。
CTD傳感器1~傳感器5是一般的RS232接口傳感器,而耦合傳感器1、2、3屬于感應(yīng)耦合自容式傳感器,若要連入電路,需要加入調(diào)制解調(diào)模塊。兩種傳感器除了都能以RS232形式輸出數(shù)據(jù)外,也可進(jìn)行自容式存儲(chǔ)。
2 系統(tǒng)硬件
目前,實(shí)現(xiàn)傳感器串行數(shù)據(jù)與以太網(wǎng)數(shù)據(jù)交換的方式主要有3種:(1)使用專用的網(wǎng)絡(luò)處理芯片;(2)使用高檔嵌入式系統(tǒng)處理;(3)使用單片機(jī)和網(wǎng)絡(luò)控制芯片。通過(guò)比較可以發(fā)現(xiàn):第(1)種成本較高,且用戶需要重新設(shè)計(jì)接口;第(2)種成本也較高,且如果僅用于通信接口,芯片資源則不能充分利用;相比較而言,通過(guò)從成本和使用場(chǎng)合考慮,第(3)種方法成本低,實(shí)現(xiàn)比較容易,并且可以根據(jù)實(shí)際需要進(jìn)行功能擴(kuò)展,只是軟件編程工作量比較大。因此本文采用第三種方法來(lái)實(shí)現(xiàn)。
本系統(tǒng)中主控板微處理器選用ST公司基于Cortex-M3內(nèi)核的32 bit微處理器STM32F207,其主頻達(dá)120 MHz,專用于網(wǎng)絡(luò)型嵌入式設(shè)備中。STM32F207具有豐富的串口資源、4路USART通道、2路UART通道。其中USART1和USART6最高波特率支持7.5 Mb/s,其他接口最高支持3.75 Mb/s,不僅支持調(diào)制解調(diào)模塊、傳感器的物理連接,而且對(duì)于數(shù)據(jù)的傳輸也提供了較高的傳輸速率,可以有效縮短傳感器通過(guò)串口下載歷史數(shù)據(jù)的時(shí)間。
以太網(wǎng)收發(fā)芯片選用美國(guó)National公司的10/100 M以太網(wǎng)物理層收發(fā)芯片DP83848C,該芯片遵循Ethernet II和IEEE802.3u標(biāo)準(zhǔn),同時(shí)支持MII、RMII、SNI三種數(shù)據(jù)連接方式,內(nèi)部還集成了數(shù)據(jù)收發(fā)及濾波功能。在全雙工模式下,可以同時(shí)實(shí)現(xiàn)發(fā)送和接收,理論上最高速度能達(dá)到100 Mb/s,本文對(duì)其配置為100 Mb/s。采集板簡(jiǎn)要框圖如圖2所示。
如圖2所示,微控制器與以太網(wǎng)收發(fā)芯片間采用了RMII模式[3]。這種方式在保持物理層器件現(xiàn)有特性的前提下減少了PHY的連接引腳,在保持IEEE802.3規(guī)范中所有特性的同時(shí),降低了系統(tǒng)設(shè)計(jì)的成本。
3 系統(tǒng)軟件設(shè)計(jì)
本系統(tǒng)軟件設(shè)計(jì)包括兩部分:水下采集板傳感器數(shù)據(jù)采集、傳輸程序和遠(yuǎn)程用戶界面實(shí)時(shí)監(jiān)測(cè)程序。其中,采集板程序均在KEIL Uvision4下編譯、測(cè)試,遠(yuǎn)程監(jiān)測(cè)程序在Visual Studio 2008下編譯、測(cè)試。
3.1 TCP/IP協(xié)議棧——LwIP 移植
LwIP是瑞士計(jì)算機(jī)科學(xué)院的Adam Dunkles等人開(kāi)發(fā)的用于嵌入式系統(tǒng)的開(kāi)放源碼TCP/IP協(xié)議棧,其在保持TCP主要功能的基礎(chǔ)上減少對(duì)RAM的占用,一般只需要幾十字節(jié)的RAM和40 KB左右的ROM就可運(yùn)行,使LwIP適合在中低端的嵌入式系統(tǒng)中應(yīng)用。
嵌入式TCP/IP協(xié)議棧有兩種普遍的實(shí)現(xiàn)方式:一種是將協(xié)議簇中的每個(gè)協(xié)議作為一個(gè)單獨(dú)的進(jìn)程,并指定進(jìn)程之間的通信點(diǎn)。其優(yōu)點(diǎn)在于結(jié)構(gòu)清晰,代碼易懂,占用系統(tǒng)資源較少,且方便調(diào)試;另一種方式是將協(xié)議棧駐留在操作系統(tǒng)內(nèi)核中,應(yīng)用程序通過(guò)系統(tǒng)調(diào)用與協(xié)議棧通信。該方式對(duì)系統(tǒng)RAM、ROM資源占用較高,且不能很好地支持MDK[4]環(huán)境下的斷點(diǎn)調(diào)試。故本文選擇第一種方式。
3.2 STM32F207采集板程序設(shè)計(jì)
主程序設(shè)計(jì)可以分為以下4個(gè)步驟:
(1)系統(tǒng)初始化
上電后,對(duì)系統(tǒng)時(shí)鐘、LwIP協(xié)議棧、RTC實(shí)時(shí)時(shí)鐘、通用I/O口初始化配置。
(2)串口配置和通信
在STM32中,struct USART_InitTypeDef中包括了串口的波特率、字符位數(shù)和奇偶校驗(yàn)等重要屬性,在設(shè)置好該結(jié)構(gòu)體后,調(diào)用串口USART_Init使串口屬性生效。配置好串口后,用USART_DMACmd函數(shù)配置串口以DMA直接內(nèi)存訪問(wèn),當(dāng)有傳感器數(shù)據(jù)到達(dá)串口的緩沖區(qū)時(shí),直接存儲(chǔ)至DMA指定緩沖區(qū)中,同時(shí),當(dāng)數(shù)據(jù)到達(dá)最大長(zhǎng)度時(shí),執(zhí)行數(shù)據(jù)傳出、SD卡存儲(chǔ)并清空緩沖區(qū)。
(3)遠(yuǎn)程端命令偵聽(tīng)
在LwIP中,struct udp_pcb包括了以太網(wǎng)數(shù)據(jù)最小傳輸單元的類型、IP地址、子網(wǎng)掩碼、網(wǎng)關(guān)、當(dāng)前端口號(hào)、目的端口號(hào)等重要屬性,在創(chuàng)建好udp_pcb之后,調(diào)用udp API操作函數(shù)udp_bind使指定的udp數(shù)據(jù)單元屬性生效。對(duì)于以太網(wǎng)數(shù)據(jù)的讀寫,設(shè)置以太網(wǎng)讀寫超時(shí)是非常重要的,LwIP_Periodic_Handle函數(shù)提供了這樣的功能。配置好udp后,用udp_recv函數(shù)打開(kāi)數(shù)據(jù)接收回調(diào)函數(shù),通過(guò)回調(diào)函數(shù)體中第二個(gè)參數(shù)創(chuàng)建監(jiān)聽(tīng)線程。在監(jiān)聽(tīng)中無(wú)線程阻塞,當(dāng)接收到遠(yuǎn)程數(shù)據(jù)報(bào)時(shí),用udp_send寫數(shù)據(jù)。遠(yuǎn)程控制端對(duì)水下采集板的監(jiān)測(cè)是在監(jiān)聽(tīng)線程udp_echoserver_receive_callback中完成的,接著,將接收到的命令反饋至CPU,CPU根據(jù)不同的命令,決定是否開(kāi)啟傳感器。
(4)數(shù)據(jù)幀整合
根據(jù)傳感器的不同,將采集到的數(shù)據(jù)幀進(jìn)行排序、整合,按照固定順序整合成特定幀格式,最后通過(guò)以太網(wǎng)發(fā)送至遠(yuǎn)程監(jiān)測(cè)端。采集板程序流程如圖3所示。
3.3 遠(yuǎn)程用戶監(jiān)測(cè)程序設(shè)計(jì)
遠(yuǎn)程用戶控制端主要實(shí)現(xiàn)對(duì)水下采集板采集到的數(shù)據(jù)和傳感器工作狀態(tài)的實(shí)時(shí)監(jiān)測(cè)??刂贫送ㄟ^(guò)查找IP地址的形式對(duì)連接在用戶局域網(wǎng)內(nèi)的設(shè)備進(jìn)行搜索,經(jīng)過(guò)濾,找出設(shè)備,與水下采集板建立虛擬鏈接。然后以UDP面向無(wú)連接的通信方式[5]通過(guò)以太網(wǎng)接口向采集板發(fā)送傳感器開(kāi)啟命令。待發(fā)送完畢后,每隔1 s時(shí)間,控制端間歇性地通過(guò)以太網(wǎng)向水下系統(tǒng)發(fā)送獲取數(shù)據(jù)命令,用于得到最新的采集數(shù)據(jù)。若采集板中已收到傳感器當(dāng)前采集的數(shù)據(jù),隨即將水下系統(tǒng)中已整合的幀數(shù)據(jù)再次通過(guò)以太網(wǎng)傳遞至遠(yuǎn)程控制端。當(dāng)接收到完整幀數(shù)據(jù)后,控制端通過(guò)分析之前的數(shù)據(jù)通信協(xié)議,對(duì)數(shù)據(jù)包進(jìn)行解析,將各類傳感器分別采集到的數(shù)據(jù)進(jìn)行分離,顯示在用戶界面中。程序流程如圖4所示。
4 系統(tǒng)調(diào)試
在實(shí)驗(yàn)室環(huán)境下,將采集板的4個(gè)串口分別與調(diào)制解調(diào)器、CTD傳感器1、2、3相連,網(wǎng)口通過(guò)網(wǎng)線與電腦的網(wǎng)口相連。采集板程序中設(shè)置 UDP偵聽(tīng)端口號(hào)為5 000、子網(wǎng)掩碼為255.255.255.1,網(wǎng)關(guān)為192.168.1.1,設(shè)置本地IP為192.168.1.103,采集板IP地址為192.168.1.220,這兩個(gè)地址不能與局域網(wǎng)其他地址沖突。系統(tǒng)上電后,在局域網(wǎng)的PC機(jī)中,通過(guò)ping命令,發(fā)送ICMP請(qǐng)求,客戶端可得到ICMP回應(yīng)。接著打開(kāi)PC機(jī)上用戶遠(yuǎn)程監(jiān)測(cè)軟件,通過(guò)搜索指定目標(biāo)IP,搜索到采集板設(shè)備,此時(shí)采集板與PC機(jī)控制端握手成功后進(jìn)行數(shù)據(jù)通信,按照配置的采集時(shí)間間隔,采集板將數(shù)據(jù)保存在SD中。其中,傳感器每秒采集數(shù)據(jù)長(zhǎng)度約500 B。經(jīng)10 min運(yùn)行,通過(guò)將監(jiān)測(cè)軟件顯示的以太網(wǎng)幀數(shù)據(jù)與SD卡中的數(shù)據(jù)進(jìn)行比較可知,系統(tǒng)運(yùn)行穩(wěn)定;通過(guò)PC機(jī)對(duì)傳感器配置不同采集間隔時(shí),兩種方式下數(shù)據(jù)仍保持一致。
接著同樣以每秒500 B的數(shù)據(jù)量近似作為傳感器采集數(shù)據(jù)長(zhǎng)度,系統(tǒng)均運(yùn)行10 min,分別對(duì)采用串口RS232、RS485、CAN總線傳輸方式下傳輸完成時(shí)間、誤碼數(shù)進(jìn)行測(cè)試,得出的結(jié)果如表1所示。
由表1中測(cè)試結(jié)果可知,在相同傳輸條件下,以太網(wǎng)傳輸速度是RS232的14.03倍,是RS485的3.97倍,是CAN總線的6.02倍,說(shuō)明以太網(wǎng)在傳輸數(shù)據(jù)量較大的情況下,不管在傳輸時(shí)間方面還是在誤碼數(shù)方面都占有優(yōu)勢(shì)。
在實(shí)驗(yàn)室模擬調(diào)試的基礎(chǔ)上,在戶外也進(jìn)行了進(jìn)一步的測(cè)試,選擇水深、湖區(qū)面積適中的杭州千島湖中心湖區(qū)作為野外主要實(shí)測(cè)地點(diǎn)。測(cè)試前主要將浮球、水下數(shù)據(jù)采集系統(tǒng)放入水中,接著進(jìn)行為期一周的實(shí)地觀測(cè)。結(jié)果表明,系統(tǒng)工作正常,達(dá)到了預(yù)期的測(cè)試效果。這里選擇其中某個(gè)時(shí)間點(diǎn)對(duì)監(jiān)測(cè)軟件的顯示界面進(jìn)行截圖,如圖5所示。
本文利用基于LwIP協(xié)議棧的以太網(wǎng)設(shè)計(jì)和實(shí)現(xiàn)了一種海洋數(shù)據(jù)采集與傳輸系統(tǒng)。該采集系統(tǒng)豐富的串口資源使其至多可接入6種不同的傳感器設(shè)備。設(shè)計(jì)時(shí),在保證數(shù)據(jù)傳輸穩(wěn)定的前提下,用以太網(wǎng)傳輸代替?zhèn)鹘y(tǒng)的數(shù)據(jù)傳輸模式,不僅提高了系統(tǒng)實(shí)時(shí)性,而且使采集板和用戶監(jiān)測(cè)端數(shù)據(jù)交互更為快捷。同時(shí),在水下通過(guò)加入互聯(lián)設(shè)備,易于水下設(shè)備的擴(kuò)展或組網(wǎng)。系統(tǒng)很好地滿足了海洋數(shù)據(jù)實(shí)時(shí)傳輸?shù)男枨螅_(dá)到了傳輸速率在相同條件下優(yōu)于RS232、RS485、CAN總線傳輸速度的設(shè)計(jì)目標(biāo)。
參考文獻(xiàn)
[1] 莊彥霞,孫運(yùn)強(qiáng),姚愛(ài)琴.基于CAN總線的實(shí)時(shí)數(shù)據(jù)傳輸系統(tǒng)[J].數(shù)據(jù)采集與處理,2006,12(21):222-225.
[2] 陳敬謙,何志偉,劉文澤.RS2232與CAN總線協(xié)議轉(zhuǎn)換單元設(shè)計(jì)[J].電子工程師,2004,30(4):63-66.
[3] 宋鑫,郭勇,謝興紅.RMII模式以太網(wǎng)PHY芯片DP83848C的應(yīng)用[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2010(8):50-53.
[4] 王永虹,徐煒,郝立平.STM32系列ARM Cortex-M3微控制器原理與實(shí)踐[M].北京:北京航空航天大學(xué)出版社,2008:366-368.
[5] THOMAS G.用于控制TCP/UDP[J].國(guó)內(nèi)外機(jī)電一體化技術(shù),2001,6(4):9-11.