1,451
社区成员
发帖
与我相关
我的任务
分享
Private Sub Form_Load()
Dim i As Integer
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If
MSComm1.CommPort = 1
MSComm1.Settings = "115200,n,8,1"
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeBinary
MSComm1.InBufferSize = 1024
MSComm1.OutBufferSize = 2048
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
MSComm1.SThreshold = 0
MSComm1.RThreshold = 1
MSComm1.PortOpen = True '打开COM口
Command2.Enabled = False
End Sub
Private Sub MSComm1_OnComm()
Dim inbyte() As Byte
Dim buffer As String
Dim lenbuffer As Integer
Dim i As Integer
Select Case MSComm1.CommEvent
Case comEvReceive
inbyte = MSComm1.Input
For i = LBound(inbyte) To UBound(inbyte)
If Len(Hex(inbyte(i))) = 1 Then
buffer = buffer + "0" + Hex(inbyte(i)) + Chr(32)
Else
buffer = buffer + Hex(inbyte(i)) + Chr(32)
End If
Next i
lenbuffer = Len(Replace(Trim(buffer), " ", ""))
Select Case lenbuffer
Case Is = 14
If CByte("&H" & (Mid(Replace(buffer, " ", ""), 1, 2))) = &HAA _
And "&H" & (Mid(Replace(buffer, " ", ""), 14 - 4 + 1, 2)) = &H42 _
And "&H" & (Mid(Replace(buffer, " ", ""), 14 - 2 + 1, 2)) = &H42 Then
If "&H" & (Mid(Replace(buffer, " ", ""), 14 - 12 + 1, 2)) = &H55 Then
If "&H" & (Mid(Replace(buffer, " ", ""), 14 - 10 + 1, 2)) = &H43 _
And "&H" & (Mid(Replace(buffer, " ", ""), 14 - 8 + 1, 2)) = &H47 _
And "&H" & (Mid(Replace(buffer, " ", ""), 14 - 6 + 1, 2)) = &H8A Then
Text2.Text = "????"
End If
End If
End If
End Select
End Select
End Sub
Option Explicit
Dim buffer As String
Private Sub Form_Load()
Dim i As Integer
If MSComm1.PortOpen = True Then
MSComm1.PortOpen = False
End If
MSComm1.CommPort = 1
MSComm1.Settings = "115200,n,8,1"
MSComm1.InputLen = 0
MSComm1.InputMode = comInputModeBinary
MSComm1.InBufferSize = 1024
MSComm1.OutBufferSize = 2048
MSComm1.InBufferCount = 0
MSComm1.OutBufferCount = 0
MSComm1.SThreshold = 0
MSComm1.RThreshold = 1
MSComm1.PortOpen = True '打开COM口
Command2.Enabled = False
End Sub
Private Sub MSComm1_OnComm()
Dim inbyte() As Byte
Dim lenbuffer As Integer
Dim i As Integer
Select Case MSComm1.CommEvent
Case comEvReceive
inbyte = MSComm1.Input
For i = LBound(inbyte) To UBound(inbyte)
If Len(Hex(inbyte(i))) = 1 Then
buffer = buffer + "0" + Hex(inbyte(i)) + Chr(32)
Else
buffer = buffer + Hex(inbyte(i)) + Chr(32)
End If
Next i
Text1 = buffer
lenbuffer = Len(Replace(Trim(buffer), " ", ""))
Select Case lenbuffer
Case Is = 14
If CByte("&H" & (Mid(Replace(buffer, " ", ""), 1, 2))) = &HAA _
And "&H" & (Mid(Replace(buffer, " ", ""), 14 - 4 + 1, 2)) = &H42 _
And "&H" & (Mid(Replace(buffer, " ", ""), 14 - 2 + 1, 2)) = &H42 Then
If "&H" & (Mid(Replace(buffer, " ", ""), 14 - 12 + 1, 2)) = &H55 Then
If "&H" & (Mid(Replace(buffer, " ", ""), 14 - 10 + 1, 2)) = &H43 _
And "&H" & (Mid(Replace(buffer, " ", ""), 14 - 8 + 1, 2)) = &H47 _
And "&H" & (Mid(Replace(buffer, " ", ""), 14 - 6 + 1, 2)) = &H8A Then
Text2.Text = "????"
End If
End If
End If
End Select
End Select
End Sub
Select Case MSComm1.CommEvent
Case comEvReceive
'***********************************
Do While MSComm1.InBufferCount <> 7 And MSComm1.InBufferCount <> 20
DoEvents
Loop
inbyte = MSComm1.Input
'***********************************
接收的数据就是完整的了,还是不解原来的为何数据丢失。。。如上修改后如果期间发送了不是7字节和20字节的数据,发送字节小于7,则是缓存数据到了7字节或20字节,才能收到数据,若是发送了一个2字节内容,再发送那个20字节的回复数据,就不能正确响应case事件了,显示收不到数据,因为加上缓存数据的2字节,此时为22字节,就直接不能处理了