程序用串口接收数据跟用监视工具看到的数据不同
程序用串口接收数据和用监视工具看到的数据不同
我用串口接收一段数据,我的代码如下,接收数据的时候我用串口监视工具查看数据,发现我程序整理出来的数据和串口监视工具得到的数据不同,请各位大神帮我看一下~到底问题出在哪里
MSComm.InputLen = 0
If MSComm.InBufferCount Then
instring = MSComm.Input
L = LenB(instring)
ReDim inbuff(L - 1)
For i = 0 To L - 1
inbuff(i) = AscB(MidB(instring, i + 1, 1))
Next
End If
串口监视工具获取:44 10 01 52 31 23 43 1A E6 67 02 B3
程序接收: 44 10 1 52 31 23 43 1A 94 2 3F
------解决思路----------------------
不能直接把Mscomm缓冲区里的内容直接存储到String型变量里面,应该用Byte数组,除非通讯协议中明确规定是以Text方式进行数据交换的,原因就是以Text方式通讯单个字节的取值范围在0-7F之间,而已Binary方式的话单字节取值范围在0-FF,很显然你出错的两个字节都是大于7F的
MSComm.InputLen = 0
MSComm.InputMode =comInputModeBinary
dim tmpArr() as Byte
If MSComm.InBufferCount Then
tmpArr = MSComm.Input
End If
dim i as long
for i=0 to ubound(tmpArr)-1
debug.print hex(tmparr(i))
next
差不多应该是这样,随手写的,未作测试
我用串口接收一段数据,我的代码如下,接收数据的时候我用串口监视工具查看数据,发现我程序整理出来的数据和串口监视工具得到的数据不同,请各位大神帮我看一下~到底问题出在哪里
MSComm.InputLen = 0
If MSComm.InBufferCount Then
instring = MSComm.Input
L = LenB(instring)
ReDim inbuff(L - 1)
For i = 0 To L - 1
inbuff(i) = AscB(MidB(instring, i + 1, 1))
Next
End If
串口监视工具获取:44 10 01 52 31 23 43 1A E6 67 02 B3
程序接收: 44 10 1 52 31 23 43 1A 94 2 3F
------解决思路----------------------
不能直接把Mscomm缓冲区里的内容直接存储到String型变量里面,应该用Byte数组,除非通讯协议中明确规定是以Text方式进行数据交换的,原因就是以Text方式通讯单个字节的取值范围在0-7F之间,而已Binary方式的话单字节取值范围在0-FF,很显然你出错的两个字节都是大于7F的
MSComm.InputLen = 0
MSComm.InputMode =comInputModeBinary
dim tmpArr() as Byte
If MSComm.InBufferCount Then
tmpArr = MSComm.Input
End If
dim i as long
for i=0 to ubound(tmpArr)-1
debug.print hex(tmparr(i))
next
差不多应该是这样,随手写的,未作测试