程序实例:mscomm1.settings="9600,n,8,1"mscomm1.rthreshold=1MSComm1.PortOpen = TruePrivate Sub MSComm1_OnComm()Dim i As Integer Dim N As Integer Dim Judge_num As Boolean Judge_num = False Select Case MSComm1.CommEvent ' 错误 Case comEventBreak: MsgBox "RECEIVE A BREAK MESSAGE", vbApplicationModal, "正在接收数据 ......" Exit Sub ' 收到 Break。 Case comEventCDTO: MsgBox "CD (RLSD) OVERTIME", vbApplicationModal, "正在接收数据 ......" Exit Sub ' CD (RLSD) 超时。 Case comEventCTSTO: MsgBox "CTS TIMEOUT", vbApplicationModal, "正在接收数据 ......" Exit Sub ' CTS Timeout。 Case comEventDSRTO: MsgBox "DSR TIMEOUT", vbApplicationModal, "正在接收数据 ......" Exit Sub ' DSR Timeout。 Case comEventFrame: MsgBox "FRAMING ERROR", vbApplicationModal, "正在接收数据 ......" Exit Sub ' Framing Error Case comEventOverrun: MsgBox "DATA LOST ", vbApplicationModal, "正在接收数据 ......" Exit Sub '数据丢失。 Case comEventRxOver: MsgBox "RECEIVE BUFFER OVERFLOW", vbApplicationModal, "正在接收数据 ......" Exit Sub '接收缓冲区溢出。 Case comEventRxParity: MsgBox "PARITY ERROR", vbApplicationModal, "正在接收数据 ......" Exit Sub ' Parity 错误。 Case comEventTxFull: MsgBox "TRANSFER BUFFER OVERFLOW", vbApplicationModal, "正在接收数据 ......" Exit Sub '传输缓冲区已满。 Case comEventDCB: MsgBox "RECEIVE A UNEXCEPTED ERROR WHILE GETTING DCBJ", vbApplicationModal, "正在接收数据 ......" Exit Sub '获取 DCB] 时意外错误事件 Case comEvCD: MsgBox "THE STATE OF CD LINE CHANGED", vbApplicationModal, "正在接收数据 ......" Exit Sub ' CD 线状态变化。 Case comEvCTS: MsgBox "THE STATE OF CTS LINE CHANGED", vbApplicationModal, "正在接收数据 ......" Exit Sub ' CTS 线状态变化。 Case comEvDSR: MsgBox "THE STATE OF DSR LINE CHANGED", vbApplicationModal, "正在接收数据 ......" Exit Sub ' DSR 线状态变化。 Case comEvRing: MsgBox "RING INDICATOR CHANGED", vbApplicationModal, "正在接收数据 ......" Exit Sub ' Ring Indicator 变化。 Case comEvReceive: Dim Receive_Str As String Receive_Str = "" N = 200 DoEvents Do DoEvents If MSComm1.InBufferCount = 0 Then Exit Do Else i = i + 1 End If If Judge_num = True Then Exit Do End If Loop While (i <= N)
If i > N Then Receive_Str = me.MSComm1.Input() If (InStr(Receive_Str, "#E") * InStr(Receive_Str, "@")) Then ' #E 和 @ 是编码内容的开始和结束符 Me.MSComm1.InBufferCount = 0 read_Code Me, Receive_Str Judge_num = True ' Exit Sub Else MsgBox "输入数据不完整,请再输一次", vbApplicationModal, "正在接收数据 ......" MSComm1.InBufferCount = 0 ' Receive_Str = "" End If End If Case comEvSend ' 传输缓冲区有 Sthreshold 个字符 ' ' Case comEvEOF ' 输入数据流中发现 EOF 字符 ' End Select End Sub
Dim N As Integer
Dim Judge_num As Boolean
Judge_num = False
Select Case MSComm1.CommEvent
' 错误
Case comEventBreak: MsgBox "RECEIVE A BREAK MESSAGE", vbApplicationModal, "正在接收数据 ......"
Exit Sub ' 收到 Break。
Case comEventCDTO: MsgBox "CD (RLSD) OVERTIME", vbApplicationModal, "正在接收数据 ......"
Exit Sub ' CD (RLSD) 超时。
Case comEventCTSTO: MsgBox "CTS TIMEOUT", vbApplicationModal, "正在接收数据 ......"
Exit Sub ' CTS Timeout。
Case comEventDSRTO: MsgBox "DSR TIMEOUT", vbApplicationModal, "正在接收数据 ......"
Exit Sub ' DSR Timeout。
Case comEventFrame: MsgBox "FRAMING ERROR", vbApplicationModal, "正在接收数据 ......"
Exit Sub ' Framing Error
Case comEventOverrun: MsgBox "DATA LOST ", vbApplicationModal, "正在接收数据 ......"
Exit Sub '数据丢失。
Case comEventRxOver: MsgBox "RECEIVE BUFFER OVERFLOW", vbApplicationModal, "正在接收数据 ......"
Exit Sub '接收缓冲区溢出。
Case comEventRxParity: MsgBox "PARITY ERROR", vbApplicationModal, "正在接收数据 ......"
Exit Sub ' Parity 错误。
Case comEventTxFull: MsgBox "TRANSFER BUFFER OVERFLOW", vbApplicationModal, "正在接收数据 ......"
Exit Sub '传输缓冲区已满。
Case comEventDCB: MsgBox "RECEIVE A UNEXCEPTED ERROR WHILE GETTING DCBJ", vbApplicationModal, "正在接收数据 ......"
Exit Sub '获取 DCB] 时意外错误事件
Case comEvCD: MsgBox "THE STATE OF CD LINE CHANGED", vbApplicationModal, "正在接收数据 ......"
Exit Sub ' CD 线状态变化。
Case comEvCTS: MsgBox "THE STATE OF CTS LINE CHANGED", vbApplicationModal, "正在接收数据 ......"
Exit Sub ' CTS 线状态变化。
Case comEvDSR: MsgBox "THE STATE OF DSR LINE CHANGED", vbApplicationModal, "正在接收数据 ......"
Exit Sub ' DSR 线状态变化。
Case comEvRing: MsgBox "RING INDICATOR CHANGED", vbApplicationModal, "正在接收数据 ......"
Exit Sub ' Ring Indicator 变化。
Case comEvReceive:
Dim Receive_Str As String
Receive_Str = ""
N = 200
DoEvents
Do
DoEvents
If MSComm1.InBufferCount = 0 Then
Exit Do
Else
i = i + 1
End If
If Judge_num = True Then
Exit Do
End If
Loop While (i <= N)
If i > N Then
Receive_Str = me.MSComm1.Input()
If (InStr(Receive_Str, "#E") * InStr(Receive_Str, "@")) Then
' #E 和 @ 是编码内容的开始和结束符
Me.MSComm1.InBufferCount = 0
read_Code Me, Receive_Str
Judge_num = True
' Exit Sub
Else
MsgBox "输入数据不完整,请再输一次", vbApplicationModal, "正在接收数据 ......"
MSComm1.InBufferCount = 0
' Receive_Str = ""
End If
End If
Case comEvSend ' 传输缓冲区有 Sthreshold 个字符 '
'
Case comEvEOF ' 输入数据流中发现 EOF 字符
'
End Select
End Sub