refactor
This commit is contained in:
@@ -5,13 +5,10 @@
|
||||
#include <QThread>
|
||||
#include <QPainter>
|
||||
#include <QSettings>
|
||||
#include "mainwindow.h"
|
||||
#include <QCoreApplication>
|
||||
#include <QModbusTcpClient>
|
||||
#include <QModbusDataUnit>
|
||||
#include <QUrl>
|
||||
#include <QMessageBox>
|
||||
#include <QDebug>
|
||||
#include "mainwindow.h"
|
||||
#include <QCoreApplication>
|
||||
|
||||
ColoredSquare::ColoredSquare(QWidget *parent) : QWidget(parent), m_color(Qt::gray) {
|
||||
}
|
||||
@@ -117,6 +114,8 @@ void MainWindows::loadConfiguration() {
|
||||
}
|
||||
|
||||
void MainWindows::initModbusConnection() {
|
||||
delete m_modbusClient;
|
||||
|
||||
m_modbusClient = new QModbusTcpClient(this);
|
||||
|
||||
// Set timeouts
|
||||
@@ -125,11 +124,13 @@ void MainWindows::initModbusConnection() {
|
||||
m_modbusClient->setTimeout(m_responseTimeout);
|
||||
m_modbusClient->setNumberOfRetries(1);
|
||||
|
||||
connect(m_modbusClient, &QModbusClient::stateChanged,
|
||||
connect(m_modbusClient, &QModbusDevice::stateChanged,
|
||||
this, &MainWindows::onStateChanged);
|
||||
|
||||
// Initialize poll timer
|
||||
m_pollTimer = new QTimer(this);
|
||||
if (!m_pollTimer) {
|
||||
m_pollTimer = new QTimer(this);
|
||||
}
|
||||
m_pollTimer->setInterval(m_pollInterval);
|
||||
connect(m_pollTimer, &QTimer::timeout, this, &MainWindows::onPollTimer);
|
||||
}
|
||||
@@ -213,13 +214,15 @@ void MainWindows::readRegisters() {
|
||||
}
|
||||
|
||||
void MainWindows::onReadReady() {
|
||||
auto reply = qobject_cast<QModbusReply *>(sender());
|
||||
auto* reply = qobject_cast<QModbusReply*>(sender());
|
||||
if (!reply) return;
|
||||
|
||||
if (reply->error() == QModbusDevice::NoError) {
|
||||
std::unique_ptr<QModbusReply> replyPtr(reply); // Автоматическое освобождение памяти
|
||||
|
||||
if (replyPtr->error() == QModbusDevice::NoError) {
|
||||
m_responseCounter++;
|
||||
updateStatusBar();
|
||||
const QModbusDataUnit unit = reply->result();
|
||||
const QModbusDataUnit unit = replyPtr->result();
|
||||
int address = unit.startAddress();
|
||||
int value = unit.value(0);
|
||||
|
||||
@@ -257,7 +260,6 @@ void MainWindows::onReadReady() {
|
||||
}
|
||||
}
|
||||
}
|
||||
reply->deleteLater();
|
||||
}
|
||||
|
||||
void MainWindows::createUIElements() {
|
||||
@@ -302,21 +304,22 @@ void MainWindows::createUIElements() {
|
||||
if (i < m_buttonCount) {
|
||||
auto* button = new QPushButton(QString("Register %1 Bit %2").arg(m_buttonRegisters[i]).arg(m_buttonBits[i]), this);
|
||||
button->setFont(tableFont);
|
||||
button->setCheckable(true); // Делаем кнопку переключаемой
|
||||
button->setCheckable(true);
|
||||
m_buttons.append(button);
|
||||
m_buttonValues.append(0);
|
||||
m_table->setCellWidget(i, 1, button);
|
||||
connect(button, &QPushButton::clicked, [this, i]() {
|
||||
connect(button, &QPushButton::clicked, this, [this, i]() {
|
||||
QModbusDataUnit writeUnit(QModbusDataUnit::HoldingRegisters, m_buttonRegisters[i], 1);
|
||||
int currentValue = m_buttonValues[i];
|
||||
int newValue = currentValue ^ (1 << m_buttonBits[i]); // Toggle specific bit
|
||||
int newValue = currentValue ^ (1 << m_buttonBits[i]);
|
||||
m_buttonValues[i] = newValue;
|
||||
writeUnit.setValue(0, newValue);
|
||||
if (auto *reply = m_modbusClient->sendWriteRequest(writeUnit, 1)) {
|
||||
if (!reply->isFinished())
|
||||
if (auto* reply = m_modbusClient->sendWriteRequest(writeUnit, 1)) {
|
||||
if (!reply->isFinished()) {
|
||||
connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater);
|
||||
else
|
||||
} else {
|
||||
delete reply;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -357,7 +360,7 @@ void MainWindows::createUIElements() {
|
||||
setFixedSize(totalWidth, totalHeight);
|
||||
}
|
||||
|
||||
void MainWindows::updateStatusBar() {
|
||||
void MainWindows::updateStatusBar() const {
|
||||
QString status = QString("IP: %1 Port: %2 | Requests: %3 Responses: %4")
|
||||
.arg(m_ipAddress)
|
||||
.arg(m_port)
|
||||
|
||||
Reference in New Issue
Block a user