On Error GoTo ErrHandle
If MSComm1.PortOpen = True Then MSComm1.PortOpen = False;如果端口打开,先关闭,否则发送出错
= port
MSComm1.Settings = baud
MSComm1.Output = "ATE0" + Chr(13) + Chr(10)
'清回显
MSComm1.Output = "AT+CMGF=0" + Chr(13) + Chr(10)'发短信初始化
,你具体用什么功能,要查AT指令集
Handle:'错误判断,根据错误号可以知道发送失败原因
Select Case Err.Number
Case 8002: msgbox "连接错误,错误码:" + Str(Err.Number) + " 错误类型:无效端口"
Case Else:msgbox "连接错误,错误码:" + Str(Err.Number) + " 错误类型:" + Err.Description
End Select
Private Sub MSComm1_OnComm()'接收事件
'comEvSend
1
在传输缓冲区中有比
Sthreshold
数少的字符。
' comEvReceive 2
收到
Rthreshold
个字符。该事件将持续产生直到用
Input
属性从接收缓冲区中删除数据。
' comEvCTS
3
Clear
To
Send
线的状态发生变化。
' comEvDSR
4
Data
Set
Ready
线的状态发生变化。该事件只在
DST
从
1
变到
0
时才发生。
' comEvCD
5
Carrier
Detect
线的状态发生变化。
' comEvRing
6
检测到振铃信号。一些
UART(通用异步接收—
传输)可能不支持该事件。
' comEvEOF
7
收到文件结束(ASCII
字符为
26)字符。
Select Case '处理接收事件
case comEvReceive
If = comEvReceive Then
MSComm1.InputLen = MSComm1.InBufferCount
On Error GoTo ErrHandle1
ReceiveData = MSComm1.Input
ReceiveData = ReceiveData + MSComm1.Input
endif
j = InStr(ReceiveData, "+CMS")
If j > 0 Then
ReceiveSuccess = 0
i = InStr(ReceiveData, "+CMGR:")
j = InStr(ReceiveData, "+CMGS")
If j = 0 And i = 0 And Len(ReceiveData) > 8 Then '删除接收区中无用的数据
ReceiveData = Mid(ReceiveData, Len(ReceiveData) - 7)
End If
If i > 0 Then
j = InStr(ReceiveData, Chr(13) + Chr(10) + "OK")'处理接收的数据
endif
end select
ErrHandle1:
msgbox Err.Number
End Sub
comm是通用接口,双方用不同的通信协议,具体的数据格式不一致,需根据数据报文具体处理,我写很早前自己做的利用手机串口收发短信的事件。
[此贴子已经被作者于2016-3-11 12:37编辑过]