LabVIEW论坛
直播中

邢峻豪

5年用户 50经验值
私信 关注
[问答]

labview进行被动接收数据,当VISA缓存区设置过小,会产生丢数据现象吗

利用labview进行双通道数据采集,下位机发来的数据为字符串(类型为2.134,5.345  然后第二行3.453,4.345  第三行 4.784,3.564等等依次类推),然后想把字符串的两路数据提取出来,进行波形显示,提取时候用匹配字符串,输出结果感觉总是数据丢失,之前VISA读函数参数设置为有多少读多少,即调用属性节点,但是会有数据丢失(明显发现读取前的字符数和读取后的字符数不等,利用显示控件观察,此数据丢失应该数缓冲区内地的数据未读取完),后来把VISA读函数的读取字节固定为17(即每一行的字符串长度,包含逗号、换行号等),这样读取函数之后的字节数是相等了,但是采样率提高的话,对应的输出点数并不会改变,怀疑还是由数据丢失(此数据丢失应该是没有存进缓冲区)。所以非常疑惑,希望论坛内的大神指点迷津。
  • 2.PNG
  • 1.PNG
  • 3.PNG

回帖(2)

李海民

2019-4-16 10:44:55
我且不说您的程序编写是摊大饼,每次循环都是初始化 读取 关闭。就凭您把缓冲区大小固定死,然后清空缓冲区的操作,您自己琢磨琢磨是不是会丢数据?
建议您学学状态机结构。
1 举报

老蜗牛

2019-4-16 11:12:13
对于单听式串口通讯,你的要求是高波特率下不丢数,这是有其标准格式的:至少应该先把数据从硬件缓冲区读到一个字符串中(你的read string),再对该字符串进行处理分析,而不是像你现在这样读进来的同时处理读取的数据。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分