楊 帆, 吳育芳, 張彩麗
(1.陜西科技大學(xué) 電氣與信息工程學(xué)院, 陜西 西安 710021; 2.陜西科技大學(xué) 機(jī)電工程學(xué)院, 陜西 西安 710021)
數(shù)據(jù)傳輸技術(shù)是遠(yuǎn)程監(jiān)控應(yīng)用系統(tǒng)開發(fā)中的關(guān)鍵技術(shù)之一,在一定程度上是制約系統(tǒng)開發(fā)進(jìn)程、應(yīng)用性能的瓶頸因素.尤其是在一些監(jiān)控對象數(shù)目龐大、空間分布距離較遠(yuǎn)的監(jiān)控系統(tǒng)中,數(shù)據(jù)傳輸技術(shù)甚至關(guān)系到系統(tǒng)開發(fā)成敗.早期數(shù)據(jù)遠(yuǎn)傳主要是鋪設(shè)通信電纜的有線通信或者基于數(shù)傳電臺的無線通信,存在通信成本高昂,維護(hù)困難的問題.
隨著Internet的出現(xiàn),采用接入Internet成為遠(yuǎn)程監(jiān)控系統(tǒng)數(shù)據(jù)傳輸?shù)闹匾侄?但是對于某些應(yīng)用場合,如野外作業(yè)、被監(jiān)控對象是移動的目標(biāo)等,有線監(jiān)控系統(tǒng)存在著明顯的局限,如布線困難、系統(tǒng)成本高等.
近年來,隨著移動通信網(wǎng)絡(luò)的不斷擴(kuò)展和功能的不斷提升,依賴于現(xiàn)有商業(yè)移動通信業(yè)務(wù)實現(xiàn)遠(yuǎn)程監(jiān)控系統(tǒng)數(shù)據(jù)傳輸技術(shù)已經(jīng)成為業(yè)內(nèi)共識,其中基于GSM網(wǎng)絡(luò)的通信技術(shù)最受關(guān)注,GSM網(wǎng)絡(luò)數(shù)據(jù)業(yè)務(wù),尤其是SMS業(yè)務(wù)開發(fā)技術(shù)成為研究的熱點[1].
SMS作為GSM網(wǎng)絡(luò)中最流行、最普及的數(shù)據(jù)傳輸業(yè)務(wù),由于不受地域限制、成本低廉、功能強(qiáng)大,配置靈活等優(yōu)點,在傳輸數(shù)據(jù)量不大、監(jiān)控對象較多、空間分布距離遠(yuǎn),實時性要求不高的應(yīng)用場合中得以廣泛應(yīng)用.其一般應(yīng)用系統(tǒng)架構(gòu)如圖1所示[2-4]:
圖1中各個監(jiān)測點通過連接的GSM Modem將采集的數(shù)據(jù)以SMS的形式發(fā)送給監(jiān)控中心計算機(jī),監(jiān)控中心計算機(jī)通過連接的GSM Modem池接收來自各個監(jiān)測點的數(shù)據(jù),進(jìn)行分析處理,并可根據(jù)需要向監(jiān)測點發(fā)出相關(guān)指令,或者向監(jiān)管人員發(fā)出報警、提醒等信息.
由于利用SMS進(jìn)行數(shù)據(jù)傳輸可以有效解決傳統(tǒng)無線數(shù)據(jù)傳輸設(shè)計方案中成本高昂、傳輸距離短、可靠性低、維護(hù)困難等顯著缺陷,因而在遙控、遙測、工業(yè)數(shù)據(jù)采集系統(tǒng)、防盜報警、交通運輸監(jiān)控管理、廣告信息發(fā)布等應(yīng)用中大放光彩.
目前,基于SMS進(jìn)行遠(yuǎn)程監(jiān)控系統(tǒng)的數(shù)據(jù)傳輸技術(shù)主要存在兩種典型的應(yīng)用模式[5],即發(fā)送短消息常用的PDU(Protocol Data Unit,協(xié)議數(shù)據(jù)單元)模式和TEXT模式.使用TEXT模式收發(fā)短信代碼簡單,實現(xiàn)起來十分容易,但最大的缺點是不能收發(fā)中文短信;而PDU模式不僅支持中文短信,也能發(fā)送英文短信.PDU模式收發(fā)短信可以使用3種編碼,7-bit、8-bit和UCS2編碼.其中,7-bit編碼用于發(fā)送普通的ASCII字符,8-bit編碼通常用于發(fā)送數(shù)據(jù)消息,UCS2編碼用于發(fā)送Unicode字符.
由于PDU格式編碼過程相比TEXT格式,比較復(fù)雜,因此大多數(shù)SMS數(shù)據(jù)傳輸技術(shù)在實際應(yīng)用中都選擇基于TEXT格式進(jìn)行數(shù)據(jù)傳輸,以便降低系統(tǒng)開發(fā)難度.隨著用戶的應(yīng)用需求不斷變化,中文SMS傳輸正在越來越受到歡迎.
本文針對用戶需求的變化以及目前PDU格式SMS收發(fā)比較麻煩的特點,在詳細(xì)分析GSM Modem AT指令的基礎(chǔ)上,提出了一種簡單易行的新型中文SMS收發(fā)方法,該方法可以大大簡化中文SMS數(shù)傳開發(fā)的難度.
SMS是GSM網(wǎng)絡(luò)數(shù)據(jù)傳輸業(yè)務(wù),遠(yuǎn)程監(jiān)控中基于SMS的數(shù)據(jù)傳輸一般借助GSM Modem和單片機(jī)或PC相連,通過AT指令控制GSM Modem實現(xiàn)SMS的收發(fā).用于控制GSM Modem,實現(xiàn)SMS收發(fā)的典型AT指令如表1所示[6].
表1 SMS收發(fā)常用指令
如前所述,遠(yuǎn)程監(jiān)控中常用的SMS收發(fā)格式無外乎TEXT和PDU兩種.SMS收發(fā)首先是SMS格式的設(shè)置,通過“AT+CMGF=
表2 AT+CMGS命令格式
其中:
一個完整的TEXT格式SMS發(fā)送主要過程如下:
AT+CMGF=1 //設(shè)置為Text 模式
AT+CMGS=15249271078 //設(shè)置SMS發(fā)送目標(biāo)號碼
>Hello,This is a Test!
而PDU格式SMS發(fā)送相比TEXT格式而言,要復(fù)雜得多,主要由短信中心號碼處理、信息發(fā)送目標(biāo)號碼處理、發(fā)送信息編碼、信息組合與信息發(fā)送等5個步驟的操作組成[7],現(xiàn)以一個實例來說明,假設(shè)發(fā)送的短信如下:
目標(biāo)號碼:+8615249271078
短信內(nèi)容:工作愉快!
短信中心號碼:+8613800290500
Step1 短信中心號碼處理:用字符串 addr 表示
(1)將短信息中心號碼去掉+號,看看長度是否為偶數(shù),如果不是,最后添加F
即addr=“+8613800290500”即 addr=“8613800290500F”
(2)將奇數(shù)位和偶數(shù)位交換.即 addr=“683108200905F0”
(3)將短信息中心號碼前面加上字符91,91是國際化的意思,即 addr=“91683108200905F0”
(4)算出addr長度,結(jié)果除2,格式化成2位的16進(jìn)制字符串,16/2=8=>“08”
即addr=“0891683108200905F0”
Step2 手機(jī)號碼處理:用字符串phone
(1)將手機(jī)號碼去掉+號,看看長度是否為偶數(shù),如果不是,最后添加F
即phone=“8615249271078”=>phone=“8615249271078F”
(2)將手機(jī)號碼奇數(shù)位和偶數(shù)位交換.=>phone=“685142291770F8”
Step3 短信息部分處理:用字符串msg表示
(1)轉(zhuǎn)字符串轉(zhuǎn)換為Unicode代碼,例如“工作愉快!”的unicode代碼為5DE54F5C61095FEBFF01
(2)將msg長度除2,保留兩位16進(jìn)制數(shù),即 5DE54F5C61095FEBFF01=20/2=>“0A”,再加上msg,即msg=“0A5DE54F5C61095FEBFF01”
Step4 組合
(1)手機(jī)號碼前加上字符串11000D91(1100:固定;0D:手機(jī)號碼的長度,不算+號,十六進(jìn)制表示;91:發(fā)送到手機(jī)為91,發(fā)送到小靈通為81),即phone=“11000D91”+phone,也就是說11000D91683106423346F9
(2)手機(jī)號碼后加上000800 和剛才的短信息內(nèi)容,即phone=phone+“000800”+msg
即11000D91685142291770F8+000800+0A5DE54F5C61095FEBFF01
=>phone=
11000D91685142291770F80008000A5DE54F5C61
095FEBFF01
(3)phone長度除以2,格式化成2位的十進(jìn)制數(shù).
即11000D91683106423346F90008000A5DE54F5
C61095FEBFF01=>50位/2=>25
Step5 輸出如下指令實現(xiàn)PDU消息的發(fā)送:
AT+CMGF=0 <回車>
OK
AT+CMGS=25<回車>
> addr+phone
如此繁雜的處理過程在開發(fā)中無疑是令人頭疼的,而這些步驟實際上都是與SMS傳輸格式具有密切關(guān)系,一個完整的SMS消息所包含的所有報頭信息被以二進(jìn)制字符串格式傳送.二進(jìn)制字符串格式發(fā)送方和接收方略有不同,發(fā)送方PDU 格式如表3所示,SMS接收方PDU 格式如表4所示.
表3 SMS-SUBMIT-PDU(發(fā)送方PDU格式)
表4 SMS-DELIVER-PDU(接收方PDU格式)
表中各組成部分含義如表5所示.
表5 SMS PDU格式組成元素含義
綜上所述,作為無線數(shù)據(jù)傳輸?shù)闹匾夹g(shù),SMS在處理英文消息時是簡單易行的,但是中英文混編或者中文SMS收發(fā)時的PDU格式處理比較麻煩,因而成為相應(yīng)系統(tǒng)開發(fā)的障礙,制約了該技術(shù)更廣泛地應(yīng)用.
英文SMS收發(fā)的簡單過程無疑是令人神往的,如果中文SMS收發(fā)也能像其一樣簡單,必然會給開發(fā)人員帶來巨大福音.幸運的是,在GSM Modem AT指令集中還存在這一個經(jīng)常被開發(fā)人員所忽略的指令——用于設(shè)置短消息文本參數(shù)(只適用于TEXT模式下)的指令“AT+CSMP”.
命令格式:AT+CSMP=
響應(yīng):+CSMP:
其中參數(shù)
表6
表中bit1、bit 0一般取值01,標(biāo)識SMS方向是手機(jī)->消息中心;bit2取值0 表示后續(xù)沒有短信息要發(fā)送,取值1表示后續(xù)還有短信息;bit4、bit3一般賦值1 0;bit 5取值0關(guān)閉傳送回報,取值1打開傳送回報.通常情況下系統(tǒng)默認(rèn)為010001,即為0X11 十進(jìn)制為17(此時沒有狀態(tài)報告回報).
參數(shù)
參數(shù)
參數(shù)
而數(shù)據(jù)UCS2編碼恰恰是PDU格式SMS的編解碼方式,也就是說,指令A(yù)T+CSMP和PDU數(shù)據(jù)收發(fā)一定存在某種不為人所知的關(guān)系.雖然這條指令是用來設(shè)置TEXT格式SMS相關(guān)參數(shù).
根據(jù)AT+CSMP指令的含義,對照表5中PDU格式的SMS組成可以發(fā)現(xiàn),該指令所設(shè)置的參數(shù)在PDU串中都有對應(yīng)的設(shè)置,很明顯的是vp/scts、pid、dcs這三個參數(shù)在表5中可以看到一樣的參數(shù)在其中,而且其意義也是一樣的.而在PDU串中的其他一些部分的組成對使用者而言并不是一定要去了解或者應(yīng)用的.
也就是說,即使在TEXT格式下,通過AT+CSMP指令設(shè)置必要的參數(shù)值,仍然可以發(fā)送、接收UCS2編碼的SMS.而且此時不需要對SCA進(jìn)行取值然后編碼;不需要對接收方號碼進(jìn)行編碼、解碼等分析處理過程;不需要對發(fā)送方號碼進(jìn)行編碼、解碼等分析處理過程;不需要對短信內(nèi)容進(jìn)行編碼、解碼等分析處理過程;不需要在計算length的值中應(yīng)包含哪些部分;不需要因為發(fā)送中文短信而去構(gòu)建PDU格式信息的大量編碼.太多的不需要使得發(fā)短信的流程大大簡化,只需要簡單的指令設(shè)置就可完成中文或者中英文混編SMS的收發(fā).
TEXT格式下中文或者中英文SMS發(fā)送具體處理過程如下:
Step1 利用AT+CMGF指令設(shè)置GSM Modem的SMS收發(fā)格式為TEXT格式
Step2 利用AT+CSMP指令設(shè)置TEXT格式下文本參數(shù),使其處于UCS2編碼狀態(tài)
Step3 將發(fā)送的中文或者中英文混編字符串信息轉(zhuǎn)換為UCS2編碼的16進(jìn)制字符串
Step4 利用AT+CMGS指令發(fā)送Step3中得到16進(jìn)制字符串
TEXT格式下中文或者中英文SMS接收具體處理過程如下:
Step1 利用AT+CMGF指令設(shè)置GSM Modem的SMS收發(fā)格式為TEXT格式
Step2 利用AT+CSMP指令設(shè)置TEXT格式下文本參數(shù),使其處于UCS2編碼狀態(tài)
Step3 利用AT+CMGR指令接收SMS
Step4 將Step3中得到16進(jìn)制字符串轉(zhuǎn)換為字符串.
為了驗證上述過程的可行性,并且清晰理解PDU和TEXT格式下中文SMS收發(fā)過程難易不同,現(xiàn)利用Wavecom公司GSM Modem進(jìn)行測試.假設(shè)發(fā)送信息內(nèi)容為“測試”,對應(yīng)的UCS2碼值為6D4B8BD5,目標(biāo)號碼15991680961,圖2和圖3分別是PDU模式和TEXT模式下發(fā)送中英文混合短信的發(fā)送程序和短信接收讀取程序的運行截圖.
圖2 PDU模式下發(fā)送、接收中文短信
圖3 TEXT模式下發(fā)送中文短信新方法
圖2是PDU格式SMS發(fā)送與接收實際測試結(jié)果截圖,由圖2可見,傳統(tǒng)PDU發(fā)送內(nèi)容、接收內(nèi)容都涉及到對于PDU格式諸多組成部分的編碼和解碼,過程繁瑣.
圖3是TEXT模式下,即本文提出的新方法實現(xiàn)中文SMS發(fā)送與接收實際測試結(jié)果截圖,由圖3可見,該方法只需要通過AT+CSMP指令設(shè)置必要的參數(shù)值,然后以TEXT模式下AT+CMGS的命令格式發(fā)送短信的UCS2編碼值即可.至于接收數(shù)據(jù),只需要將接收到的16進(jìn)制字符串解碼為UCS2編碼對應(yīng)的中文或英文字符即可.顯而易見,開發(fā)人員的工作量已經(jīng)大大減少.
SMS在遠(yuǎn)程無線監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)中扮演著重要的角色,尤其是在多點、小數(shù)據(jù)量以及較低采集速率應(yīng)用背景下,借助SMS實現(xiàn)數(shù)據(jù)傳輸一般都是首選技術(shù)手段.
本文針對SMS在實際編程中存在的不足,介紹了一種可以大幅度降低編程復(fù)雜度的新型中文SMS收發(fā)方法,并給出了具體實現(xiàn)方法.該方法在筆者開發(fā)的某江河水文參數(shù)遠(yuǎn)程監(jiān)控系統(tǒng)、油田井場遠(yuǎn)程監(jiān)控系統(tǒng)等數(shù)據(jù)傳輸以及報警、處警等功能中均得到實際應(yīng)用,并取得了良好的應(yīng)用效果.
實踐結(jié)果證明:本方法簡單易行,能大幅度提高系統(tǒng)開發(fā)效率,并可以廣泛應(yīng)用于基于SMS的遠(yuǎn)程監(jiān)控系統(tǒng)數(shù)據(jù)傳輸功能、SMS報警、處警等功能的開發(fā).
[1] HE Xiangling,ZHANG Yue.The data coding scheme of the short message and the programme realization technology in VB 6.0[J].Computer Applications and Software, 2003, 20(6): 21-22.
[2] 徐福林. 基于GSM_SMS遠(yuǎn)程數(shù)據(jù)采集系統(tǒng)的設(shè)計[J].機(jī)床與液壓,2010,38(18):69-72.
[3] 楊 帆. 基于GSM和Google Map的定位與地圖標(biāo)注關(guān)鍵技術(shù)研究[J].陜西科技大學(xué)學(xué)報,2011,29(2):122-127.
[4] 段 錦, 葉 霖, 黃顯澍.基于GSM短消息的遠(yuǎn)程數(shù)據(jù)采集傳輸系統(tǒng)[J].長春理工大學(xué)學(xué)報,2005,28(4):51-53.
[5] 李壽林,張 鷹,李秀萍.利用GSM無線模塊收發(fā)短消息[J]. 計算機(jī)與數(shù)字工程,2005,33(7): 79-81.
[6] ETSI. GSM07.05, GSM Technichcal Specification[S].1998.
[7] Scott B.Guthery,Mary J. Cronin. Mobile applications development short message business and SIM card development packets[M].Beijing:Post Telecom Press,2003:9.