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

modbus学习第5天

今天用Qt实现一个可以通过modbus对线圈寄存器--读写单个寄存器和多个寄存器,离散寄存器--读单个和多个寄存器,保持寄存器--读写单个寄存器和多个寄存器,输入寄存器--读单个和多个寄存器的功能,大概是这么个效果,ui设计好了
image

用单例模式设计了一个ModbusMaster的类用于连接从站设备以及对从站设备的读写,防止ui更新和读取数据冲突造成卡顿,用了多线程,今天完成了主站设备和从站设备的连接,明天再完成主站设备对从站设备的读写,整个小程序功能比较单一就不用git管理了

点击查看代码

点击查看代码
#include "ModbusMaster.h"
Q_GLOBAL_STATIC(ModbusMaster, theInstance);
ModbusMaster::ModbusMaster(QObject *parent): QObject(parent), m_isConnect(false), m_modbusCtx(nullptr)
{
}ModbusMaster::~ModbusMaster()
{this->disconnectSlave();if (m_modbusCtx != nullptr) {modbus_free(m_modbusCtx);m_modbusCtx = nullptr;}
}
//获取单例对象
ModbusMaster * ModbusMaster::getInstance()
{return theInstance;
}
//初始化RTU
bool ModbusMaster::initRtu(const QString & portName, int baudRate, char parity, int dataBits, int stopBits)
{QMutexLocker locker(&this->m_mutex);if (this->m_modbusCtx != nullptr){modbus_free(this->m_modbusCtx);this->m_modbusCtx = nullptr;}//创建modbus的RTUthis->m_modbusCtx = modbus_new_rtu(portName.toLocal8Bit().data(), baudRate, parity, dataBits, stopBits);if (this->m_modbusCtx == nullptr){QMessageBox::information(nullptr, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("初始化RTU失败"));return false;}modbus_set_response_timeout(this->m_modbusCtx, 3, 0);//设置超时3sQMessageBox::information(nullptr, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("初始化RTU成功"));return true;
}
//连接串口
bool ModbusMaster::connectSlave()
{QMutexLocker locker(&this->m_mutex);if (this->m_modbusCtx == nullptr){QMessageBox::information(nullptr, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("未初始化RTU"));return false;}if (this->m_isConnect){qDebug() << "已连接从站,不需要再次连接";return true;}int ret = modbus_connect(this->m_modbusCtx);//串口打开了,没有被占用if (ret == -1){QMessageBox::information(nullptr, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("串口打开失败"));return false;}this->m_isConnect = true;return true;
}
//设置从站地址
void ModbusMaster::setSlaveId(int slaveId)
{QMutexLocker locker(&this->m_mutex);if (this->m_modbusCtx != nullptr){modbus_set_slave(this->m_modbusCtx, slaveId);qDebug() << "从站地址为" << slaveId;uint16_t testData[1] = { 0 };// 读地址0的保持寄存器(功能码03),需和从站模拟器配置的地址匹配int readRet = modbus_read_registers(m_modbusCtx, 0, 1, testData);if (readRet == -1){QString errMsg = QString::fromLocal8Bit("串口已打开,但从站(ID=%1)无响应:%2").arg(slaveId).arg(modbus_strerror(errno));QMessageBox::warning(nullptr, QString::fromLocal8Bit("提示"), errMsg);// 串口已打开,需关闭modbus_close(this->m_modbusCtx);this->m_isConnect = false;return;}}else{QMessageBox::information(nullptr, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("未初始化RTU"));}
}
//断开连接
void ModbusMaster::disconnectSlave()
{QMutexLocker locker(&this->m_mutex);if ((this->m_modbusCtx == nullptr) && this->m_isConnect){QMessageBox::information(nullptr, QString::fromLocal8Bit("提示"), QString::fromLocal8Bit("初始化失败,无法断开连接"));return;}modbus_close(this->m_modbusCtx);this->m_isConnect = false;QMessageBox::information(nullptr, QString::fromLocal8Bit("提示"),QString::fromLocal8Bit("已断开"));
}
明天中午还约了个面试……赶快结束吧,让我考研上岸,再找个好实习
http://www.jsqmd.com/news/346837/

相关文章:

  • 别再用“雌竞变现”去曲解女性的出片行为了
  • 计算机毕业设计springboot租房数据可视化系统 基于SpringBoot的房屋租赁信息智能分析与展示平台 Java Web驱动的城市租房数据挖掘与可视化管理系统
  • SQLite并发锁问题解决方案
  • PCIe的中断机制
  • 提示工程架构师必备:制定实施计划的6个法律合规要点,避免踩红线
  • azerothCode-更改任务语言显示
  • PWA 渐进式Web应用(Progressive Web App)快应用、离线应用(用Web技术构建原生应用体验网站)manifest.json、Service Worker、Instant App
  • ue 不同版本兼容性测试总结
  • 学术写作效率革命!2026 高精准度 AI 论文写作工具推荐指南
  • SameSite=Lax属性(前端Set-Cookie属性)(跨站链接跳转保留登录态、防御跨站请求POST CSRF、防御跨站请求资源CSRF)子资源请求、安全铁三角HttpOnlySecure
  • 价值投资者如何看待并购和分拆
  • 如何用AR虚拟形象打造开发者IP?2026元宇宙营销
  • CSRF(Cross-site Request Forgery)跨站请求伪造攻击(浏览器自动携带同源Cookie机制)与XSS攻击区别、现代网站安全模板、sameSite、Referer校验
  • 端小白也能搞定:CSS文字横向无缝滚动+悬停暂停(附实测代码)
  • 【后端】【工具】从 “Vibe PPT“ 到 “蕉幻“:一个原生 AI PPT 生成应用的深度解析 - 教程
  • 2025四川最新合同纠纷/经济纠纷律所TOP10推荐:优质律师事务所权威榜单发布,精准解决各类商事争议 - 品牌推荐2026
  • 题解:CF251D Two Sets
  • 「雜記」 Hello World
  • P5788 【模板】单调栈
  • 2026年烘干机厂家权威推荐榜:矿石烘干机/不锈钢除尘器/双筒烘干机/锂矿烘干机/镍矿烘干机/三筒烘干机/袋式除尘器/选择指南 - 优质品牌商家
  • 2026四川最新婚姻财产分割/离婚律师事务所TOP10推荐:专业律所权威榜单发布,专业助力婚姻权益保障 - 品牌推荐2026
  • CAI:人机协作的模块化网络安全AI框架
  • 愿我们都能摆脱“无聊焦虑”,把闲下来的时光,过成自己喜欢的样子
  • 设置echo输出的颜色
  • 2026最新成都房产纠纷律师事务所TOP9推荐:优质权威律所榜单发布,专业高效护航房产权益 - 品牌推荐2026
  • 医疗数字化真正难的不是做 App,而是把“合规、数据和 AI”放进同一套系统
  • 零基础3个月转行大数据:我的自学笔记+面试经验,成功拿到字节offer
  • echo 怎么设置不换行
  • CAD插件注册表路径
  • 字母文字的焦虑:当汉字成了文明发展的“高效操作系统”