NI LabVIEW,CVI,数据采集等产品讨论区

取消
显示结果 
搜索替代 
您的意思是: 

串口通信不能一次完整的接收数据

  • 我用labview做了一个简单的串口通信程序,有接收和发送两大功能。用两台电脑连调,一台电脑用串口调试窗口,一台电脑用labview程序,假如串口调试窗口每次发送18个字符,lv程序在接收时大多情况可以一次接收18个字符,但有时会分两次接收:先接收10个字符,再接收剩下的8个字符;或先接收16个字符,再接收剩下的2个字符。
  • 数据均正常无误,就是有时不能一次接收完数据。
  • 请问各位这是怎么回事呀!在串口程序中只用了串口配置、读写串口、串口字节数、关闭串口这几个函数。串口配置中使用默认设置。
0 项奖励
1 条消息(共 10 条)
4,250 次查看

能把程序贴出来看下吗?

0 项奖励
2 条消息(共 10 条)
4,234 次查看

我不知怎么贴图,我把程序放在word中了。

0 项奖励
3 条消息(共 10 条)
4,233 次查看

可能是由于循环中调用VISA Read的时候,正好IO Buffer中的数据还没完整接收完毕。

 

 

这个帖子可能对你有帮助。

4 条消息(共 10 条)
4,222 次查看

我就是从哪个帖子转过来的,哪里提到的方法都试了,问题依旧。不能把接收函数的串口字节数设定为一个常数,否则程序会等待缓冲区中字节数达到设定值才接收数据。我想可能是接收时延时时间的问题,但一直没找到一个合适的延时时间。

0 项奖励
5 条消息(共 10 条)
4,201 次查看

因为上位机PC发送数据的长度和时间都是随机的,Read循环的delay不管怎么调整应该都会遇到当执行VISA Read时,上位机正在发送数据,恰巧部分数据被接受到了,Read读到部分数据即返回的巧合。

可以试一下Enable Terminal Character,并把Terminal Character设为'\n',还有read buffer size设为常数。上位机发送的字符串都以'\n'结尾,看下是不是能够接受完一帧即返回。

0 项奖励
6 条消息(共 10 条)
4,197 次查看

接收字节数设定为常数可以接收完整的数据。

上位机发送的字符串以'\n'结尾,这是出于什么考虑呀?

0 项奖励
7 条消息(共 10 条)
4,138 次查看

用'\n'作为发送字符串的结束符,LabVIEW在VISA Read接收数据的时候一旦判断出当前已经接受到'\n',则会将之后的数据暂时放在硬件缓存自己立刻返回。这样若read size足够大,那么VISA Read不会因为缓存满返回,而只可能是接收到'\n',即可保证一帧数据完整接收。

0 项奖励
8 条消息(共 10 条)
4,130 次查看

我照你说的方法试了但实验结果依旧。结果在附件中。

0 项奖励
9 条消息(共 10 条)
4,104 次查看
0 项奖励
10 条消息(共 10 条)
4,103 次查看