QT5.3的串口通讯问题,怀疑QSerialport类有bug

wj066000 2014-12-02 04:25:12
我用的是QT5自带的QSerialport类
串口的另一端一个采集仪,它检测到开/关门事件就发给我19个字节的数据
问题是:偶尔有时候一次读到的数据为什么不足19个字节,而且在下次开/关门事件触发之前根本就读不出来那些没读到的数据,下次开/关门的时候,上次没读完的数据又读了出来
我总怀疑QT5的串口有bug,哪位高手帮我看看是不是我的代码写的有问题
读取串口代码如下(放在一个线程里不停的循环读取,mysp是一个QSerialport对象)

void mythread4::run()
{
while(this->stoped==false)
{
if(mysp->waitForReadyRead(-1)) //等待有数据到达,-1表示永不超时
{
this->msleep(150); //延时一会,等待数据全部到达
QByteArray b=mysp->readAll();
for(int i=0;i<b.count();i++)
{
qDebug()<<QString::number(b[i]); //调试输出读到的数据
}
}
}
}
...全文
2798 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
m沉默01 2016-01-22
  • 打赏
  • 举报
回复
之前也碰到过这样的问题,我是改用QtSerialPort 的异步方式~
wuxi1462673135 2015-06-16
  • 打赏
  • 举报
回复
请问QT中用serialPort和线程怎么读取端口信息,谢谢
wj066000 2014-12-11
  • 打赏
  • 举报
回复
问题解决了,是硬件问题...修复硬件后就好了 不过串口助手还真是诡异,硬件有问题它都能读出正确的值...有点恐怖
Inhibitory 2014-12-07
  • 打赏
  • 举报
回复
这个不是Bug,是你没明白网络底层是怎么传递数据的。
Package 和 Fragment 的问题。
可以看看Qt自带的Socket的例子是怎么处理数据的。

wj066000 2014-12-06
  • 打赏
  • 举报
回复
引用 5 楼 dbzhang800 的回复:
[quote=引用 4 楼 wj066000 的回复:] [quote=引用 3 楼 xjdreamer 的回复:] 使用信号和槽比较简单,有一个非官方的串口操作类 qextserialport ,也很好用
请问到哪儿去下载qextserialport这个类的源码呢?[/quote] 只要QtSerialPort 的异步API可以用,你还是用它吧。 QextSerialPort 1.2RC 已经两三年没有更新了,而且我也没有更新它的打算。[/quote] 呃,QT的串口通讯真的很蛋疼啊,又遇到一个更奇怪的问题,开机直接用QT程序读取串口数据无论如何都是错误的,总比正确值小1,可是用串口助手打开一遍再关闭,QT程序读出来的数据就正常了,很无奈啊...
dbzhang800 2014-12-06
  • 打赏
  • 举报
回复
引用 6 楼 wj066000 的回复:
[quote=引用 5 楼 dbzhang800 的回复:] [quote=引用 4 楼 wj066000 的回复:] [quote=引用 3 楼 xjdreamer 的回复:] 使用信号和槽比较简单,有一个非官方的串口操作类 qextserialport ,也很好用
请问到哪儿去下载qextserialport这个类的源码呢?[/quote] 只要QtSerialPort 的异步API可以用,你还是用它吧。 QextSerialPort 1.2RC 已经两三年没有更新了,而且我也没有更新它的打算。[/quote] 呃,QT的串口通讯真的很蛋疼啊,又遇到一个更奇怪的问题,开机直接用QT程序读取串口数据无论如何都是错误的,总比正确值小1,可是用串口助手打开一遍再关闭,QT程序读出来的数据就正常了,很无奈啊...[/quote] 这个问题的话,你倒是可以试试QextSerialPort 1.2RC。 如果用QextSerialPort正常的话,你可以去给QtSerialPort提交一个BUG
dbzhang800 2014-12-05
  • 打赏
  • 举报
回复
引用 4 楼 wj066000 的回复:
[quote=引用 3 楼 xjdreamer 的回复:] 使用信号和槽比较简单,有一个非官方的串口操作类 qextserialport ,也很好用
请问到哪儿去下载qextserialport这个类的源码呢?[/quote] 只要QtSerialPort 的异步API可以用,你还是用它吧。 QextSerialPort 1.2RC 已经两三年没有更新了,而且我也没有更新它的打算。
wj066000 2014-12-05
  • 打赏
  • 举报
回复
引用 3 楼 xjdreamer 的回复:
使用信号和槽比较简单,有一个非官方的串口操作类 qextserialport ,也很好用
请问到哪儿去下载qextserialport这个类的源码呢?
wj066000 2014-12-03
  • 打赏
  • 举报
回复
引用 1 楼 dbzhang800 的回复:
你可以试试它的异步API,使用信号槽。这样也可以避免多线程
恩,好像用readyRead信号的方式确实没有这个问题,不过为什么多线程会出问题呢
xjdreamer 2014-12-03
  • 打赏
  • 举报
回复
使用信号和槽比较简单,有一个非官方的串口操作类 qextserialport ,也很好用
dbzhang800 2014-12-02
  • 打赏
  • 举报
回复
你可以试试它的异步API,使用信号槽。这样也可以避免多线程

16,203

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧