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