摘要:通信錄手機(jī)短信查詢系統(tǒng),為用戶查詢電話號(hào)碼提供方便。構(gòu)建了基于GSM技術(shù)的短消息自動(dòng)收發(fā)平臺(tái)。并用VB6.0編寫了基于AT指令和PDU模式的系統(tǒng)軟件程序,并測(cè)試通過(guò)。
關(guān)鍵詞:AT指令編程;通信錄;手機(jī)短信;查詢系統(tǒng)
中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):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
人們?cè)谌粘5纳詈凸ぷ髦?,?jīng)常要相互聯(lián)系,最常用的聯(lián)系方式就是打電話。打電話就要有電話號(hào)碼,而要記住一大堆電話號(hào)碼,很不容易。至于要記住某個(gè)單位所有職工的電話號(hào)碼,那更是不大可能。記不起電話號(hào)碼,一般通過(guò)查電話號(hào)碼簿、詢問(wèn)身邊同事朋友、打查號(hào)電話、熱線電話等方式來(lái)查詢電話號(hào)碼。這些查詢方式,總是存在使用不便、查詢麻煩、信息不全等等問(wèn)題。
通信錄手機(jī)短信查詢系統(tǒng),使得無(wú)論人們?cè)诤螘r(shí)何地,只需通過(guò)一種十分簡(jiǎn)便的方式,即發(fā)送一條查詢短信,就能查詢到某人的所有電話號(hào)碼,包括內(nèi)線電話、手機(jī)虛擬號(hào)碼、手機(jī)全號(hào)、住宅電話等全部信息。
1 AT指令簡(jiǎn)介
采用AT指令控制GSM MODEM,使用PDU模式和Unicode內(nèi)碼,可實(shí)現(xiàn)中文及數(shù)字等混合信息的雙向短信收發(fā)。常用的AT指令如表1。
2 系統(tǒng)結(jié)構(gòu)設(shè)計(jì)
2.1 系統(tǒng)結(jié)構(gòu)圖系統(tǒng)采用VB6.0和ACCESS數(shù)據(jù)庫(kù)開發(fā)
將本單位所有職工的通信錄,錄入ACCESS數(shù)據(jù)庫(kù)。系統(tǒng)采用一只外置式GSM短信Modem,接收和發(fā)送短信。通信錄手機(jī)短信查詢系統(tǒng)在接收到發(fā)來(lái)的查詢短信后,提取短信中的職工姓名,在數(shù)據(jù)庫(kù)中檢索。檢索到,則回復(fù)該職工的聯(lián)系電話;沒(méi)有檢索到,則回復(fù)“請(qǐng)重新發(fā)送姓名!”的提醒短信。短信回復(fù)時(shí)間約為3-5秒。系統(tǒng)結(jié)構(gòu)圖如圖1。
2.2 系統(tǒng)流程圖
由于本單位的職工,基本上都加入了本單位的移動(dòng)虛擬網(wǎng)。而且,采用虛擬短號(hào)發(fā)送和接收短信,資費(fèi)較低。因此,本系統(tǒng)中也必須加入可采用虛擬短號(hào)查詢的功能。
針對(duì)不同的查詢方式,需采用不同的處理方法和查詢流程。具體流程圖如圖2。
3 基于AT指令采用VB編程的系統(tǒng)實(shí)現(xiàn)
3.1 用VB6.0編程語(yǔ)言,連接ACEESS數(shù)據(jù)庫(kù)
采用VB6.0編程,控制Access2000數(shù)據(jù)庫(kù),實(shí)現(xiàn)任意的數(shù)據(jù)查詢、定位等功能。在實(shí)際的編程中,采用了“數(shù)據(jù)綁定”的方法,實(shí)現(xiàn)Access2000數(shù)據(jù)庫(kù)的快速定位和任意查詢等功能。在數(shù)據(jù)庫(kù)中檢索查詢的姓名。
1) 系統(tǒng)初始化,將一個(gè)Data控件的數(shù)據(jù)源指定為當(dāng)前目錄下的通信錄數(shù)據(jù)庫(kù):通信錄.MDB。
程序代碼示例:
Private Sub Form_Initialize()
Me.Data1.DatabaseName = App.Path \"\\通信錄.MDB\"
End Sub
2) 將系統(tǒng)定義的標(biāo)簽控件綁定至上述Data的相應(yīng)字段。程序代碼如下:
Begin VB.Label L7
Caption = \"宅電\"
DataField = \"宅電\"
DataSource= \"Data1\"
Height= 375
Left= 6600
TabIndex= 31
Top = 4320
Width = 1935
End
Begin VB.Label L6
Caption = \"內(nèi)線\"
DataField = \"內(nèi)線\"
DataSource= \"Data1\"
Height= 375
Left= 6600
TabIndex= 30
Top = 3720
Width = 1935
End
Begin VB.Label L5
Caption = \"虛擬號(hào)\"
DataField = \"虛擬號(hào)\"
DataSource= \"Data1\"
Height= 375
Left= 6600
TabIndex= 29
Top = 3120
Width = 1935
End
Begin VB.Label L4
Caption = \"手機(jī)/小靈通\"
DataField = \"手機(jī)/小靈通\"
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) 調(diào)用.Recordset.MoveNext在數(shù)據(jù)庫(kù)中檢索查詢的姓名。程序代碼如下:
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碼,回復(fù)查詢到的信息
1)打開連接GSM短信貓的串口。程序如下:
Private Sub Form_Load()
MSComm1.CommPort = ComboBox1.Text
MSComm1.Settings = \"9600,N,8,1\"
MSComm1.InputLen = 0
End Sub
2)編程透過(guò)串口,采用AT指令控制GSM MODEM,使用PDU模式和Unicode內(nèi)碼,實(shí)現(xiàn)中文及數(shù)字等混合信息的雙向短信收發(fā),回復(fù)查詢到的信息。
程序代碼如下:
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)將手機(jī)號(hào)碼和對(duì)方手機(jī)號(hào)碼也轉(zhuǎn)換為PDU格式,自動(dòng)加86至13位。實(shí)現(xiàn)支持手機(jī)全號(hào)和手機(jī)虛擬號(hào)碼收發(fā)短信,并能自動(dòng)檢索和短信回復(fù)。
程序代碼如下:
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)將中文字符轉(zhuǎn)換為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 程序運(yùn)行界面
程序運(yùn)行界面如圖3。
4 結(jié)束語(yǔ)
該文給出了用VB6.0編程,進(jìn)行通信錄手機(jī)短信查詢系統(tǒng)設(shè)計(jì)和開發(fā)的一種簡(jiǎn)單易行的過(guò)程和方法。通過(guò)這套系統(tǒng),隨時(shí)隨地地,只需簡(jiǎn)單地發(fā)送一條查詢短信,就能方便地查詢到某人的所有聯(lián)系電話。該文應(yīng)用的采用AT指令編程,以及使用PDU模式和Unicode碼控制GSM短信貓的方法,供業(yè)內(nèi)人士參考。
參考文獻(xiàn):
[1] 周明剛,王元芳,宋慶美,等.用AT指令實(shí)現(xiàn)的用電欠費(fèi)短信通知系統(tǒng)[J].現(xiàn)代計(jì)算機(jī),2009(6):186-188.
[2] 欒曉春.基于GSM MODEM的高校成績(jī)查詢系統(tǒng)開發(fā)[J].電腦知識(shí)與技術(shù),2009(8):6211-6212,6220.