新聞中心

EEPW首頁 > 手機(jī)與無線通信 > 設(shè)計(jì)應(yīng)用 > 基于GPRS的遠(yuǎn)程監(jiān)控系統(tǒng)設(shè)計(jì)

基于GPRS的遠(yuǎn)程監(jiān)控系統(tǒng)設(shè)計(jì)

——
作者: 時(shí)間:2008-01-23 來源: 收藏

  1 引言

  目前,對(duì)輸油管道、電力裝置等多個(gè)分散點(diǎn)進(jìn)行監(jiān)控主要采用人工巡邏的方式,這種方式存在實(shí)時(shí)性差、成本高、無法對(duì)環(huán)境惡劣的地區(qū)進(jìn)行監(jiān)控等缺點(diǎn)。隨著internet與移動(dòng)通信技術(shù)的發(fā)展,這種傳統(tǒng)的監(jiān)控方案已無法滿足應(yīng)用要求,亟待開發(fā)一種實(shí)時(shí)性好、可靠性高、價(jià)低易用的無線系統(tǒng)。能夠很好地解決上述問題。是在充分利用現(xiàn)有網(wǎng)絡(luò)的基礎(chǔ)上,通過添加GGSN和SGSN實(shí)現(xiàn)數(shù)據(jù)的分組傳輸,從而將移動(dòng)通信與Internet網(wǎng)絡(luò)聯(lián)系起來,是目前無線數(shù)據(jù)傳輸應(yīng)用最廣泛的網(wǎng)絡(luò)。

  2 系統(tǒng)硬件組成

  輸油管道壓力監(jiān)控模塊的硬件結(jié)構(gòu)框圖如圖1所示,系統(tǒng)由模塊和監(jiān)控中心PC機(jī)組成,它們通過網(wǎng)絡(luò)進(jìn)行通信。節(jié)點(diǎn)由ARM模塊、GPRS模塊和傳感器模塊組成。其中,GPRS模塊主要用于數(shù)據(jù)的發(fā)送、接收以及短消息的接收;ARM模塊完成傳感器數(shù)據(jù)的編碼和TCP/IP封裝,控制GPRS模塊將數(shù)據(jù)發(fā)送到監(jiān)控中心,并接收和執(zhí)行監(jiān)控中心發(fā)送的控制命令;監(jiān)控中心為通過以太網(wǎng)卡連人Internet中的一臺(tái)具有固定IP的計(jì)算機(jī),采用VB.NET開發(fā)工具調(diào)用Winsock控件編寫監(jiān)控軟件,用于接收、處理和顯示各個(gè)監(jiān)控點(diǎn)發(fā)送的數(shù)據(jù),并對(duì)監(jiān)控點(diǎn)發(fā)送控制命令。

  

  其中,GPRS模塊是無線數(shù)據(jù)傳輸?shù)暮诵牟糠?,本文采用西門子公司的MC39i,它提供一個(gè)標(biāo)準(zhǔn)的RS232接口用于與外部應(yīng)用系統(tǒng)連接。

  3 系統(tǒng)軟件設(shè)計(jì)

  3.1 基于FreeRTOS的系統(tǒng)任務(wù)設(shè)計(jì)

  根據(jù)嵌入式實(shí)時(shí)操作系統(tǒng)模塊化設(shè)計(jì)理念,將系統(tǒng)軟件設(shè)計(jì)劃分為主控任務(wù)MainTask()、與網(wǎng)絡(luò)連接任務(wù)GPRSConctTask()、數(shù)據(jù)傳輸任務(wù)xDataTrsmtTask()、短消息處理任務(wù)xSMSProc-Task()和傳感器任務(wù)xSensorStatTask()。任務(wù)之間采用信號(hào)量、隊(duì)列和郵箱等進(jìn)行通信,其關(guān)系如圖2所示,其中MC39iSerialDrv()為串口驅(qū)動(dòng)程序。

  

  MC39iSerialDrv()為串口驅(qū)動(dòng)函數(shù),它負(fù)責(zé)將發(fā)送隊(duì)列xQSendToMC39i里面的數(shù)據(jù)發(fā)送給與MC39i相連接的串口。接收到數(shù)據(jù)后,將MC39i串口接收到的數(shù)據(jù)發(fā)送到接收隊(duì)列xQRecdFrom-MC39i中,數(shù)據(jù)的接收和發(fā)送是通過中斷服務(wù)子程序完成的。

  GPRSConctTask()實(shí)現(xiàn)MC39i模塊與GPRS網(wǎng)絡(luò)的連接,是遠(yuǎn)程數(shù)據(jù)傳輸?shù)幕A(chǔ)和關(guān)鍵。

{{分頁}}

  3.2 基于狀態(tài)機(jī)設(shè)計(jì)GPRS連接任務(wù)

  由于網(wǎng)絡(luò)和信號(hào)強(qiáng)弱等原因,可能導(dǎo)致節(jié)點(diǎn)與GPRS網(wǎng)絡(luò)連接的失敗。本文采用基于狀態(tài)機(jī)的結(jié)構(gòu)設(shè)計(jì)方法對(duì)各個(gè)階段產(chǎn)生的錯(cuò)誤進(jìn)行處理,保障模塊與GPRS網(wǎng)絡(luò)建立可靠連接。程序狀態(tài)機(jī)如圖3所示。

  

  3.3 基于uIP協(xié)議棧的傳輸層軟件設(shè)計(jì)

  利用GPRS模塊進(jìn)行數(shù)據(jù)傳輸時(shí),數(shù)據(jù)格式須符合互連網(wǎng)絡(luò)的TCP/IP協(xié)議標(biāo)準(zhǔn)。xDataTrsmtTask()任務(wù)完成傳輸層和網(wǎng)絡(luò)層處理。根據(jù)系統(tǒng)狀態(tài)(UDP或TCP態(tài)),傳輸層處理方式不同。

  TCP提供可靠的數(shù)據(jù)傳輸方式,其應(yīng)用層協(xié)議也比較多,被廣泛應(yīng)用于網(wǎng)絡(luò)通信領(lǐng)域。由于TCP的協(xié)議頭以及數(shù)據(jù)傳輸控制比較復(fù)雜,數(shù)據(jù)的傳輸效率較低,因而越來越多的實(shí)時(shí)小數(shù)據(jù)量的應(yīng)用,更傾向于使用基于UDP的數(shù)據(jù)傳輸協(xié)議。

  3.3.1 基于uIP的TCP數(shù)據(jù)傳輸方式的實(shí)現(xiàn)

  本文基于uIP TCP/IP協(xié)議棧實(shí)現(xiàn)TCP數(shù)據(jù)傳輸方式。uIP是由Adam Dunkels編寫的源代碼免費(fèi)開放的微型TCP/IP協(xié)議棧,傳輸層協(xié)議實(shí)現(xiàn)了UDP和TCP,鏈路層PPP協(xié)議可以作為uIP下面的設(shè)備驅(qū)動(dòng)來實(shí)現(xiàn),uIP系統(tǒng)底層和應(yīng)用程序之間的關(guān)系如圖4所示。應(yīng)用程序必須提供一個(gè)回應(yīng)函數(shù)給uIP,數(shù)據(jù)傳輸任務(wù)周期性調(diào)用UIP_AP-PCALL()函數(shù)處理事件的發(fā)生。

  

{{分頁}}

  進(jìn)行TCP數(shù)據(jù)傳輸之前,首先通過調(diào)用uIP協(xié)議棧提供的uip_connect()函數(shù)與監(jiān)控中心的監(jiān)控軟件建立一個(gè)TCP連接,TCP連接的三次握手均由uIP協(xié)議棧的uip_process()函數(shù)完成。

  默認(rèn)情況下,uIP協(xié)議棧的發(fā)送和接收共用一個(gè)緩沖區(qū),當(dāng)uIP處理緩沖區(qū)內(nèi)數(shù)據(jù)時(shí),必須關(guān)中斷,為了提高系統(tǒng)實(shí)時(shí)性,我們將其改為雙緩沖區(qū)模式。系統(tǒng)每個(gè)時(shí)鐘節(jié)拍分別對(duì)發(fā)送和接收緩沖區(qū)進(jìn)行掃描,如發(fā)現(xiàn)緩沖區(qū)非空時(shí),由uIP協(xié)議棧處理。接收數(shù)據(jù)時(shí),uip_process()對(duì)接收緩沖區(qū)內(nèi)數(shù)據(jù)進(jìn)行TCP和IP 協(xié)議頭解析,并將應(yīng)用數(shù)據(jù)發(fā)送到In-Buffer[]中。發(fā)送數(shù)據(jù)時(shí),由uip_process()完成發(fā)送緩沖區(qū)OutBuffer[]中數(shù)據(jù)的TCP/IP封裝,再調(diào)用uIP驅(qū)動(dòng)程序PPPSendData()進(jìn)行鏈路層PPP協(xié)議頭的封裝,并將封裝的數(shù)據(jù)發(fā)送到發(fā)送隊(duì)列xQSendToMC39i中。

  3.3.2 UDP數(shù)據(jù)傳輸?shù)膶?shí)現(xiàn)和改進(jìn)

  設(shè)計(jì)中采用對(duì)數(shù)據(jù)包進(jìn)行編碼和增加握手的方式實(shí)現(xiàn)UDP數(shù)據(jù)傳輸可靠性的改進(jìn)。通過給每個(gè)UDP數(shù)據(jù)包加上一個(gè)順序增加的ID號(hào),區(qū)別各個(gè)不同的數(shù)據(jù)包,利用它來對(duì)丟包的檢測(cè)。握手過程如圖5所示。設(shè)計(jì)中采用UDPIDProc()函數(shù)完成握手功能,發(fā)送的數(shù)據(jù)備份在一個(gè)緩沖區(qū)中,每次接收到確認(rèn)包后將對(duì)ID進(jìn)行檢驗(yàn),如果ID正確則將備份的數(shù)據(jù)刪除。如60 s內(nèi)未收到正確的ID確認(rèn)信息,則采用新的ID將備份的數(shù)據(jù)重傳,當(dāng)重傳失敗時(shí),可以進(jìn)行報(bào)警,從而實(shí)現(xiàn)了一種改進(jìn)的可靠性較高的UDP數(shù)據(jù)傳輸方式。

  

  4 系統(tǒng)測(cè)試

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

  

  GPRS網(wǎng)絡(luò)中UDP傳輸有效率大于99%,TCP傳輸有效率約為100%。本文設(shè)計(jì)的遠(yuǎn)程監(jiān)控系統(tǒng)采用經(jīng)改進(jìn)的UDP數(shù)據(jù)傳輸方式能檢測(cè)到丟包,通過多次重傳可以成倍降低UDP傳輸方式的丟包率,可以根據(jù)需要設(shè)置系統(tǒng)將一直重傳到數(shù)據(jù)成功到達(dá)為止,從而實(shí)現(xiàn)數(shù)據(jù)傳輸成功率為100%。

  5 結(jié) 論

  本文給出的遠(yuǎn)程監(jiān)控系統(tǒng)的設(shè)計(jì)方案具有可靠、實(shí)時(shí)、穩(wěn)定、通用和低成本等優(yōu)點(diǎn),實(shí)現(xiàn)了TCP和經(jīng)過改良的UDP兩種數(shù)據(jù)傳輸方式,可以滿足多種數(shù)據(jù)傳輸領(lǐng)域的要求。



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉