摘要:通信錄手機短信查詢系統,為用戶查詢電話號碼提供方便。構建了基于GSM技術的短消息自動收發平臺。并用VB6.0編寫了基于AT指令和PDU模式的系統軟件程序,并測試通過。
關鍵詞:AT指令編程;通信錄;手機短信;查詢系統
中圖分類號:TP311文獻標識碼:A 文章編號:1009-3044(2009)36-10223-04
The Design with Realizes of Correspondence Record Inquiry System Based on Instruction Programming
LIANG Wei-ming
(Xinchang Power Supply Bureau, Xinchang 312500, China)
Abstract: The inquiry system of Correspondence record useing Cell phone text messages,provide the convenience for the user to inquire telephone number.The platform witch can receive and seng message automatically based on GSM technology.Then write the program about the short message′senging-receiveing of the PDU mode and AT commands with VB6.0 and past the test.
Key words: AT instruction programming; correspondence record; cell phone text messages; inquiry system
人們在日常的生活和工作中,經常要相互聯系,最常用的聯系方式就是打電話。打電話就要有電話號碼,而要記住一大堆電話號碼,很不容易。至于要記住某個單位所有職工的電話號碼,那更是不大可能。記不起電話號碼,一般通過查電話號碼簿、詢問身邊同事朋友、打查號電話、熱線電話等方式來查詢電話號碼。這些查詢方式,總是存在使用不便、查詢麻煩、信息不全等等問題。
通信錄手機短信查詢系統,使得無論人們在何時何地,只需通過一種十分簡便的方式,即發送一條查詢短信,就能查詢到某人的所有電話號碼,包括內線電話、手機虛擬號碼、手機全號、住宅電話等全部信息。
1 AT指令簡介
采用AT指令控制GSM MODEM,使用PDU模式和Unicode內碼,可實現中文及數字等混合信息的雙向短信收發。常用的AT指令如表1。
2 系統結構設計
2.1 系統結構圖系統采用VB6.0和ACCESS數據庫開發
將本單位所有職工的通信錄,錄入ACCESS數據庫。系統采用一只外置式GSM短信Modem,接收和發送短信。通信錄手機短信查詢系統在接收到發來的查詢短信后,提取短信中的職工姓名,在數據庫中檢索。檢索到,則回復該職工的聯系電話;沒有檢索到,則回復“請重新發送姓名!”的提醒短信。短信回復時間約為3-5秒。系統結構圖如圖1。
2.2 系統流程圖
由于本單位的職工,基本上都加入了本單位的移動虛擬網。而且,采用虛擬短號發送和接收短信,資費較低。因此,本系統中也必須加入可采用虛擬短號查詢的功能。
針對不同的查詢方式,需采用不同的處理方法和查詢流程。具體流程圖如圖2。
3 基于AT指令采用VB編程的系統實現
3.1 用VB6.0編程語言,連接ACEESS數據庫
采用VB6.0編程,控制Access2000數據庫,實現任意的數據查詢、定位等功能。在實際的編程中,采用了“數據綁定”的方法,實現Access2000數據庫的快速定位和任意查詢等功能。在數據庫中檢索查詢的姓名。
1) 系統初始化,將一個Data控件的數據源指定為當前目錄下的通信錄數據庫:通信錄.MDB。
程序代碼示例:
Private Sub Form_Initialize()
Me.Data1.DatabaseName = App.Path \"\\通信錄.MDB\"
End Sub
2) 將系統定義的標簽控件綁定至上述Data的相應字段。程序代碼如下:
Begin VB.Label L7
Caption = \"宅電\"
DataField = \"宅電\"
DataSource= \"Data1\"
Height= 375
Left= 6600
TabIndex= 31
Top = 4320
Width = 1935
End
Begin VB.Label L6
Caption = \"內線\"
DataField = \"內線\"
DataSource= \"Data1\"
Height= 375
Left= 6600
TabIndex= 30
Top = 3720
Width = 1935
End
Begin VB.Label L5
Caption = \"虛擬號\"
DataField = \"虛擬號\"
DataSource= \"Data1\"
Height= 375
Left= 6600
TabIndex= 29
Top = 3120
Width = 1935
End
Begin VB.Label L4
Caption = \"手機/小靈通\"
DataField = \"手機/小靈通\"
DataSource= \"Data1\"
Height= 375
Left= 6600
TabIndex= 28
Top = 2520
Width = 1935
End
Begin VB.Label L3
Caption = \"姓名\"
DataField = \"姓名\"
DataSource= \"Data1\"
Height= 375
Left= 6600
TabIndex= 27
Top = 1920
Width = 1935
End
Begin VB.Label L2
Caption = \"部門/班組\"
DataField = \"部門/班組\"
DataSource= \"Data1\"
Height= 375
Left= 6600
TabIndex= 26
Top = 1320
Width = 1935
End
Begin VB.Label L1
Caption = \"id\"
DataField = \"id\"
DataSource= \"Data1\"
Height= 375
Left= 6600
TabIndex= 25
Top = 720
Width = 1935
End
3) 調用.Recordset.MoveNext在數據庫中檢索查詢的姓名。程序代碼如下:
Data1.Refresh
Do While Not (Data1.Recordset.EOF)
If L3.Caption = XM Then Exit Do
Data1.Recordset.MoveNext
Loop
3.2VB6.0編程,采用AT指令,使用PDU模式和Unicode碼,回復查詢到的信息
1)打開連接GSM短信貓的串口。程序如下:
Private Sub Form_Load()
MSComm1.CommPort = ComboBox1.Text
MSComm1.Settings = \"9600,N,8,1\"
MSComm1.InputLen = 0
End Sub
2)編程透過串口,采用AT指令控制GSM MODEM,使用PDU模式和Unicode內碼,實現中文及數字等混合信息的雙向短信收發,回復查詢到的信息。
程序代碼如下:
Public Function Sendsms(csca As String, num As String, Msg As String) As Boolean
Dim pdu, psmsc, pnum, pmsg As String
Dim leng As String
Dim length As Integer
length = Len(Msg)
length = 2 * length
leng = Hex(length)
If length < 16 Then leng = \"0\" leng
psmsc = Trim(telc(csca))
pnum = Trim(telc(num))
pmsg = Trim(ascg(Msg))
If CDbl(num) > 10000000000# Then
pdu = prex psmsc midx pnum sufx leng pmsg
Else
pdu = prex psmsc midx2 pnum sufx leng pmsg
End If
MSComm1.Output = \"AT+CMGF=0\" + vbCr
If CDbl(num) > 10000000000# Then
MSComm1.Output = \"AT+CMGS=\" Str(15 + length) + vbCr
Else
MSComm1.Output = \"AT+CMGS=\" Str(13 + length) + vbCr
End If
MSComm1.Output = pdu Chr$(26)
Sendsms = True
End Function
3)將手機號碼和對方手機號碼也轉換為PDU格式,自動加86至13位。實現支持手機全號和手機虛擬號碼收發短信,并能自動檢索和短信回復。
程序代碼如下:
Public Function telc(num As String) As String
Dim tl As Integer
Dim ltem, rtem, ttem As String
Dim ti As Integer
ttem = \"\"
tl = Len(num)
If tl <> 11 And tl <> 13 Then
'MsgBox \"wrong number.\" tl
'Exit Function
End If
If tl = 11 Then
tl = tl + 2
num = \"86\" num
End If
For ti = 1 To tl Step 2
ltem = Mid(num, ti, 1)
rtem = Mid(num, ti + 1, 1)
If ti = tl Then rtem = \"F\"
ttem = ttem rtem ltem
Next ti
telc = ttem
End Function
4)將中文字符轉換為Unicode碼:
程序代碼如下:
Public Function ascg(smsg As String) As String
Dim si, sb As Integer
Dim stmp As Integer
Dim stemp As String
sb = Len(smsg)
ascg = \"\"
For si = 1 To sb
stmp = AscW(Mid(smsg, si, 1)) 'Asc
If Abs(stmp) < 127 Then
stemp = \"00\" Hex(stmp)
Else
stemp = Hex(stmp)
End If
ascg = ascg stemp
Next si
ascg = Trim(ascg)
End Function
3.3 程序運行界面
程序運行界面如圖3。
4 結束語
該文給出了用VB6.0編程,進行通信錄手機短信查詢系統設計和開發的一種簡單易行的過程和方法。通過這套系統,隨時隨地地,只需簡單地發送一條查詢短信,就能方便地查詢到某人的所有聯系電話。該文應用的采用AT指令編程,以及使用PDU模式和Unicode碼控制GSM短信貓的方法,供業內人士參考。
參考文獻:
[1] 周明剛,王元芳,宋慶美,等.用AT指令實現的用電欠費短信通知系統[J].現代計算機,2009(6):186-188.
[2] 欒曉春.基于GSM MODEM的高校成績查詢系統開發[J].電腦知識與技術,2009(8):6211-6212,6220.