labvIEW串口通信读取字节数问题

串口每一帧数据有18个字节,有时候会有一个字节的错误数据,怎么样才能只读取正确的数据,而将错误的数据送到另一个字符串显示空间,我想通过自己数来判断,如果字节数是18,则为正确数据,读取,如果不为18,则为错误数据,送到另一个字符串显示控件,我做了如下图的VI,但每次都只能读18个字节数,而串口的实时字节数读不出来,求高手指教啊
分离正确和错误数据

    串口操作(读写)建议加延时

    可以把“串口字节数”连接到“VISA读”的那个接口上,对读取出来的字符串做处理应该简单一些吧,字符串显示格式修改为16进制或者字符串转字节数组可能更直观。

    循环外面的那个“VISA打开”应该没必要

追问

谢谢你的回答 不过不能解决我的问题啊

追答

第2点已经说得很直接了,串口有多少数据读多少数据,对读取出来的字符串做判断。你那么写就是非得读到36字节才结束,或者等待超时。确定下你的单片机没有问题,先不要用labview做,找个串口助手试试!!!

追问

你说的第2点我以前弄过,但是它读出了是一个字节一个字节的,也就是说新的一个字节会覆盖之前的字节,读到最后只剩一个字节,因为那个bytes at port值是从最多是字节数一直变到0的,我想要的是如果是正常的数据,读到最后是18个字节,然后我对数据进行处理,如果不是正常的数据就把它丢掉,你能不能帮帮我啊

追答

把串口读出来的字节个数加不就好了,做一个累加的移位寄存器,得到18个字节就给出结果。

追问

但如果在得到一帧正常的数据后,如果有错误的一个字节出现,是不是也会被累加都移位寄存器里啊,会被累加到下一次的数据里去吧

追答

会的

追问

所以还是不能解决这个问题啊,我那样做就是想区分正确和错误的数据,你有什么其他方法可以帮助我吗,我是新手啊 非常感谢你

追答

从源头解决吧,哪里来的错误数据呢。
给你一个U8的数字,你能分清错误数据么,你要是知道也可以啊,不计数抛弃掉不就好了,如果不知道,那就从源头找问题吧。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-10
如果每一帧之间没有间隔时间,那么每一帧的数据应该具有特定的结构,使用移位寄存器来寻找特定结构
如果每一帧之间有一定的间隔时间,设置串口超时,串口读取字节数设为19

如果都不是,一定是我看错了追问

是的,每一帧数据前5个字节都是固定的 要怎么弄啊 每一帧之间时间间隔不定

追答

参考逻辑是:每次循环仅接收1个字符并连接字符串,同时检测里面是否出现了flag
检测到falg则允许将flag之前的数据(13/14个字节)输出,然后将移位寄存器置空

本回答被提问者和网友采纳
第2个回答  2019-07-26
参考逻辑是:
每次循环仅接收1个字符并连接字符串,同时检测里面是否出现了flag
检测到falg则允许将flag之前的数据(13/14个字节)输出,然后将移位寄存器置空。