Correct bit change

This commit is contained in:
2025-07-04 02:14:02 +07:00
parent 63cc2ac448
commit b03730d3c9
3 changed files with 25 additions and 12 deletions

View File

@@ -56,6 +56,7 @@ private:
QVector<ColoredSquare*> m_squares;
QVector<int> m_colorIndices;
QVector<int> m_buttonValues; // Add this new member to store button states
QVector<int> m_buttonBits; // Add this new member for button bits
QModbusTcpClient* m_modbusClient;
QPushButton* m_connectButton;

View File

@@ -58,13 +58,17 @@ void Mainwindows::loadConfiguration() {
m_buttonRegisters.clear();
m_indicatorRegisters.clear();
m_buttonBits.clear();
// Load button registers
// Load button registers and bits
for(int i = 1; i <= m_buttonCount; ++i) {
QString buttonKey = QString("button_reg%1").arg(i);
int buttonReg = settings.value(buttonKey, 0).toInt();
if(buttonReg > 0) {
QString buttonRegKey = QString("button_reg%1").arg(i);
QString buttonBitKey = QString("button_bit%1").arg(i);
int buttonReg = settings.value(buttonRegKey, 0).toInt();
int buttonBit = settings.value(buttonBitKey, 0).toInt();
if(buttonReg > 0 && buttonBit >= 0 && buttonBit < 16) {
m_buttonRegisters.append(buttonReg);
m_buttonBits.append(buttonBit);
}
}
@@ -193,9 +197,12 @@ 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[m_buttonValues[i]]);
m_buttonValues[i] = value;
bool bitState = (value >> m_buttonBits[i]) & 1;
m_buttons[i]->setText(QString("Reg %1 Bit %2: %3")
.arg(m_buttonRegisters[i])
.arg(m_buttonBits[i])
.arg(bitState ? "1" : "0"));
break;
}
}
@@ -225,14 +232,16 @@ void Mainwindows::createUIElements() {
// Create UI elements
for(int i = 0; i < rowCount; ++i) {
if (i < m_buttonCount) {
auto* button = new QPushButton(QString("Register %1").arg(m_buttonRegisters[i]), this);
auto* button = new QPushButton(QString("Register %1 Bit %2").arg(m_buttonRegisters[i]).arg(m_buttonBits[i]), this);
m_buttons.append(button);
m_buttonValues.append(0); // Initialize button values
m_buttonValues.append(0);
m_table->setCellWidget(i, 0, button);
connect(button, &QPushButton::clicked, [this, i]() {
m_buttonValues[i] = !m_buttonValues[i]; // Toggle value
QModbusDataUnit writeUnit(QModbusDataUnit::HoldingRegisters, m_buttonRegisters[i], 1);
writeUnit.setValue(0, m_buttonValues[i]);
int currentValue = m_buttonValues[i];
int newValue = currentValue ^ (1 << m_buttonBits[i]); // Toggle specific bit
m_buttonValues[i] = newValue;
writeUnit.setValue(0, newValue);
if (auto *reply = m_modbusClient->sendWriteRequest(writeUnit, 1)) {
if (!reply->isFinished())
connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater);

View File

@@ -9,8 +9,11 @@ timeBetweenPolls=100
buttonCount=3
indicatorCount=4
button_reg1=3
button_bit1=0
button_reg2=4
button_bit2=1
button_reg3=5
button_bit3=2
indicator_reg1=13
indicator_reg2=14
indicator_reg3=15