張紅剛 陶衛(wèi)東
摘要:研究設(shè)計(jì)移動(dòng)通信網(wǎng)關(guān),通過信息轉(zhuǎn)換和短信群發(fā)將校園信息管理系統(tǒng)拓展到移動(dòng)通信平臺(tái),以提供更實(shí)時(shí)便捷的校園信息服務(wù),是校園信息化管理的需要。移動(dòng)通信網(wǎng)關(guān)開發(fā)的關(guān)鍵技術(shù),包括基于AT指令的短信貓的開發(fā)、可靠的批量發(fā)送和流控技術(shù)等。要根據(jù)項(xiàng)目需求設(shè)計(jì)具有短信群發(fā)的網(wǎng)關(guān)軟件,設(shè)計(jì)時(shí)還應(yīng)考慮軟硬件部署和實(shí)現(xiàn)方法等。
關(guān)鍵詞:校園信息管理系統(tǒng);移動(dòng)通信平臺(tái);網(wǎng)關(guān)開發(fā);AT指令
中圖分類號:G712 文獻(xiàn)標(biāo)志碼:A 文章編號:1673-9094-C-(2013)03-0053-04
根據(jù)實(shí)際條件和情況在學(xué)校范圍內(nèi)采用短信網(wǎng)關(guān)方式實(shí)現(xiàn)移動(dòng)通信信息的推送,利用手機(jī)終端普遍支持簡單的數(shù)據(jù)通信功能,將現(xiàn)有的學(xué)校信息管理系統(tǒng)的功能擴(kuò)展到手機(jī)終端,能使管理系統(tǒng)從被動(dòng)查詢到主動(dòng)數(shù)據(jù)推送。將教學(xué)管理中的信息用定制化的方式實(shí)時(shí)發(fā)送給每位家長,讓家長隨時(shí)了解學(xué)生的動(dòng)態(tài),也能使教師在信息傳遞過程中解除精力、時(shí)間和空間的限制,為現(xiàn)有的教學(xué)、學(xué)生管理工作帶來更多便利。
一、相關(guān)技術(shù)和分析
(一)目前存在的群發(fā)短信的幾種方式
短信群發(fā)方式主要有手機(jī)自帶群發(fā)短信、飛信、移動(dòng)增值業(yè)務(wù)SP群發(fā)和使用第三方API實(shí)現(xiàn)短信群發(fā)等。但這些方式存在著無法直接被管理系統(tǒng)使用或使用成本較高的缺陷。
采用工業(yè)手機(jī)模塊GSM Modem(一種使用移動(dòng)通訊系統(tǒng)的調(diào)制解調(diào)器,俗稱“短信貓”),在業(yè)務(wù)層把傳統(tǒng)的計(jì)算機(jī)網(wǎng)絡(luò)擴(kuò)展到手機(jī)等移動(dòng)終端,是開發(fā)簡單快速、節(jié)約人力成本的最佳短信應(yīng)用開發(fā)模式。其關(guān)鍵技術(shù)是設(shè)計(jì)實(shí)現(xiàn)一個(gè)短信網(wǎng)關(guān)作為短信發(fā)送的中間件,以實(shí)現(xiàn)既能直接發(fā)送短信,又能為其他管理系統(tǒng)所調(diào)用發(fā)送短信。
(二)AT指令技術(shù)
AT指令就是帶有串行口的計(jì)算機(jī)操作GSM Modem或手機(jī)的指令集。AT指令都以AT+開頭,以回車結(jié)尾,各命令執(zhí)行成功與否都有相應(yīng)的返回。
通信網(wǎng)關(guān)軟件中用到的與發(fā)送和接收短信相關(guān)的指令及其功能見表1。
一般而言,在AT指令后加上“=”及命令參數(shù)即可。有些命令例如AT+CMGR命令沒有參數(shù),直接就可以執(zhí)行。
1.AT指令編碼技術(shù)研究
對SMS的控制共有三種實(shí)現(xiàn)途徑:基于AT命令的Text Mode、基于AT命令的PDU Mode 、Block Mode。Text Mode比較簡單,多款諾基亞手機(jī)均支持該模式,但這種模式只能發(fā)送ASCII 碼,不能發(fā)送中文的Unicode 碼。西門子手機(jī)大多只支持PDU模式,PDU模式是發(fā)送或接收手機(jī)SMS信息的一種方法,短信息正文經(jīng)過十六進(jìn)制編碼后被傳送。使用Block Mode 需要手機(jī)生產(chǎn)廠家提供驅(qū)動(dòng)支持。目前,PDU已取代Block Mode,因此本文主要探討PDU模式的發(fā)送。
2.短信息編碼和解碼
發(fā)送短信息的PDU編碼主要包含這些內(nèi)容:短信息中心(SMSC)號碼信息、短信息首字節(jié)、短信息索引號、目標(biāo)號碼信息、協(xié)議標(biāo)示符、數(shù)據(jù)編碼方式、效驗(yàn)周期、短信息長度和內(nèi)容。短信息內(nèi)容是以十六進(jìn)制7位字節(jié)或Unicode編碼,其他信息是以十六進(jìn)制8位字節(jié)編碼。
(1)英文編碼。
缺省的GSM字符集為7位編碼,可以簡單地理解為ASCII碼(ASCII值小于80Hex,因此,Bit8被忽略),依次將下一個(gè)7位編碼的后幾位逐次移至前面,形成新的8位編碼。
例如:設(shè)置短信息內(nèi)容為“Hello World!”,參見表2指示。
(2)英文解碼。
就是將7位字符編碼轉(zhuǎn)換為8位字符編碼。
(3)中文編碼和解碼。
中文短信息的編碼和解碼,只需將GB2312的中文編碼和代碼頁為CP936的Unicode編碼進(jìn)行相互轉(zhuǎn)換。
(三)可靠的批量發(fā)送和流控技術(shù)研究
由于移動(dòng)通信網(wǎng)絡(luò)存在發(fā)送速率和穩(wěn)定性等不確定性,在設(shè)計(jì)實(shí)現(xiàn)過程中,必須保證大數(shù)據(jù)量條件下的通信可靠性。具體方法有以下幾種。
1.基于SMSC Pool容災(zāi)備份
單套短信中心內(nèi)部采用了1+1或N+1的備份方式,來確保當(dāng)一個(gè)核心單元宕機(jī)后有備份的單元來接替工作。這種短信網(wǎng)元之間是相互孤立的,資源無法得到很好共享,投資大利用率低,容易對備份單元產(chǎn)生較大的沖擊。采用SMSC Pool技術(shù),多個(gè)單套短信網(wǎng)元被邏輯上整合在一起,組成一個(gè)域池。通過短信中心網(wǎng)元增加流量控制中心模塊,分級組網(wǎng)實(shí)現(xiàn)對短信業(yè)務(wù)量的統(tǒng)一分流控制。對短信網(wǎng)元各業(yè)務(wù)處理單元的性能、容量進(jìn)行實(shí)時(shí)的監(jiān)控,可實(shí)現(xiàn)對業(yè)務(wù)智能地、自動(dòng)地分流,從而達(dá)到容災(zāi)的目的。
2.隊(duì)列緩存技術(shù)
通過串口隊(duì)列技術(shù)[1]避免擁塞的發(fā)生或者在擁塞發(fā)生時(shí)做出反應(yīng),它主要是考慮系統(tǒng)內(nèi)的服務(wù)情況,目的是使負(fù)載不超過系統(tǒng)服務(wù)的能力。隊(duì)列緩存技術(shù)和流控措施實(shí)現(xiàn)批量信息的緩存發(fā)送。
3.異步延時(shí)處理
系統(tǒng)逐條對短信進(jìn)行編碼[2]、發(fā)送信息。由于系統(tǒng)編碼的速度較快,短信元件尚未處理完成,編碼就完成了,會(huì)造成隊(duì)列溢出,導(dǎo)致錯(cuò)誤。異步延時(shí)處理實(shí)現(xiàn)批量發(fā)送短信功能,通過循環(huán)逐條對短信進(jìn)行編碼、發(fā)送信息、延時(shí)、反饋信息處理完成信息的發(fā)送。
4.發(fā)送可靠性管理
要實(shí)現(xiàn)發(fā)送可靠性管理,對于發(fā)送過程中出現(xiàn)的因移動(dòng)網(wǎng)絡(luò)故障、計(jì)費(fèi)等問題導(dǎo)致發(fā)送失敗及成功的記錄進(jìn)行記錄,并向業(yè)務(wù)系統(tǒng)提供報(bào)告,以便對未成功記錄進(jìn)行處理,保證系統(tǒng)消息發(fā)送的可靠性。
二、短信網(wǎng)關(guān)的設(shè)計(jì)
(一)短信網(wǎng)關(guān)需求分析
該短信網(wǎng)關(guān)軟件主要分為“信息發(fā)送服務(wù)”“短信發(fā)送服務(wù)監(jiān)控”“系統(tǒng)配置模塊”“基礎(chǔ)功能模塊”等模塊(見圖1)。
信息發(fā)送服務(wù),實(shí)現(xiàn)短信數(shù)據(jù)提取、發(fā)送、監(jiān)視回復(fù)等功能。短信發(fā)送服務(wù)監(jiān)控,提供了啟動(dòng)、暫停、停止短信發(fā)送服務(wù)的功能。系統(tǒng)配置模塊,提供短信網(wǎng)關(guān)的設(shè)置管理功能,如通信組件的基本信息設(shè)置、短信服務(wù)器的基本設(shè)置、數(shù)據(jù)庫系統(tǒng)的設(shè)置等?;A(chǔ)功能模塊,提供了發(fā)送服務(wù)和發(fā)送管理的基本功能。
(二)短信網(wǎng)關(guān)設(shè)計(jì)
本文設(shè)計(jì)的短信網(wǎng)關(guān)是基于GSM Modem的短信框架(見圖2),在框架上實(shí)現(xiàn)短信的收發(fā)。該系統(tǒng)構(gòu)架分為三層:短信底層接口通信組件層、短信收發(fā)平臺(tái)層、短信應(yīng)用層。
1.短信底層接口通信組件層
短信底層接口通信組件層中,通過硬件接口實(shí)現(xiàn)向GSM Modem發(fā)送AT指令,控制GSM Modem發(fā)送和接收消息。
2.短信收發(fā)平臺(tái)層
短信收發(fā)平臺(tái)層是設(shè)計(jì)的一個(gè)獨(dú)立的短信息收發(fā)及處理的服務(wù)模塊,它單獨(dú)于其他任何的業(yè)務(wù)系統(tǒng),僅僅提供了一個(gè)成熟的短信收發(fā)服務(wù),并封裝成統(tǒng)一的短信收發(fā)接口。
3.短信應(yīng)用層
短信應(yīng)用層根據(jù)短信收發(fā)平臺(tái)層定制的接口規(guī)范,就可以把本身的業(yè)務(wù)與短信連接起來,實(shí)現(xiàn)在各自的管理系統(tǒng)(軟件)中快速集成短消息收發(fā)的服務(wù)。
(三)短信網(wǎng)關(guān)硬件部署
短信網(wǎng)關(guān)的部署(見圖3)是將短信貓或者貓池連接到服務(wù)器上,將服務(wù)器連接到防火墻的DMZ區(qū),在服務(wù)器上安裝好短信網(wǎng)關(guān)軟件或?qū)ν獍l(fā)布Web平臺(tái)(調(diào)用了短信發(fā)送接口的Web服務(wù))后,服務(wù)器直接可以通過服務(wù)端或客戶端軟件進(jìn)行短消息的發(fā)送,內(nèi)網(wǎng)的用戶可以通過客戶端軟件進(jìn)行短消息的發(fā)送。其他的管理平臺(tái)可通過調(diào)用短信接口實(shí)現(xiàn)短消息的發(fā)送;外網(wǎng)用戶可以通過VPN的方式接入到內(nèi)網(wǎng)中進(jìn)行短信的發(fā)送或通過瀏覽器終端實(shí)現(xiàn)短消息的發(fā)送。
(四)串口通信的實(shí)現(xiàn)
短信貓相關(guān)應(yīng)用開發(fā)的核心是實(shí)現(xiàn)串口通信,在此研究短信貓?jiān)贑#語言下的實(shí)現(xiàn)是利用微軟公司提供的通用串口通信MSCOMM32控件。在Visual Studio 2010編譯器開發(fā)環(huán)境下,把微軟通用串口通信控件MSCOMM32作為組件裝入編譯器,實(shí)現(xiàn)串口通信的實(shí)際過程如下。
1.打開串口和初始化串口
在程序初始化時(shí),先對串口初始化,同時(shí)由于串口短信貓是使用RTS/CTS握手信號的硬件設(shè)備,只有該設(shè)備的RTS信號置為高才能接收數(shù)據(jù),所以需將MSCOMM32通信控件DTREnable屬性設(shè)為TRUE,其所有具體實(shí)現(xiàn)過程如下。
private void InitComPort()
{
try{
com.CommPort=1;//設(shè)置通信端口是COM1
if(com.PortOpen)com.PortOpen=false;//如果串口開啟關(guān)閉它
com.RThreshold=1;//每接收一個(gè)字符則激發(fā)OnComm()事件
com.Settings=“9600,n,8,1″;//設(shè)置串口通信的參數(shù)
com.DTREnable=true;
com.Handshaking=MSCommLib.Handshake
Constants.comNone;
com.InputMode=MSCommLib.InputMode
Constants.comInputModeBinary;
com.INputLen=0;//清除接收緩沖區(qū)
com.NullDiscard=false;
com.OnComm+=new System.EventHandler(this.OnComm); //注冊一個(gè)OnComm事件
com.PortOpen=true;//打開串口
this.msg.Text=”設(shè)備打開成功!”;}
catch{
this.msg.Text=”設(shè)備打開失??!”;}
}
2.讀串口
當(dāng)短信相關(guān)應(yīng)用接收短信時(shí),通過串口把讀短消息AT指令(AT+CMGR)發(fā)送給短信貓,短信貓接到指令后調(diào)用內(nèi)部短信接收模塊接收短信,同時(shí)把短信內(nèi)容回傳到串口緩沖區(qū),短信相關(guān)應(yīng)用從串口緩沖區(qū)讀取短信息,其讀串口過程如下。
private void com_OnComm(object sender,System. EventArgs e)
{
com.InputMode=MSCommLib.InputMode
Constants.comInputModeBinary;
com.InputLen=0;
byte[]indata=(byte[])com.Input; //接收數(shù)據(jù)
}
3.寫串口
當(dāng)短信相關(guān)應(yīng)用發(fā)送短信時(shí),把發(fā)送短消息AT指令(AT+CMGS)和發(fā)送消息通過串口發(fā)送給短信貓,其寫串口過程如下。
private void SendDate()
{
try{
byte[]byOut=new byte[2];
byOut[0]=0x01;
byOut[1]=0x02;
com.Output=byOut;//向緩沖區(qū)寫入數(shù)據(jù)
}
Catch(Exception ex)
{
messageBox.show(ex.Message,”Error”,MessageBoxButtons.Ok,MessageBoxIcon.Error);
}
}
4.關(guān)閉串口
當(dāng)短信相關(guān)應(yīng)用完成所有的任務(wù)時(shí),把串口關(guān)閉,釋放串口資源。
private void close()
{
if (com.PorOpen==true)
com.PortOpen=false;//關(guān)閉串口
}
三、總結(jié)展望
使用GSM-Modem工業(yè)手機(jī)模塊實(shí)現(xiàn)基于GSM網(wǎng)絡(luò)的信息收發(fā),短信息網(wǎng)關(guān)提供了靈活、可靠的批量信息生成、收發(fā)、解析轉(zhuǎn)發(fā)和web信息管理等功能。系統(tǒng)可以獨(dú)立運(yùn)行,也可以作為各種信息管理系統(tǒng)的接口集成使用,隨著管理信息化技術(shù)的發(fā)展,系統(tǒng)將有重要的實(shí)際應(yīng)用價(jià)值。系統(tǒng)不僅能擴(kuò)展本學(xué)校信息管理系統(tǒng),服務(wù)各項(xiàng)管理工作,還能以標(biāo)準(zhǔn)組件的形式應(yīng)用于各種相關(guān)的信息管理系統(tǒng)。
參考文獻(xiàn):
[1]葉春寶.應(yīng)用GSM短消息服務(wù)構(gòu)建學(xué)院短信平臺(tái)[J].福建農(nóng)林大學(xué)學(xué)報(bào),2007(3).
[2]申靜波,李井輝.基于GSM Modem的短信發(fā)布平臺(tái)設(shè)計(jì).長江大學(xué)學(xué)報(bào)(自然科學(xué)版),2008(5).
(責(zé)任編輯:沈彬)