From 63cc2ac4487046b8c850cf46bc53ca97e3586dc3 Mon Sep 17 00:00:00 2001 From: Alekseev Date: Fri, 4 Jul 2025 02:09:52 +0700 Subject: [PATCH] correct read, change reg --- Inc/mainwindow.h | 1 + Src/mainwindow.cpp | 29 ++++++++++++----------------- 2 files changed, 13 insertions(+), 17 deletions(-) diff --git a/Inc/mainwindow.h b/Inc/mainwindow.h index ee9ac0b..0c992ff 100644 --- a/Inc/mainwindow.h +++ b/Inc/mainwindow.h @@ -55,6 +55,7 @@ private: QVector m_buttons; QVector m_squares; QVector m_colorIndices; + QVector m_buttonValues; // Add this new member to store button states QModbusTcpClient* m_modbusClient; QPushButton* m_connectButton; diff --git a/Src/mainwindow.cpp b/Src/mainwindow.cpp index bbacc4e..95ec666 100644 --- a/Src/mainwindow.cpp +++ b/Src/mainwindow.cpp @@ -139,19 +139,6 @@ void Mainwindows::onPollTimer() { } } -void Mainwindows::writeRegister(int index) { - if (!m_connected) return; - - QModbusDataUnit writeUnit(QModbusDataUnit::HoldingRegisters, m_buttonRegisters[index], 1); - - if (auto *reply = m_modbusClient->sendWriteRequest(writeUnit, 1)) { - if (!reply->isFinished()) - connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); - else - delete reply; - } -} - void Mainwindows::readRegisters() { if (!m_connected) return; @@ -199,7 +186,6 @@ void Mainwindows::onReadReady() { static const QColor colors[] = {Qt::gray, Qt::black, Qt::green}; m_colorIndices[i] = value % 3; m_squares[i]->setColor(colors[m_colorIndices[i]]); - qDebug() << "Indicator" << i << "address:" << address << "value:" << value; break; } } @@ -207,9 +193,9 @@ void Mainwindows::onReadReady() { // Handle buttons for (int i = 0; i < m_buttonRegisters.size(); ++i) { if (address == m_buttonRegisters[i]) { + m_buttonValues[i] = value & 1; // Update stored button value QStringList bName = {"Открыть", "Закрыть"}; - m_buttons[i]->setText(bName[value & 1]); - qDebug() << "Button" << i << "address:" << address << "value:" << value; + m_buttons[i]->setText(bName[m_buttonValues[i]]); break; } } @@ -241,9 +227,18 @@ void Mainwindows::createUIElements() { if (i < m_buttonCount) { auto* button = new QPushButton(QString("Register %1").arg(m_buttonRegisters[i]), this); m_buttons.append(button); + m_buttonValues.append(0); // Initialize button values m_table->setCellWidget(i, 0, button); connect(button, &QPushButton::clicked, [this, i]() { - writeRegister(i); + m_buttonValues[i] = !m_buttonValues[i]; // Toggle value + QModbusDataUnit writeUnit(QModbusDataUnit::HoldingRegisters, m_buttonRegisters[i], 1); + writeUnit.setValue(0, m_buttonValues[i]); + if (auto *reply = m_modbusClient->sendWriteRequest(writeUnit, 1)) { + if (!reply->isFinished()) + connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater); + else + delete reply; + } }); }