基于GPRS的遠程監控系統設計
1 引言
目前,對輸油管道、電力裝置等多個(gè)分散點(diǎn)進(jìn)行監控主要采用人工巡邏的方式,這種方式存在實(shí)時(shí)性差、成本高、無(wú)法對環(huán)境惡劣的地區進(jìn)行監控等缺點(diǎn)。隨著(zhù)internet與移動(dòng)通信技術(shù)的發(fā)展,這種傳統的監控方案已無(wú)法滿(mǎn)足應用要求,亟待開(kāi)發(fā)一種實(shí)時(shí)性好、可靠性高、價(jià)低易用的無(wú)線(xiàn)遠程監控系統。GPRS能夠很好地解決上述問(wèn)題。GPRS是在充分利用現有GSM網(wǎng)絡(luò )的基礎上,通過(guò)添加GGSN和SGSN實(shí)現數據的分組傳輸,從而將移動(dòng)通信與Internet網(wǎng)絡(luò )聯(lián)系起來(lái),是目前無(wú)線(xiàn)數據傳輸應用最廣泛的網(wǎng)絡(luò )。
2 系統硬件組成
輸油管道壓力監控模塊的硬件結構框圖如圖1所示,系統由遠程監控模塊和監控中心PC機組成,它們通過(guò)GPRS網(wǎng)絡(luò )進(jìn)行通信。遠程監控節點(diǎn)由ARM模塊、GPRS模塊和傳感器模塊組成。其中,GPRS模塊主要用于數據的發(fā)送、接收以及短消息的接收;ARM模塊完成傳感器數據的編碼和TCP/IP封裝,控制GPRS模塊將數據發(fā)送到監控中心,并接收和執行監控中心發(fā)送的控制命令;監控中心為通過(guò)以太網(wǎng)卡連人Internet中的一臺具有固定IP的計算機,采用VB.NET開(kāi)發(fā)工具調用Winsock控件編寫(xiě)監控軟件,用于接收、處理和顯示各個(gè)監控點(diǎn)發(fā)送的數據,并對監控點(diǎn)發(fā)送控制命令。

其中,GPRS模塊是無(wú)線(xiàn)數據傳輸的核心部分,本文采用西門(mén)子公司的MC39i,它提供一個(gè)標準的RS232接口用于與外部應用系統連接。
3 系統軟件設計
3.1 基于FreeRTOS的系統任務(wù)設計
根據嵌入式實(shí)時(shí)操作系統模塊化設計理念,將系統軟件設計劃分為主控任務(wù)MainTask()、與網(wǎng)絡(luò )連接任務(wù)GPRSConctTask()、數據傳輸任務(wù)xDataTrsmtTask()、短消息處理任務(wù)xSMSProc-Task()和傳感器任務(wù)xSensorStatTask()。任務(wù)之間采用信號量、隊列和郵箱等進(jìn)行通信,其關(guān)系如圖2所示,其中MC39iSerialDrv()為串口驅動(dòng)程序。

MC39iSerialDrv()為串口驅動(dòng)函數,它負責將發(fā)送隊列xQSendToMC39i里面的數據發(fā)送給與MC39i相連接的串口。接收到數據后,將MC39i串口接收到的數據發(fā)送到接收隊列xQRecdFrom-MC39i中,數據的接收和發(fā)送是通過(guò)中斷服務(wù)子程序完成的。
GPRSConctTask()實(shí)現MC39i模塊與GPRS網(wǎng)絡(luò )的連接,是遠程數據傳輸的基礎和關(guān)鍵。
{{分頁(yè)}}
3.2 基于狀態(tài)機設計GPRS連接任務(wù)
由于網(wǎng)絡(luò )和信號強弱等原因,可能導致節點(diǎn)與GPRS網(wǎng)絡(luò )連接的失敗。本文采用基于狀態(tài)機的結構設計方法對各個(gè)階段產(chǎn)生的錯誤進(jìn)行處理,保障模塊與GPRS網(wǎng)絡(luò )建立可靠連接。程序狀態(tài)機如圖3所示。

3.3 基于uIP協(xié)議棧的傳輸層軟件設計
利用GPRS模塊進(jìn)行數據傳輸時(shí),數據格式須符合互連網(wǎng)絡(luò )的TCP/IP協(xié)議標準。xDataTrsmtTask()任務(wù)完成傳輸層和網(wǎng)絡(luò )層處理。根據系統狀態(tài)(UDP或TCP態(tài)),傳輸層處理方式不同。
TCP提供可靠的數據傳輸方式,其應用層協(xié)議也比較多,被廣泛應用于網(wǎng)絡(luò )通信領(lǐng)域。由于TCP的協(xié)議頭以及數據傳輸控制比較復雜,數據的傳輸效率較低,因而越來(lái)越多的實(shí)時(shí)小數據量的應用,更傾向于使用基于UDP的數據傳輸協(xié)議。
3.3.1 基于uIP的TCP數據傳輸方式的實(shí)現
本文基于uIP TCP/IP協(xié)議棧實(shí)現TCP數據傳輸方式。uIP是由Adam Dunkels編寫(xiě)的源代碼免費開(kāi)放的微型TCP/IP協(xié)議棧,傳輸層協(xié)議實(shí)現了UDP和TCP,鏈路層PPP協(xié)議可以作為uIP下面的設備驅動(dòng)來(lái)實(shí)現,uIP系統底層和應用程序之間的關(guān)系如圖4所示。應用程序必須提供一個(gè)回應函數給uIP,數據傳輸任務(wù)周期性調用UIP_AP-PCALL()函數處理事件的發(fā)生。

進(jìn)行TCP數據傳輸之前,首先通過(guò)調用uIP協(xié)議棧提供的uip_connect()函數與監控中心的監控軟件建立一個(gè)TCP連接,TCP連接的三次握手均由uIP協(xié)議棧的uip_process()函數完成。
默認情況下,uIP協(xié)議棧的發(fā)送和接收共用一個(gè)緩沖區,當uIP處理緩沖區內數據時(shí),必須關(guān)中斷,為了提高系統實(shí)時(shí)性,我們將其改為雙緩沖區模式。系統每個(gè)時(shí)鐘節拍分別對發(fā)送和接收緩沖區進(jìn)行掃描,如發(fā)現緩沖區非空時(shí),由uIP協(xié)議棧處理。接收數據時(shí),uip_process()對接收緩沖區內數據進(jìn)行TCP和IP 協(xié)議頭解析,并將應用數據發(fā)送到In-Buffer[]中。發(fā)送數據時(shí),由uip_process()完成發(fā)送緩沖區OutBuffer[]中數據的TCP/IP封裝,再調用uIP驅動(dòng)程序PPPSendData()進(jìn)行鏈路層PPP協(xié)議頭的封裝,并將封裝的數據發(fā)送到發(fā)送隊列xQSendToMC39i中。
3.3.2 UDP數據傳輸的實(shí)現和改進(jìn)
設計中采用對數據包進(jìn)行編碼和增加握手的方式實(shí)現UDP數據傳輸可靠性的改進(jìn)。通過(guò)給每個(gè)UDP數據包加上一個(gè)順序增加的ID號,區別各個(gè)不同的數據包,利用它來(lái)對丟包的檢測。握手過(guò)程如圖5所示。設計中采用UDPIDProc()函數完成握手功能,發(fā)送的數據備份在一個(gè)緩沖區中,每次接收到確認包后將對ID進(jìn)行檢驗,如果ID正確則將備份的數據刪除。如60 s內未收到正確的ID確認信息,則采用新的ID將備份的數據重傳,當重傳失敗時(shí),可以進(jìn)行報警,從而實(shí)現了一種改進(jìn)的可靠性較高的UDP數據傳輸方式。

4 系統測試
本文利用兩個(gè)數據傳輸模塊和監控中心組成測試系統對數據傳輸性能進(jìn)行測試。最高重傳次數設置為3,超過(guò)最高重傳次數后,通過(guò)短消息方式將數據發(fā)送到用戶(hù)手機上。模塊每20 min向監控中心發(fā)送一次數據,監控中心每天發(fā)送兩次控制命令到各個(gè)模塊,分別采用改進(jìn)的UDP和TCP進(jìn)行傳輸。經(jīng)測試,系統工作20天內未出現死機等異常情況;模塊與GPRS網(wǎng)絡(luò )連接成功率為100%(本文中增加了檢錯重試機制)。測試結果如表1所示。

GPRS網(wǎng)絡(luò )中UDP傳輸有效率大于99%,TCP傳輸有效率約為100%。本文設計的遠程監控系統采用經(jīng)改進(jìn)的UDP數據傳輸方式能檢測到丟包,通過(guò)多次重傳可以成倍降低UDP傳輸方式的丟包率,可以根據需要設置系統將一直重傳到數據成功到達為止,從而實(shí)現數據傳輸成功率為100%。
5 結 論
本文給出的遠程監控系統的設計方案具有可靠、實(shí)時(shí)、穩定、通用和低成本等優(yōu)點(diǎn),實(shí)現了TCP和經(jīng)過(guò)改良的UDP兩種數據傳輸方式,可以滿(mǎn)足多種數據傳輸領(lǐng)域的要求。
評論