#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_mConBtn_clicked()
{
QString strText= ui->mConBtn->text();
if(strText == QStringLiteral("连接"))//**若点击了连接按钮
{
//Modbus TCP
//new 主站对象
master = new QModbusTcpClient();
//走的网络,设置IP与端口
master->setConnectionParameter(
QModbusDevice::NetworkAddressParameter, "192.168.31.45" );
master->setConnectionParameter(
QModbusDevice::NetworkPortParameter, "502");
//**设置连接超时时间50ms
master->setTimeout(50);
//失败后禁用重发
master->setNumberOfRetries(0);
//连接信号槽
connect(master, &QModbusDevice::stateChanged ,this ,[this]()
{
//成连接状态了
if(master->state() == QModbusDevice::ConnectedState)
{
ui->mConBtn->setText(QStringLiteral("断开"));
//ui->statusbar->showMessage("Connect Success!",3000);
Flag_Connect=1;//已连接了
qDebug()<<"设备已连接了";
}
else
{
ui->mConBtn->setText(QStringLiteral("连接"));
Flag_Connect=0;//已断开了
qDebug()<<"设备已断开了";
}
});
// 设备发生错误时信号、槽
connect(master, &QModbusClient::errorOccurred, [this](QModbusDevice::Error)
{
//statusBar()->showMessage(master->errorString(), 3000);
ui->mConBtn->setText(QStringLiteral("连接"));
Flag_Connect=0;//已断开了
qDebug()<<"设备已断开了";
});
//连接设备
master->connectDevice();
qDebug()<<QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss:zzz");
//打开定时轮询的定时器
Timer=new QTimer();
Timer->setTimerType(Qt::PreciseTimer);
Timer->setInterval(500);
Timer->start();
connect(Timer, &QTimer::timeout, this, [=]()
{
qDebug()<<"MODBUS TCP定时器在运行";
qDebug()<<"Flag_Connect"<<Flag_Connect;
//发现问题,大概要50s-60s才能重连上? 但是我用modbus助手,10s左右就能重连
if(Flag_Connect==0)
{master->connectDevice();qDebug()<<"触发一次MODBUS TCP重连";return;}
else if(Flag_Connect==1)
{
QModbusDataUnit Data(QModbusDataUnit::HoldingRegisters,0,10);
QModbusReply* reply=master->sendReadRequest(Data,1);
if (!reply->isFinished())
connect(reply, &QModbusReply::finished, this, &Widget::readReady);
else
delete reply;
}
});
}
else
{
if(master)
{
//断开连接
Timer->stop();
master->disconnectDevice();
delete master;
master = nullptr;
}
}
}
void Widget::readReady()
{
auto reply = qobject_cast<QModbusReply *>(sender());
qDebug()<<reply->result().values();
qDebug()<<QDateTime::currentDateTime().toString("yyyy-MM-dd HH:mm:ss:zzz");
}

莫听穿林打叶声儿
- 粉丝: 1719
最新资源
- (源码)基于Jekyll框架的个人博客系统.zip
- 公路隧道照明节能控制软件方案及实现硕士研究生学位论文.doc
- 夜大学软件工程导论习题答案.doc
- 小型物业管理系统数据库课程设计方案31802.doc
- 整套完整的施工进度网络图.doc
- STC单片机太阳能LED路灯控制器设计方案.doc
- (用友)审计软件应用课程实验报告记录.doc
- 增强学习在图像识别中-洞察研究.docx
- 2012年通信中级工程师考试习题-传输与接入(超级整理版).doc
- 互联网电视行业现状分析及市场前景.doc
- 企业计算机网络维护方案.doc
- (源码)基于C++和Arduino的NexDome望远镜控制系统.zip
- 和初学者谈谈如何学好单片机编程技术.doc
- 城市商业银行网络系统规划与设计.doc
- PLC工业控制的毕业设计.doc
- 智能照明控制系统与楼宇自控系统集成的实现.docx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



评论0