场景:
最近在串口通信时碰到了一个问题,向485串口发送指定报文,会收到一条关于压力数值的数据。但将其qDebug打印出来却发现数据被分成了两部分依次打印,之后通过验证确定了问题出在readyRead的信号与槽这一部分。

在槽函数的入口处加入 qDebug()<<"-"; 可以发现 “-” 连同分段的数据被打印了两次,也就是说在收到readyRead的信号后,串口的数据被分成两段,各执行了一次readMyCom槽函数。


解决方法:
在网上搜索后,发现有很多解决方法,比如通过数据的帧头帧尾进行判断是否为完整数据帧、通过帧头和数据帧长来判断完整帧、加入定时器将延时读取的数据存入缓冲区然后timeout后再一次性读取数据,这里我主要介绍定时器延时读取的方法。

改写连接函数:
在readyRead信号对应的槽函数中设置定时器,并将读取到的数据储存在缓冲区中,待定时器timeout再一并读取缓冲区中的数据,缺点是如果极高频率的串口通讯可能会有问题

//改写前的connect
//connect(my_serialport,&QSerialPort::readyRead,this,&MainWindow::readMyCom);//改写后的connect
connect(my_serialport,&QSerialPort::readyRead,this,[=]()
{timer->start(100);//设置100毫秒的延时QByteArray buffer.append(my_serialport->readAll());//将读到的数据放入缓冲区
});
connect(timer,&QTimer::timeout,this,&MainWindow::readMyCom);//timeout执行真正的读取操作void Widget::readMyCom()
{time->stop();//关闭定时器QByteArray data = buffer;//读取缓冲区数据buffer.clear();//清除缓冲区....//数据处理操作
}

Qt中接收串口数据不完整、分段的解决方法相关推荐

  1. QT多线程接收串口数据

    ** QT多线程接收串口数据 ** 1.前言 QT多线程的使用,和绝大数人一样,犯了错误(请查阅Qt开发人员( Bradley T. Hughes)Blog中的文章 you are-doing-it- ...

  2. 如何在QT中读取串口数据

    总是能在别人的博客中学到太多太多,谢谢各位对知识的无私共享,谢谢大家 前言 去年我使用Qt编写串口通信程序时,将自己的学习过程写成了教程(Qt编写串口通信程序全程图文讲解),但是由于时间等原因,我只实 ...

  3. js判断json有没有某值_JS中判断JSON数据是否存在某字段的方法 JavaScript中判断json中是否有某个字段...

    方式一 !("key" in obj) 方式二 obj.hasOwnProperty("key")  //obj为json对象. 实例: var jsonwor ...

  4. 使用iocomp中iplot控件实现接收串口数据并显示曲线

    概述:Iocomp 是一个强大的工业控件.适用于vb/vc/vs.net/Delphi/BCB(windows/linux).囊括了常见的工业控件. 本例使用简单iocomp控件中的一个简单iplot ...

  5. java swing 串口_ComTest 接收串口数据,并显示在文本框内,通过JavaSwing实现 Develop 265万源代码下载- www.pudn.com...

    文件名称: ComTest下载  收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 3157 KB 上传时间: 2016-09-21 下载次数: 0 提 供 者: 韩坤 ...

  6. 串口通信——接收串口数据并处理(C语言)

    本文主要内容包含:  1.接收串口数据程序的编程逻辑示意图:  2.接收串口数据程序要用到的通用函数模块(可直接引用,无需更改):  3.接收串口数据程序的示例. 1.接收串口数据程序的编程逻辑示意图 ...

  7. 51UWB单片机连接ESP8266实现Wifi接收串口数据

    UWB定位需要电脑读取UWB基站的串口数据来读取距离信息,用wifi连接可以实现远程接收串口数据方便连接.这里记录一下如何让51UWB单片机接入WiFi模块ESP8266. 前置条件: 单片机完成基站 ...

  8. simulink接收串口数据_基于Unity串口通信的解决方案

    思路有三种,等下我会详细介绍. 后面的博客详细介绍是我收录两年前写的博客,现在我已经没有往串口方向进行开发了,所以只能将一些思路分享给大家. ​ ​ 解决方式一:将Unity串口通信数据模块(接收与发 ...

  9. serialport接收串口数据_C#串口操作类,包括串口读写操作

    串口进行操作的类,其中包括写和读操作,类可设置串口参数.设置接收函数.打开串口资源.关闭串口资源,操作完成后,一定要关闭串口.接收串口数据事件.接收数据出错事件.获取当前全部串口.把字节型转换成十六进 ...

最新文章

  1. mysql分表搜索引擎_MySql分库分表总结(转)
  2. 独家 | 初学者的问题:在神经网络中应使用多少隐藏层/神经元?(附实例)
  3. PostgresSQL生成UUID
  4. 小程序 获取用户信息
  5. 2019年,北大毕业生都去哪儿了?
  6. QList (链表) QVector (数组)
  7. STC12C5A60S2片内存储器介绍
  8. 数据分析在商业中的作用
  9. mp3lame linux 编译,ubantu-16+ndk-r14b 编译 ffmpeg-4.0.2+lame_mp3-3.99.5
  10. ENSP模拟实验OSPF虚链路
  11. 在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 集群(续)
  12. Xavier/Tx2镜像拷贝及系统克隆
  13. 强化学习在文本生成nlg上的作用
  14. python爬虫豆瓣电影评价_使用爬虫爬取豆瓣电影影评数据Python版
  15. Qt线程、事件与QObject
  16. 国科大学习资料--最优化计算方法(王晓)-期末考试真题1
  17. python输出偶数_python程序使用递归查找数字是偶数还是奇数
  18. Http头信息(二)——请求头信息(一)
  19. 三星n9008 android 6.0,三星note3_三星n9008s_三星n9008s更新6.0
  20. Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(一)基础知识概述

热门文章

  1. bl小说里面有个机器人管家_【连载】小说--妖魔道(二)
  2. 计算机加域成灰色,win7系统创建域选项变成灰色的解决方法
  3. PPT怎么设置左对齐
  4. 【离散数学及其应用】2018-2019学年春夏学期期末考试 习题详解
  5. 四川嘉庆恒运:拼多多店铺怎么解绑店铺
  6. 警告: 矩阵接近奇异值,或者缩放错误。结果可能不准确
  7. php商城优化,优化是php开源商城系统必备的功课
  8. 一站式报修微信小程序,让报修系统化,便民化。JavaScript this 关键词
  9. 12 Python总结之蒙特卡洛模拟
  10. android string.trim,String.Trim 方法 (System) | Microsoft Docs