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

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

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

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

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

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

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