labview上位机串口接收数据不完整问题
单片机向串口调试助手连续返回16组数据,每组数据中包含12个字节。
第一组:41 22 C2 01 21 71 48 01 41 65 62 01
第二组:41 22 BF 01 21 71 86 02 41 65 62 01
. 41 22 C0 01 22 71 C4 03 41 65 62 01
. 41 22 C3 01 22 72 02 04 41 65 62 01
. 41 22 C5 01 23 72 40 05 41 65 62 01
. 41 22 C5 01 23 72 7E 06 41 65 62 01
. 41 22 C4 01 24 72 BC 07 41 65 62 01
. 41 22 C7 01 24 72 FA 08 41 65 62 01
41 22 C4 01 24 73 38 09 41 65 62 01
41 22 C9 01 25 73 76 0A 41 65 62 01
41 22 CB 01 25 73 B4 0B 41 65 62 01
41 22 CC 01 26 73 F2 0C 41 65 62 01
41 22 CA 01 26 74 30 0D 41 65 62 01
41 22 D1 01 26 74 6E 0E 41 65 62 01
41 22 D1 01 27 74 AC 0F 41 65 62 01
第16组:41 22 D4 01 27 74 EA 10 41 65 62 01
这些数据都较理想,也就是说,下位机程序是没有问题的。
当用labview上位机程序与单片机进行通信时,出现的问题是:
labview上位机读取数据时,经常出现,
上一组的12个字节数据能够全部读取,到下一组时可能一个字节数据都读取不到
,即读取的字节数目为0;
或者
上一组的12个字节数据能够全部读取,到下一组时可能只能读取到部分字节数据
,即读取的字节数据小于1。
但是通过调整串口数据读取之前的延时时间,可以让以上问题出现的频率从
”经常“变成”偶尔“。
比如当延时时间为500ms时,经常出现数据读取不到或只能读取部分数据,
最后可以得到10~12组的完整数据;
经过多次调整,将延时时间调整为1000ms时,偶尔有一次数据读取不到或者
只能读取部分数据,最后可以得到15组完整数据。
在论坛里有看到坛友按照这样的方法处理:
将Serial Configuration上的Termination Char 设置为False,并选择
属性节点Number of Bytes at Serial Port,将该属性节点与VISA读取
的字节总数相连接,来实时查询缓冲区内字节数目,只有当缓冲区内
字节数目大于0时,才把字节读出。并在读取字节之前,先延时一会。
而延时的长短就决定了接收字节的数目。
先不说加长延长时间能不能解决接收数据不完整的问题,尚且就认为
可以得到一个最合适的延时时间。但是延长时间过长是有弊端的,有没有
更好的解决方法呢?
希望有机会和坛友们交流一下!
小编可以试一试 active 控件 MSCOMM32
小编看看是不是终止符的问题,一般十六进制会碰到这个问题,默认的终止符是 0x0A,需要修改下
41 22 C9 01 25 73 76 0A 41 65 62 01
你的这一组数据,用lV接收,默认会不完整的。
已经将“启动终止符”设置为False,所以应该不是终止符的问题
呃...不是很明白您的意思,为什么会默认不完整呢?
其实我觉得每组数据发送与接收时,是不是都弄个握手信号.这样应该就不会有问题.我之前做的一个项目.二十八块单片机板.与上位机通信.就是设的28个握手信号.即LV通过串口发送对应的板号,单片机接收后反回板号及数据信息.没有出现接收不完全或接收不到的情况.很稳定.
恩恩,我试试。谢谢您的回答
多接收几次,接收的字符相加,满足条件时结束,不满足继续接受
我也遇到这个问题。
我也遇到了这个问题,方便留下扣扣号吗,探讨一下
496787244,欢迎交流
我是这样解决的,延时的问题,要不就等下位机发完所有数据再去拿,要不就要与下位机延时对得上位机延时,真不懂那些串口助手怎么弄的
感谢!感谢!
用VISA函数的时候忽略了终止符,导致接受不完整,设置成F就解决了
感谢小编,也遇到同样问题,设置成F解决了。
终止符设F是正解,感谢所有人!
将enable termination char 设置为False 果然有效果
顶顶顶~~~~~~~~~~~~~~~~~~~~~
小编,我和你类似,不过我把停止位关了,但第二次接收的串口数据只有1个,延迟变了也不行。用串口调试助手没问题
最后怎么处理的啊
最后怎么处理的啊
你最后怎么处理的啊
你最后怎么处理的啊
你最后怎么处理的啊
你最后怎么处理的啊
你最后怎么处理的啊
你最后怎么处理的啊
你最后怎么处理的啊
你最后怎么处理的啊
你最后怎么处理的啊
你最后怎么处理的啊
你最后怎么处理的啊
你最后怎么处理的啊
你最后怎么处理的啊
你最后怎么处理的啊
你最后怎么处理的啊
你最后怎么处理的啊
你最后怎么处理的啊
你最后怎么处理的啊
你最后怎么处理的啊
你最后怎么处理的啊
你最后怎么处理的啊
你最后怎么处理的啊
你最后怎么处理的啊
你最后怎么处理的啊
你最后怎么处理的啊