7,763
社区成员
发帖
与我相关
我的任务
分享
MSComm1.CommPort = 1
MSComm1.Settings = "9600,N,8,1"
MSComm1.InputMode = comInputModeBinary
MSComm1.RThreshold = 1 '
MSComm1.SThreshold = 1
MSComm1.InputLen = 0
MSComm1.PortOpen = True
Private Sub MSComm1_OnComm()
'...通讯事件发生
Dim bytInfo() As Byte
Dim varTmp As Variant
Dim 读取 As String
Dim buf() As Byte
Dim tmp As String, 校检1tmp As String, 校检2tmp As String '存放临时收到的数据
Dim X As Integer, i As Integer
Select Case MSComm1.CommEvent
Case MSComm1.CommEvent
varTmp = MSComm1.Input '.....
bytInfo() = varTmp
For K = 0 To UBound(bytInfo)
tmp = tmp & Right(Hex(bytInfo(K)), 2)
Next
Debug.Print tmp
If Mid(tmp, 3, 2) = "C6" Then '如果字符中有c6延时10ms
MSComm1.RThreshold = 0 '屏蔽OnComm事件
Sleep 120
MSComm1.RThreshold = 1
End If
If InStr(tmp, "B") > 0 Then '检查接受到的数据是否到BB结束字符号
fag = True
读取 = Left(tmp, InStr(tmp, "B") + 1)
校检1tmp = Mid(读取, Len(读取) - 5, 2)
校检2tmp = Mid(读取, Len(读取) - 3, 2)
读取 = Right(读取, Len(读取) - 2)
读取 = Left(读取, Len(读取) - 6)
tmp = Mid(读取, 1, 2)
If tmp = "C1" Then '是连接命令
X = 1
校检1 = ""
校检2 = ""
Call 校检(读取) '校检接收到的是否正确
If 校检1tmp = 校检1 And 校检2tmp = 校检2 Then
读取 = "d10200012a" '接收正确,发送对应的硬件版本号
Call 校检(读取)
Call 发送(读取, X)
End If
ElseIf tmp = "C7" Then
X = 2
校检1 = ""
校检2 = ""
读取 = ""
For h = 0 To UBound(文本数据)
读取 = 读取 & 文本数据(h)
Next
读取 = "D7" & 读取 & "2A"
'Call 校检(读取) '校检接收到的是否正确
Call 数字转换(读取, X)
Call 发送(读取, X)
ElseIf tmp = "C6" Then '发送写入下位机数据
X = 1
校检1 = ""
校检2 = ""
Call 校检(读取)
If 校检1tmp = 校检1 And 校检2tmp = 校检2 Then
'Debug.Print 读取
读取 = Right(读取, Len(读取) - 2) '去掉命令自符C6
读取 = (Left(读取, Len(读取) - 2)) '去掉校检和标志符
Debug.Print 读取 '在这里看收到的内容分成了两不分,先是收了一个8字的的数据然后再收的是后面的100个数据,并不是合成为118个的数据包,求问我是哪里设置错了还是哪里写错了?
tmp = ""
'Debug.Print 读取
For i = 1 To Len(读取)
tmp = tmp & Val(Mid(读取, (i * 2 + 1), 2) - 30)
Next
For i = 0 To 27
文本数据临时(i) = Mid(读取, (i * 4 + 1), 4)
Next
End If
End If
End If
End Select
End Sub