labview串口接收问题

现在在做一个程序,labview为上位机,单片机为下位机,想要实现的功能是labview发送一个指令,单片机接收并返回一段数据,labview一次接收261个字节数据查找帧头校验后接收显示

现在的问题是:labview高亮单步显示时串口缓冲区能够正常接收整段261个字节的数据,但当连续运行时,按下布尔发送按钮后串口缓冲区却是分段接收,每段十几个数据不等,导致不能接收整段数据进而校验不成功,无法接收,

这个问题非常郁闷,帮帮忙,谢谢!

Windows和单片机不同,它不是实时操作系统,所以串口接收的延时不能固定在一个值内,安全的做法是:把你的串口命令加一个头和一个尾,如果VISA读取缓冲区,能够把头和尾都读出来,那么你再来做校验,才可以。
LabVIEW做串口收发程序,你得自己弄个通信超时,比如设置为10秒,如果超过10秒你没有接收到任何数据或数据不完整,就应当报错。但在十秒内,你得不断查询串口缓冲区是否有数据上报上来。

追加一点说明:你在labview用的是单步调试,因为单步调试比正常运行要慢很多,所以你的串口数据全都上来了。正常运行不可能一次返回所有数据的。追问

你好,我刚才增加延时时间后连续运行时能正常接收整段数据,但不知道是什么原因,而且我发现接收一帧数据的长度是根据延时时间的长短决定的,也就是要想接收长的数据帧,就得增加延时时间,这样才会避免接收断帧,但是这个的弊端是要想接收更长的数据帧,延时时间就得设的更长,我想问下有没有更好的解决方法?

追答

LabVIEW VISA有个属性节点:Serial Settings->Number of bytes at serial port,你可以用这个属性节点实时查询有多少个字节在缓冲区内,如果大于0,就把这些字节读出来。

利用这个属性节点,你可以构造一个while程序,在发送命令后,进入while循环,不断查询有无数据在缓冲区,如果读到你想要的数据那就停止循环。或者当你的while循环超过多少秒后,没有读到想要的数据,那就停止循环并报错。

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-07-16
加标志位,追问

你好,如何加标志位,能否细说下,谢谢

追答

就是在要发送的数据前后加些数据 作为数据开始和结束的标志,和楼上说的差不多

labview串口数据接收控制超时
题主是否想询问“labview串口数据接收控制超时的原因有什么”?原因有CPU变慢、内存占用过多、没有识别码与校验位。1、CPU变慢,因为程序结构设计不合理。2、内存占用过多,因为数组等控件存储数据累积太多。3、串口数据因为没有识别码与校验位,万一产生数据丢失,无从判断。所以当读取的数据达不到要求...

labvIEW 运行一段时间后,串口接收的速度变慢
1. CPU变慢,因为程序结构设计不合理;2. 内存占用过多,因为数组等控件存储数据累积太多;3. 串口数据因为没有识别码与校验位,万一产生数据丢失,无从判断;所以当读取的数据达不到要求长度时,就会等待,直到超时才返回。这跟使用属性节点优化性能没多大关系。还木进一步看看你的程序设计,才能诊断问题...

labview中串口通讯时遇到这个问题,求帮忙指点下,怎么解决? 谢谢_百度知...
回答:你的数据采集VI 中可能 创建了一个 文件路径 ,但是这个文件名对于生成的文件是无效的,比如文件名中有,?之类的符号!

LABviewRs232串口接收到的数据有移位的现象是什么原因?
LABviewRs232串口接收到的数据有移位的现象是每一帧数据先找到帧头0X11。labview使用串口有两种方法一种调用vb的mscomm控件很麻烦我没用过另一种就是使用labview自带的串口使用这个必须要装vist不然在前面板的端口选择下拉框里是没有串口号的不能用。奇偶校验位:在串口通信中一种简单的检错方式。有四种检...

labviewrs232串口数据丢失
串口按照读书和接收数据出现了问题,解决办法有两个。根据今日头查询,针对labviewrs232串口数据丢失的第一个方法是,通过建立移位寄存器,将接收到的数据首尾相连,保证接收串口数据的完整性。第二个方法是,通过建立队列,将接收到的数据放到队列里,然后再将数据从队列里读出来,避免了大量数据的缓存影响...

利用LabVIEW的串口通信,为什么上位机发送一个字符串,而单片机只接收到前...
我做过labvIEW的编程,我做的是USB通讯,首先你可以用串口调试助手发送一串字符,看下位机是否接收正常,如果不正常,那么就一定是你的程序出错;如果一切正常,那么你再看labvIEW的发送命令程序,因为发送的时候应该是字符串格式(看你的描述),那么你要确定字符串的长度,如果有buffer的话还要确定它的...

labview写的串口收发程序为什么在串口调试助手上接收不到信息,我使用的...
没有问题啊?我这样做过。完全可以收到。只需要满足下述条件:电脑有两个(或以上)串口 两个串口使用交叉线连接(即COM1的二号脚接到COM2的三号脚,而COM1的三号脚接到COM2的二号脚)LabVIEW和串口调试助手分别打开COM1和COM2。设置成一样的数据格式和波特率,关闭硬件和软件流控 即可实现串口收...

labview串口连续接收不同长度数据问题
首先确定收端和发端的波特率,数据位,校验等参数一致,串口的波特率最小的一般为9600。其次不需要使用事件结构吧,你利用串口字节数来判断是否有数据,根据字节数大小来读取相应长度的字节,肯定没有问题的。你这个速度并不快,没必要单独处理,如果非要单独处理的话,就用队列。见图片 如果帮助到你了,...

在labview串口接收数据时,怎么可以使它一直接受下位机发送过来的数据...
就是一直读串口,用while循环,优利德的很多款程控仪表都是这样子单向不停的发给上位机

LABVIEW 做串口通信,接收十六进制,为什么 终止符我老是禁止不了呢。遇 ...
首先,启用终止符那里设为False是没错的 然后你这个串口配置有问题。你自己发现没有,你那几个配置的数据连接到VISA配置函数的接线端子上都有个红色的小三角,那表示数据强制转换。就是说输入的数据类型与函数设定的输入的数据类型不匹配。其他几个参数强制转换过去倒是都能用,但是停止位不行。停止位...

相似回答