完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
目的是冲串口读取数据,然后用波形的形式化画出来。采用生产者消费者的模式。
串口的数据是250Hz的心电图,一共2500个数据,要求从串口读取后能先缓存500个数据后再以250Hz的速度画出波形来,同时串口继续接受读取后面剩下的数据。 目前问题是 1、串口只能读取6000个字节大约800个数据,剩下的数据都没有读出来,串口的buffer里后面全是0了。 2、缓存了500个数据后,画波形,实现不了250Hz的方式画波形 3、500个数据需要花好长时间才能读出来; 程序框图如下: 期待高手帮忙看看,谢谢! |
|
相关推荐
32个回答
|
|
串口读取有时会出现-1073807252的错误。
|
|
|
|
有几个问题需要反问你:
第一,你怎么知道串口只能接收6000个字节? 第二,既然你都知道串口的数据是以250Hz(也就是4ms)速度更新数据过来,那么请问,你采集循环里面至少时间延迟都在200ms以上了(即采集速度比数据更新速度慢),你又如何确保能采集到每个数据(即2500个数据你能采集到吗)? 第三,你有没有先用串口助手采集数据看看?确认一下能否采集到2500个数据,还有每个数据字符串的16进制是什么,每个数据后面有没有结束码?如果有,那么你的程序就不是这样写了,如果没有,那么你的程序也不是这样写的。 第四,你对于队列的用法用错了,你对于接收到的字符串数据也没有去判断数据的有效性。 |
|
|
|
数据可以直接连波形图
|
|
|
|
昨天将生产者的while循环的等待时间改成了8ms,99%可以读出完整的数据,原始数据发送时间是4ms一个数据,这样在速度上就可以高度匹配,但是这样的高速,引起了另一个问题,是偶尔出现一个异常数据,大约-10左右,但原始的TXT文件中没有该数据,所以应该是while刷新速度加快后导致的BUG。
|
|
|
|
sszx2007 发表于 2018-2-26 20:32 第一个问题,这里说的6000个字节,不是说串口只能收6000个,而是它只收到了有效的6000个数据,后面全是0; 第二个问题,之前的代码确实是采集速度比发送速度慢,所以才导致读到的有效数据较少,后续更新了while刷新和读取的等待时间,目前已可以获取到完整数据; 但同时引发了另一个问题,偶尔读到异常数据,大于10或小于-10,所有的异常数据均是这个特点,且出现的时间间隔不一样; 第三个问题,能够采集到2500个数据,每个数据都是以n为结尾的;程序不合理之处请赐教; 第四个问题,请赐教; 谢谢您的建议。 |
|
|
|
出现异常数据,可能还是时序配合上,导致的缓存存满后,一个数据被拆成了2部分存储在两个缓存中,造成了读取的数据错误或丢失。
|
|
|
|
呼呼721 发表于 2018-2-27 14:14 好的,最简单方法,把你代码发过来,我给你改,我的是LV2016 另一个问题,你的通信速度还可以再快吗?即波特率 |
|
|
|
波特率可以改,目前我调试时用的是串口调试助手,实际产品运行时可能达到38400。 我这里的LV也是2016版的,代码我上传至论坛了,如果方便可以帮我看看,谢谢。 |
|
|
|
|
|
|
|
呼呼721 发表于 2018-2-28 10:03 把你用串口调试助手接收到的数据以16进制给我看看 |
|
|
|
|
|
|
|
前面板如图所示,BUFFER里有接收到数据的16进制
|
|
|
|
|
|
|
|
非常感谢修改了代码,整体代码结构更为简洁了,有两个地方没明白: 1、使用的 判定范围并强制转换 函数,如果数据超出设定的边界值(-10和10),用什么数据替换了这个超出边界的值了?如此替换,不就失真了吗? 2、下位机数据的速度是4ms一个数据,那LABVIEW的WHILE循环里没有加等待时间,如何做到时序上匹配的? 编程技巧有待提高~_~望指教,谢谢。 |
|
|
|
你没看明白我说什么,我说“把你用串口调试助手接收到的数据以16进制给我看看” |
|
|
|
呼呼721 发表于 2018-2-28 16:35 第一,请你看清楚,我替换了没有?边界值你自己设定,我只是把超出设定边界的值不要了而已。请你再次看清楚 第二,我什么要在WHILE循环里加等待时间?你每个数据过来不是带有结束码吗?我以接收到结束码作为一个完整的数据,在这个 采集WHILE循环里面,它会以每收到一次结束码才会进入下一循环,如果没收到,就会一直等待。也就是说,WHILE循环的时间间隔取决于发来的数据有多快。我做有个时间间隔在里面,你可以看到每次循环的时间间隔。 |
|
|
|
呼呼721 发表于 2018-2-28 16:35 第一,你再次看清楚代码。 第二,以结束码作为接收数据,可以不用加等待时间,因为每收到一次结束码,就证明有一帧完整的数据到来。 |
|
|
|
|
|
|
|
串口调试助手4号口给LABVIEW(3号口)发送数据,串口调试助手显示的接收端数据16进制显示的如上图所示。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
872 浏览 2 评论
labview如何实现电机位置与图像清晰度计算值相对应,或者说如何实现电机每步距计算一次清晰度值?
1355 浏览 2 评论
1906 浏览 1 评论
2312 浏览 2 评论
NI Vision有个图片打不开其他图都能打开(用NI Vision Assistant也打开不了)
2714 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-24 22:44 , Processed in 0.796303 second(s), Total 83, Slave 73 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号