记录下QT读取串口数据时遇到的问题
创始人
2024-03-25 14:49:07
0

一、如果使用QT读取串口数据

使用定时器定时发送信号,然后调用槽函数来读取串口数据,串口数据读取过程加锁。

timer1 = startTimer(15);
connect(this, SIGNAL(callCapData()), this, SLOT(CapData()));
void ecgfrom::timerEvent(QTimerEvent *event)
{if(event->timerId() == timer5) {if(...){...;}}
}

当有多个窗体时,使用线程。

ecgfrom::ecgfrom(QWidget *parent) :QDialog(parent),ui(new Ui::ecgfrom)
{ui->setupUi(this);//推荐写法:去掉this.(加上this,耗时任务仍在主线程中完成)m_myThread = new QThread();// 将工作类(这里是窗体显示)移入线程,// 什么时候开始执行,执行完成后需要干什么,都是通过信号槽来完成。this->moveToThread(m_myThread);m_myThread->start();/* 其他处理 */    ...;
}

二、串口通信的过程

概念:
1、一个数据包(帧)长度
在这里插入图片描述
在这里插入图片描述
以上图为例,数据帧(包)长度为33(Byte)

2、按每次32个数据包,处理接收缓冲区数据。(读取一次串口接收缓冲区数据能读到32个数据)

qint32 tempval[256] = {0}; // 每个数据 4 字节,共4*256 = 1024 字节

3、时间频率为15ms(定时器定时每15ms去读取一次串口接收缓冲区数据)

timer1 = startTimer(15);

采集卡(外设)与电脑通过串口通信流程:

启发自这个视频链接: https://www.bilibili.com/video/BV1Pd4y1k7sE/?spm_id_from=333.999.0.0&vd_source=b91967c499b23106586d7aa35af46413

在这里插入图片描述
当电脑端的应用程序点击打开串口时,发送缓冲区的数据会以指定的波特率发送至电脑短的FIFO中,电脑端在点击读取串口数据时,会从FIFO中读取指定大小的数据,同时被读出的数据 会从FIFO中出队列,等待下次发送过来的数据。

从下面的

qint32 tempval[256] = {0}; // 每个数据 4 字节,共4*256 = 1024 字节

可知,电脑端接收缓冲区中的数据至少为1024个字节,应该会更大(由于下位机(采集卡)每次只发送 256 个数据,所以及时我将读取的时间调整为更大,tempval数据的大小调整为512个字节,可以读取512个字节,但是只是 0 — 255有数值,剩下的256 — 512个都为 0)。

重视这个问题,可以解决问题 —— 滤除杂波(这里是起始数据乱了)。

方法是,再开个定时器,先将杂波数据读出来之后,再将该定时器关闭和把原来采样定时器开启。

timer5 = startTimer(15);
/* 作用:消除杂波 */if(event->timerId() == timer5) { // 15msif (CapType==0){if(viewing){times+=1;if(times<=90){qDebug()<timer2 = startTimer(15); // 启动原先负责采样的定时器killTimer(timer5);qDebug()<<"killTimer5";}}}}
}                        	      
void ecgfrom::CapDataDel()
{mutex.lock();if(CapType==0){m_Libcom.ReadCoom(tempval); // 将杂波滤除}mutex.unlock();
}

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...