接收数据处理问题
vb吧
全部回复
仅看楼主
level 6
13:52:12.000 01 01 02 00 00 B9 FC
13:52:12.996 01 01 02 00 00 B9 FC
13:52:13.990 01 01 02 00 00 B9 FC
13:52:14.996 7E 05 A1 30 33 E9 01 01 02 10 40 B5 CC
13:52:15.995 01 01 02 10 40 B5 CC
13:52:16.988 01 01 02 10 40 B5 CC
当我接收到7E的数据时,我想清除这条记录不显示
2022年08月23日 06点08分 1
level 6
Select Case MSComm1.CommEvent
Case comEvReceive '接收十六进制数据。并以十六进制显示
MSComm1.InputLen = 0
buffer = MSComm1.Input '接收数据至字符串中
BytesReceived() = buffer '将数据转入Byte数组中
For i = 0 To UBound(BytesReceived) '显示结果以十六进制显示
MSComm1.RThreshold = 7 Or MSComm1.RThreshold = 8
If Len(Hex(BytesReceived(i))) = 1 Then
HData = HData & "0" & Hex(BytesReceived(i))
Else
HData = HData & Hex(BytesReceived(i))
End If
txtreceive.Text = HData '最后将结果后入Text1中
MSComm1.OutBufferCount = 0 '清除发送缓冲区
MSComm1.InBufferCount = 0 '清除接收缓冲区
Next
End Select
2022年08月23日 06点08分 2
level 15
假设你用2楼的代码接收每一组数据,那么你直接判断BytesReceived(0)是否等于&H7E即可,如果是,则这组数据直接不要
另外这段代码多少也有点问题,比如buffer这个中转变量并没有存在的必要,比如 MSComm1.RThreshold = 7 Or MSComm1.RThreshold = 8 这句也挺滑稽的(当这个属性的值不等于8时,执行这句的效果实际上就相当于 MSComm1.RThreshold = 7,我不打算具体解释,反正程序不可能智能到给你从7和8当中自己选择一个数给这个属性赋值)
2022年08月23日 06点08分 3
If BytesReceived(0) = &H7E Then MSComm1.OutBufferCount = 0 '清除发送缓冲区 MSComm1.InBufferCount = 0 '清除接收缓冲区 End If 这样不行啊,是不是我描述的不对呀
2022年08月29日 05点08分
@山有扶苏🐵 你在这个If块里加上句Exit Sub试试
2022年08月29日 06点08分
@初音✨七奈 那不行,串口触发事件,加上这一句,下面的判断全不执行了
2022年08月29日 07点08分
@山有扶苏🐵 不早说,谁知道你还有一堆别的代码呢……那就把2楼代码的For循环部分放在这个If块里
2022年08月29日 08点08分
level 15
我的意思就是像这样:(前面没说清楚,条件要反过来写)
If BytesReceived(0) <> &H7E And BytesReceived(0) <> &H0 Then
For i = 0 To UBound(BytesReceived) '显示结果以十六进制显示
MSComm1.RThreshold = 7
If Len(Hex(BytesReceived(i))) = 1 Then
HData = HData & "0" & Hex(BytesReceived(i))
Else
HData = HData & Hex(BytesReceived(i))
End If
txtreceive.Text = HData '最后将结果后入Text1中
MSComm1.OutBufferCount = 0 '清除发送缓冲区
MSComm1.InBufferCount = 0 '清除接收缓冲区
Next
End If
2022年08月29日 11点08分 5
666,大佬牛逼
2022年08月30日 00点08分
哥哥,RThreshold = 7,只能屏蔽8位,后面多余的数据咋处理呀
2022年08月30日 02点08分
level 6
08:36:51.488 7E 05 A1 30 33 01 01 02 10 00 B4 3C
08:36:52.031 7E 05 A1 30 33 09 EF
08:36:52.497 01 01 02 00 00 B9 FC
08:36:57.498 7E 05 A1 30 33 09 EF 01 01 02 10 00 B4 3C
有个问题,7e开始的数据是排除了,但是由于MSComm1.RThreshold = 7,只能屏蔽8位,后面的数据还是会接收,影响后面的逻辑判断。大佬这个问题咋处理呢。
2022年08月30日 00点08分 6
level 6
解决了,想的复杂了,加个 Else
MSComm1.OutBufferCount = 0 '清除发送缓冲区
MSComm1.InBufferCount = 0 '清除接收缓冲区
2022年08月30日 02点08分 7
1