范志輝,李云龍
GSM(Global System for Mobile Communication)全球數(shù)字移動(dòng)通信系統(tǒng),是目前國(guó)內(nèi)覆蓋范圍最廣、系統(tǒng)可靠性最高、用戶數(shù)量最大的數(shù)字移動(dòng)蜂窩通訊系統(tǒng)?;贕SM網(wǎng)絡(luò)的短信服務(wù)SMS(short Message Service),作為一種廉價(jià)的無(wú)線應(yīng)用方案越來(lái)越受到用戶的歡迎和關(guān)注,在數(shù)據(jù)采集、遠(yuǎn)程監(jiān)控等領(lǐng)域得到了廣泛的應(yīng)用[1][2]。電信、電力、軍隊(duì)等部門(mén)的庫(kù)房往往存放著重要的機(jī)器設(shè)備,需要實(shí)時(shí)檢測(cè)房間的漏水、高溫、斷電、煙火、盜賊入侵等情況,并能夠及時(shí)報(bào)告異常情況。早期的監(jiān)控系統(tǒng)基于有線網(wǎng)絡(luò)存在著布線困難、線路容易被破壞等問(wèn)題?;贕SM研究開(kāi)發(fā)一套功能全面,適合無(wú)人值守的機(jī)房環(huán)境監(jiān)控系統(tǒng)具重要的意義。安全可靠、穩(wěn)定有效應(yīng)該是對(duì)無(wú)人值守系統(tǒng)的基本要求。系統(tǒng)軟件控制著硬件的運(yùn)行和調(diào)配,扮演著十分重要的角色,文章詳細(xì)介紹了監(jiān)控系統(tǒng)軟件設(shè)計(jì)的策略和實(shí)現(xiàn)方法,并給出了系統(tǒng)的實(shí)驗(yàn)情況和使用效果。
系統(tǒng)通過(guò)各類傳感器獲取房間供電電壓、浸水、溫濕度等環(huán)境信息,通過(guò)網(wǎng)絡(luò)獲取重要服務(wù)器的通斷情況,當(dāng)遇到異常情況通過(guò)GSM向機(jī)房管理員發(fā)送報(bào)警短消息,通過(guò)網(wǎng)絡(luò)向遠(yuǎn)程管理中心發(fā)送網(wǎng)絡(luò)報(bào)警信息,同時(shí)機(jī)房值班室報(bào)警喇叭響,報(bào)警指示燈閃亮。用戶隨時(shí)可通過(guò)短信發(fā)送命令控制機(jī)房設(shè)備開(kāi)關(guān)機(jī)如開(kāi)啟空調(diào)等。系統(tǒng)工作原理見(jiàn)圖1,具有如下特性:
● 實(shí)時(shí)檢測(cè)機(jī)房環(huán)境信息;
● 支持中英文短信;
● 遠(yuǎn)程短信修改系統(tǒng)控制參數(shù);
● 登錄監(jiān)控主機(jī)需要密碼;
● 報(bào)警方式多樣;
● 預(yù)留16路繼電器輸出供用戶自定義;
● 穩(wěn)定可靠,適合無(wú)人值守。
圖1 系統(tǒng)工作原理示意圖
軟件基于 WindowsXP系統(tǒng)平臺(tái),開(kāi)發(fā)語(yǔ)言使用VC++6.0,數(shù)據(jù)庫(kù)采用SQL Sever2000。系統(tǒng)軟件策略:基于單文檔模式使用定時(shí)器定時(shí)查詢傳感器狀態(tài),有異常發(fā)送報(bào)警指令。軟件流程見(jiàn)圖2。下面介紹軟件設(shè)計(jì)中解決的難點(diǎn)問(wèn)題。
圖2 軟件流程圖
GSM Moderm通過(guò)標(biāo)準(zhǔn)RS232接口與PC機(jī)相連,支持標(biāo)準(zhǔn)AT指令。監(jiān)控主機(jī)與GSM模塊通信通過(guò)內(nèi)嵌AT指令的串口命令完成。用到的串口命令及嵌入方法為:WriteFile (ATcmd,nLength of ATcmd,&dwNumRead, NULL)和 ReadFile(ATcmd,nLength of ATcmd,ReadFile),這里ATcmd一般為char類型,通過(guò)sprintf()函數(shù)將AT指令裝入ATcmd中,示例:sprintf(ATcmd, "AT+CMGF=0 ",12),該語(yǔ)句將AT指令“AT+CMGF=0回車換行”放入ATcmd中,表示采用中文格式顯示短消息內(nèi)容。其它AT指令也用該方法嵌入串口命令中。本系統(tǒng)用到的AT指令見(jiàn)表1。
表1 常用的AT指令
實(shí)時(shí)短信報(bào)警和短信遠(yuǎn)程控制功能要求GSM雙向收發(fā)短信。系統(tǒng)軟件建立了兩個(gè)子循環(huán) A和 B,分別負(fù)責(zé)發(fā)送和接收短信,兩循環(huán)相互獨(dú)立運(yùn)行,操作串口。由于不管是發(fā)送還是接收一條短消息都需要多次寫(xiě)讀串口,為避免“答非所問(wèn)”的兩子循環(huán)搶占串口現(xiàn)象,系統(tǒng)創(chuàng)新研制了“雙向鎖”機(jī)制。通過(guò)兩個(gè)全局變量控制子循環(huán)對(duì)串口的操作:當(dāng)子循環(huán)A操作串口時(shí),使變量B無(wú)效,子循環(huán)B不能操作串口,待子循環(huán)A完成串口操作后,使變量B有效,子循環(huán)B可操作串口,同時(shí)使變量A無(wú)效,子循環(huán)A不能操作串口,待子循環(huán)B完成操串口作后,使變量A有效。此機(jī)制有效解決了讀寫(xiě)GSM模塊沖突的問(wèn)題。
常見(jiàn)的發(fā)送和接收GSM SMS信息格式有兩種[3] :Text Mode和PDU Mode,Text Mode為純文本字符用于傳輸英文和漢語(yǔ)拼音,便于編程實(shí)現(xiàn)但不方便用戶使用。PDU Mode適合傳輸中文,但編碼比較麻煩,PDU串不僅包含消息本身,還包含服務(wù)中心號(hào)碼、目標(biāo)號(hào)碼、自身號(hào)碼、編碼方式和服務(wù)時(shí)間等。PDU 串其實(shí)是一串 ASCII碼,由‘0''-‘9''、‘A''-‘F''組成,一般由編碼得到,常見(jiàn)的編解碼算法有7-bit、8-bit和UCS2。這些算法的實(shí)現(xiàn)都需要編寫(xiě)復(fù)雜的C程序代碼,有一定難度。網(wǎng)頁(yè)http://www.vckbase.com/document/viewdoc/?id=1133有關(guān)于這方面的詳細(xì)介紹。由于本系統(tǒng)的報(bào)警內(nèi)容相對(duì)固定,用到的漢字總數(shù)不超過(guò)40個(gè),為了簡(jiǎn)化編碼算法,加快研發(fā)進(jìn)度,提出查找匹配法“編碼”中文短消息。由于每個(gè)漢字的PDU碼(Unicode碼)可由區(qū)位碼算出,設(shè)計(jì)時(shí)預(yù)先根據(jù)區(qū)位碼算出這40個(gè)漢字的Unicode碼放入程序中(如“機(jī)”字的Unicode碼是字符串“673A”,“房”字的Unicode碼是字符串“623F”),對(duì)于漢字str查找匹配法實(shí)現(xiàn)方法如下:
最多經(jīng)過(guò)39次查找,最終定能找到str對(duì)應(yīng)的字符串。編排時(shí)將最常用的漢字放在前面可以較少系統(tǒng)開(kāi)支。將該段代碼放入子程序中,消息內(nèi)容有幾個(gè)漢字只要調(diào)用幾次子程序即可實(shí)現(xiàn)中文編碼。此算法編碼效率比7-bit、8-bit和UCS2方式高,適合于內(nèi)容不多且相對(duì)固定的情況。
操作員隨時(shí)可以向系統(tǒng)發(fā)送短消息查看機(jī)房環(huán)境狀態(tài)或者控制系統(tǒng)完成如重啟服務(wù)器、關(guān)閉空調(diào)等操作,實(shí)現(xiàn)遠(yuǎn)程無(wú)線控制功能。為保證系統(tǒng)安全、準(zhǔn)確處理接收到的命令短信,設(shè)計(jì)中采用如下策略:用定時(shí)查詢方式處理GSM接收到的短信,采用密鑰策略對(duì)短信內(nèi)容和來(lái)電身份雙重驗(yàn)證。具體來(lái)說(shuō),就是在定時(shí)循環(huán)中先正確配置GSM工作模式,然后讀取當(dāng)前GSM中短信數(shù)量,找未讀短信(避免重復(fù)處理以前的命令),判斷該短信是否來(lái)自預(yù)定手機(jī)號(hào)碼(避免被非操作員指揮),比對(duì)口令是否正確,以上任何一步不正確退出循環(huán),否則分析短信內(nèi)容,決定是重啟、還是關(guān)機(jī)以及具體對(duì)哪一臺(tái)設(shè)備操作??诹畈欢ㄆ谛薷?,確保安全。采用該策略有效保證了短信命令的穩(wěn)健性。
本系統(tǒng)試運(yùn)行階段主要解決了以下問(wèn)題:
1)短消息在VC程序中發(fā)送不出去的問(wèn)題;
同樣的AT指令執(zhí)行順序在超級(jí)終端可以正常發(fā)送短消息,在自研的 VC程序中卻不能正確發(fā)送。經(jīng)過(guò)分析知道GSM網(wǎng)絡(luò)有一定的頻率漂移現(xiàn)象[4] ,信號(hào)在信道上的傳輸會(huì)出現(xiàn)時(shí)間延遲。超級(jí)終端已經(jīng)自動(dòng)判斷了前一語(yǔ)句是否正確執(zhí)行,才允許寫(xiě)下一條指令。在程序中每條 AT+CMGS指令后加入 ReadComm(ATcmd,cmdlength)函數(shù),起判斷作用,然后再寫(xiě)短信內(nèi)容,問(wèn)題解決。
2)報(bào)警的次數(shù)控制
由于機(jī)房距離較遠(yuǎn),當(dāng)警報(bào)發(fā)出后,管理員不能及時(shí)趕到現(xiàn)場(chǎng),報(bào)警次數(shù)過(guò)多會(huì)造成資源浪費(fèi)(短信0.1元/條),警報(bào)過(guò)少可能不能起到提醒作用。有時(shí)異常很快又恢復(fù)正常(如電壓),如果這時(shí)候不能及時(shí)告知管理員,也會(huì)造成管理員頻繁在兩校區(qū)之間奔走。通過(guò)實(shí)驗(yàn)確定這樣的策略:當(dāng)異常發(fā)生時(shí)先連續(xù)發(fā)送4條網(wǎng)絡(luò)報(bào)警信息,2條短消息,同時(shí)新校區(qū)值班室報(bào)警燈閃亮,若異常保持,則每5分鐘發(fā)送一條短消息,新校區(qū)值班室報(bào)警燈閃亮,不再發(fā)送網(wǎng)絡(luò)報(bào)警信息;若異?;謴?fù),則發(fā)送一條機(jī)房環(huán)境恢復(fù)正常信息,解除警報(bào)。
本系統(tǒng)已于08年3月投入河南科技大學(xué)新校區(qū)網(wǎng)絡(luò)中心機(jī)房使用,已準(zhǔn)確報(bào)警夏季機(jī)房浸水、空調(diào)死機(jī)、供電故障共計(jì)六次,遠(yuǎn)程重啟郵件服務(wù)器、實(shí)名認(rèn)證服務(wù)器累計(jì)5次,避免了用戶的財(cái)產(chǎn)損失,提高了工作效率。特別是有一次主路由器死機(jī),網(wǎng)絡(luò)報(bào)警和有線電話報(bào)警無(wú)效,用戶通過(guò)短信遠(yuǎn)程重啟主路由器,恢復(fù)網(wǎng)絡(luò)暢通,顯示了GSM網(wǎng)絡(luò)與有線網(wǎng)絡(luò)相比的優(yōu)越性。該項(xiàng)目為學(xué)校節(jié)約開(kāi)支約15萬(wàn)元,實(shí)現(xiàn)網(wǎng)絡(luò)中心機(jī)房的無(wú)人值守管理,節(jié)約人力資源,遠(yuǎn)程無(wú)線控制機(jī)房設(shè)備提高了工作效率。
本文介紹了一種基于GSM的機(jī)房環(huán)境綜合監(jiān)控系統(tǒng),詳細(xì)介紹了軟件設(shè)計(jì)中解決的難點(diǎn)。系統(tǒng)能夠?qū)崟r(shí)檢測(cè)機(jī)房電壓、漏水、聲響、煙火及溫濕度等環(huán)境指標(biāo),充分發(fā)揮GSM 網(wǎng)絡(luò)無(wú)線、可靠、覆蓋范圍廣等優(yōu)點(diǎn),投入使用半年多來(lái)多次及時(shí)準(zhǔn)確報(bào)告機(jī)房危險(xiǎn)情況。系統(tǒng)具有遠(yuǎn)程無(wú)線控制、功能全面、無(wú)人值守等特點(diǎn),具有較好的通用性和擴(kuò)展性,適合于各類機(jī)房和倉(cāng)庫(kù)的環(huán)境監(jiān)控,有很好的應(yīng)用前景。
[1] 嚴(yán)錫君等.基于GPRS的灌區(qū)自動(dòng)化信息管理系統(tǒng)的研究與實(shí)現(xiàn)[J] .微型電腦應(yīng)用,2008(11),24-26.
[2] 王志勇,巴力登,石磊.基于 B/S結(jié)構(gòu)下分布式控制系統(tǒng)的實(shí)時(shí)監(jiān)控[J] .工業(yè)控制計(jì)算機(jī), 2006 (4),95-99.
[3] 李元臣,劉維群.基于GSM模塊的遠(yuǎn)程監(jiān)控系統(tǒng)[J] .微計(jì)算機(jī)信息,2007,10-1,90-94.
[4] 胡修林,李喜林,唐祖平.基于嵌入式多任務(wù)系統(tǒng)的串口通信[J] .單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2006 (6),111-114.