当前位置: 首页 > news >正文

【QT】QTimer定时器读取寄存器的值

需求:有一个"测量"按钮,按下测试按钮的时候通过串口方式把寄存器A的值写成0,并开启定时器读取寄存器A的值,当寄存器A的值是1的时候,读取另外一个寄存器B的值,显示在页面中

流程:

代码:

UI页面类VDownLinkView.cpp
测量按钮的槽函数:
void VDownLinkView::on_getParamsBtn_clicked()
{emit sGetParamsValue();
}把寄存器的值显示在UI页面上
void VDownLinkView::onReadDownLinkParams(QByteArray data)
{QByteArray size = data.mid(1, 1);//实际长度int iRetLen = size.toHex().toInt(nullptr, 16) * 4;//理应返回的数据长度if(iRetLen != (data.length()-5))return;QByteArray param1 = data.mid(3,4);QString str1 = param1.toHex().toUpper();int iParam1 = str1.toInt(nullptr, 16);QString strName = QString("column2LE%1").arg(m_RowCount);QLineEdit* le = this->findChild<QLineEdit*>(strName);if(le){le->setText(QString::number(iiParam1));}
}
串口类 MSerialPortMgr.cpp
步骤1:把寄存器A的值写成0并开启定时器
void MSerialPortMgr::onCalibrationMeasurement()
{onSetRegisterValue(36,"00000000");//先把寄存器A置0sleep(2000);//开启定时器轮询寄存器A是否为1emit sStartCalibrateMeasureTimer(true);
}步骤2:获取寄存器A的值
void MSerialPortMgr::onGetCalibrateMeasureFlag()
{if(!m_serial->isOpen())return;m_iCurViewNum = CURINTERACTIVE_GetCalibrateMeasureFlag;QString strCmd = packCommandRead(36,1);读取36地址1个字节的数据onSendDate(strCmd);
}//串口接收数据函数中判断寄存器A的值是否为1
void MSerialPortMgr::onReadData()
{QByteArray data = m_serial->readAll();QString hexData= data.toHex().toUpper();if(m_iCurViewNum == CURINTERACTIVE_GetCalibrateMeasureFlag){if(data.mid(3,1).toHex().toUpper() == "01"){emit sStartCalibrateMeasureTimer(false);步骤3:关闭定时器emit sStartGetParamsValue();步骤4:读取寄存器B的值}}else if(m_iCurViewNum == CURINTERACTIVE_GetParams){emit sSendParamsToDownLink(data);步骤6:把寄存器B的值发送给UI页面显示}
}步骤5:读取寄存器B的值
void MSerialPortMgr::onGetParamsValue()
{if(!m_serial->isOpen())return;m_iCurViewNum = CURINTERACTIVE_GetParams;QString strCmd = packCommandRead(30,1);onSendDate(strCmd);
}
主窗口类mainwindow.cpp
连接信号和槽
connect(m_pDownLinkView, SIGNAL(sGetParamsValue()),
m_pMSerialPortMgr,  SLOT(onCalibrationMeasurement()),Qt::QueuedConnection);
connect(m_pMSerialPortMgr, SIGNAL(sStartCalibrateMeasureTimer(bool)),this,  SLOT(onCalibrateMeasureTimeOut(bool)), Qt::QueuedConnection);
connect(m_pMSerialPortMgr, SIGNAL(sStartGetParamsValue()),m_pMSerialPortMgr,  SLOT(onGetParamsValue()),Qt::QueuedConnection);
connect(m_pMSerialPortMgr, SIGNAL(sSendParamsToDownLink(QByteArray)),
m_pDownLinkView,SLOT(onReadDownLinkParams(QByteArray)),Qt::QueuedConnection);一个定时器对象     
m_CalibrateMeasureTimer = new QTimer(this);
connect(m_CalibrateMeasureTimer, SIGNAL(timeout()),
m_pMSerialPortMgr, SLOT(onGetCalibrateMeasureFlag())); #定时器超时槽函数  
void MainWindow::onCalibrateMeasureTimeOut(bool start)
{if(start){m_CalibrateMeasureTimer->start(1500);}else{m_CalibrateMeasureTimer->stop();}
}
http://www.dtcms.com/a/541654.html

相关文章:

  • 2025年Java 面试题汇总(含答案解析)
  • 2025年--Lc221--144. 二叉树的前序遍历(递归版)-Java版
  • 生成式AI辅助教学设计的实践探索:从教案生成到教学评价的全流程优化
  • 做网站小程序挣钱吗互联网定制网站
  • 【场景题】List集合去重
  • 最小 k 个数
  • 镇江建网站佛山市城乡住房建设局网站首页
  • LoRA个人理解
  • 网站备案 固定电话做响应网站
  • ROS2系列 (5) : 使用功能包组织C++节点
  • 信创真的能发展的起来吗?
  • 做属于自己公司的网站wordpress微信启动
  • 【教程】Latex简明使用教程
  • 石家庄市建设局网站信息公开免费php网站开发模板
  • 合合肥网站建设威海推广
  • 如何使用 Spring Security 实现细粒度的权限控制?
  • 柯桥教育网站建设深圳南山区网站建设公司
  • 亿赐客网站怎么样北京公司地址推荐
  • 秋招笔记-10.7
  • 2025-10-28 ZYZOJ aoao round 1 hetao1733837的record
  • 在线自助下单网站网站内容包括哪些
  • 企业网站免费模板深圳创意网站建设
  • h5游戏免费下载:弹珠打砖块游戏
  • mysql紧急恢复----gxl
  • 基于springboot的信息化在线教学平台的设计与实现
  • 6.1.3.2 大数据方法论与实践指南-开源大数据实时调度平台(StreamPark)
  • 网站建设mysql数据库电子商务系统的构成
  • C语言入门教程 | 第七讲:函数和程序结构完全指南
  • 佛山网站建设锐艺传播电气毕业设计代做网站
  • h5游戏免费下载:逗比测试