【正文】
GSM通信模塊RS232串口線GSM MODEM計算機(jī) 圖12 硬件系統(tǒng)構(gòu)成 GSM通信模塊下圖是一款GSM模塊,它就是西門子公司的TC35,它由GSM基帶處理器、電源專用集成電路、射頻電路和閃速存儲器等部分組成,負(fù)責(zé)處理GSM蜂窩設(shè)備中的音頻、數(shù)據(jù)和信號,內(nèi)嵌的軟件部分執(zhí)行應(yīng)用接口和所有GSM協(xié)議棧的功能?! 。侯A(yù)先編制好短信,設(shè)定發(fā)送時間,到了設(shè)定的時間系統(tǒng)自動發(fā)出信息。系統(tǒng)提供全國號碼段庫,可自動按號碼段生成群發(fā)號碼,可 從選定的號段中隨機(jī)抽取部分號碼發(fā)送,還可以設(shè)定過濾掉部分尾號,也可指定部分尾號發(fā)送。Block Mode已是昔日黃花,目前很少用了。發(fā)送和接收的PDU串,結(jié)構(gòu)是不完全相同的。其中號碼和時間的表示方法,不是按正常順序順著來的,而且要以‘F’將奇數(shù)補(bǔ)成偶數(shù)。UCS2編碼時,也是字節(jié)數(shù),等于原始短消息的字符數(shù)的兩倍。 // 當(dāng)前正在處理的組內(nèi)字符字節(jié)的序號,范圍是07 unsigned char nLeft。 // 修改目標(biāo)串的指針和計數(shù)值 pDst++。 // 當(dāng)前正在處理的組內(nèi)字節(jié)的序號,范圍是06 unsigned char nLeft。 // 修改目標(biāo)串的指針和計數(shù)值 pDst++。 } // 修改源串的指針和計數(shù)值 pSrc++?!边@一類字符,則要按上面編碼的輸出去查表,請參閱GSM 。 // 高低字節(jié)對調(diào),輸出 for(int i=0。 // UNICODE串緩沖區(qū) // 高低字節(jié)對調(diào),拼成UNICODE for(int i=0。} 打印字符串和字節(jié)數(shù)據(jù)之間相互轉(zhuǎn)換用以上編碼和解碼模塊,還不能將短消息字符串編碼為PDU串需要的格式,也不能直接將PDU串中的用戶信息解碼為短消息字符串,因為還差一個在可打印字符串和字節(jié)數(shù)據(jù)之間相互轉(zhuǎn)換的環(huán)節(jié)。amp。 + 10) 4。) { *pDst |= *pSrc 39。} // 字節(jié)數(shù)據(jù)轉(zhuǎn)換為可打印字符串// 如:{0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01} C8329BFD0E01 // pSrc: 源數(shù)據(jù)指針// pDst: 目標(biāo)字符串指針// nSrcLength: 源數(shù)據(jù)長度// 返回: 目標(biāo)字符串長度int gsmBytes2String(const unsigned char* pSrc, char* pDst, int nSrcLength){ const char tab[]=0123456789ABCDEF。\039。 // 用戶信息協(xié)議標(biāo)識(TPPID) char TP_DCS。 // 內(nèi)部用的串長度 int nDstLength。pDst[nDstLength], nLength)。 // 轉(zhuǎn)換4個字節(jié)到目標(biāo)PDU串 nDstLength += gsmInvertNumbers(pSrcTPA, amp。buf[4], nLength+1) + 4。pDst[nDstLength], nLength)。 // SMSC號碼串長度 pSrc += 4。tmp, 2)。 // 取協(xié)議標(biāo)識(TPPID) pSrc += 2。 // 用戶信息長度(TPUDL) pSrc += 2。 // 格式轉(zhuǎn)換 nDstLength = gsmDecode8bit(buf, pDstTP_UD, nDstLength)?! ≡O(shè)置此命令可使模塊在短消息到達(dá)后向串口發(fā)送指令: CRLF+CMTI:″SM″,INDEX(信息存儲位置)CRLF。刪除短消息的指令為:AT+CMGD=INDEXCR 刪除后模塊返回CRLFOKCRLF 程序介面及其代碼實現(xiàn)由于本章的宗旨在于講解串口通信,因此,我們屏蔽圖形用戶界面的細(xì)節(jié),制作一個簡單的短信收發(fā)軟件,它包含了控制短信終端的所有串口通信內(nèi)容。 // 短消息序號,在讀取時用到} SM_PARAM。}其中調(diào)用的gsmSendMessage函數(shù)體現(xiàn)了串口通信的核心內(nèi)容,它按照第1節(jié)闡述的GSM模塊發(fā)送短消息的串口控制流程進(jìn)行短信的發(fā)送:BOOL gsmSendMessage(const SM_PARAM *pSrc // pSrc: 源PDU參數(shù)指針){ int nPduLength。 // 以CtrlZ結(jié)束 gsmString2Bytes(pdu, amp。 strncmp(ans, \r\n , 4) == 0) { WriteComm(pdu, strlen(pdu))。//短信條數(shù) smsNum = gsmReadMessage(smParam)。 // 命令串 char ans[1024]。 strncmp(ans, +CMS ERROR, 10) != 0) { // 循環(huán)讀取每一條短消息, 以+CMGL:開頭 while((ptr = strstr(ptr, +CMGL:)) != NULL) { ptr += 6。 // 短消息計數(shù)加1 } } return nMsg。amp。// 字節(jié)數(shù)據(jù)轉(zhuǎn)換為可打印字符串 返回: 目標(biāo)字符串長度// 如:{0xC8, 0x32, 0x9B, 0xFD, 0x0E, 0x01} C8329BFD0E01int gsmBytes2String(const unsigned char *pSrc, // pSrc: 源數(shù)據(jù)指針char *pDst, // pDst: 目標(biāo)字符串指針int nSrcLength // nSrcLength: 源數(shù)據(jù)長度)。RS232C接口(又稱EIA RS232C),1970年由美國電子工業(yè)協(xié)會(EIA)聯(lián)合貝爾系統(tǒng)、調(diào)制解調(diào)器廠家及計算機(jī)終端生產(chǎn)廠家共同制定,全名是數(shù)據(jù)終端設(shè)備(DTE)和數(shù)據(jù)通訊設(shè)備(DCE)之間串行二進(jìn)制數(shù)據(jù)交換接口技術(shù)標(biāo)準(zhǔn)。筆者曾經(jīng)在拙作中多次以實例論證計算機(jī)領(lǐng)域里許多知識的相通性,這又是一個明證。一般來說可以將下面的打開端口的代碼寫在OnCreate()、OnInitialUpdate()、InitInstance ()等程序入口函數(shù)中:……if(!()) //檢測是否已經(jīng)打開過端口(TRUE)。在線程中通過調(diào)用視類中的DoSendProc函數(shù)來完成對數(shù)據(jù)的發(fā)送,正是由于該函數(shù)是被全局的線程所調(diào)用的,我們就不可以使用取編輯框上的數(shù)據(jù)時通常所用的UpdateData()函數(shù)了,取而帶之的是API 函數(shù)GetDlgItemText(),取到輸入的數(shù)據(jù)后通過控件的SetOutput() 方法就把數(shù)據(jù)從串口發(fā)出去了,其中發(fā)送數(shù)據(jù)必須經(jīng)ColeVariant類將其轉(zhuǎn)換為通用的VARIANT型變量。){(%c,a[i])。//讀取緩沖區(qū)內(nèi)的數(shù)據(jù)CString msg=。實踐證明通過GSM通信模塊與電腦的相連可以利用電腦技術(shù)的尖端優(yōu)勢和強(qiáng)大的功能使得通信系統(tǒng)的本身的功能提升不少,在人機(jī)對話方面更具方便性和快捷性。第 59 頁參考文獻(xiàn)[1]:200303[2]宋寶華. 深入淺出VC++6年3月25日[3] C++[4]黃承安, C++.附 錄(1)英文(原文)Study on the Leakage Current Characteristics of the Salt Contaminated InsulatorsTsongShiann Wu ShihShong YenNational YunLin Electric Power Lab.Institute of Technology Power Research InstituteTaiwan, ROC Taiwan, ROCI . IntroductionIt is well known that the degree of surface contamination of insulators will affect the surface flashover characteristics of insulators when an AC high voltage is applied. Therefore, insulators and bushings used in power line should be frequently washed for keeping them clean. If the frequent washing can be conducted, the method of coating silicone grease for preventing surface contamination of the insulators can be employed. Both of these methods are very effective, but the problem is how to knows the best time for washing or the tost suitable period for recoating silicon grease. This problem needs to know how to judge or estimate when flashover will occur.For estimating the occurrence of flashover, the indications of starting flashover and its progressive status should be understood. The lain purposes of this study are to obtained the indications of different degree of salt contamination through experiments, and to judge and estimate the occurrence of flashover if insulators based on these indication。解決這一問題的方法是應(yīng)用C/S模式使本系統(tǒng)作為服務(wù)器端,并添加用戶管理等功能使客戶端能夠通過局域網(wǎng)或internet訪問服務(wù)器端。(%c,10)。i++。HWND hwnd=GetSafeHwnd()。發(fā)送數(shù)據(jù)的代碼原則上是可以寫到一個成員函數(shù)中被直接調(diào)用的,但這并不是一個良好的編程習(xí)慣:我們應(yīng)當(dāng)把比較耗時的操作,如文件拷貝、打印、端口傳輸?shù)裙ぷ鞣诺揭粋€單獨的線程當(dāng)中,以避免其在工作時會引起整個進(jìn)程的阻塞,以提高整個系統(tǒng)對CPU的利用率。 X控件實現(xiàn)串口通信 當(dāng)我們在Windows操作系統(tǒng)下開發(fā)串行通信程序時通常不得不面對許多復(fù)雜的API函數(shù),因為在Windows操作系統(tǒng)下不能直接對設(shè)備端口進(jìn)行操作,也不能在系統(tǒng)級(Ring 3級別)使用任何DOS或BIOS中斷,如要對端口進(jìn)行編程則只能以文件的形式來對端口進(jìn)行操作,這就使開發(fā)人員不得不面對非常煩瑣的API函數(shù)編程。兩串口互連,連接方法主要有二:一種方法是:數(shù)據(jù)的發(fā)送和接收由軟件控制,不進(jìn)行硬件握手,其連接方法如圖43,真正需要互相連接的是RXD、TXD和GND;圖43 無硬件握手時兩串口連接軟件握手又稱為XON/XOFF,通常以CTRLS(0x13)和CTRLQ(0x11)兩個字符來實現(xiàn)流控制。我們可以通過設(shè)備管理器來查看COM的硬件參數(shù)設(shè)置,如圖41?! return FALSE。 // 串口收到的數(shù)據(jù)長度 char cmd[16]。pMsgindex)?!tr = ans。ismsNum。 // 讀應(yīng)答數(shù)據(jù) // 根據(jù)能否找到+CMS ERROR決定成功與否 if (nLength 0 amp。 // 取PDU串中的SMSC信息長度 nSmscLength++。 // SMSC串長度 int nLength。 CString smsContent。 // 短消息服務(wù)中心號碼(SMSC地址) char TPA[16]。在PDU模式,如果發(fā)送短消息,則首先發(fā)送短消息數(shù)據(jù)的長度: AT+CMGS=lengthCR 等待TC35模塊返回ASCII字符,則可以將PDU數(shù)據(jù)輸入,PDU數(shù)據(jù)以Z(也 就是0x1a)作為結(jié)束符。}第3章 AT指令 AT指令 TC35模塊的AT指令列表 涉及TC35模塊的AT指令很多,但與SMS有關(guān)的GSM AT指令如下(from ):AT 指令功 能 AT+CMGCSend an SMS mand(發(fā)出一條短消息命令)AT+CMGDDelete SMS message(刪除SIM卡內(nèi)存的短消息) AT+CMGFSelect SMS message for