摘 要: 針對(duì)宿舍衛(wèi)生和違規(guī)信息及時(shí)發(fā)送的需求,設(shè)計(jì)并實(shí)現(xiàn)了基于GPRS及Synchronization Services for ADO.NET同步技術(shù)的宿舍信息發(fā)送系統(tǒng)。該系統(tǒng)由服務(wù)器端、移動(dòng)終端(采用基于ARM9的S3C2440微處理器)、GPRS網(wǎng)絡(luò)和手機(jī)接收終端組成。ARM控制器通過(guò)串口向GPRS模塊發(fā)送AT指令,將宿舍相關(guān)信息以短信形式發(fā)送至手機(jī)端,移動(dòng)終端通過(guò)基于服務(wù)的同步技術(shù)實(shí)現(xiàn)與服務(wù)器端信息的同步。
關(guān)鍵詞: ARM; GPRS; Synchronization Services for ADO.NET; AT指令; 同步
中圖分類號(hào):TP311.1 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2013)11-77-03
0 引言
宿舍是學(xué)生在校期間重要的生活場(chǎng)所,為保證有一個(gè)衛(wèi)生、整潔和安全的生活環(huán)境,除了需要學(xué)生自我約束外,還需有相應(yīng)的規(guī)章制度及定期的檢查督促制度,其中包括對(duì)違章電器進(jìn)行不定期的檢查,對(duì)夜不歸宿、使用違章電器及衛(wèi)生沒(méi)有達(dá)到要求的宿舍及時(shí)通知班主任。
傳統(tǒng)的做法是采用紙質(zhì)的表格形式,操作流程是宿管人員將內(nèi)容設(shè)計(jì)成表格,然后將表格打印出來(lái),每天進(jìn)行檢查時(shí),將檢查的數(shù)據(jù)填寫到表格中。一般情況下,一個(gè)宿管人員負(fù)責(zé)整棟宿舍的檢查工作,待檢查完畢,已近中午。宿管人員上交材料后再由宿舍管理部門分發(fā)到系部,系部再將信息反饋給班主任,班主任時(shí)常是第二天上午才能接收到信息,這樣的信息不具有及時(shí)性。為了能將宿舍的各種信息及時(shí)反饋,本系統(tǒng)采用移動(dòng)解決方案——基于ARM/GPRS的宿舍信息發(fā)送系統(tǒng)。宿管人員只需帶上移動(dòng)設(shè)備,進(jìn)入系統(tǒng)后,將檢查的結(jié)果直接錄入系統(tǒng)中,對(duì)于環(huán)境不理想或有違規(guī)情況的宿舍,通過(guò)系統(tǒng)的GPRS模塊以短信的形式及時(shí)反饋給相應(yīng)的班主任。同時(shí),將檢查的結(jié)果存入移動(dòng)數(shù)據(jù)庫(kù)中,待檢查完后將移動(dòng)數(shù)據(jù)庫(kù)中的信息同步到服務(wù)器(PC機(jī)),可以從桌面的數(shù)據(jù)庫(kù)系統(tǒng)中將所有信息導(dǎo)出到EXCEL中,這樣便于學(xué)期末匯總,以及優(yōu)秀學(xué)生宿舍的評(píng)選,解決了信息發(fā)送不及時(shí)和紙質(zhì)信息不易管理的問(wèn)題。
1 系統(tǒng)設(shè)計(jì)
系統(tǒng)主要由服務(wù)器端、移動(dòng)終端、GPRS網(wǎng)絡(luò)和手機(jī)終端四部分組成。GPRS網(wǎng)絡(luò)是移動(dòng)終端和手機(jī)終端的傳輸介質(zhì)。GPRS采用分組交換技術(shù),它具有“高速”和“永遠(yuǎn)在線”等優(yōu)點(diǎn),非常適合應(yīng)用于信息傳送系統(tǒng)的無(wú)線傳輸。通過(guò)微軟ActiveSync同步程序或無(wú)線網(wǎng)絡(luò)可以將移動(dòng)終端連接到服務(wù)器,實(shí)現(xiàn)信息的同步。系統(tǒng)框架如圖1所示。
1.1 移動(dòng)終端
移動(dòng)終端選擇Samsung公司基于ARM920T內(nèi)核的S3C2440微處理器,嵌入式Windows CE 6.0操作系統(tǒng)以及Siemens公司的GPRS模塊MC39i組成信息發(fā)送平臺(tái)。GPRS模塊是實(shí)現(xiàn)信息發(fā)送功能的主要電子元件,通過(guò)串口接收AT指令,在模塊內(nèi)插入手機(jī)SIM卡,可以與移動(dòng)運(yùn)營(yíng)商的短信中心建立無(wú)線連接,從而實(shí)現(xiàn)短信的自由發(fā)送。
1.2 服務(wù)器端
服務(wù)器端主要是完成與移動(dòng)設(shè)備端中的信息同步,數(shù)據(jù)庫(kù)采用SQL Server 2005,數(shù)據(jù)庫(kù)中數(shù)據(jù)表及表間關(guān)系如圖2所示。
2 系統(tǒng)實(shí)現(xiàn)
2.1 開(kāi)發(fā)環(huán)境與關(guān)鍵技術(shù)
2.1.1 開(kāi)發(fā)環(huán)境
系統(tǒng)采用交叉編譯的方式,使用Visual Studio 2008開(kāi)發(fā)。
⑴ 服務(wù)器環(huán)境
服務(wù)器:IIS
數(shù)據(jù)庫(kù):使用ADO.NET提供程序的任何數(shù)據(jù)庫(kù),本系統(tǒng)使用SQL Server 2005。
安裝的組件:SQL Server Compact設(shè)備運(yùn)行時(shí)的組件 (SSCEDeviceRuntime-CHS.msi)、支持移動(dòng)設(shè)備數(shù)據(jù)同步的組件(SyncServices.msi)。
⑵ 移動(dòng)設(shè)備環(huán)境
操作系統(tǒng):Windows CE 6.0
在定制操作系統(tǒng)時(shí),需勾選.Net FrameWork 3.5框架和支持SQL Server Compact 3.5本地?cái)?shù)據(jù)庫(kù)管理組件。檢查設(shè)備是否支持SQL Server Compact 3.5,可以打開(kāi)設(shè)備端Windows CE 6.0操作系統(tǒng)中的Windows文件夾,查看是否包含與SQL Server Compact數(shù)據(jù)庫(kù)有關(guān)的DLL文件。
2.1.2 關(guān)鍵技術(shù)
⑴ GPRS
GPRS是通用分組無(wú)線服務(wù)技術(shù)(General Packet Radio Service)的簡(jiǎn)稱,它是GSM移動(dòng)電話用戶可用的一種移動(dòng)數(shù)據(jù)業(yè)務(wù),它以封包(Packet)方式來(lái)傳輸,具備隨時(shí)隨地聯(lián)機(jī)的特點(diǎn),可以讓使用者隨時(shí)都在上線的狀態(tài)[1]。
本系統(tǒng)利用GPRS實(shí)現(xiàn)短信息的發(fā)送,通用的GPRS發(fā)送短信主要采用兩種模式:PDU模式與TEXT模式[2]。國(guó)內(nèi)手機(jī)基本上不支持TEXT模式,它主要用于歐美地區(qū)。PDU模式被所有手機(jī)支持,可以使用任何字符集,也是手機(jī)默認(rèn)的編碼方式。PDU模式收發(fā)短信可以使用三種編碼:7-bit、8-bit和UCS2編碼[3]。UCS2編碼是Unicode編碼的一種,它采用兩個(gè)字節(jié)來(lái)編碼一個(gè)字符,一般用十六進(jìn)制表示。本系統(tǒng)采用大多數(shù)手機(jī)默認(rèn)的PDU模式的UCS2編碼,即短信以UCS2碼的形式進(jìn)行發(fā)送,所以在發(fā)送信息之前需要對(duì)發(fā)送的信息內(nèi)容按照指定的UCS2碼格式進(jìn)行編碼,這樣才能正確地發(fā)送到目標(biāo)手機(jī)上。
⑵ AT指令
AT即Attention,最初由美國(guó)Hayes公司推出,專門用于數(shù)據(jù)傳輸通信領(lǐng)域,目前已成為全球通用的標(biāo)準(zhǔn)[4]。本系統(tǒng)中使用的GPRS模塊是指帶有GPRS功能的GSM 模塊,它連接了移動(dòng)設(shè)備與GPRS網(wǎng)絡(luò),通過(guò)AT指令來(lái)控制短信的發(fā)送。
本系統(tǒng)中用到的AT指令主要有:AT+CSCA獲取短信中心號(hào);AT+CMGS發(fā)送短消息;AT+CMGF選擇短消息信息格式[5],設(shè)置0值時(shí)表示PDU模式,設(shè)置1值為TEXT模式。
⑶ Synchronization Services for ADO.NET同步技術(shù)
Synchronization Services for ADO.NET (以下簡(jiǎn)稱Sync Services)是微軟公司推出的同步框架(Microsoft Synchronization Framework)中的一員,也是其重要的組成部分[6]。它支持?jǐn)?shù)據(jù)庫(kù)與應(yīng)用程序本地緩存之間的數(shù)據(jù)同步,SQL Server CE提供本地?cái)?shù)據(jù)緩存的功能,Visual Studio 2008中增加了“本地?cái)?shù)據(jù)緩存”項(xiàng)目,對(duì)Sync Service for ADO.NET提供了非常好的支持。客戶端的數(shù)據(jù)緩存技術(shù)除了提高訪問(wèn)效率外,還可以減少客戶端對(duì)服務(wù)器的訪問(wèn)壓力。
Sync Services提供了四種同步方式:僅下載同步、僅上傳同步、雙向同步、快照同步[7]。本系統(tǒng)僅需將客戶端的數(shù)據(jù)上傳到服務(wù)器,所以使用僅上傳同步方式,該同步方式用于在移動(dòng)終端上插入數(shù)據(jù),在同步過(guò)程中,會(huì)將移動(dòng)終端數(shù)據(jù)庫(kù)中進(jìn)行的插入和其他數(shù)據(jù)更改上載到服務(wù)器端。
2.2 主要模塊實(shí)現(xiàn)
系統(tǒng)運(yùn)行界面如圖3所示。本系統(tǒng)設(shè)定宿舍衛(wèi)生分?jǐn)?shù)為10分制,當(dāng)宿舍分?jǐn)?shù)為9分及以下或出現(xiàn)違規(guī)情況時(shí),“通知老師”按鈕激活,可將信息發(fā)送給老師?!氨4妗卑粹o將信息插入到客戶端的數(shù)據(jù)庫(kù)中,在將設(shè)備連接到服務(wù)器端或網(wǎng)絡(luò)連接的情況下通過(guò)“同步”按鈕可以實(shí)現(xiàn)移動(dòng)設(shè)備端與服務(wù)器端信息同步。
2.2.1 信息發(fā)送模塊
GPRS模塊通過(guò)串口采用串行異步數(shù)據(jù)傳輸方式進(jìn)行通信,通過(guò)AT指令來(lái)發(fā)送UCS2格式編碼的PDU串。
⑴ PDU編碼
PDU編碼即將要發(fā)送的內(nèi)容、發(fā)送到的手機(jī)號(hào)以及短信中心號(hào)轉(zhuǎn)換為UCS2格式編碼的PDU串。短信中心號(hào)和手機(jī)號(hào)編碼流程如圖4所示。
發(fā)送信息編碼的過(guò)程是:先將內(nèi)容轉(zhuǎn)換為Unicode編碼,再將編碼長(zhǎng)度除以2后格式化為兩位的16進(jìn)制數(shù)。
由短信中心號(hào)、手機(jī)號(hào)和發(fā)送內(nèi)容的PDU碼組合即為要發(fā)送的PDU串。
⑵ 信息發(fā)送
將信息以PDU編碼的形式進(jìn)行發(fā)送,其流程如圖5所示。
信息發(fā)送的關(guān)鍵代碼如下:
利用串口類SerialPort打開(kāi)與關(guān)閉串口。
打開(kāi)串口:
AutoResetEvent receiveNow;
public SerialPort OpenPort(string pName,int pBaudRate,
int pDataBits,int pStopBits,int pParity,int pReadTimeout,
int pWriteTimeout)
{ receiveNow=new AutoResetEvent(1);
SerialPort port=new SerialPort();
……//串口參數(shù)的設(shè)置
port.DataReceived+=new SerialDataReceivedEventHandler
(port_DataReceived);
port.Open();
return port;
}
private void port_DataReceived(object sender,
SerialDataReceivedEventArgs e)
{ if (e.EventType==SerialData.Chars)
receiveNow.Set();
}
關(guān)閉串口:
public void ClosePort(SerialPort port)
{ port.Close();
port.DataReceived-=new SerialDataReceivedEventHandler
(port_DataReceived);
port=1;
}
PDU碼信息發(fā)送:
public bool sendMsg(SerialPort port, string CenterNo,
string PhoneNo, string Message)
{ bool isSend=true;
try
{ PduEncode pEncode=new PduEncode();
//PduEncode類完成信息到PDU串的編碼
int length;
string SMSPdu=pEncode.GetPduEncode(CenterNo,
PhoneNo, Message, out length);
string recieveData=ExecCommand(port, \"AT\", 600);
//利用定義的方法ExecCommand完成執(zhí)行AT命令功能
recieveData=ExecCommand(port, \"AT+CMGF=0\", 600);
string command=\"AT+CMGS=\"+(15+length).ToString();
recieveData=ExecCommand(port, command, 600);
string s=new string((char)26, 1);
command=SMSPdu+s;
ExecCommand(port, command, 6000);
return isSend;
}
catch
{ isSend=1;
return isSend;
}
}
2.2.2 信息同步模塊
移動(dòng)終端與服務(wù)器端數(shù)據(jù)同步采用的是Synchronization Services for ADO.NET同步技術(shù)中的N層體系結(jié)構(gòu),即嵌入式移動(dòng)設(shè)備端(以下簡(jiǎn)稱客戶端)不能與服務(wù)器端直接進(jìn)行數(shù)據(jù)同步通信,需通過(guò)中間層。客戶端采用僅上傳同步方式同步信息的過(guò)程如下。
⑴ 客戶端創(chuàng)建同步代理對(duì)象(繼承自SyncAgent),并調(diào)用其同步方法Synchronize()。
⑵ 中間層調(diào)用服務(wù)器同步提供程序代理(繼承自ServerSyncProvider)的ApplyChanges()、GetChanges()等四個(gè)方法。
⑶ 服務(wù)器調(diào)用同步適配器,從而為服務(wù)器同步提供程序與服務(wù)器數(shù)據(jù)庫(kù)交互所需的增、刪、改命令。
⑷ 將數(shù)據(jù)增量返回服務(wù)器端、中間層和客戶端。
⑸ 同步代理服務(wù)器同步提供程序(繼承自ServerSyncProvider)檢索更改,將增量更改于服務(wù)器端數(shù)據(jù)庫(kù)。完成客戶端與服務(wù)器端數(shù)據(jù)同步。
3 結(jié)束語(yǔ)
本文以GPRS技術(shù)和Synchronization Services for ADO.NET同步技術(shù)為基礎(chǔ),根據(jù)宿舍的具體需求,在基于ARM的嵌入式移動(dòng)設(shè)備上設(shè)計(jì)并實(shí)現(xiàn)了一種宿舍信息發(fā)送系統(tǒng),系統(tǒng)具有界面友好、方便操作、獲取宿舍相關(guān)信息速度快,以及信息發(fā)送及時(shí)等特點(diǎn),該系統(tǒng)的投入使用減少了宿舍信息獲取過(guò)程中表格填寫、計(jì)算機(jī)錄入、紙質(zhì)表格信息傳送等中間環(huán)節(jié),提高了宿舍管理人員的工作效率,實(shí)現(xiàn)了宿舍信息及時(shí)發(fā)送。
參考文獻(xiàn):
[1] 孫小春.GPRS技術(shù)及其應(yīng)用研究[J].楊凌職業(yè)技術(shù)學(xué)院學(xué)報(bào),2013.12(2):51-53
[2] 王浩.基于WINCE模擬器的短信收發(fā)系統(tǒng)設(shè)計(jì)[J].南昌工程學(xué)院學(xué)報(bào),2010.29(1):9-13
[3] 呂延崗,任曉鵬,張紅瑞等.集成GSM短消息的網(wǎng)絡(luò)交互平臺(tái)設(shè)計(jì)[J].河北省科學(xué)院學(xué)報(bào),2012.29(1):15-28,27
[4] 逄玉俊,李姣,王慶輝.基于GPRS模塊的遠(yuǎn)程毒氣監(jiān)測(cè)系統(tǒng)設(shè)計(jì)[J].沈陽(yáng)化工大學(xué)學(xué)報(bào),2013.27(2):155-158
[5] 張宏宇,侯立剛,耿淑琴等.一種短信控制的水浸報(bào)警系統(tǒng)設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2012.35(20):1-4,8
[6] 王浩,楊正校,史桂紅.Windows CE系統(tǒng)應(yīng)用開(kāi)發(fā)編程[M].中國(guó)水利水電出版社,2011:139
[7] 蔡子昭,張禮中,王偉.SQL Server CE在野外采集系統(tǒng)中的應(yīng)用[J].微計(jì)算機(jī)信息,2011.27(4):64-66