完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
diertimeidaan 发表于 2017-9-5 14:05 已改成0,困难在于如何把多次读取的字符串缓存,然后拼接字符串,再对字符串进行判断,代码写起来困难了。。。。。 |
|
|
|
|
|
用移位寄存器进行拼接
|
|
|
|
|
|
用移位寄存器进行拼接
|
|
|
|
|
diertimeidaan 发表于 2017-9-5 14:05 以图中代码为例,加了while循环,为了缓存,但是这个while无合理的退出机制,因为外层循环是判断都要了#停止读取,最内层的while就无法停止,如果不加while,就无法缓存,后面也无法拼接字符串,这里面共三个循环,用于缓存的内层while循环貌似无法退出....
|
|
|
|
|
|
|
|
|
|
|
|
以上图为例,移位寄存器放在哪里?用while循环还是for循环?不管内层还是外层,都不能解决while退出机制,如果用for循环,不能实现缓存的作用。
|
|
|
|
|
|
|
|
|
|
|
|
不明白这个另类在哪里?前面一个移位寄存器是数组插入,缓存字符串,后面一个移位寄存器,是吧字符串数组转换成字符串,相当于拼接 |
|
|
|
|
|
另外,从另一个角度来想,如果你的发送端没有问题且数据是一次性发送的话,我觉得下面这段代码已经可以帮你完整的接收数据了。
|
|
|
|
|
|
这个我试试吧,波特率9600,延迟100ms足够了 |
|
|
|
|
|
昨天调试了很多次,LABVIEW与mcu是异步通信,while循环100Ms扫描一次,其实也有可能出现,当正在读的时候,下位机正在发,会出现CHARGE_OVER#被拆分成2次发送的情况,昨天调试,获取的串口信息,就显示出这个字符串被分成了2次发送,异步通信导致。 |
|
|
|
|
|
这个建议只能假设下位机是一次性发出,因为读取在while循环里,如果有字节后开始读取,后面延迟多久,都是没有意义的,因为按照数据流,while循环走到第一个字节属性处,延迟之后的字节数与延迟之前其实没有区别,因为while循环不会在延迟的时间内重新再次扫描,字节数不会有所增加 |
|
|
|
|
|
你这个理解让我觉得很奇怪。你觉得9600的波特率发送5个字符需要多少时间?
你能保证while循环内在执行byte at point的时候,所有数据都发送完了吗?都读到缓存区了吗? |
|
|
|
|
|
学会使用生产者-消费者模式去读串口数据,大体思路是先用生产者循环读取串口,并将所读数据放入队列, 再用消费者循环去解析队列中的数据。不过,从楼主之前的代码上看,这可能超出了LZ的能力。
|
|
|
|
|
diertimeidaan 发表于 2017-9-5 14:05 改成大于0也没用,我以前叶遇到过的 |
|
|
|
|
|
这个我也写过,我接受的数据达到30字节,还有过这种情况 |
|
|
|
|
呼呼721 发表于 2017-9-5 15:04 那你怎么解决的? |
|
|
|
|
|
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
211 浏览 0 评论
请教大神,在labview里面对实时扫描资源中的C系列模块NI9234进行配置发生非预期错误
1709 浏览 0 评论
1585 浏览 0 评论
LABVIEW 2023 Q1调用python后一直报错1671
1960 浏览 2 评论
5207 浏览 3 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 13:27 , Processed in 1.026154 second(s), Total 77, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
7172