• 1455阅读
  • 10回复

[讨论]老问题:串口接收数据(readall),,会换行问题,,希望大家都给点解决意见 [复制链接]

上一主题 下一主题
离线hello_树哥
 

只看楼主 倒序阅读 楼主  发表于: 2017-08-22
利用串口调试工具,跳线帽短接收发,实现通过软件界面的一个textedit发,,另一个textedit收,功能已经实现了,但是还有问题
问题:数据能完全读到,但是会出现换行,,网上的都说家read.waitreadyread()函数,或者sleep()函数,但是我都试过了,,没有解决这个问题,大家有什么更好的办法吗??或者是通过多个线程能解决吗??
离线hello_树哥

只看该作者 1楼 发表于: 2017-08-22
就是假如我发送一串字符串“cbashcnklasnkc”,但是在接受端会出现数据不连续,,换行,而且每次换行的位置不一样,可能接受的是:
cbashcnkl
asnkc
这样的序列,也可能是
cb
ashcnklasnkc
这样的序列
在线lichen221334

只看该作者 2楼 发表于: 2017-08-23
发送的时候 flush()一下,接收的时候 waitreadyread()

再不行就用处理网络的方式 来 接受信息,拼接信息直到满足条件或 超出可接受范围
离线liudianwu

只看该作者 3楼 发表于: 2017-08-23
任何数据的接收肯定是不确定的,你可以将接收到的数据放入buffer,然后开个定时器从buffer中取出来判断是否完整,完整则解析。如果你想不要断行,你可以在接收数据前延时100毫秒试试。
QtQML多多指教开发社区 http://www.heilqt.com
将QtCoding进行到底,做Qt的宠儿
群号:312125701
离线nigoole

只看该作者 4楼 发表于: 2017-08-23
延时问题应该能解决大部分时候,毕竟时间这个东西,大家都很难估摸,假如你知道接收数据的长度,可以用这个来进行处理,等串口buf的数据接收到某个长度的时候再读,如此往复。
有句话说得好:好好学习,天天向上。加油~~!
离线hello_树哥

只看该作者 5楼 发表于: 2017-08-23
回 liudianwu 的帖子
liudianwu:任何数据的接收肯定是不确定的,你可以将接收到的数据放入buffer,然后开个定时器从buffer中取出来判断是否完整,完整则解析。如果你想不要断行,你可以在接收数据前延时100毫秒试试。 (2017-08-23 09:07) 

这里我将waitForReadyRead(10),函数换成sleep(10),在接受数据前加了一个sleep(10)毫秒级的函数确实能够读取,而且不换行,,但是又了新问题,貌似readyread信号发射了多次,,,本来就一行就完成了,这里出现了好多行,而且是不确定的,后面读到了的行是没有数据
离线hello_树哥

只看该作者 6楼 发表于: 2017-08-23
@lichen221334   你采用这种办法解决了吗

查了下waitForReadyRead的用法:
此功能将阻塞,直到新数据可用于读取并且readyRead()信号已被发出。 该功能将在msecs毫秒后超时; 默认超时时间为30000毫秒。
如果发出readyRead()信号并且有新的数据可供读取,该函数将返回true; 否则返回false(如果发生错误或操作超时)。
亲自测过加上该函数,但是实际上比没有解决,,仍然换行,,,猜想应该是readyread信号发送过多次的原因,,正在测试中,,
本帖提到的人: @liudianwu
在线lichen221334

只看该作者 7楼 发表于: 2017-08-24
一般发送过多次 是不是你 on_pushButton_4_clicked 这个槽函数链接了 多次 可以check一下
存在换行check一下发送的数据,qDebug()<<S_data.toLatin1()
而且在接收时候也完全可以自己判断移除掉"\n"


如果依然存在接收不全,可以采用 处理网络信息的方式,如  liudianwu刘大师所说。
离线yuyu414

只看该作者 8楼 发表于: 2017-08-25
接收到的数据存入缓存,根据通讯协议来解析,不要用延时
离线sunchenghao

只看该作者 9楼 发表于: 2017-08-28
条线短路收发,有没有可能是收发的波特率不一样。
离线ketiy2004

只看该作者 10楼 发表于: 01-12
1、问题方向出错了,不是串口接收多了换行,而是显示问题!
2、串口接收因为收发异步问题,所以一行数据多次接收,这是正常现象。
3、判断收到的数据,是否包含换行字符,如果是显示的时候换行,如果没有,数据继续在该行尾部显示。
快速回复
限100 字节
 
上一个 下一个