探讨:LAVBIEW编写串口读取程序如何保证不丢帧
目前工作中碰到如下问题:当上位机(labview程序)接收RS232串口数据时,需要实时显示和存储。
现在程序存储部分没有问题,但实时显示会出现丢帧现象,我自己分析了下,发现故障可能如下:
当从串口缓存读取数据时,有字节数限制(比如4096个字节),但这4096个字节中不会正好帧头就出现在起始位置,
(或是4096字节不是通讯格式总字节数的整数倍),因此,每一次读缓存就会存在有2个通讯格式无效,造成显示上出现丢帧显示。
希望探讨下是否如此?有什么办法解决?
我目前能想出的办法是:串口通讯先存储,然后通过读取文件来进行通讯格式解包。但是这样一来就没办法实时显示了? 如果存储没有问题的话,应该不会在显示上面丢失数据的,毕竟您存储的数据是好的呢! 是不是应该通过生产者/消费者模式呢?也就是通过队列技术,在接收数据(生产者)和显示数据(消费者)之间做缓冲。
我是初学labview,也不太懂啊,仅供参考了。 我可能没有说明清楚:举例说明下
比如我发送的串口数据是7E 7E 5A 66 ;7E 7E 5A 5A.(7E 7E为帧头)
但我设置的读串口缓存是5个字节,这样我第1次读取的数为
7E 7E 5A 66 7E;第2次读取的数为7E 5A 5A XX;这样如果是实时显示,我第2次读取
的数据帧头就不正确,处理上就抛弃这次数据,这样就形成了丢帧。
而存储时就没这问题。
现在就是觉得没有好的办法避免这问题。 每次读5字节行吗兄弟? 或者和上面的兄弟说的那样,先缓冲起来,就像存储起来了一样的效果! 每次读5个字节也不能保证收到的帧不会断啊,我是串口缓存中有多少读多少,收到之后再判字节的临域,从中取出完整的帧 如果对速度没有下限的话 每次读一个字节咯
页:
[1]