【正文】
如果開頭字符不是AT+,那么需要搜索一下; iTmp1 = InStr(g_strSave, +) 39。 g_strSave = Right(g_strSave, Len(g_strSave) iLen) 39。查找命令輸入結(jié)束符號——回車 If iLen 0 Then g_strLastAT = Left(g_strSave, iLen) 39。 vbCr Then CommandStatus = 重復(fù)上次指令 g_strSave = Right(g_strSave, Len(g_strSave) 3) g_strThisAT = g_blIsWaiting = False ElseIf UCase(Left(g_strSave, 2)) = AT Then 39。 在這里,如果命令一時沒有全部返回,因為串口數(shù)據(jù)不一定會得到全部數(shù)據(jù) 39。 另外,還有一種可能是以上所述字符串出現(xiàn)在半道, 39。 則表示是AT命令的響應(yīng)。 a. 如果是AT開頭或者有A/且A/之后是回車換行,則表示ATE1 39。 And (InStr(strTmp, OK) 0 Or InStr(strTmp, ERROR) 0) Then g_blIsWaiting = False iCountMonitor = 0 End If iCountMonitor = iCountMonitor + 1 39。 vbCrLf amp。 strTmp 39。strSMSStatus: 短消息狀態(tài):READ—已讀,UNREAD—未讀,SENT—發(fā)送,UNSENT—未發(fā)送Public Function GetDataFromCommPort(ByVal strInput As String, strATData As String, Optional CommandStatus As String, Optional TimedOut As Boolean, Optional iSMSIdx As Integer, Optional strSMSTime As String, Optional strSMSSourceNO As String, Optional strSMSStatus As String) As Boolean On Error GoTo ErrorG Dim strTmp As String, strTmp1 As String Dim i As Integer, iTmp1 As Integer, iTmp2 As Integer Dim iLen As Integer Dim blHasError As Boolean Dim blIfInprogress As Boolean Static iCountMonitor As Integer strTmp = For i = 1 To Len(strInput) strTmp1 = Mid(strInput, i, 1) If strTmp1 vbLf Then strTmp = strTmp amp。strSMSTime: 短消息接收時間39。strATData: 短消息內(nèi)容(UD)39。輸入?yún)?shù): 串口數(shù)據(jù)39。是否用列舉(List)方法讀取 SmsIndex As Long SourceNo As String ReachDate As String ReachTime As String SmsMain As StringEnd Type39。VB延時API函數(shù)Public Declare Sub winhelp Lib user32 (ByVal hWnd As Long, ByVal lphelpfile As String, ByVal wmand As Long, ByVal dwData As Long) 39。退出程序,關(guān)閉串口Private Sub Cmdquit_Click() Unload MeEnd SubPrivate Sub Form_Unload(Cancel As Integer) = FalseEnd Sub39。 結(jié)束掃描,等待外部觸發(fā) i_ScanPtr = 0 ScanTaskA = False Else 39。======= 沒有捕獲任務(wù),將掃描指針前移一個位置 ======= i_ScanPtr = i_ScanPtr + 1 39。 如果程序能夠執(zhí)行到此處,說明該任務(wù)已經(jīng)完成那么將該任務(wù)的標(biāo)志刪除 n_TaskWord = (n_TaskWord And (Not nTmp)) 39。 將任務(wù)命令下發(fā) = ary_strTask(i_ScanPtr) Else 39。======= 察看標(biāo)志是否等于1 ======= If (n_TaskWord And nTmp) 0 Then 39。 vbCrLf = obj_ArySMSList(n).SmsMain End If Next n End IfEnd SubPrivate Sub Timer1_Timer() = ScanTaskAEnd SubPrivate Function ScanTaskA() As Boolean Dim nTmp As Long Dim i_ScanPtr As Integer Dim ary_nCommandFlag(0 To 31) As Long For i = 0 To 15 ary_nCommandFlag(i) = 2 ^ (15 i) Next iOn Error Resume NextContinueScan: 39。 amp。 strTmpHex Next i Else strTmp = = amp。 amp。讀取短消息Private Sub CmdRead_Click() If = True Then = Call AddTask(n_TaskWord, ary_strTask, 16, 11, AT+CMGF=1 amp。 SM,ME,SM amp。 3,1,2,0 amp。 vbCr 39。測試GSMPrivate Sub TestAT_Click() = = AT amp。定義模塊級變量Dim ary_strTask(0 To 31) As StringDim n_TaskWord As Long39。參考文獻[1]常玉林,[J].中國公路學(xué)報, 2005 (18)[2]陳弋,汪亞東,[J]. 電子技術(shù)應(yīng)用,(11)[3][J].城市公共交通, 2003 (4)[4]李江全, Basic串口通信預(yù)測空[M].北京:人民郵電出版社, [5] 張玉生. Visual Basic程序設(shè)計與上機實驗指導(dǎo)[M].上海:華東理工大學(xué)出版社, [6][M].上海:電子技術(shù),2007,34 (9)[7]黃衛(wèi)寧. Visual Basic實用教程[M].北京:人民郵電出版社, [8]王穎,李敏業(yè). Visual Basic+SQL Server數(shù)據(jù)庫應(yīng)用實例[M].北京:人民郵電出版社, [9][M].北京:航空航天大學(xué)出版社,[10]吳嘉澎,郭寒軍,[J].電子技術(shù)應(yīng)用,(12)[11]張兢,[J].無線電工程,2005 (35)[12]馮偉,[J].江蘇:煤炭科學(xué)技術(shù),2007,35(10) [13][J].上海:2007:33 (11)[14][J].工程物理研究院科技年報,2003 (1)[15][J ].電子技術(shù)應(yīng)用,2003 (1)[16] 短信息接口的軟硬件設(shè)計[J].單片機與嵌入式系統(tǒng)應(yīng)用,2003 (7)[17]趙明富,張先富,[J].電子技術(shù)應(yīng)用, (10)[18][J].電子工程師, 2006 (6)[19][J].產(chǎn)業(yè)透視, 2004 (6)[20][J].交通與計算機, 2006 (10)123附錄一 位置坐標(biāo)表1 5路車站牌坐標(biāo)站牌名編號坐標(biāo)醫(yī)學(xué)院0501’ ’向陽路口0502’ ’張莊0503’ ’新遠學(xué)校0504’ ’溥城花園0505’ ’汽車東站0506’ ’起重設(shè)備廠0507’ ’南干橋0508’ ’表2 4路車站牌坐標(biāo)站牌名編號坐標(biāo)醫(yī)學(xué)院0401’ ’三附院0402’ ’新延路口0403’ ’佐今明藥業(yè)0404’ ’國稅局0405’ ’公安大樓0406’ ’花卉大市場0407’ ’啟明小區(qū)0408’ ’附錄二 程序清單39。我的同學(xué)們也在這次設(shè)計中給予我很大的技術(shù)支持,我們共同討論設(shè)計方案以及程序設(shè)計流程,并且當(dāng)我寫程序時遇到不能解決的程序問題時,他們都積極有幫忙討論解決方案,讓我感受到了強大的團對力量。通過上述措施這種現(xiàn)象是可以減少和彌補的。本系統(tǒng)依托覆蓋廣泛的GSM移動通訊公共網(wǎng)絡(luò)提供的短消息業(yè)務(wù)傳輸更新數(shù)據(jù),無需自行組網(wǎng),系統(tǒng)運行費用低廉,數(shù)據(jù)傳輸可靠、迅速,是比較理想的通訊方式。同時系統(tǒng)具有統(tǒng)計及報表輸出功能。系統(tǒng)設(shè)置模塊完成灌區(qū)渠系測點結(jié)構(gòu)圖、數(shù)據(jù)庫創(chuàng)建、系統(tǒng)通信參數(shù)設(shè)置、短消息通信方式設(shè)置等功能;信息接收模塊完成信息接收、解碼、信息存儲等功能;數(shù)據(jù)處理模塊完成數(shù)據(jù)處理統(tǒng)計、報表輸出等功能。在程序運行過程中建立自己所需的數(shù)據(jù)庫和數(shù)據(jù)表,其本質(zhì)就是用代碼在程序運行過程中建立數(shù)據(jù)庫和數(shù)據(jù)表。在開發(fā)過程中,我們通常的使用的方法是:先使用數(shù)據(jù)庫管理系統(tǒng)(例如:Microsoft SQL Server)中的可視化數(shù)據(jù)管理器建立好數(shù)據(jù)庫和數(shù)據(jù)表結(jié)構(gòu),然后在程序中通過使用ADODC數(shù)據(jù)庫控件或引用ADO對象與數(shù)據(jù)庫中的表建立連接,再通過數(shù)據(jù)庫感知控件(例如:文本框、Data Grid等)來進行數(shù)據(jù)庫的各種操作。最新的是ADO,它是比RDO和DAO更加簡單然而更加靈活的對象模型。表6 窗體、控件對象的主要屬性設(shè)置控件類型名 稱主 要 屬 性功 能FormFrmMainCaption=PC機與GSM串口通信程序窗體標(biāo)題欄顯示程序名稱FrameFrame1Caption=短信接收區(qū)顯示收到的短信息內(nèi)容等信息LabelLabel1Caption=短信內(nèi)容標(biāo)簽TextBoxSMSTextMultiLin=True允許多行顯示(短信內(nèi)容)ScrollBars=2有垂直滾動條LabelLabel2Caption=短信位置標(biāo)簽TextBoxSMSNoText為空顯示接收短信號碼LabelLabel3Caption=短信號碼標(biāo)簽TextBoxSMSTimeText為空顯示接收短信號碼LabelLabel4Caption=接收時間標(biāo)簽TextBoxtextReceiveMultiLin=True允許多行顯示(返回信息) ScrollBars=2有垂直滾動條CommandButtonCmdReadCaption=讀取短信讀取短信命令CommandButtonTestATCaption=測試AT測試AT命令CommandButtonCmdQuitCaption=退出關(guān)閉程序TimerTimer1Enable=False初始不可用Interval=80時鐘周期TimerTimer2Enable=False初始不可用Interval=1000時鐘周期MSCommMSComm1在程序中設(shè)置串口參數(shù)設(shè)置 數(shù)據(jù)管理部分程序設(shè)計在Visual Basic中,常用的數(shù)據(jù)訪問接口有下列三種:數(shù)據(jù)庫訪問對象(DAO,Data Access Object)、遠程數(shù)據(jù)庫對象(RDO,Remote Data Object)和ActiveX數(shù)據(jù)對象(ADO,ActiveX Data Object)。兩個Frame控件、4個Label控件、5個TextBox控件、3個CommandB