深入淺出VC 串口編程之短信應(yīng)用開發(fā)_第1頁
深入淺出VC 串口編程之短信應(yīng)用開發(fā)_第2頁
深入淺出VC 串口編程之短信應(yīng)用開發(fā)_第3頁
深入淺出VC 串口編程之短信應(yīng)用開發(fā)_第4頁
深入淺出VC 串口編程之短信應(yīng)用開發(fā)_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

僅供個人參考深入淺串口編之短信用開發(fā)前面數(shù)次連載我們以較長的篇幅講解了串口通信的硬件原理平臺控制以及基于WIN32API控件和第三方類的串口編程。作為本系列文章的最后一次連載,本章將給出一個典型的應(yīng)用實例:西門子短信服務(wù)模塊TC35的串口控制。短信控制終端作為短信(ShortMessageSMS)一族,想必你有這樣的體會:用手機編輯短信息十分不便、容易出錯,而且修改費時,若能用計算機來收發(fā)短信則方便許多。注意,本文所說的用計算機收發(fā)短信并不是說通過"網(wǎng)易短信王"方式在Internet上收發(fā)短信,而是直接用計算機控制運行了GSM通信系統(tǒng)的短信終端進行收發(fā),因而其收發(fā)短信的原理與手機是本質(zhì)相同的。實際上,一大堆的垃圾短信也是采用這種短信終端發(fā)出來的!我們來介紹一款GSM塊,它就是西門子公司的,它基帶處理器、電源專用集成電路、射頻電路和閃速存儲器等部分組成,負責處理GSM蜂窩設(shè)備中的音頻、數(shù)據(jù)和信號,內(nèi)嵌的軟件部分執(zhí)行應(yīng)用接口和所有GSM協(xié)議棧的能TC35持中文短信息工作在GSM1800雙頻段電源范圍為,傳輸語音和數(shù)據(jù)信號,消耗功率在EGSM900(4類)和GSM1800(1類)分別為2W1W通過接口連接器和天線連接器分別連接卡讀卡器和天線TC35的數(shù)據(jù)接口(CMOS電平)通過AT命令可雙向傳輸指令和數(shù)據(jù),可選波特率為,自動波特率為1.2k~115kbit/s它支持文本和格式的,可通過AT命令或關(guān)斷信號實現(xiàn)重啟和故障恢復(fù)。我們需要利用以TC35模塊為主的硬件組成一個TC35終端設(shè)備,并與電腦通過串口相連,并自行編制在PC運行的短信息收發(fā)軟件,就可以組成一個短信收發(fā)系統(tǒng)。端電路如下圖所示:控制主要包含如下幾類指令:(1)初始化指令不得用于商業(yè)用途

僅供個人參考設(shè)置短消息發(fā)送格式AT+CMGF=1<CR>設(shè)置代表PDU模式是回車符號,也就0x0d指令正確則模塊返回CRLF>OK<CRLF>,<CRLF>回車換行符號。(2)設(shè)置讀取短消息中心短消息中心號碼由移動運營商提供。設(shè)置短消息中心的指令格式為:AT+CSCA=″+86短消息中心)設(shè)置正確則模塊返回<。讀取短消息服務(wù)中心則使用命令:AT+CSCA=?<CR>塊應(yīng)該返回:<CRLF>+CSCA:″86″<CRLF>。(3)設(shè)置短消息到自動提示設(shè)置短消息到達自動提示的指令格式為:設(shè)置正確則塊返回:。設(shè)置此命令可使模塊在短消息到達后向串口發(fā)送指令:<CRLF>+CMTI:″SM″,INDEX(息存儲位置)<CRLF>。通過送短消息的方法為:PC上的控制軟件按照的格式發(fā)送和接收數(shù)據(jù),短消息的內(nèi)容可以是中文或者其他字符。PDU模式,如果發(fā)送短消息,則首先發(fā)送短消息數(shù)據(jù)的長度:等待塊返回字符"則以將數(shù)據(jù)輸入PDU數(shù)據(jù)以<Z>(也就0x1a)作為結(jié)束符。短消息發(fā)送成功,模塊返回:不得用于商業(yè)用途

僅供個人參考<CRLF>OK<CRLF>通過收短消息的方法為:短消息到來后,串口上會接收到指令<CRLF>+CMTI:″SM″,INDEX(信息存儲位置)<CRLF>PC上的控制軟件通過讀取數(shù)據(jù)的AT命令將塊中PDU格式的短消息內(nèi)容讀出如果用+CMGL代替+CMGR則可一次性讀出全部短消息。通過除短消息的方法為:PC上的控制軟件收到一條短消息并處理后,需要將其在SIM卡上刪除,以防止SIM卡和。刪除短消息的指令為:AT+CMGD=INDEX<CR>刪除后模塊返回<CRLF>OK<CRLF>useonlyinstudyandresearch;notcommercialuse程序?qū)嵗捎诒疚牡淖谥荚谟谥v解串口通信,因此,我們屏蔽圖形用戶界面的細節(jié),制作一個簡單的短信收發(fā)軟件,它包含了控制短信終端的所有串口通信內(nèi)容。實際上,一個理想的短信收發(fā)軟件的界面應(yīng)類似于OutlookFoxmail,包含收件箱、發(fā)件箱已發(fā)送短信箱等內(nèi)容,但是這些東西都與我們要介紹的串口通信無關(guān),因此,下面的軟件界面雖"敗絮外",但仍可稱得"金玉其中:不得用于商業(yè)用途

僅供個人參考關(guān)于界面上控件的描述如下:BEGINEDITTEXTIDC_SMSCONTENT_EDIT,39,61,242,38,ES_AUTOHSCROLLPUSHBUTTON"發(fā)送"GROUPBOX"接短消息",IDC_STATIC,28,124,361,167LTEXT"對方手機號,IDC_STATIC,41,35,42,11EDITTEXTIDC_PHONENUM_EDIT,88,30,192,17,ES_AUTOHSCROLLPUSHBUTTON"清除",IDC_CLEAR_BUTTON,316,30,45,18GROUPBOX"發(fā)短消息"LISTBOXLBS_NOINTEGRALHEIGHT|PUSHBUTTON"接收"PUSHBUTTON"清空"對話框類的消息映射為:BEGIN_MESSAGE_MAP(CSMSControlDlg,//{{AFX_MSG_MAP(CSMSControlDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_SEND_BUTTON,OnSendButton)不得用于商業(yè)用途

僅供個人參考ON_BN_CLICKED(IDC_DELETEALL_BUTTON,OnDeleteallButton)感《通過串口收發(fā)短消息一文的作者bhw98他為我們編寫了數(shù)個獨立于操作系統(tǒng)平臺的C數(shù),使得我們可以在應(yīng)用程序中直接對這些函數(shù)進行調(diào)用。在本控制軟件中,也對這些函數(shù)進行了充分利用。下面是對本例程軟件的主要數(shù)據(jù)結(jié)構(gòu)和核心函數(shù)的介紹:數(shù)據(jù)結(jié)構(gòu)//用戶信息編碼方式04GSM_UCS28//短消息參數(shù)結(jié)構(gòu),編碼/碼共用//其中,字符串以結(jié)尾struct{SCA[16];//短消息服務(wù)中心號碼地址)TPA[16];目標號碼或回復(fù)號碼(TP-DATP-RA)TP_PID;//用戶信息協(xié)議標識(TP_DCS;//用戶信息編碼方式(TP_SCTS[16];//服務(wù)時間戳字符串接收時用到TP_UD[161];//原始用戶信息編碼前或解碼后的TP-UD)//短消息序號,在讀取時用到}SM_PARAM;發(fā)送短消息發(fā)送按鈕對應(yīng)的函數(shù)為CSMSControlDlg::OnSendButton,讀取用戶輸出并根據(jù)目標電話號碼和短信息內(nèi)容形成SM_PARAM(源PDU參)的內(nèi)容,接著進行發(fā)送:voidCSMSControlDlg::OnSendButton(){//TODO:notificationcode//得用戶輸入desPhoneNum;GetDlgItemText(IDC_PHONENUM_EDIT,desPhoneNum);//充SM_PARAM結(jié)構(gòu)體內(nèi)容SM_PARAMsmParam;smParam=不得用于商業(yè)用途

僅供個人參考//送短信息gsmSendMessage(smParam);}其中調(diào)用的函數(shù)體現(xiàn)了串口通信的核心內(nèi)容它按照第節(jié)闡述的模塊發(fā)送短消息的串口控制流程進行短信的發(fā)送:SM_PARAM*pSrc源PDU參數(shù)指針){int//PDU串長度unsignednSmscLength;串長度intnLength;//串口收到的數(shù)據(jù)長度cmd[16];命令串pdu[512];//PDU串a(chǎn)ns[128];//應(yīng)答串gsmEncodePdu(pSrc,//根據(jù)PDU參數(shù),編碼PDU"\x01a");以Ctrl-Z結(jié)束&nSmscLength,2);取PDU串中的信息長度nSmscLength++;//加上長度字節(jié)本身//命令中的長度,不包括SMSC信息長度,以數(shù)據(jù)字節(jié)計sprintf(cmd,"AT+CMGS=%d\r",/2-nSmscLength);//生成命令//先輸出命令串=ReadComm(ans,//讀應(yīng)答數(shù)據(jù)//根據(jù)能否找到"\r\n>"決定成功與if==&&strncmp(ans,"\r\n>=={WriteComm(pdu,//得到肯定回答,繼續(xù)輸出PDU串=ReadComm(ans,//讀應(yīng)答數(shù)據(jù)//根據(jù)能否找到"決定成功與否if0&&strncmp(ans,"+CMS!={TRUE;}}FALSE;不得用于商業(yè)用途

僅供個人參考}讀取短消息點擊"收"鈕會通過函數(shù)的調(diào)用獲得所有短消息,最后在列表控件中顯示所有短信:voidCSMSControlDlg::OnRecvButton(){//TODO:notificationcodeSM_PARAMsmParam[100];//短緩沖區(qū)int短信條數(shù)=讀取短信//示短信for(int{m_recvlist.AddString(CString(smsNum[i].TPA)+smsNum[i].TP_UD);}}其中調(diào)用的函數(shù)完成最核心的短信接收功能它照第闡述的GSM模塊接收短消息的串口控制流程進行短信的接收://參數(shù):短消息緩沖區(qū),必須足夠大//返回:短消息條數(shù)int{intnLength;//串口收到的數(shù)據(jù)長度int//短消息計數(shù)值char*ptr;//內(nèi)部用的數(shù)據(jù)指針cmd[16];命令串a(chǎn)ns[1024];應(yīng)答串==sprintf(cmd,"AT+CMGL\r");生成命令,用+CMGL一次性讀出全部短消息//輸出命令串=ReadComm(ans,//讀應(yīng)答數(shù)據(jù)//根據(jù)能否找到"+CMSERROR"決成功與否>0&&strncmp(ans,"+CMS10)!=不得用于商業(yè)用途

僅供個人參考{//循環(huán)讀取每一條短消息以"+CMGL:"開=strstr(ptr,"+CMGL:"))!=NULL){+=6;//跳過"+CMGL:"sscanf(ptr,"%d",&pMsg->index);讀取序號=strstr(ptr,//找下一行+=2;//跳過"http://串解碼//準備讀下一條短消息//短消息計數(shù)加}}nMsg;}刪除短消息我們可以在讀取完所有短信息后調(diào)用函數(shù)模塊上刪除那些已經(jīng)被接收到PC上的短信息,它按照第節(jié)闡述的GSM模塊刪除短消息的串口控制流程進行短信的刪除://短消息序號,從1始gs

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論