Qt中接收串口数据不完整、分段的解决方法
场景:
最近在串口通信时碰到了一个问题,向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中接收串口数据不完整、分段的解决方法相关推荐
- QT多线程接收串口数据
** QT多线程接收串口数据 ** 1.前言 QT多线程的使用,和绝大数人一样,犯了错误(请查阅Qt开发人员( Bradley T. Hughes)Blog中的文章 you are-doing-it- ...
- 如何在QT中读取串口数据
总是能在别人的博客中学到太多太多,谢谢各位对知识的无私共享,谢谢大家 前言 去年我使用Qt编写串口通信程序时,将自己的学习过程写成了教程(Qt编写串口通信程序全程图文讲解),但是由于时间等原因,我只实 ...
- js判断json有没有某值_JS中判断JSON数据是否存在某字段的方法 JavaScript中判断json中是否有某个字段...
方式一 !("key" in obj) 方式二 obj.hasOwnProperty("key") //obj为json对象. 实例: var jsonwor ...
- 使用iocomp中iplot控件实现接收串口数据并显示曲线
概述:Iocomp 是一个强大的工业控件.适用于vb/vc/vs.net/Delphi/BCB(windows/linux).囊括了常见的工业控件. 本例使用简单iocomp控件中的一个简单iplot ...
- java swing 串口_ComTest 接收串口数据,并显示在文本框内,通过JavaSwing实现 Develop 265万源代码下载- www.pudn.com...
文件名称: ComTest下载 收藏√ [ 5 4 3 2 1 ] 开发工具: Java 文件大小: 3157 KB 上传时间: 2016-09-21 下载次数: 0 提 供 者: 韩坤 ...
- 串口通信——接收串口数据并处理(C语言)
本文主要内容包含: 1.接收串口数据程序的编程逻辑示意图: 2.接收串口数据程序要用到的通用函数模块(可直接引用,无需更改): 3.接收串口数据程序的示例. 1.接收串口数据程序的编程逻辑示意图 ...
- 51UWB单片机连接ESP8266实现Wifi接收串口数据
UWB定位需要电脑读取UWB基站的串口数据来读取距离信息,用wifi连接可以实现远程接收串口数据方便连接.这里记录一下如何让51UWB单片机接入WiFi模块ESP8266. 前置条件: 单片机完成基站 ...
- simulink接收串口数据_基于Unity串口通信的解决方案
思路有三种,等下我会详细介绍. 后面的博客详细介绍是我收录两年前写的博客,现在我已经没有往串口方向进行开发了,所以只能将一些思路分享给大家. 解决方式一:将Unity串口通信数据模块(接收与发 ...
- serialport接收串口数据_C#串口操作类,包括串口读写操作
串口进行操作的类,其中包括写和读操作,类可设置串口参数.设置接收函数.打开串口资源.关闭串口资源,操作完成后,一定要关闭串口.接收串口数据事件.接收数据出错事件.获取当前全部串口.把字节型转换成十六进 ...
最新文章
- mysql分表搜索引擎_MySql分库分表总结(转)
- 独家 | 初学者的问题:在神经网络中应使用多少隐藏层/神经元?(附实例)
- PostgresSQL生成UUID
- 小程序 获取用户信息
- 2019年,北大毕业生都去哪儿了?
- QList (链表) QVector (数组)
- STC12C5A60S2片内存储器介绍
- 数据分析在商业中的作用
- mp3lame linux 编译,ubantu-16+ndk-r14b 编译 ffmpeg-4.0.2+lame_mp3-3.99.5
- ENSP模拟实验OSPF虚链路
- 在 Oracle Enterprise Linux 和 iSCSI 上构建您自己的 Oracle RAC 集群(续)
- Xavier/Tx2镜像拷贝及系统克隆
- 强化学习在文本生成nlg上的作用
- python爬虫豆瓣电影评价_使用爬虫爬取豆瓣电影影评数据Python版
- Qt线程、事件与QObject
- 国科大学习资料--最优化计算方法(王晓)-期末考试真题1
- python输出偶数_python程序使用递归查找数字是偶数还是奇数
- Http头信息(二)——请求头信息(一)
- 三星n9008 android 6.0,三星note3_三星n9008s_三星n9008s更新6.0
- Vue2+VueRouter2+Webpack+Axios 构建项目实战2017重制版(一)基础知识概述
热门文章
- bl小说里面有个机器人管家_【连载】小说--妖魔道(二)
- 计算机加域成灰色,win7系统创建域选项变成灰色的解决方法
- PPT怎么设置左对齐
- 【离散数学及其应用】2018-2019学年春夏学期期末考试 习题详解
- 四川嘉庆恒运:拼多多店铺怎么解绑店铺
- 警告: 矩阵接近奇异值,或者缩放错误。结果可能不准确
- php商城优化,优化是php开源商城系统必备的功课
- 一站式报修微信小程序,让报修系统化,便民化。JavaScript this 关键词
- 12 Python总结之蒙特卡洛模拟
- android string.trim,String.Trim 方法 (System) | Microsoft Docs