从串口实时读取16进制数据,并提取有效信息。我的程序感觉有问题,求大佬指教~~

2019-07-17 11:11发布

首先,说明我的目的。我的一个加速度采集模块通过USB连接电脑,实时输出16进制数据。数据格式如下: 前两位55/51是起始位,固定不变。最后三位没用,只需要中间的6个。
我用串口调试助手读取数据,如下: 示意图2.png
确认数据输出没有错。
所以请教一下各位大佬,这样的情况如何准确采集我所需要的信息呢?我所需要的信息是55 51后面的6个数据。
刚开始学习labview,所以自己也尝试鼓捣了几天,但没成功,采集的数据容易乱。附图上来,望大佬指教。
示意图3.png
这个是在Labview自带Demo的基础上改的,每次读取11位数据,写入数组。提取中间需要的6个重新组合,最后换算成十进制。出现的问题是,每次读取的11位数据,有时候就不是55 51开头的,读的数据乱了!
谢谢各位大佬~~多多指教~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
Sylvain
1楼-- · 2019-07-18 13:57
shangxinol 发表于 2018-1-25 11:22
谢谢你的回复。我试了一下这种方法,但是有个问题。我的加速度模块是不断的往串口送数据的,我并不能确定我读取的时候,开头就刚好是5551,这种问题怎么解决呢?
不能保证刚好是5551  我就不能每次读11个了。。。

这样的话,添加一个程序判断结构,首先判断5551,不是的话放弃这组数据,不过这样做的话,数据有丢失。所以最好的方法就是控制读取数据的个数。
老蜗牛
2楼-- · 2019-07-18 14:33
shangxinol 发表于 2018-1-25 11:23
你好,感谢你的回复。
初涉Labview,想请问一下 Labview有这种读数据的Demo吗?或者相似的例子?
我的下位机也就是加速度模块是一通电就不断发送数据的。。。

首先,labview自带的范例中没有你说的demo;其次,你的串口速率很快,一个字节大概只需要48微秒,非实时操作系统下的labview是无法做到循环一次(耗时2-3ms)收集一个字节而不丢失数据的;最后,你可以采用嵌套的生产者-消费者模式,不过这对于目前的你来说,是个mission impossible。
shangxinol
3楼-- · 2019-07-18 19:37
 精彩回答 2  元偷偷看……
xie330821
4楼-- · 2019-07-18 21:10
shangxinol 发表于 2018-1-25 20:14
你好。我现在手头有c-RIO 9039模块,这个读取程序如果写在FPGA中,是不是就可以达到2-3ms了?另外,请问一下c-RIO上面的USB接口跟电脑上的USB接口 是一样用VISA读取吗?

labview中的串口通讯方式都是一样的,看波特率就知道一个字节要多少时间
老蜗牛
5楼-- · 2019-07-19 03:07
shangxinol 发表于 2018-1-25 20:14
你好。我现在手头有c-RIO 9039模块,这个读取程序如果写在FPGA中,是不是就可以达到2-3ms了?另外,请问一下c-RIO上面的USB接口跟电脑上的USB接口 是一样用VISA读取吗?

传输速率是由你串口协议的波特率决定的
xiesilin1
6楼-- · 2019-07-19 08:38
你可以用一个线程专门用于把VISA读的字符串连接起来,然后另一个线程解析。你试试看,就跟图里的一样,一个读,一个解
1517380264(1).jpg
1517380305(1).jpg

一周热门 更多>