LabVIEW论坛
直播中

yiqudou

10年用户 36经验值
擅长:RF/无线
私信 关注
[问答]

高速串口数据采集,采集频率为2KHz时,开始几分钟正常,但随后发现读取的21字节就不对了请问这是为什么?

本帖最后由 一只耳朵怪 于 2018-6-21 16:20 编辑

我在做一个高速采集系统,遇到了如下问题:

串口采集,每帧数据21字节,串口每次读取21字节,然后解析数据并显示保存,在低速时,比如采集频率为100Hz,连续测试几天,没有出现问题。但是在高速时,比如采集频率为2KHz时,开始几分钟正常,但随后发现读取的21字节就不对了,帧头移位,发生了错位(可能是串口传输时,有一帧数据丢失了一个),以后每次读取的21字节数据都发生了移位。求大神给点指导意见。


我的想法是这样的,把串口读取的数据不断装入一个“管子”里,在管子的出口处朝着入口方向开始查找帧头,找到之后把帧头以后的X字节数据(数据长度正常是21字节,但如果发生异常,也可能是20字节或22字节)取出来,管子内剩下的数据统一朝管子出口方向移动X位,如此反复,这样就可以避免某一帧数据丢失一位或增加一位的影响,大不了把这一帧数据扔掉。



但是不知道如何实现这个想法。跪求大神指导。

回帖(4)

周建远

2018-6-22 09:39:05
串口通讯这个速度相比TCP要低很多,如果单纯是怕数据丢失可以考虑用队列的方式来保存数据,读取一个数据就入队列,然后再出队列时保存数据  不过最好入队列之前先判断数据是否完整,如果不完整就丢掉重新读 至于怎么判断这个就要看你的硬件协议规定的帧头帧尾是如何定义的了
举报

周建远

2018-6-22 09:40:56
串口通讯这个速度相比TCP要低很多,如果单纯是怕数据丢失可以考虑用队列的方式来保存数据,读取一个数据就入队列,然后再出队列时保存数据  不过最好入队列之前先判断数据是否完整,如果不完整就丢掉重新读 至于怎么判断这个就要看你的硬件协议规定的帧头帧尾是如何定义的了
举报

周建远

2018-6-22 09:41:19
串口通讯这个速度相比TCP要低很多,如果单纯是怕数据丢失可以考虑用队列的方式来保存数据,读取一个数据就入队列,然后再出队列时保存数据  不过最好入队列之前先判断数据是否完整,如果不完整就丢掉重新读 至于怎么判断这个就要看你的硬件协议规定的帧头帧尾是如何定义的了
举报

老蜗牛

2018-6-22 10:59:56
采集数据的标准架构:生产者-消费者模式了解一下
举报

更多回帖

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