下面是我写的一段VB程序,COM1口已经打开,Unicode编码没有问题(在超级终端中可以正确发送短信息)。
出现的问题:当前这段程序运行时总是进入死循环,这表示运行结果中没有返回“OK”或“ERROR”,这是为什么?Private Sub Command4_Click()
Dim doev
Dim sendmess As Boolean
Dim send_str As String
Dim length As String
Dim buffer_str As String
flag_auto = False
flag_user = False
sendmess = False
Timer1.Enabled = True
length = Len("你好") * 2
MSComm1.InBufferCount = 0
MSComm1.Output = "AT+CMGS=" + Str(15 + length * 2) + vbCr
'以下为短信内容的Unicode编码,保证正确,可以略过。
send_str = "08" 'SMSC地址信息的长度
send_str = send_str + "91" 'SMSC地址格式(TON/NPI)
send_str = send_str + "683110902805f0" 'SMSC地址
send_str = send_str + "11" '基本参数(TP-MTI/VFP)( 发送,接收为84)
send_str = send_str + "00" 'MR Message Reference
send_str = send_str + "0D" '目标SIM卡号码长度
send_str = send_str + "91" '同上
send_str = send_str + "683100899109f0" '对方手机SIM卡号
send_str = send_str + "00" '普通GSM类型,点到点方式
send_str = send_str + "08" 'UCS2编码
send_str = send_str + "00" '有效期
send_str = send_str + "04" '用户信息长度
send_str = send_str + "4F60597D" '用户信息Unicode编码
send_str = send_str + Chr$(26) 'Ctrl+Z
' Unicode编码结束
MSComm1.Output = send_str
Do '这里好像有问题
doev = DoEvents()
If MSComm1.InBufferCount Then
buffer_str = MSComm1.Input
If InStr(buffer_str, "OK") Then
sendmess = True
Timer1.Enabled = False
Exit Do
ElseIf InStr(buffer_str, "ERROR") Then
sendmess = False
Timer1.Enabled = False
Exit Do
End If
End If
Loop
If sendmess Then
StatusBar1.SimpleText = "短信发送成功!!"
Else
StatusBar1.SimpleText = "短信发送失败!!"
End If
MSComm1.PortOpen = False
End Sub
出现的问题:当前这段程序运行时总是进入死循环,这表示运行结果中没有返回“OK”或“ERROR”,这是为什么?Private Sub Command4_Click()
Dim doev
Dim sendmess As Boolean
Dim send_str As String
Dim length As String
Dim buffer_str As String
flag_auto = False
flag_user = False
sendmess = False
Timer1.Enabled = True
length = Len("你好") * 2
MSComm1.InBufferCount = 0
MSComm1.Output = "AT+CMGS=" + Str(15 + length * 2) + vbCr
'以下为短信内容的Unicode编码,保证正确,可以略过。
send_str = "08" 'SMSC地址信息的长度
send_str = send_str + "91" 'SMSC地址格式(TON/NPI)
send_str = send_str + "683110902805f0" 'SMSC地址
send_str = send_str + "11" '基本参数(TP-MTI/VFP)( 发送,接收为84)
send_str = send_str + "00" 'MR Message Reference
send_str = send_str + "0D" '目标SIM卡号码长度
send_str = send_str + "91" '同上
send_str = send_str + "683100899109f0" '对方手机SIM卡号
send_str = send_str + "00" '普通GSM类型,点到点方式
send_str = send_str + "08" 'UCS2编码
send_str = send_str + "00" '有效期
send_str = send_str + "04" '用户信息长度
send_str = send_str + "4F60597D" '用户信息Unicode编码
send_str = send_str + Chr$(26) 'Ctrl+Z
' Unicode编码结束
MSComm1.Output = send_str
Do '这里好像有问题
doev = DoEvents()
If MSComm1.InBufferCount Then
buffer_str = MSComm1.Input
If InStr(buffer_str, "OK") Then
sendmess = True
Timer1.Enabled = False
Exit Do
ElseIf InStr(buffer_str, "ERROR") Then
sendmess = False
Timer1.Enabled = False
Exit Do
End If
End If
Loop
If sendmess Then
StatusBar1.SimpleText = "短信发送成功!!"
Else
StatusBar1.SimpleText = "短信发送失败!!"
End If
MSComm1.PortOpen = False
End Sub
Private Sub Command4_Click()
Dim doev
Dim sendmess As Boolean
Dim send_str As String
Dim length As String
Dim buffer_str As String
flag_auto = False
flag_user = False
sendmess = False
Timer1.Enabled = True
length = Len("你好") * 2
'MSComm1.InBufferCount = 0
MSComm1.Output = "AT+CMGS=" + Str(15 + length * 2) + vbCr
send_str = "08" 'SMSC地址信息的长度
send_str = send_str + "91" 'SMSC地址格式(TON/NPI)
send_str = send_str + "683110902805f0" 'SMSC地址
send_str = send_str + "11" '基本参数(TP-MTI/VFP)( 发送,接收为84)
send_str = send_str + "00" 'MR Message Reference
send_str = send_str + "0D" '目标SIM卡号码长度
send_str = send_str + "91" '同上
send_str = send_str + "683100899109f0" '对方手机SIM卡号
send_str = send_str + "00" '普通GSM类型,点到点方式
send_str = send_str + "08" 'UCS2编码
send_str = send_str + "00" '有效期
send_str = send_str + "04" '用户信息长度
send_str = send_str + "4F60597D" '用户信息Unicode编码
send_str = send_str + Chr$(26) 'Ctrl+Z
MSComm1.Output = send_str
StatusBar1.SimpleText = "正在发送短信..."
Do
doev = DoEvents()
If MSComm1.InBufferCount Then
buffer_str = MSComm1.Input
If InStr(buffer_str, "OK") Then
sendmess = True
Timer1.Enabled = False
Exit Do
ElseIf InStr(buffer_str, "ERROR") Then
sendmess = False
Timer1.Enabled = False
Exit Do
End If
End If
Text1.Text = Text1.Text & Chr$(13) & buffer_str$
If flag_auto Then
flag_auto = False
Exit Do
End If
Loop
If sendmess Then
StatusBar1.SimpleText = "短信发送成功!!"
Else
StatusBar1.SimpleText = "短信发送失败!!"
End If
MSComm1.PortOpen = False
End SubPrivate Sub Timer1_Timer()
flag_auto = True
End Sub
[email protected]
----------------------------------------------------------------------------
Private Sub Form_Activate()
If MSComm1.PortOpen Then
MsgBox "端口打开错误或程序已经开启,系统不能自动接收话单,这将造成话单数据的丢失,请重新检测端口设置,并重新启动计算机!", vbOKOnly, "吉大信息公司"
Unload Me
Else
MSComm1.PortOpen = True
Do While True
If MSComm1.InBufferCount Then
InString = InString & MSComm1.Input
If InStr(InString, Chr(13) + Chr(10)) Then
List1.AddItem InString
List1.ListIndex = List1.ListCount - 1
InString = ""
DoEvents
End If
End If
DoEvents
Loop
End If
End Sub
可否发送我一份,学习!谢谢!
[email protected]
buffer_str = buffer_str & MSComm1.Input
另外,你这样循环查询,不如用oncomm()事件驱动接收。
to: lilimaoming(嗷嗷)
我刚接触VB没多久,还不太会用,我看了msdn也没看明白到底要用oncomm()中的哪一项来驱动接收,麻烦您说的具体一些好吗?多谢
还有相应的属性设置
2.在oncomm事件中添加如下代码:
Private Sub MSComm_OnComm()
Select Case Com.CommEvent
Case comEvReceive:
(接收字符)
End Select
3.改循环为:
do while flag_auto=false
doevents
wend
timer1.enable=false
(判断字符串的正确性)
做完以上三步应该ok,如不行继续发贴告诉我.
祝你成功!
doev = DoEvents()
If MSComm1.InBufferCount Then
buffer_str = buffer_str & MSComm1.Input
If InStr(buffer_str, "OK") Then
sendmess = True
Timer1.Enabled = False
Exit Do
ElseIf InStr(buffer_str, "ERROR") Then
sendmess = False
Timer1.Enabled = False
Exit Do
End If
End If
Loop