找回密码
 注册
LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 2925|回复: 7

探讨:LAVBIEW编写串口读取程序如何保证不丢帧

[复制链接]
kingbox 该用户已被删除
发表于 2008-11-13 21:13:05 | 显示全部楼层 |阅读模式
目前工作中碰到如下问题:
当上位机(labview程序)接收RS232串口数据时,需要实时显示和存储。
现在程序存储部分没有问题,但实时显示会出现丢帧现象,我自己分析了下,发现故障可能如下:
当从串口缓存读取数据时,有字节数限制(比如4096个字节),但这4096个字节中不会正好帧头就出现在起始位置,
(或是4096字节不是通讯格式总字节数的整数倍),因此,每一次读缓存就会存在有2个通讯格式无效,造成显示上出现丢帧显示。
希望探讨下是否如此?有什么办法解决?
我目前能想出的办法是:串口通讯先存储,然后通过读取文件来进行通讯格式解包。但是这样一来就没办法实时显示了?
发表于 2008-11-13 22:07:39 | 显示全部楼层
如果存储没有问题的话,应该不会在显示上面丢失数据的,毕竟您存储的数据是好的呢!
回复 顶

使用道具 举报

发表于 2008-11-13 23:23:54 | 显示全部楼层
是不是应该通过生产者/消费者模式呢?也就是通过队列技术,在接收数据(生产者)和显示数据(消费者)之间做缓冲。

我是初学labview,也不太懂啊,仅供参考了。
回复 顶

使用道具 举报

kingbox 该用户已被删除
 楼主| 发表于 2008-11-19 22:34:30 | 显示全部楼层
我可能没有说明清楚:举例说明下
比如我发送的串口数据是7E 7E 5A 66 ;7E 7E 5A 5A.(7E 7E为帧头)
但我设置的读串口缓存是5个字节,这样我第1次读取的数为
7E 7E 5A 66 7E;第2次读取的数为7E 5A 5A XX;这样如果是实时显示,我第2次读取
的数据帧头就不正确,处理上就抛弃这次数据,这样就形成了丢帧。
而存储时就没这问题。
现在就是觉得没有好的办法避免这问题。
回复 顶

使用道具 举报

发表于 2008-11-19 23:09:25 | 显示全部楼层
每次读5字节行吗兄弟?
回复 顶

使用道具 举报

发表于 2008-11-19 23:09:50 | 显示全部楼层
或者和上面的兄弟说的那样,先缓冲起来,就像存储起来了一样的效果!
回复 顶

使用道具 举报

发表于 2009-1-14 15:51:00 | 显示全部楼层
每次读5个字节也不能保证收到的帧不会断啊,我是串口缓存中有多少读多少,收到之后再判字节的临域,从中取出完整的帧
回复 顶

使用道具 举报

发表于 2009-1-15 09:15:05 | 显示全部楼层
如果对速度没有下限的话 每次读一个字节咯
回复 顶

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2026-9-29 20:24 , Processed in 0.036384 second(s), 8 queries , Gzip On, File On.

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表