馮凌杰,張 梅,范建豐
(華南理工大學(xué)精密電子制造裝備教育部工程研究中心自動化學(xué)院,廣州510640)
遠(yuǎn)程監(jiān)控是國內(nèi)外研究的前沿?zé)衢T課題,基于Internet的遠(yuǎn)程監(jiān)控取得了巨大的發(fā)展,被廣泛應(yīng)用于機(jī)器人遠(yuǎn)程分布式控制、設(shè)備遠(yuǎn)程故障診斷、遠(yuǎn)程網(wǎng)絡(luò)實(shí)驗(yàn)室等領(lǐng)域。
目前的數(shù)據(jù)采集和遠(yuǎn)程監(jiān)控系統(tǒng)中,通訊方式分為有線通訊和無線通訊。有線通信因其線路架設(shè)成本太高,位置固定不能移動,從而限制了在偏遠(yuǎn)地區(qū)和移動環(huán)境下的應(yīng)用。無線通信則克服了有線通信的缺點(diǎn)[1]。GPRS是一種基于GSM系統(tǒng)的無線分組交換技術(shù)。GPRS借用了移動的接入網(wǎng)和傳輸網(wǎng),提供端到端、廣域的無線IP連接。所以,GPRS較其他通信鏈路具有五大優(yōu)點(diǎn):瞬間上網(wǎng)、永遠(yuǎn)在線、快速傳輸、按量計費(fèi)、自由切換。因此,GPRS通信方式廣泛的應(yīng)用于各類遠(yuǎn)程監(jiān)控系統(tǒng)。
基于GPRS通信鏈路的實(shí)現(xiàn)方案:客戶端采用RAM7+一體化GPRS DTU實(shí)現(xiàn)數(shù)據(jù)的采集與收發(fā),服務(wù)器端采用通信模塊與數(shù)據(jù)處理模塊相分離的實(shí)現(xiàn)方案。這種實(shí)現(xiàn)降低了系統(tǒng)的開發(fā)難度,提高了系統(tǒng)的實(shí)時性。整個遠(yuǎn)程監(jiān)控系統(tǒng)的構(gòu)建如圖1所示。
目前,GPRS的通信鏈路主要有四種實(shí)現(xiàn)方案:
(1)中心采用ADSL等INTELNET公網(wǎng)連接,采用公網(wǎng)固定IP。監(jiān)控點(diǎn)直接向中心發(fā)起連接,系統(tǒng)運(yùn)行可靠穩(wěn)定。
(2)中心采用主副GPRS-DTU,采用移動內(nèi)網(wǎng)動態(tài)IP+移動DNS解析服務(wù)。此方案可以節(jié)約固定IP的費(fèi)用,但某些移動公司不提供DNS解析服務(wù),所以應(yīng)用受到限制,并且此方案實(shí)時性和穩(wěn)定性較差。
圖1 遠(yuǎn)程監(jiān)控系統(tǒng)構(gòu)建
(3)中心采用主副GPRS-DTU,采用移動APN專網(wǎng)固定IP。這種方案具有移動內(nèi)網(wǎng)固定IP,傳輸數(shù)據(jù)不經(jīng)過公網(wǎng),節(jié)省了寬帶專線費(fèi)用,所以其穩(wěn)定性,安全性和性價比都比方案二好。
(4)中心采用APN專線,采用內(nèi)網(wǎng)固定IP。此方案在實(shí)時性、安全性和穩(wěn)定性方面都比前三種方案有很大提高,適用于數(shù)據(jù)點(diǎn)多、安全性和實(shí)時性要求高的環(huán)境。缺點(diǎn)是費(fèi)用太高[2-3]。
綜合考慮穩(wěn)定性和開發(fā)成本,最終決定采用方案一。
GPRS有TCP和UDP兩種通信協(xié)議。TCP是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。TCP協(xié)議有五大特點(diǎn):①面向連接的傳輸;②端到端的通信;③高可靠性;④全雙工方式傳輸;⑤采用字節(jié)流方式。UDP提供的服務(wù)是不可靠的、無連接的,因UDP無需進(jìn)行確認(rèn)排序以及網(wǎng)絡(luò)信息的發(fā)送,其數(shù)據(jù)包的包頭較TCP小,占用網(wǎng)絡(luò)資源少,實(shí)時性較高。因此,TCP協(xié)議更多的應(yīng)用于對數(shù)據(jù)傳輸?shù)目煽啃砸筝^高,但對實(shí)時性要求不是很高的情況,例如文件傳送、計算機(jī)郵件等;而UDP適用于對數(shù)據(jù)傳輸?shù)目煽啃砸蟛皇呛芨?,但對?shí)時性要求比較高的情況,例如視頻電話會議系統(tǒng)等[4]。
綜合考慮遠(yuǎn)程監(jiān)控的實(shí)時性和數(shù)據(jù)傳輸?shù)目煽啃裕瑳Q定選用TCP協(xié)議。
在客戶端,利用RAM7開發(fā)出基于UC/OS II實(shí)時操作系統(tǒng)的串口通信程序,從而將RAM7采集到的數(shù)據(jù)發(fā)送給GPRS DTU模塊。UC/OS II操作系統(tǒng)是基于任務(wù)的,所以在該程序中建立了一個主函數(shù)和兩個任務(wù)。
主函數(shù)采用UC/OS II中main函數(shù)的典型寫法,只用于初始化UC/OS II、啟動多任務(wù)環(huán)境和建立一個 TaskUart0Send 任務(wù)[5]。
TaskUart0Send任務(wù)完成目標(biāo)板的初始化和數(shù)據(jù)的發(fā)送,并建立一個數(shù)據(jù)發(fā)送任務(wù)Taskrecv:
UART0_Init(115200);/*初始化目標(biāo)板的串口*/
UART1_SendStr(snd);/*向串口發(fā)送字符串snd*/
OSTaskCreate(Taskrecv,(void*)0,&TaskStk[TaskStkLengh-1],2);
TaskRecv任務(wù)主要完成數(shù)據(jù)的接收[6],本任務(wù)采用循環(huán)接收,每次接收一個字節(jié),直到接收完規(guī)定的字節(jié)數(shù)為止。
for(i=0;i<8;i++)
{if(UART0Getch())
{
temp=UART0Getch();
*cp++=temp;
}
}
該服務(wù)器的通信模塊采用socket套接字的非阻塞實(shí)現(xiàn)形式,其基本流程如圖2所示。
圖2 服務(wù)器通信模塊流程圖
圖2 中啟動服務(wù)器函數(shù)的主要功能是初始化套接字[7],包括初始化 windows socket的動態(tài)庫、創(chuàng)建新的套接字并設(shè)置其為非阻塞模式、綁定套接字并進(jìn)行監(jiān)聽。
創(chuàng)建清理資源線程和接收客戶端線程的程序模塊主要是實(shí)現(xiàn)接收客戶端請求線程和釋放資源線程的創(chuàng)建。接收客戶端請求線程用來完成接收客戶端的連接請求,釋放資源線程主要用于當(dāng)數(shù)據(jù)傳輸完畢時清理相應(yīng)線程所占的系統(tǒng)資源。
當(dāng)完成接收客戶端請求時,在臨界區(qū)內(nèi)以sAccept套接字和addrclient客戶端地址為參數(shù)創(chuàng)建一個cClient類的實(shí)例,將該實(shí)例作為一個節(jié)點(diǎn)加入用戶鏈表cClientlist中,并為該客戶端創(chuàng)建接收和發(fā)送數(shù)據(jù)線程,從而使服務(wù)器在各自的線程中調(diào)用socket中的recv()和send()l來實(shí)現(xiàn)數(shù)據(jù)的收發(fā):
//創(chuàng)建接收客戶端數(shù)據(jù)線程
m_hThreadRecv=CreateThread(NULL,0,Recv-DataThread,this,0,&ulThreadId);
//創(chuàng)建數(shù)據(jù)發(fā)送線程
m_hThreadSend=CreateThread(NULL,0,Send-DataThread,this,0,&ulThreadId);
結(jié)束進(jìn)程完成服務(wù)器退出是最后清理工作,清理在啟動主線程時申請的資源[8]。其中包括釋放臨界區(qū)對象和事件對象句柄、關(guān)閉SOCKET以及卸載Windows Sockets DLL。
通過實(shí)際的鏈路搭建和調(diào)試運(yùn)行,證明該系統(tǒng)可以很好的滿足遠(yuǎn)程監(jiān)控系統(tǒng)對實(shí)時性和移動性的要求,并且所用費(fèi)用不高,具有很好的性價比。實(shí)際的客戶端搭建如圖3所示。
圖3 客戶端的搭建
[1]GeoffreySanders.GPRSnetworks[C].Chichester,England;Hoboken,NJ:Wiley,2003:210 -230.
[2]趙亮,黎峰.GPRS無線網(wǎng)絡(luò)在遠(yuǎn)程數(shù)據(jù)采集中的應(yīng)用[J].計算機(jī)工程與設(shè)計,2005(9)期:2552 -2554.
[3]Yi- Bing Lin,Shun - Ren Yang.A mobility management strategy for GPRS[J].IEEE Transactions on Wireless Communications,2003,2(6):1178 -1188.
[4]TCP/IP協(xié) 議[EB/OL].http://tieba.baidu.com/f?kz=477764940.
[5]Labrosse J J.MicroC/OS - II The Real- Time Kenel[M].Second Edition.邵貝貝譯.北京:北京航空航天大學(xué)出版社,2006.
[6]周立功,張華.深入淺出 RAM7-LPC213X/214X(下冊)[M].北京:北京航空航天大學(xué)出版社,2006.
[7]Socket編程的實(shí)現(xiàn)過程[EB/OL].http://blog.sina.com.cn/s/blog_59f0cdb00100ajgl.htm.
[8]孫海民.精通windows socket網(wǎng)絡(luò)開發(fā)[M].北京:北京郵電出版社,2008.