機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開(kāi)發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開(kāi)發(fā)
培訓(xùn)信息
贊助商
手機(jī)短信息SMS的程序開(kāi)發(fā)
手機(jī)短信息SMS的程序開(kāi)發(fā)
 更新時(shí)間:2008-8-18 11:07:30  點(diǎn)擊數(shù):28
【字體: 字體顏色

目前手機(jī)短信息的應(yīng)用越來(lái)越廣泛,互聯(lián)網(wǎng)上提供短信息發(fā)送的站點(diǎn)也越來(lái)越多,但一些站點(diǎn)的服務(wù)并不盡如人意,往往發(fā)出去的短信息石沉大海。最可靠的發(fā)送方法當(dāng)然是用手中的手機(jī)了,如果設(shè)置了狀態(tài)報(bào)告,更能確切知道對(duì)方是否收到了此條信息。手機(jī)發(fā)送盡管比較可靠, 但也存在輸入麻煩、效率低的問(wèn)題。本文介紹一種方法,只要手機(jī)能夠與電腦相連(通過(guò)紅外端口或用手機(jī)數(shù)據(jù)線(xiàn)連接串行口,同時(shí)手機(jī)支持GSM AT指令集),就可以通過(guò)自行編制的短信息發(fā)送軟件,實(shí)現(xiàn)短信息的發(fā)送。


現(xiàn)在市場(chǎng)上的大多數(shù)手機(jī)均支持類(lèi)似于Modem控制的GSM AT指令集,該指令集是由諾基亞、愛(ài)立信、摩托羅拉和HP等廠(chǎng)家共同為GSM系統(tǒng)研制的,其中包含了對(duì)SMS(Short Message Service)的控制。
GSM AT相關(guān)指令的介紹
與SMS有關(guān)的GSM AT指令如表1所示:

表1 相關(guān)的GSM AT指令
對(duì)SMS的控制共有三種實(shí)現(xiàn)途徑:
Block Mode;
基于AT命令的Text Mode;
基于AT命令的PDU Mode。
Text Mode比較簡(jiǎn)單,多款諾基亞手機(jī)均支持該模式。西門(mén)子的手機(jī)大多只支持PDU模式,PDU模式是發(fā)送或接收手機(jī)SMS信息的一種方法,短信息正文經(jīng)過(guò)十六進(jìn)制編碼后被傳送。目前,PDU已取代Block Mode,因此本文主要探討PDU模式的發(fā)送。
計(jì)算機(jī)和手機(jī)的通信
本文以西門(mén)子 S3568i為例,介紹如何實(shí)現(xiàn)短信息的發(fā)送。
數(shù)據(jù)線(xiàn)連接
首先,通過(guò)S35/25數(shù)據(jù)線(xiàn)將手機(jī)與電腦串行口相連。然后,打開(kāi)超級(jí)終端,選擇直接串行口連接,端口參數(shù)設(shè)為19200速率、無(wú)校驗(yàn)、數(shù)據(jù)位8、停止位1。
紅外線(xiàn)連接
如果使用帶紅外端口的計(jì)算機(jī),可以設(shè)置與手機(jī)的無(wú)線(xiàn)連接。首先確認(rèn)計(jì)算機(jī)紅外端口已打開(kāi),并將手機(jī)的紅外線(xiàn)和收傳真/數(shù)據(jù)功能打開(kāi),對(duì)接紅外端口,計(jì)算機(jī)系統(tǒng)托盤(pán)上應(yīng)當(dāng)出現(xiàn)一個(gè)紅外設(shè)備西門(mén)子S35(如果沒(méi)有安裝紅外監(jiān)視器,則不顯示)。然后,打開(kāi)超級(jí)終端,選擇IrDa上的串行口。
連接測(cè)試
點(diǎn)擊超級(jí)終端工具條上的呼叫按鈕,輸入AT并回車(chē),屏幕上如果出現(xiàn)OK則表明計(jì)算機(jī)與手機(jī)的連接成功,這時(shí)就可以輸入各類(lèi)GSM AT指令了。
如:查詢(xún)手機(jī)廠(chǎng)家,輸入AT+CGMI=<CR>,屏幕顯示Siemens。
通常情況下,執(zhí)行測(cè)試命令A(yù)T+CMGS=?<CR>,如果返回OK,表明手機(jī)支持此指令。該指令的完整語(yǔ)法格式如下:
If PDU mode (+CMGF=0)+CMGS=<length><CR>PDU is given <ctrl-Z/ESC>
如果短信息格式指令A(yù)T+CMGF返回的是0,則SMS格式為PDU模式,再執(zhí)行AT+CMGS=<數(shù)據(jù)長(zhǎng)度>命令后,手機(jī)返回“>”符號(hào)并等待輸入,輸入PDU數(shù)據(jù)并以^Z或Esc鍵結(jié)束。
如果信息發(fā)送成功,則返回OK,并顯示信息號(hào):
+CMGS: <mr>
如果發(fā)送失敗,則返回如下信息:
+CMS ERROR: <err>
PDU數(shù)據(jù)格式的分析
下面通過(guò)對(duì)存儲(chǔ)在手機(jī)中的待發(fā)信息的分析,來(lái)介紹SMS PDU的數(shù)據(jù)格式。首先,用手機(jī)寫(xiě)一條短信息,發(fā)送手機(jī)號(hào)碼為13605696031,信息內(nèi)容為“Hello World!”。通過(guò)執(zhí)行AT+CMGL=2可以讀出此條信息。
操作過(guò)程如下(斜體字符為響應(yīng)信息,{}內(nèi)為注釋):
AT
OK
AT+CMGL=2 {讀未發(fā)短信息}
+CMGL: 1,2,,24 {1表示信息個(gè)數(shù),2表示未發(fā)信息,24表示信息總?cè)萘縸
08 91 683108501505F0 11 00 0B 81 3106656930F1 0000A7 0B E8329BFD06DDDF723619
OK 
下面分析這條信息:
08:短信息中心地址長(zhǎng)度。
91:短信息中心號(hào)碼類(lèi)型,91是TON/NPI。TON/NPI遵守International/E.164標(biāo)準(zhǔn),指在號(hào)碼前需加‘+’號(hào);此外還可有其他數(shù)值,但91最常用。
683108501505F0:短信息號(hào)碼,是所使用的服務(wù)中心地址。由于位置上略有處理,實(shí)際號(hào)碼應(yīng)為:8613805515500(字母F意指長(zhǎng)度減1),這是作者所在地GSM短信息中心的號(hào)碼。
11:文件頭字節(jié)(header byte,是一種bitmask)。這里11指正常地發(fā)送短信息。
00:信息類(lèi)型。
0B:被叫號(hào)碼長(zhǎng)度。
81:被叫號(hào)碼類(lèi)型。
3106656930F1:被叫號(hào)碼,也經(jīng)過(guò)了移位處理,實(shí)際號(hào)碼為13605696031。
0000A7:短信息編碼類(lèi)型GSM Default Alphabet,如為中文則是000010。
0B:短信息長(zhǎng)度。
E8329BFD06DDDF723619:短信息內(nèi)容“Hello World!”。
短信息的編碼方法及編程實(shí)現(xiàn)
下面我們介紹純英文和純中文的信息編碼方法。通過(guò)測(cè)試我們發(fā)現(xiàn),每條發(fā)送的短信息前面部分均相同,只是被叫號(hào)碼和短信息內(nèi)容有變化。
1.英文編碼
參見(jiàn)表2,設(shè)短信息內(nèi)容為“Hello World!”。缺省的GSM 字符集為7位編碼,可以簡(jiǎn)單地理解為ASCII碼(ASCII值小于80Hex,因此,Bit8被忽略),依次將下一7位編碼的后幾位逐次移至前面,形成新的8位編碼,參見(jiàn)表2箭頭指示。需要注意的是第9行,移位計(jì)數(shù)已達(dá)7位,則直接將本編碼前加0。GSM并非支持所有的ASCII字符顯示。
表2 英文編碼的實(shí)現(xiàn)過(guò)程

下面是實(shí)現(xiàn)英文編碼的部分Delphi 5代碼:
//英文格式編碼,s為String
function Encode1(var s:String):String;
var
i,j,len:Integer;
cur:Integer;
t:String;
begin
Result:=‘’;
len:=Length(s);
//j 用于移位計(jì)數(shù)
i:=1;j:=0;
while i<=len do
begin
if i<len then
//數(shù)據(jù)變換
cur:=(ord(s[i]) shr j) or ((ord(s[i+1]) shl (7-j)) and $ff)
else
cur:=(ord(s[i]) shr j) and $7f;
FmtStr(t,‘%2.2X’,[cur]);
Result:=Result+t;
inc(i);
//移位計(jì)數(shù)達(dá)到7位的特別處理
j:=(j+1) mod 7;if j=0 then inc(i);
end;
end;  
2.中文編碼
參見(jiàn)表3,設(shè)短信息內(nèi)容為“中文短信息”。中文短信息的實(shí)現(xiàn)較簡(jiǎn)單,只需將GB2312的中文編碼轉(zhuǎn)換為代碼頁(yè)為CP936的Unicode編碼即可。
表3 中文編碼的實(shí)現(xiàn)過(guò)程

通過(guò)Delphi的WideString類(lèi)型轉(zhuǎn)換,可以巧妙地實(shí)現(xiàn)GB2312到Unicode的編碼轉(zhuǎn)換(注意代碼頁(yè)和操作系統(tǒng)相關(guān)聯(lián))。下面是實(shí)現(xiàn)中文編碼的部分Delphi 5代碼:
// 中文格式編碼,s為Unicode String
function Encode2(var s:WideString):String;
var
i,len:Integer;
cur:Integer;
t:String;
begin
Result:=‘’;
len:=Length(s);
i:=1;
while i<=len do
begin
cur:=ord(s[i]);
//BCD轉(zhuǎn)換
FmtStr(t,‘%4.4X’,[cur]);
Result:=Result+t;
inc(i);
end;
end;
小 結(jié)
以上介紹了PDU格式的短信息編碼。建議英文信息長(zhǎng)度不超過(guò)140個(gè)字符,中文信息不要超過(guò)54個(gè)漢字。如果使用能夠支持文本方式的手機(jī)進(jìn)行發(fā)送,實(shí)現(xiàn)起來(lái)更簡(jiǎn)單。如發(fā)送“Hello World!”,用如下的AT指令即可:
AT+CGMF=1<CR>AT+CGMS=“13605696031”,129<CR>
>Hello World!<^Z>

  • 上一篇: SMS中用Unicode編碼發(fā)送中文
  • 下一篇: 高通 HSDPA產(chǎn)品新路線(xiàn)圖
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話(huà):0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1