From 5ae694d254abdfee98d9ff590daf6ca3071499de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D1=8F=D1=87=D0=B5=D1=81=D0=BB=D0=B0=D0=B2=20=D0=A8?= =?UTF-8?q?=D1=82=D0=B5=D0=B9=D0=B1=D0=B5=D0=B7=D0=B0=D0=BD=D0=B4=D1=82?= Date: Thu, 16 Oct 2025 08:41:49 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B0=D0=BB=D0=B3=D0=BE=D1=80=D0=B8=D1=82?= =?UTF-8?q?=D0=BC=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D0=BA=D0=BE=D1=80=D1=80?= =?UTF-8?q?=D0=B5=D0=BA=D1=82=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BE=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D1=81=D0=B0=20=D1=87=D0=B5=D1=82=D0=B2=D1=91=D1=80=D1=82?= =?UTF-8?q?=D0=BE=D0=B9=20=D0=BF=D0=BB=D0=B0=D1=82=D1=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- M3KTE_TERM/m3kte.cpp | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/M3KTE_TERM/m3kte.cpp b/M3KTE_TERM/m3kte.cpp index 7460c6e..720d3bf 100644 --- a/M3KTE_TERM/m3kte.cpp +++ b/M3KTE_TERM/m3kte.cpp @@ -359,12 +359,12 @@ M3KTE::M3KTE(QWidget *parent) ui->writeTable->addItem(tr("Warnings"), QModbusDataUnit::HoldingRegisters); ui->writeTable->addItem(tr("Accidents"), QModbusDataUnit::HoldingRegisters); for(int i = 0; i < 4; i++) { - Boards[i].ModbusModelCoil = new WriteRegisterModel(this, 85 - (i/4*20), false); + Boards[i].ModbusModelCoil = new WriteRegisterModel(this, 85 - (i/3*20), false); Boards[i].ModbusModelCoil->setStartAddress(0); - Boards[i].ModbusModelCoil->setNumberOfValues(QString::number(85-(i/4*20))); - Boards[i].ModbusModelHoldingReg = new WriteRegisterModel(this, (85 - (i/4*20))*2, true); + Boards[i].ModbusModelCoil->setNumberOfValues(QString::number(85-(i/3*20))); + Boards[i].ModbusModelHoldingReg = new WriteRegisterModel(this, (85 - (i/3*20))*2, true); Boards[i].ModbusModelHoldingReg->setStartAddress(0); - Boards[i].ModbusModelHoldingReg->setNumberOfValues(QString::number(85-(i/4*20))); + Boards[i].ModbusModelHoldingReg->setNumberOfValues(QString::number(85-(i/3*20))); } m_deviceSettingsDialog = new DeviceSettingsDialog(this); m_debugTerminalDialog = new DebugTerminalDialog(this); @@ -1371,12 +1371,12 @@ bool M3KTE::pingNetworkDevices() modbusDevice->setTimeout(m_settingsDialog->settings().responseTime); bar->setLabelText(tr("Считывание текущих настроек...")); bar->setRange(0, CurrentConnectedDevice*3); - QModbusDataUnit* _unit_settings[3]; - _unit_settings[0] = new QModbusDataUnit(QModbusDataUnit::Coils, 0, 85); - _unit_settings[1] = new QModbusDataUnit(QModbusDataUnit::HoldingRegisters, 0, 85); - _unit_settings[2] = new QModbusDataUnit(QModbusDataUnit::HoldingRegisters, 85, 85); for(int i = 0; i < 4; i++) { if(Boards[i].isActive) { + QModbusDataUnit* _unit_settings[3]; + _unit_settings[0] = new QModbusDataUnit(QModbusDataUnit::Coils, 0, 85-(i/3*20)); + _unit_settings[1] = new QModbusDataUnit(QModbusDataUnit::HoldingRegisters, 0, 85-(i/3*20)); + _unit_settings[2] = new QModbusDataUnit(QModbusDataUnit::HoldingRegisters, 85, 85-(i/3*20)); Boards_Fields[i]->setEnabled(true); for(int j = 0; j < 3; j++) { bar->setValue(i*3+j); @@ -1384,6 +1384,9 @@ bool M3KTE::pingNetworkDevices() onConnectClicked(); bar->close(); bar->deleteLater(); + delete _unit_settings[0]; + delete _unit_settings[1]; + delete _unit_settings[2]; return false; } auto *reply = modbusDevice->sendReadRequest(*_unit_settings[j], Boards[i].adr); @@ -1391,6 +1394,9 @@ bool M3KTE::pingNetworkDevices() onConnectClicked(); bar->close(); bar->deleteLater(); + delete _unit_settings[0]; + delete _unit_settings[1]; + delete _unit_settings[2]; return false; } while(!reply->isFinished()) { @@ -1400,6 +1406,9 @@ bool M3KTE::pingNetworkDevices() onConnectClicked(); bar->close(); bar->deleteLater(); + delete _unit_settings[0]; + delete _unit_settings[1]; + delete _unit_settings[2]; return false; } QCoreApplication::processEvents(); @@ -1413,10 +1422,16 @@ bool M3KTE::pingNetworkDevices() bar->close(); bar->deleteLater(); onConnectClicked(); + delete _unit_settings[0]; + delete _unit_settings[1]; + delete _unit_settings[2]; return false; } } Boards_Fields[i]->setTitle(QString("Плата №%1 (ID %2)").arg(i+1).arg(Boards[i].adr)); + delete _unit_settings[0]; + delete _unit_settings[1]; + delete _unit_settings[2]; } } modbusDevice->setNumberOfRetries(m_settingsDialog->settings().numberOfRetries); @@ -1464,7 +1479,7 @@ void M3KTE::boardScan(unsigned boardID) StatusReg.AllReg = reply->result().value(0); // Запрос полных данных - QModbusDataUnit dataUnit(QModbusDataUnit::InputRegisters, 0, 85); + QModbusDataUnit dataUnit(QModbusDataUnit::InputRegisters, 0, 85-(boardID/3*20)); if (auto *dataReply = modbusDevice->sendReadRequest(dataUnit, Boards[boardID].adr)) { Boards[boardID].timerToDataResponse.start(); @@ -1544,7 +1559,7 @@ void M3KTE::displayResultOfScan(QModbusReply *reply, int boardID, int status) bool W_Flag = false; bool A_Flag = false; - if(unit.startAddress() != 0 || unit.valueCount() != 85) { + if(unit.startAddress() != 0 || unit.valueCount() != (unsigned)(85-(boardID/3*20))) { logError(tr("Плата %1 (ID %2)").arg(boardID+1).arg(Boards[boardID].adr), "Ошибка при приёме.", ++Boards[boardID].error_RX, tr("Принятый ответ: Стартовый адрес %1, Количество элементов %2").arg(unit.startAddress()).arg(unit.valueCount()));