diff --git a/Debug/debug/M3KTE_TERM.exe b/Debug/debug/M3KTE_TERM.exe index d15126b..ec7b5ae 100644 Binary files a/Debug/debug/M3KTE_TERM.exe and b/Debug/debug/M3KTE_TERM.exe differ diff --git a/M3KTE_TERM/M3KTE_TERM.pro b/M3KTE_TERM/M3KTE_TERM.pro index dc723b7..07b0401 100644 --- a/M3KTE_TERM/M3KTE_TERM.pro +++ b/M3KTE_TERM/M3KTE_TERM.pro @@ -16,8 +16,8 @@ CONFIG += c++11 # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS -TEMPLATE = lib -DEFINES += M3KTE_LIBRARY +#TEMPLATE = lib +#DEFINES += M3KTE_LIBRARY # You can also make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. @@ -52,11 +52,11 @@ FORMS += \ settingsdialog.ui # Default rules for deployment. -#qnx: target.path = /tmp/$${TARGET}/bin -#else: unix:!android: target.path = /opt/$${TARGET}/bin -#!isEmpty(target.path): INSTALLS += target - -unix { - target.path = /usr/lib -} +qnx: target.path = /tmp/$${TARGET}/bin +else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += target + +#unix { +# target.path = /usr/lib +#} +#!isEmpty(target.path): INSTALLS += target diff --git a/M3KTE_TERM/devicesettingsdialog.cpp b/M3KTE_TERM/devicesettingsdialog.cpp index 89caebf..5a43c68 100644 --- a/M3KTE_TERM/devicesettingsdialog.cpp +++ b/M3KTE_TERM/devicesettingsdialog.cpp @@ -130,6 +130,8 @@ void DeviceSettingsDialog::on_buttonBox_clicked(QAbstractButton *button) case QDialogButtonBox::AcceptRole: close(); break; + default: + break; } } @@ -152,5 +154,12 @@ void DeviceSettingsDialog::on_buttonApplyChangePoll_clicked() void DeviceSettingsDialog::on_idPollComboBox_currentIndexChanged(int index) { + Q_UNUSED(index); ui->pollStatusBox->setCurrentIndex(_currentPollStatus[ui->idPollComboBox->currentData().toUInt()]); } + +void DeviceSettingsDialog::onDisconnect() +{ + ui->idComboBox->clear(); + ui->idPollComboBox->clear(); +} diff --git a/M3KTE_TERM/devicesettingsdialog.h b/M3KTE_TERM/devicesettingsdialog.h index 0729128..4c7d482 100644 --- a/M3KTE_TERM/devicesettingsdialog.h +++ b/M3KTE_TERM/devicesettingsdialog.h @@ -53,6 +53,7 @@ public: void updateSettingsAfterConnection(unsigned tmp_speed, unsigned tmp_parity, unsigned *tmp_adr, bool *ActiveDevices); void updatePollStatus(unsigned boardID, bool status); void initPollForBoard(unsigned boardID, unsigned boardAdr); + void onDisconnect(); signals: void parityChanged(); void speedChanged(); diff --git a/M3KTE_TERM/devicesettingsdialog.ui b/M3KTE_TERM/devicesettingsdialog.ui index b9c9846..5289c1f 100644 --- a/M3KTE_TERM/devicesettingsdialog.ui +++ b/M3KTE_TERM/devicesettingsdialog.ui @@ -279,12 +279,12 @@ - Вкл + Выкл - Выкл + Вкл diff --git a/M3KTE_TERM/lineringer.cpp b/M3KTE_TERM/lineringer.cpp index 52b0477..4422eb9 100644 --- a/M3KTE_TERM/lineringer.cpp +++ b/M3KTE_TERM/lineringer.cpp @@ -282,6 +282,7 @@ void LineRinger::on_ringButton_clicked() break; } currentBaudRate = ui->baudRateBox->itemText(i).toUInt(nullptr, 10); + bar->setLabelText(tr("Поиск устройств... Текущая скорость: %1").arg(currentBaudRate)); if(lineCall() == callStatus::INTERRUPT) { QMessageBox::warning(this, "Уведомление", QString("Досрочное завершение опроса. Найдено %1 устройств.").arg(devicesList.count())); diff --git a/M3KTE_TERM/m3kte.cpp b/M3KTE_TERM/m3kte.cpp index 5dc19c3..07d6609 100644 --- a/M3KTE_TERM/m3kte.cpp +++ b/M3KTE_TERM/m3kte.cpp @@ -419,14 +419,14 @@ M3KTE::M3KTE(QWidget *parent) Boards[2].timerData = ui->timeData_3; Boards[3].timerData = ui->timeData_4; - for (int i = 0; i < 4; i++) { + for(int i = 0; i < 4; i++) { statusM3KTE.Warnings[i] = false; statusM3KTE.Accidents[i] = false; Boards_Fields[i]->setEnabled(false); Boards[i].timerData->setText(" "); Boards[i].timerStatus->setText(" ");; } - for (int i = 0; i < 5; i++) + for(int i = 0; i < 5; i++) { ui->writeValueTable->resizeColumnToContents(i); } @@ -446,7 +446,7 @@ M3KTE::M3KTE(QWidget *parent) ThePhantomMenace[i]->setFlat(true); ThePhantomMenace[i]->setPalette(QPalette(tb, tb, tb, tb, tb, tb, tb, tb, tb)); connect(ThePhantomMenace[i], &QPushButton::clicked, this, [this, i]() { - selectPositionOnTree(i); + selectPositionOnTree(i); }); } connect(m_deviceSettingsDialog, &DeviceSettingsDialog::parityChanged, this, &M3KTE::onParityUpdate); @@ -456,10 +456,10 @@ M3KTE::M3KTE(QWidget *parent) ui->loggerWidget->layout()->addWidget(loggerTable); loggerTable->setColumnCount(5); QStringList headers; - headers << "Время" << "Плата" << "Тип ошибки" << "Счётчик" << "Примечание"; - loggerTable->setHorizontalHeaderLabels(headers); - loggerTable->setSortingEnabled(true); - loggerTable->setAutoScroll(true); + headers << "Время" << "Плата" << "Тип ошибки" << "Счётчик" << "Примечание"; + loggerTable->setHorizontalHeaderLabels(headers); + loggerTable->setSortingEnabled(true); + loggerTable->setAutoScroll(true); } M3KTE::~M3KTE() @@ -498,25 +498,25 @@ void M3KTE::initActions() void M3KTE::onConnectClicked() { - if (!modbusDevice) + if(!modbusDevice) return; statusBar()->clearMessage(); - if (modbusDevice->state() != QModbusDevice::ConnectedState) { - modbusDevice->setConnectionParameter(QModbusDevice::SerialPortNameParameter, - m_settingsDialog->settings().portName); + if(modbusDevice->state() != QModbusDevice::ConnectedState) { + modbusDevice->setConnectionParameter(QModbusDevice::SerialPortNameParameter, + m_settingsDialog->settings().portName); #if QT_CONFIG(modbus_serialport) - modbusDevice->setConnectionParameter(QModbusDevice::SerialParityParameter, - m_settingsDialog->settings().parity); - modbusDevice->setConnectionParameter(QModbusDevice::SerialBaudRateParameter, - m_settingsDialog->settings().baud); - modbusDevice->setConnectionParameter(QModbusDevice::SerialDataBitsParameter, - m_settingsDialog->settings().dataBits); - modbusDevice->setConnectionParameter(QModbusDevice::SerialStopBitsParameter, - m_settingsDialog->settings().stopBits); + modbusDevice->setConnectionParameter(QModbusDevice::SerialParityParameter, + m_settingsDialog->settings().parity); + modbusDevice->setConnectionParameter(QModbusDevice::SerialBaudRateParameter, + m_settingsDialog->settings().baud); + modbusDevice->setConnectionParameter(QModbusDevice::SerialDataBitsParameter, + m_settingsDialog->settings().dataBits); + modbusDevice->setConnectionParameter(QModbusDevice::SerialStopBitsParameter, + m_settingsDialog->settings().stopBits); #endif modbusDevice->setTimeout(m_settingsDialog->settings().responseTime); modbusDevice->setNumberOfRetries(m_settingsDialog->settings().numberOfRetries); - if (!modbusDevice->connectDevice()) { + if(!modbusDevice->connectDevice()) { statusBar()->showMessage(tr("Connect failed: ") + modbusDevice->errorString(), 5000); } else { ui->ConnectionMenuConnect->setEnabled(false); @@ -525,7 +525,7 @@ void M3KTE::onConnectClicked() { unsigned tmp_adr[4]; bool ActiveDevices[4]; - for (int i = 0; i < 4; i++) { + for(int i = 0; i < 4; i++) { tmp_adr[i] = Boards[i].adr; ActiveDevices[i] = Boards[i].isActive; } @@ -559,7 +559,7 @@ void M3KTE::onConnectClicked() Boards[i].ModbusModelHoldingReg->m_holdingRegisters[j] = 0; Boards[i].ModbusModelHoldingReg->m_holdingRegisters[j + (85 - (i/3*20))] = 0; } - Boards_Fields[i]->setTitle(QString("Плата №%1").arg(i)); + Boards_Fields[i]->setTitle(QString("Плата №%1").arg(i+1)); Boards[i].timerData->setText(" ");; Boards[i].timerStatus->setText(" ");; } @@ -584,16 +584,17 @@ void M3KTE::onConnectClicked() ui->BSM_Accident->setEnabled(false); ui->BSM_WorkInProgress->setEnabled(false); ui->M3kteRegSettings->setEnabled(false); + m_deviceSettingsDialog->onDisconnect(); } } void M3KTE::onReadButtonClicked() { - if (!modbusDevice) + if(!modbusDevice) return; statusBar()->clearMessage(); - if (auto *reply = modbusDevice->sendReadRequest(readRequest(), Boards[ui->boardSelectBox->currentIndex()].adr)) { - if (!reply->isFinished()) + if(auto *reply = modbusDevice->sendReadRequest(readRequest(), Boards[ui->boardSelectBox->currentIndex()].adr)) { + if(!reply->isFinished()) connect(reply, &QModbusReply::finished, this, &M3KTE::onReadReady); else delete reply; // broadcast replies return immediately @@ -605,7 +606,7 @@ void M3KTE::onReadButtonClicked() void M3KTE::onReadReady() { auto reply = qobject_cast(sender()); - if (!reply) + if(!reply) return; int Adr = 255; for(int i = 0; i < 4; i++) @@ -616,16 +617,16 @@ void M3KTE::onReadReady() break; } } - if (reply->error() == QModbusDevice::NoError) { + if(reply->error() == QModbusDevice::NoError) { const QModbusDataUnit unit = reply->result(); - for (int i = 0, total = int(unit.valueCount()); i < total; ++i) { + for(int i = 0, total = int(unit.valueCount()); i < total; ++i) { if(unit.registerType() == QModbusDataUnit::Coils) { Boards[Adr].coil[i + unit.startAddress()] = unit.value(i); if(unit.value(i)==1) Boards[Adr].ModbusModelCoil->setData(ui->writeValueTable->model()->index(i + unit.startAddress(), 2), Qt::Checked, Qt::CheckStateRole); else - Boards[Adr].ModbusModelCoil->setData(ui->writeValueTable->model()->index(i + unit.startAddress(), 2), Qt::Unchecked, Qt::CheckStateRole); + Boards[Adr].ModbusModelCoil->setData(ui->writeValueTable->model()->index(i + unit.startAddress(), 2), Qt::Unchecked, Qt::CheckStateRole); } else if(unit.registerType() == QModbusDataUnit::HoldingRegisters) { @@ -633,10 +634,22 @@ void M3KTE::onReadReady() Boards[Adr].ModbusModelHoldingReg->setData(ui->writeValueTable->model()->index(i + unit.startAddress(), 3), QString::number(unit.value(i), 16), Qt::EditRole); } } - } else if (reply->error() == QModbusDevice::ProtocolError) { + switch(unit.registerType()) { + case QModbusDataUnit::Coils: + Boards[Adr].ModbusModelCoil->dataChanged(ui->writeValueTable->model()->index(unit.startAddress(), 2), + ui->writeValueTable->model()->index(unit.startAddress() + unit.valueCount() -1, 2)); + break; + case QModbusDataUnit::HoldingRegisters: + Boards[Adr].ModbusModelHoldingReg->dataChanged(ui->writeValueTable->model()->index(unit.startAddress(), 3), + ui->writeValueTable->model()->index(unit.startAddress() + unit.valueCount() -1, 3)); + break; + default: + break; + } + } else if(reply->error() == QModbusDevice::ProtocolError) { statusBar()->showMessage(tr("Read response error: %1 (Mobus exception: 0x%2)"). - arg(reply->errorString()). - arg(reply->rawResult().exceptionCode(), -1, 16), 5000); + arg(reply->errorString()). + arg(reply->rawResult().exceptionCode(), -1, 16), 5000); unsigned newRow = loggerTable->rowCount(); loggerTable->insertRow(newRow); loggerTable->setItem(newRow, 0, new QTableWidgetItem((QTime::currentTime().toString("HH:mm:ss")))); @@ -649,8 +662,8 @@ void M3KTE::onReadReady() loggerTable->verticalScrollBar()->setSliderPosition(loggerTable->verticalScrollBar()->maximum()); } else { statusBar()->showMessage(tr("Read response error: %1 (code: 0x%2)"). - arg(reply->errorString()). - arg(reply->error(), -1, 16), 5000); + arg(reply->errorString()). + arg(reply->error(), -1, 16), 5000); unsigned newRow = loggerTable->rowCount(); loggerTable->insertRow(newRow); loggerTable->setItem(newRow, 0, new QTableWidgetItem((QTime::currentTime().toString("HH:mm:ss")))); @@ -667,13 +680,13 @@ void M3KTE::onReadReady() void M3KTE::onWriteButtonClicked() { - if (!modbusDevice) + if(!modbusDevice) return; statusBar()->clearMessage(); QModbusDataUnit writeUnit = writeRequest(); QModbusDataUnit::RegisterType table = writeUnit.registerType(); - for (int i = 0, total = int(writeUnit.valueCount()); i < total; ++i) { - if (table == QModbusDataUnit::Coils) + for(int i = 0, total = int(writeUnit.valueCount()); i < total; ++i) { + if(table == QModbusDataUnit::Coils) { Boards[ui->boardSelectBox->currentIndex()].coil[i+writeUnit.startAddress()] = Boards[ui->boardSelectBox->currentIndex()].ModbusModelCoil->m_coils[i + writeUnit.startAddress()]; writeUnit.setValue(i, Boards[ui->boardSelectBox->currentIndex()].ModbusModelCoil->m_coils[i + writeUnit.startAddress()]); @@ -684,14 +697,14 @@ void M3KTE::onWriteButtonClicked() writeUnit.setValue(i, Boards[ui->boardSelectBox->currentIndex()].ModbusModelHoldingReg->m_holdingRegisters[i + writeUnit.startAddress()]); } } - if (auto *reply = modbusDevice->sendWriteRequest(writeUnit, Boards[ui->boardSelectBox->currentIndex()].adr)) { - if (!reply->isFinished()) { + if(auto *reply = modbusDevice->sendWriteRequest(writeUnit, Boards[ui->boardSelectBox->currentIndex()].adr)) { + if(!reply->isFinished()) { unsigned tmp_id = ui->boardSelectBox->currentIndex(); connect(reply, &QModbusReply::finished, this, [this, reply, tmp_id]() { - if (reply->error() == QModbusDevice::ProtocolError) { + if(reply->error() == QModbusDevice::ProtocolError) { statusBar()->showMessage(tr("Write response error: %1 (Mobus exception: 0x%2)") - .arg(reply->errorString()).arg(reply->rawResult().exceptionCode(), -1, 16), - 5000); + .arg(reply->errorString()).arg(reply->rawResult().exceptionCode(), -1, 16), + 5000); unsigned newRow = loggerTable->rowCount(); loggerTable->insertRow(newRow); loggerTable->setItem(newRow, 0, new QTableWidgetItem((QTime::currentTime().toString("HH:mm:ss")))); @@ -702,9 +715,9 @@ void M3KTE::onWriteButtonClicked() loggerTable->resizeColumnsToContents(); if(!loggerTable->verticalScrollBar()->isSliderDown()) loggerTable->verticalScrollBar()->setSliderPosition(loggerTable->verticalScrollBar()->maximum()); - } else if (reply->error() != QModbusDevice::NoError) { + } else if(reply->error() != QModbusDevice::NoError) { statusBar()->showMessage(tr("Write response error: %1 (code: 0x%2)"). - arg(reply->errorString()).arg(reply->error(), -1, 16), 5000); + arg(reply->errorString()).arg(reply->error(), -1, 16), 5000); unsigned newRow = loggerTable->rowCount(); loggerTable->insertRow(newRow); loggerTable->setItem(newRow, 0, new QTableWidgetItem((QTime::currentTime().toString("HH:mm:ss")))); @@ -715,7 +728,7 @@ void M3KTE::onWriteButtonClicked() loggerTable->resizeColumnsToContents(); if(!loggerTable->verticalScrollBar()->isSliderDown()) loggerTable->verticalScrollBar()->setSliderPosition(loggerTable->verticalScrollBar()->maximum()); - } + } reply->deleteLater(); }); } else { @@ -747,49 +760,41 @@ void M3KTE::onWriteTableChanged(int index) void M3KTE::changeTable(int board, int tabletype) { - if(tabletype==0) - { + if(tabletype==0) { ui->writeValueTable->setModel(Boards[board].ModbusModelCoil); int i = 0; - for(;irowCount();i++) - { + for(;irowCount();i++) { ui->writeValueTable->setRowHidden(i, ui->writeValueTable->model()->index(i, 0).parent(), false); } ui->writeValueTable->hideColumn(3); ui->writeValueTable->showColumn(2); } - else - { + else { ui->writeValueTable->setModel(Boards[board].ModbusModelHoldingReg); - if(tabletype==1) - { + if(tabletype==1) { Boards[board].ModbusModelHoldingReg->setStartAddress(0); int i = 0; - for (;irowCount()/2;i++) { + for(;irowCount()/2;i++) { ui->writeValueTable->setRowHidden(i, ui->writeValueTable->model()->index(i, 0).parent(), false); } - for(;irowCount();i++) - { + for(;irowCount();i++) { ui->writeValueTable->setRowHidden(i, ui->writeValueTable->model()->index(i, 0).parent(), true); } } - else - { + else { Boards[board].ModbusModelHoldingReg->setStartAddress(Boards[board].ModbusModelHoldingReg->rowCount()/2); int i = 0; - for (;irowCount()/2;i++) { + for(;irowCount()/2;i++) { ui->writeValueTable->setRowHidden(i, ui->writeValueTable->model()->index(i, 0).parent(), true); } - for(;irowCount();i++) - { + for(;irowCount();i++) { ui->writeValueTable->setRowHidden(i, ui->writeValueTable->model()->index(i, 0).parent(), false); } } ui->writeValueTable->hideColumn(2); ui->writeValueTable->showColumn(3); } - for (int i = 0; i < 5; i++) - { + for(int i = 0; i < 5; i++) { ui->writeValueTable->resizeColumnToContents(i); } } @@ -797,9 +802,9 @@ void M3KTE::changeTable(int board, int tabletype) QModbusDataUnit M3KTE::readRequest() const { const auto table = - static_cast(ui->writeTable->currentData().toInt()); + static_cast(ui->writeTable->currentData().toInt()); int startAddress = 85 * (ui->writeTable->currentIndex()/2); - Q_ASSERT(startAddress >= 0 && startAddress < 340); + Q_ASSERT(startAddress >= 0 && startAddress < 340); quint16 numberOfEntries = qMin((ushort)(85 - (ui->boardSelectBox->currentIndex()/3*20)), quint16(340 - startAddress)); return QModbusDataUnit(table, startAddress, numberOfEntries); } @@ -807,7 +812,7 @@ QModbusDataUnit M3KTE::readRequest() const QModbusDataUnit M3KTE::writeRequest() const { const auto table = - static_cast(ui->writeTable->currentData().toInt()); + static_cast(ui->writeTable->currentData().toInt()); int startAddress = 85 * (ui->writeTable->currentIndex()/2); Q_ASSERT(startAddress >= 0 && startAddress < 340); quint16 numberOfEntries = qMin((ushort)(85 - (ui->boardSelectBox->currentIndex()/3*20)), quint16(340 - startAddress)); @@ -816,35 +821,28 @@ QModbusDataUnit M3KTE::writeRequest() const bool M3KTE::event(QEvent *event) { - if (event->type() == QEvent::User) - { + if(event->type() == QEvent::User) { BoardIdHasBeenChanged* _event = static_cast(event); QModbusDataUnit* _unit = new QModbusDataUnit(QModbusDataUnit::HoldingRegisters, 172, 1); _unit->setValue(0, _event->BoardNewID()); Boards[_event->BoardNum()]._tmp_adr = _event->BoardNewID(); - if (auto *reply = modbusDevice->sendWriteRequest(*_unit, Boards[_event->BoardNum()].adr)) - { + if(auto *reply = modbusDevice->sendWriteRequest(*_unit, Boards[_event->BoardNum()].adr)) { if(!reply->isFinished()) - connect(reply, &QModbusReply::finished, this, [reply, this, _event, _unit]() - { - if(reply->error()==QModbusDevice::TimeoutError) - { - if (auto *subreply = modbusDevice->sendReadRequest(*_unit, Boards[_event->BoardNum()]._tmp_adr)) - { - if (!subreply->isFinished()) - connect(subreply, &QModbusReply::finished, this, [subreply, this, _event]() - { + connect(reply, &QModbusReply::finished, this, [reply, this, _event, _unit]() { + if(reply->error()==QModbusDevice::TimeoutError) { + if(auto *subreply = modbusDevice->sendReadRequest(*_unit, Boards[_event->BoardNum()]._tmp_adr)) { + if(!subreply->isFinished()) + connect(subreply, &QModbusReply::finished, this, [subreply, this, _event]() { checkAdrChange(subreply, _event->BoardNum()); }); - else - { + else { unsigned newRow = loggerTable->rowCount(); loggerTable->insertRow(newRow); loggerTable->setItem(newRow, 0, new QTableWidgetItem((QTime::currentTime().toString("HH:mm:ss")))); loggerTable->setItem(newRow, 1, new QTableWidgetItem(tr("Плата %1 (ID %2)").arg(_event->BoardNum()+1).arg(Boards[_event->BoardNum()].adr))); loggerTable->setItem(newRow, 2, new QTableWidgetItem(subreply->errorString())); loggerTable->setItem(newRow, 3, new QTableWidgetItem(QString::number(++Boards[_event->BoardNum()].error_adr_change, 10))); - loggerTable->setItem(newRow, 4, new QTableWidgetItem("Не удалось изменить адрес устройства.")); + loggerTable->setItem(newRow, 4, new QTableWidgetItem("Не удалось изменить адрес устройства. [1]")); loggerTable->resizeColumnsToContents(); if(!loggerTable->verticalScrollBar()->isSliderDown()) loggerTable->verticalScrollBar()->setSliderPosition(loggerTable->verticalScrollBar()->maximum()); @@ -858,37 +856,35 @@ bool M3KTE::event(QEvent *event) loggerTable->setItem(newRow, 1, new QTableWidgetItem(tr("Плата %1 (ID %2)").arg(_event->BoardNum()+1).arg(Boards[_event->BoardNum()].adr))); loggerTable->setItem(newRow, 2, new QTableWidgetItem(modbusDevice->errorString())); loggerTable->setItem(newRow, 3, new QTableWidgetItem(QString::number(++Boards[_event->BoardNum()].error_adr_change, 10))); - loggerTable->setItem(newRow, 4, new QTableWidgetItem("Не удалось изменить адрес устройства.")); + loggerTable->setItem(newRow, 4, new QTableWidgetItem("Не удалось изменить адрес устройства. [2]")); loggerTable->resizeColumnsToContents(); if(!loggerTable->verticalScrollBar()->isSliderDown()) loggerTable->verticalScrollBar()->setSliderPosition(loggerTable->verticalScrollBar()->maximum()); reply->deleteLater(); } } - else - { + else { unsigned newRow = loggerTable->rowCount(); loggerTable->insertRow(newRow); loggerTable->setItem(newRow, 0, new QTableWidgetItem((QTime::currentTime().toString("HH:mm:ss")))); loggerTable->setItem(newRow, 1, new QTableWidgetItem(tr("Плата %1 (ID %2)").arg(_event->BoardNum()+1).arg(Boards[_event->BoardNum()].adr))); loggerTable->setItem(newRow, 2, new QTableWidgetItem(reply->errorString())); loggerTable->setItem(newRow, 3, new QTableWidgetItem(QString::number(++Boards[_event->BoardNum()].error_adr_change, 10))); - loggerTable->setItem(newRow, 4, new QTableWidgetItem("Не удалось изменить адрес устройства.")); + loggerTable->setItem(newRow, 4, new QTableWidgetItem("Не удалось изменить адрес устройства. [3]")); loggerTable->resizeColumnsToContents(); if(!loggerTable->verticalScrollBar()->isSliderDown()) loggerTable->verticalScrollBar()->setSliderPosition(loggerTable->verticalScrollBar()->maximum()); reply->deleteLater(); } }); - else - { + else { unsigned newRow = loggerTable->rowCount(); loggerTable->insertRow(newRow); loggerTable->setItem(newRow, 0, new QTableWidgetItem((QTime::currentTime().toString("HH:mm:ss")))); loggerTable->setItem(newRow, 1, new QTableWidgetItem(tr("Плата %1 (ID %2)").arg(_event->BoardNum()+1).arg(Boards[_event->BoardNum()].adr))); loggerTable->setItem(newRow, 2, new QTableWidgetItem(reply->errorString())); loggerTable->setItem(newRow, 3, new QTableWidgetItem(QString::number(++Boards[_event->BoardNum()].error_adr_change, 10))); - loggerTable->setItem(newRow, 4, new QTableWidgetItem("Не удалось изменить адрес устройства.")); + loggerTable->setItem(newRow, 4, new QTableWidgetItem("Не удалось изменить адрес устройства. [4]")); loggerTable->resizeColumnsToContents(); if(!loggerTable->verticalScrollBar()->isSliderDown()) loggerTable->verticalScrollBar()->setSliderPosition(loggerTable->verticalScrollBar()->maximum()); @@ -896,15 +892,14 @@ bool M3KTE::event(QEvent *event) delete reply; } } - else - { + else { unsigned newRow = loggerTable->rowCount(); loggerTable->insertRow(newRow); loggerTable->setItem(newRow, 0, new QTableWidgetItem((QTime::currentTime().toString("HH:mm:ss")))); loggerTable->setItem(newRow, 1, new QTableWidgetItem(tr("Плата %1 (ID %2)").arg(_event->BoardNum()+1).arg(Boards[_event->BoardNum()].adr))); loggerTable->setItem(newRow, 2, new QTableWidgetItem(modbusDevice->errorString())); loggerTable->setItem(newRow, 3, new QTableWidgetItem(QString::number(++Boards[_event->BoardNum()].error_adr_change, 10))); - loggerTable->setItem(newRow, 4, new QTableWidgetItem("Не удалось изменить адрес устройства.")); + loggerTable->setItem(newRow, 4, new QTableWidgetItem("Не удалось изменить адрес устройства. [5]")); loggerTable->resizeColumnsToContents(); if(!loggerTable->verticalScrollBar()->isSliderDown()) loggerTable->verticalScrollBar()->setSliderPosition(loggerTable->verticalScrollBar()->maximum()); @@ -913,18 +908,14 @@ bool M3KTE::event(QEvent *event) m_deviceSettingsDialog->show(); return true; } - else if (event->type() == (QEvent::Type)1001) - { + else if(event->type() == (QEvent::Type)1001) { pollStatusChange* _event = static_cast(event); QModbusDataUnit* _unit = new QModbusDataUnit(QModbusDataUnit::HoldingRegisters, 170, 1); _unit->setValue(0, _event->Status()); - if (auto *reply = modbusDevice->sendWriteRequest(*_unit, Boards[_event->BoardID()].adr)) - { + if(auto *reply = modbusDevice->sendWriteRequest(*_unit, Boards[_event->BoardID()].adr)) { if(!reply->isFinished()) - connect(reply, &QModbusReply::finished, this, [reply, this, _event]() - { - if(reply->error()!=QModbusDevice::NoError) - { + connect(reply, &QModbusReply::finished, this, [reply, this, _event]() { + if(reply->error()!=QModbusDevice::NoError) { unsigned newRow = loggerTable->rowCount(); loggerTable->insertRow(newRow); loggerTable->setItem(newRow, 0, new QTableWidgetItem((QTime::currentTime().toString("HH:mm:ss")))); @@ -938,8 +929,7 @@ bool M3KTE::event(QEvent *event) } }); } - else - { + else { unsigned newRow = loggerTable->rowCount(); loggerTable->insertRow(newRow); loggerTable->setItem(newRow, 0, new QTableWidgetItem((QTime::currentTime().toString("HH:mm:ss")))); @@ -958,57 +948,38 @@ bool M3KTE::event(QEvent *event) void M3KTE::checkAdrChange(QModbusReply *reply, unsigned boardNum) { - if (!reply) - { + if(!reply) { unsigned newRow = loggerTable->rowCount(); loggerTable->insertRow(newRow); loggerTable->setItem(newRow, 0, new QTableWidgetItem((QTime::currentTime().toString("HH:mm:ss")))); loggerTable->setItem(newRow, 1, new QTableWidgetItem(tr("Плата %1 (ID %2)").arg(boardNum+1).arg(Boards[boardNum].adr))); loggerTable->setItem(newRow, 2, new QTableWidgetItem(modbusDevice->errorString())); loggerTable->setItem(newRow, 3, new QTableWidgetItem(QString::number(++Boards[boardNum].error_adr_change, 10))); - loggerTable->setItem(newRow, 4, new QTableWidgetItem("Не удалось изменить адрес устройства.")); + loggerTable->setItem(newRow, 4, new QTableWidgetItem("Не удалось проверить изменение адреса устройства.")); loggerTable->resizeColumnsToContents(); if(!loggerTable->verticalScrollBar()->isSliderDown()) loggerTable->verticalScrollBar()->setSliderPosition(loggerTable->verticalScrollBar()->maximum()); reply->deleteLater(); return; } - if (reply->error() == QModbusDevice::NoError) { - if(Boards[boardNum]._tmp_adr == reply->serverAddress()) - { - //OK - Boards[boardNum].adr = Boards[boardNum]._tmp_adr; - reply->deleteLater(); - return; - } - //ERROR - else{ - Boards[boardNum]._tmp_adr = Boards[boardNum].adr; - unsigned newRow = loggerTable->rowCount(); - loggerTable->insertRow(newRow); - loggerTable->setItem(newRow, 0, new QTableWidgetItem((QTime::currentTime().toString("HH:mm:ss")))); - loggerTable->setItem(newRow, 1, new QTableWidgetItem(tr("Плата %1 (ID %2)").arg(boardNum+1).arg(Boards[boardNum].adr))); - loggerTable->setItem(newRow, 2, new QTableWidgetItem(reply->errorString())); - loggerTable->setItem(newRow, 3, new QTableWidgetItem(QString::number(++Boards[boardNum].error_adr_change, 10))); - loggerTable->setItem(newRow, 4, new QTableWidgetItem("Не удалось изменить адрес устройства.")); - loggerTable->resizeColumnsToContents(); - if(!loggerTable->verticalScrollBar()->isSliderDown()) - loggerTable->verticalScrollBar()->setSliderPosition(loggerTable->verticalScrollBar()->maximum()); - reply->deleteLater(); - return; - } + if(reply->error() == QModbusDevice::NoError) { + //OK + Boards[boardNum].adr = Boards[boardNum]._tmp_adr; + reply->deleteLater(); + } + else { + unsigned newRow = loggerTable->rowCount(); + loggerTable->insertRow(newRow); + loggerTable->setItem(newRow, 0, new QTableWidgetItem((QTime::currentTime().toString("HH:mm:ss")))); + loggerTable->setItem(newRow, 1, new QTableWidgetItem(tr("Плата %1 (ID %2)").arg(boardNum+1).arg(Boards[boardNum].adr))); + loggerTable->setItem(newRow, 2, new QTableWidgetItem(reply->errorString())); + loggerTable->setItem(newRow, 3, new QTableWidgetItem(QString::number(++Boards[boardNum].error_adr_change, 10))); + loggerTable->setItem(newRow, 4, new QTableWidgetItem("Ошибка при подтверждении изменения адреса устройства.")); + loggerTable->resizeColumnsToContents(); + if(!loggerTable->verticalScrollBar()->isSliderDown()) + loggerTable->verticalScrollBar()->setSliderPosition(loggerTable->verticalScrollBar()->maximum()); + reply->deleteLater(); } - unsigned newRow = loggerTable->rowCount(); - loggerTable->insertRow(newRow); - loggerTable->setItem(newRow, 0, new QTableWidgetItem((QTime::currentTime().toString("HH:mm:ss")))); - loggerTable->setItem(newRow, 1, new QTableWidgetItem(tr("Плата %1 (ID %2)").arg(boardNum+1).arg(Boards[boardNum].adr))); - loggerTable->setItem(newRow, 2, new QTableWidgetItem(reply->errorString())); - loggerTable->setItem(newRow, 3, new QTableWidgetItem(QString::number(++Boards[boardNum].error_adr_change, 10))); - loggerTable->setItem(newRow, 4, new QTableWidgetItem("Не удалось изменить адрес устройства.")); - loggerTable->resizeColumnsToContents(); - if(!loggerTable->verticalScrollBar()->isSliderDown()) - loggerTable->verticalScrollBar()->setSliderPosition(loggerTable->verticalScrollBar()->maximum()); - reply->deleteLater(); } void M3KTE::onSpeedUpdate() @@ -1017,43 +988,85 @@ void M3KTE::onSpeedUpdate() QModbusDataUnit* _unit = new QModbusDataUnit(QModbusDataUnit::HoldingRegisters, 173, 1); QModbusDataUnit* _unitcheck = new QModbusDataUnit(QModbusDataUnit::InputRegisters, 85, 1); _unit->setValue(0, m_deviceSettingsDialog->currentSpeed()); - unsigned tmp_speed = m_deviceSettingsDialog->currentSpeed(); - for (int i = 0; i < 4; i++) { - if (!Boards[i].isActive) - { + unsigned tmp_speed = 0; + switch(m_deviceSettingsDialog->currentSpeed()) { + case 0: + tmp_speed = 9600; + break; + case 1: + tmp_speed = 14400; + break; + case 2: + tmp_speed = 19200; + break; + case 3: + tmp_speed = 31250; + break; + case 4: + tmp_speed = 38400; + break; + case 5: + tmp_speed = 56000; + break; + case 6: + tmp_speed = 57600; + break; + case 7: + tmp_speed = 115200; + break; + } + if(tmp_speed == 0) { + unsigned newRow = loggerTable->rowCount(); + loggerTable->insertRow(newRow); + loggerTable->setItem(newRow, 0, new QTableWidgetItem((QTime::currentTime().toString("HH:mm:ss")))); + loggerTable->setItem(newRow, 1, new QTableWidgetItem(tr("Программная ошибка"))); + loggerTable->setItem(newRow, 2, new QTableWidgetItem("Неожиданное значение скорости")); + loggerTable->setItem(newRow, 3, new QTableWidgetItem(0)); + loggerTable->setItem(newRow, 4, new QTableWidgetItem("Ошибка при изменении скорости обмена.")); + loggerTable->resizeColumnsToContents(); + if(!loggerTable->verticalScrollBar()->isSliderDown()) + loggerTable->verticalScrollBar()->setSliderPosition(loggerTable->verticalScrollBar()->maximum()); + beginScanBoards(); + return; + } + modbusDevice->setTimeout(500); + for(int i = 0; i < 4; i++) { + if(!Boards[i].isActive) { continue; } - if (auto *reply = modbusDevice->sendWriteRequest(*_unit, Boards[i].adr)) - { - while(!reply->isFinished()) - { - QCoreApplication::processEvents(); - } - if(reply->error()==QModbusDevice::TimeoutError) - { + if(auto *reply = modbusDevice->sendWriteRequest(*_unit, Boards[i].adr)) { + QEventLoop loop; + connect(reply, &QModbusReply::finished, &loop, &QEventLoop::quit); + loop.exec(); + if(reply->error()==QModbusDevice::TimeoutError) { modbusDevice->disconnectDevice(); modbusDevice->setConnectionParameter(QModbusDevice::SerialBaudRateParameter, tmp_speed); modbusDevice->connectDevice(); - if(auto *subreply = modbusDevice->sendReadRequest(*_unitcheck, Boards[i].adr)) - { - while (!subreply->isFinished()) - { - QCoreApplication::processEvents(); - } - if(subreply->error() != QModbusDevice::NoError) - { + if(auto *subreply = modbusDevice->sendReadRequest(*_unitcheck, Boards[i].adr)) { + QEventLoop subloop; + connect(subreply, &QModbusReply::finished, &subloop, &QEventLoop::quit); + subloop.exec(); + if(subreply->error() != QModbusDevice::NoError) { unsigned newRow = loggerTable->rowCount(); loggerTable->insertRow(newRow); loggerTable->setItem(newRow, 0, new QTableWidgetItem((QTime::currentTime().toString("HH:mm:ss")))); loggerTable->setItem(newRow, 1, new QTableWidgetItem(tr("Плата %1 (ID %2)").arg(i+1).arg(Boards[i].adr))); loggerTable->setItem(newRow, 2, new QTableWidgetItem(subreply->errorString())); loggerTable->setItem(newRow, 3, new QTableWidgetItem(QString::number(++Boards[i].error_baud_change, 10))); - loggerTable->setItem(newRow, 4, new QTableWidgetItem("Ошибка при изменении скорости обмена.")); + loggerTable->setItem(newRow, 4, new QTableWidgetItem("Ошибка при подтверждении изменения скорости обмена.")); loggerTable->resizeColumnsToContents(); if(!loggerTable->verticalScrollBar()->isSliderDown()) loggerTable->verticalScrollBar()->setSliderPosition(loggerTable->verticalScrollBar()->maximum()); subreply->deleteLater(); + } else { + modbusDevice->disconnectDevice(); + modbusDevice->setConnectionParameter(QModbusDevice::SerialBaudRateParameter, + m_settingsDialog->UpdateBaud(m_deviceSettingsDialog->currentSpeed())); + modbusDevice->connectDevice(); + modbusDevice->setTimeout(m_settingsDialog->settings().responseTime); + beginScanBoards(); + return; } } else { unsigned newRow = loggerTable->rowCount(); @@ -1062,18 +1075,12 @@ void M3KTE::onSpeedUpdate() loggerTable->setItem(newRow, 1, new QTableWidgetItem(tr("Плата %1 (ID %2)").arg(i+1).arg(Boards[i].adr))); loggerTable->setItem(newRow, 2, new QTableWidgetItem(modbusDevice->errorString())); loggerTable->setItem(newRow, 3, new QTableWidgetItem(QString::number(++Boards[i].error_baud_change, 10))); - loggerTable->setItem(newRow, 4, new QTableWidgetItem("Ошибка при изменении скорости обмена.")); + loggerTable->setItem(newRow, 4, new QTableWidgetItem("Ошибка при отправке подтверждения изменения скорости обмена.")); loggerTable->resizeColumnsToContents(); if(!loggerTable->verticalScrollBar()->isSliderDown()) loggerTable->verticalScrollBar()->setSliderPosition(loggerTable->verticalScrollBar()->maximum()); } - modbusDevice->disconnectDevice(); - modbusDevice->setConnectionParameter(QModbusDevice::SerialBaudRateParameter, - m_settingsDialog->curBaud()); - modbusDevice->connectDevice(); - } - else - { + } else { unsigned newRow = loggerTable->rowCount(); loggerTable->insertRow(newRow); loggerTable->setItem(newRow, 0, new QTableWidgetItem((QTime::currentTime().toString("HH:mm:ss")))); @@ -1090,8 +1097,9 @@ void M3KTE::onSpeedUpdate() } modbusDevice->disconnectDevice(); modbusDevice->setConnectionParameter(QModbusDevice::SerialBaudRateParameter, - m_settingsDialog->UpdateBaud(tmp_speed)); + m_settingsDialog->curBaud()); modbusDevice->connectDevice(); + modbusDevice->setTimeout(m_settingsDialog->settings().responseTime); beginScanBoards(); } @@ -1099,50 +1107,36 @@ void M3KTE::onParityUpdate() { stopScanBoard(); QModbusDataUnit* _unit = new QModbusDataUnit(QModbusDataUnit::HoldingRegisters, 174, 1); - switch (m_deviceSettingsDialog->currentParity()) - { + switch(m_deviceSettingsDialog->currentParity()) { case 0: //Нет контроля - { _unit->setValue(0, 0x000); break; - } case 1: //Четный - { _unit->setValue(0, 0x0400); break; - } case 2: //Нечетный - { _unit->setValue(0, 0x0600); break; } - } - for (int i = 0; i < 4; i++) { - if (!Boards[i].isActive) - { + for(int i = 0; i < 4; i++) { + if(!Boards[i].isActive) { continue; } - if(auto *reply = modbusDevice->sendWriteRequest(*_unit, Boards[i].adr)) - { - while (!reply->isFinished()) - { - QCoreApplication::processEvents(); - } - if(reply->error()==QModbusDevice::TimeoutError) - { + if(auto *reply = modbusDevice->sendWriteRequest(*_unit, Boards[i].adr)) { + QEventLoop loop; + connect(reply, &QModbusReply::finished, &loop, &QEventLoop::quit); + loop.exec(); // Ожидает завершения reply без блокировки интерфейса + if(reply->error()==QModbusDevice::TimeoutError) { modbusDevice->disconnectDevice(); modbusDevice->setConnectionParameter(QModbusDevice::SerialParityParameter, m_deviceSettingsDialog->currentParity()); modbusDevice->connectDevice(); QModbusDataUnit* _unit = new QModbusDataUnit(QModbusDataUnit::InputRegisters, 85, 1); - if (auto *subreply = modbusDevice->sendReadRequest(*_unit, Boards[i].adr)) - { - while (!subreply->isFinished()) - { - QCoreApplication::processEvents(); - } - if(subreply->error() != QModbusDevice::NoError) - { + if(auto *subreply = modbusDevice->sendReadRequest(*_unit, Boards[i].adr)) { + QEventLoop subloop; + connect(subreply, &QModbusReply::finished, &subloop, &QEventLoop::quit); + subloop.exec(); // Ожидает завершения subreply без блокировки интерфейса + if(subreply->error() != QModbusDevice::NoError) { unsigned newRow = loggerTable->rowCount(); loggerTable->insertRow(newRow); loggerTable->setItem(newRow, 0, new QTableWidgetItem((QTime::currentTime().toString("HH:mm:ss")))); @@ -1171,8 +1165,7 @@ void M3KTE::onParityUpdate() m_settingsDialog->curParity()); modbusDevice->connectDevice(); } - else - { + else { unsigned newRow = loggerTable->rowCount(); loggerTable->insertRow(newRow); loggerTable->setItem(newRow, 0, new QTableWidgetItem((QTime::currentTime().toString("HH:mm:ss")))); @@ -1184,9 +1177,7 @@ void M3KTE::onParityUpdate() if(!loggerTable->verticalScrollBar()->isSliderDown()) loggerTable->verticalScrollBar()->setSliderPosition(loggerTable->verticalScrollBar()->maximum()); } - } - else - { + } else { unsigned newRow = loggerTable->rowCount(); loggerTable->insertRow(newRow); loggerTable->setItem(newRow, 0, new QTableWidgetItem((QTime::currentTime().toString("HH:mm:ss")))); @@ -1202,7 +1193,7 @@ void M3KTE::onParityUpdate() } modbusDevice->disconnectDevice(); modbusDevice->setConnectionParameter(QModbusDevice::SerialParityParameter, - m_settingsDialog->UpdateParity(m_deviceSettingsDialog->currentParity())); + m_settingsDialog->UpdateParity(m_deviceSettingsDialog->currentParity())); modbusDevice->connectDevice(); beginScanBoards(); } @@ -1210,13 +1201,11 @@ void M3KTE::onParityUpdate() bool M3KTE::pingNetworkDevices() { CurrentConnectedDevice = 0; - QModbusDataUnit* _unit = new QModbusDataUnit(QModbusDataUnit::InputRegisters, 85, 1); int tmp_adr = 1; bool isRun = false; bool *tmp_isRun = &isRun; auto bar = new QProgressDialog(this); - connect(bar, &QProgressDialog::canceled, this, [this, tmp_isRun]() - { + connect(bar, &QProgressDialog::canceled, this, [tmp_isRun]() { *tmp_isRun = true; }); bar->setLabelText(tr("Поиск плат... Текущий адрес: %1").arg(tmp_adr)); @@ -1230,87 +1219,65 @@ bool M3KTE::pingNetworkDevices() QModbusRequest requestOfBoardID(QModbusRequest::EncapsulatedInterfaceTransport, QByteArray::fromHex("0E0401")); modbusDevice->setTimeout(50); - for(CurrentConnectedDevice=0; CurrentConnectedDevice<4;) - { + for(CurrentConnectedDevice=0; CurrentConnectedDevice<4;) { auto *reply = modbusDevice->sendRawRequest(requestOfDeviceType, tmp_adr); //auto *reply = modbusDevice->sendReadRequest(*_unit, tmp_adr); //Запрос типа устройства. - if(reply == nullptr) - { + if(reply == nullptr) { onConnectClicked(); bar->close(); bar->deleteLater(); return false; } - while(!reply->isFinished()) - { - if(isRun && CurrentConnectedDevice < 1) - { + while(!reply->isFinished()) { + if(isRun && CurrentConnectedDevice < 1) { onConnectClicked(); bar->close(); bar->deleteLater(); return false; } - else if(isRun) - { + else if(isRun) { break; } QCoreApplication::processEvents(); } - if(isRun && CurrentConnectedDevice < 1) - { + if(isRun && CurrentConnectedDevice < 1) { onConnectClicked(); bar->close(); bar->deleteLater(); return false; - } - else if(isRun) - { + } else if(isRun) { break; - } - else if (!isRun) - { + } else if(!isRun) { //Нужна проверка типа устройства - if(reply->error()==QModbusDevice::NoError) - { + if(reply->error()==QModbusDevice::NoError) { QModbusResponse resp = reply->rawResult(); QString result = QString(resp.data().remove(0, MODBUS_REQUEST_PROTOCOL_INFO_LENGTH)); //result.remove(0, MODBUS_REQUEST_PROTOCOL_INFO_LENGTH); - if(result == QString("KTE")) - { + if(result == QString("KTE")) { auto *subreply = modbusDevice->sendRawRequest(requestOfBoardID, tmp_adr); - while(!subreply->isFinished()) - { - if(isRun && CurrentConnectedDevice < 1) - { + while(!subreply->isFinished()) { + if(isRun && CurrentConnectedDevice < 1) { onConnectClicked(); bar->close(); bar->deleteLater(); return false; - } - else if(isRun) - { + } else if(isRun) { break; } QCoreApplication::processEvents(); } - if(isRun && CurrentConnectedDevice < 1) - { + if(isRun && CurrentConnectedDevice < 1) { onConnectClicked(); bar->close(); bar->deleteLater(); return false; - } - else if(isRun) - { + } else if(isRun) { break; - } - else - { + } else { //QString boardID(subreply->rawResult().data()); //boardID.remove(0, MODBUS_REQUEST_PROTOCOL_INFO_LENGTH); - if(Boards[(int)(subreply->rawResult().data().at(MODBUS_REQUEST_PROTOCOL_INFO_LENGTH))-1].isActive) - { + if(Boards[(int)(subreply->rawResult().data().at(MODBUS_REQUEST_PROTOCOL_INFO_LENGTH))-1].isActive) { QMessageBox::warning(this, "Ошибка при сканировании сети.", QString("Платы по адресам %1 и %2 имеют одинаковый ID %3").arg(Boards[(int)subreply->rawResult().data().at(MODBUS_REQUEST_PROTOCOL_INFO_LENGTH)].adr).arg(tmp_adr).arg((int)subreply->rawResult().data().at(MODBUS_REQUEST_PROTOCOL_INFO_LENGTH))); onConnectClicked(); bar->close(); @@ -1328,8 +1295,7 @@ bool M3KTE::pingNetworkDevices() } tmp_adr++; bar->setLabelText(tr("Поиск плат... Текущий адрес: %1").arg(tmp_adr)); - if(tmp_adr>=247 && (CurrentConnectedDevice<1)) - { + if(tmp_adr>=247 && (CurrentConnectedDevice<1)) { //ERROR //OUT OF RANGE QMessageBox::warning(this, "Ошибка при сканировании сети.", QString("Выход за пределы допустимых адресов. Найдено %1 плат.").arg(CurrentConnectedDevice)); @@ -1338,16 +1304,13 @@ bool M3KTE::pingNetworkDevices() bar->deleteLater(); onConnectClicked(); return false; - } - else if(tmp_adr>=247) - { + } else if(tmp_adr>=247) { break; } } isRun=false; QMessageBox::warning(this, "Сканирование сети завершено.", tr("Найдено плат: %1 из 4.").arg(CurrentConnectedDevice)); - if(isRun) - { + if(isRun) { QMessageBox::warning(this, "Ошибка при получении текущих настроек.", QString("Прерывание по запросу пользователя.")); onConnectClicked(); bar->close(); @@ -1361,33 +1324,26 @@ bool M3KTE::pingNetworkDevices() _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) - { + for(int i=0; i<4; i++) { + if(Boards[i].isActive) { Boards_Fields[i]->setEnabled(true); - for (int j = 0; j<3; j++) - { + for(int j = 0; j<3; j++) { bar->setValue(i*3+j); - if(isRun) - { + if(isRun) { onConnectClicked(); bar->close(); bar->deleteLater(); return false; } auto *reply = modbusDevice->sendReadRequest(*_unit_settings[j], Boards[i].adr); - if(!reply) - { + if(!reply) { onConnectClicked(); bar->close(); bar->deleteLater(); return false; } - while(!reply->isFinished()) - { - if(isRun) - { + while(!reply->isFinished()) { + if(isRun) { QMessageBox::warning(this, "Ошибка при получении текущих настроек.", QString("Прерывание по запросу пользователя.")); onConnectClicked(); bar->close(); @@ -1396,12 +1352,9 @@ bool M3KTE::pingNetworkDevices() } QCoreApplication::processEvents(); } - if(reply->error()==QModbusDevice::NoError) - { + if(reply->error()==QModbusDevice::NoError) { applySettingsFromScan(reply); - } - else - { + } else { QMessageBox::warning(this, "Ошибка при получении текущих настроек.", QString("Таймаут при опросе устройства %1 по адресу %2").arg(i+1).arg(Boards[i].adr)); bar->setValue(CurrentConnectedDevice*3); bar->close(); @@ -1410,7 +1363,7 @@ bool M3KTE::pingNetworkDevices() return false; } } - Boards_Fields[i]->setTitle(QString("Плата №%1 (ID %2)").arg(i).arg(Boards[i].adr)); + Boards_Fields[i]->setTitle(QString("Плата №%1 (ID %2)").arg(i+1).arg(Boards[i].adr)); } } modbusDevice->setNumberOfRetries(m_settingsDialog->settings().numberOfRetries); @@ -1421,10 +1374,9 @@ bool M3KTE::pingNetworkDevices() void M3KTE::beginScanBoards() { - for (int i = 0; i < 4; i++) { - if(Boards[i].isActive) - { - m_deviceSettingsDialog->initPollForBoard(i, Boards[i].adr); + for(int i = 0; i < 4; i++) { + if(Boards[i].isActive) { + m_deviceSettingsDialog->initPollForBoard(i+1, Boards[i].adr); boardScan(i); } } @@ -1433,28 +1385,25 @@ void M3KTE::beginScanBoards() void M3KTE::boardScan(unsigned boardID) { - if (!modbusDevice) + if(!modbusDevice) return; QModbusDataUnit* _unit = new QModbusDataUnit(QModbusDataUnit::InputRegisters, 85, 1); statusBar()->clearMessage(); - if (auto *reply = modbusDevice->sendReadRequest(*_unit, Boards[boardID].adr)) { + if(auto *reply = modbusDevice->sendReadRequest(*_unit, Boards[boardID].adr)) { Boards[boardID].timerToStatusResponse.start(); - if (!reply->isFinished()) - connect(reply, &QModbusReply::finished, this, [this, boardID, reply]() - { + if(!reply->isFinished()) + connect(reply, &QModbusReply::finished, this, [this, boardID, reply]() { Boards[boardID].timerStatus->setText(QString("Status: %1 ms").arg(Boards[boardID].timerToStatusResponse.elapsed())); if(reply->error()==QModbusDevice::NoError) { statusreg StatusReg; StatusReg.AllReg = reply->result().value(0); - if(StatusReg.ParsingReg.poll_allowed) - { + if(StatusReg.ParsingReg.poll_allowed) { Boards[boardID].boardScanners->start(m_deviceSettingsDialog->currentBoardTimer(boardID)); return; } - if(StatusReg.ParsingReg.mzkte_status) - { - switch (StatusReg.ParsingReg.mzkte_error) { + if(StatusReg.ParsingReg.mzkte_status) { + switch(StatusReg.ParsingReg.mzkte_error) { case 1: Boards[boardID].boardScanners->start(m_deviceSettingsDialog->currentBoardTimer(boardID)); return; @@ -1477,13 +1426,10 @@ void M3KTE::boardScan(unsigned boardID) } } QModbusDataUnit* _unit = new QModbusDataUnit(QModbusDataUnit::InputRegisters, 0, 85); - - if (auto *subreply = modbusDevice->sendReadRequest(*_unit, Boards[boardID].adr)) { + if(auto *subreply = modbusDevice->sendReadRequest(*_unit, Boards[boardID].adr)) { Boards[boardID].timerToDataResponse.start(); - if (!subreply->isFinished()) - { - connect(subreply, &QModbusReply::finished, this, [this, boardID]() - { + if(!subreply->isFinished()) { + connect(subreply, &QModbusReply::finished, this, [this, boardID]() { Boards[boardID].timerData->setText(QString("Data: %1 ms").arg(Boards[boardID].timerToStatusResponse.elapsed())); auto subreply = qobject_cast(sender()); displayResultOfScan(subreply, boardID); @@ -1529,8 +1475,7 @@ void M3KTE::boardScan(unsigned boardID) loggerTable->verticalScrollBar()->setSliderPosition(loggerTable->verticalScrollBar()->maximum()); } }); - else - { + else { Boards[boardID].timerToStatusResponse.elapsed(); unsigned newRow = loggerTable->rowCount(); loggerTable->insertRow(newRow); @@ -1545,8 +1490,8 @@ void M3KTE::boardScan(unsigned boardID) delete reply; // broadcast replies return immediately } } else { -// QMessageBox::warning(this, QString("Ошибка при опросе платы #%1").arg(boardID+1), QString(tr("Read error: ") + modbusDevice->errorString())); -// statusBar()->showMessage(tr("Read error: ") + modbusDevice->errorString(), 5000); + // QMessageBox::warning(this, QString("Ошибка при опросе платы #%1").arg(boardID+1), QString(tr("Read error: ") + modbusDevice->errorString())); + // statusBar()->showMessage(tr("Read error: ") + modbusDevice->errorString(), 5000); unsigned newRow = loggerTable->rowCount(); loggerTable->insertRow(newRow); loggerTable->setItem(newRow, 0, new QTableWidgetItem((QTime::currentTime().toString("HH:mm:ss")))); @@ -1561,14 +1506,13 @@ void M3KTE::boardScan(unsigned boardID) void M3KTE::displayResultOfScan(QModbusReply *reply, int boardID) { - if (!reply) + if(!reply) return; - if (reply->error() == QModbusDevice::NoError) { + if(reply->error() == QModbusDevice::NoError) { const QModbusDataUnit unit = reply->result(); bool W_Flag = false; bool A_Flag = false; - if(unit.startAddress() != 0 || unit.valueCount() != 85) - { + if(unit.startAddress() != 0 || unit.valueCount() != 85) { //ERROR //QMessageBox::warning(this, QString("Ошибка при опросе платы #%1").arg(boardID), QString("Принятый ответ: Стартовый адрес %1, Количество элементов %2").arg(unit.startAddress()).arg(unit.valueCount())); unsigned newRow = loggerTable->rowCount(); @@ -1586,38 +1530,28 @@ void M3KTE::displayResultOfScan(QModbusReply *reply, int boardID) } QString W_Adr; QString A_Adr; - for(int i = unit.startAddress(), total = int(unit.valueCount()); i < total; ++i) - { - if(Boards[boardID].coil[i]==true) - { + for(int i = unit.startAddress(), total = int(unit.valueCount()); i < total; ++i) { + if(Boards[boardID].coil[i]==true) { int j = 0; - if(Boards[boardID].HR[i + 85] > unit.value(i)) - { + if(Boards[boardID].HR[i + 85] > unit.value(i)) { j = 1; - if(j != m_ProgressBar[i+boardID*85]->value()) - { + if(j != m_ProgressBar[i+boardID*85]->value()) { A_Adr += tr("ТЭ%1 ").arg(i); Boards[boardID].error_A++; } m_ProgressBar[i+boardID*85]->setStatusTip(QString("П%1 ТЭ%2: Аварийный уровень напряжения.").arg(QString::number(boardID+1), QString::number(i%85))); m_ProgressBar[i+boardID*85]->setWhatsThis(QString("П%1 ТЭ%2: Аварийный уровень напряжения.").arg(QString::number(boardID+1), QString::number(i%85))); - A_Flag = true; - } - else if(Boards[boardID].HR[i] > unit.value(i)) - { + } else if(Boards[boardID].HR[i] > unit.value(i)) { j = 2; - if(j != m_ProgressBar[i+boardID*85]->value()) - { + if(j != m_ProgressBar[i+boardID*85]->value()) { W_Adr += tr("ТЭ%1 ").arg(i); Boards[boardID].error_W++; } m_ProgressBar[i+boardID*85]->setStatusTip(QString("П%1 ТЭ%2: Предупредительный уровень напряжения.").arg(QString::number(boardID+1), QString::number(i%85))); m_ProgressBar[i+boardID*85]->setWhatsThis(QString("П%1 ТЭ%2: Предупредительный уровень напряжения.").arg(QString::number(boardID+1), QString::number(i%85))); W_Flag = true; - } - else - { + } else { j = 3; m_ProgressBar[i+boardID*85]->setStatusTip(QString("П%1 ТЭ%2: Уровень напряжения в норме.").arg(QString::number(boardID+1), QString::number(i%85))); m_ProgressBar[i+boardID*85]->setWhatsThis(QString("П%1 ТЭ%2: Уровень напряжения в норме.").arg(QString::number(boardID+1), QString::number(i%85))); @@ -1625,9 +1559,7 @@ void M3KTE::displayResultOfScan(QModbusReply *reply, int boardID) m_ProgressBar[i+boardID*85]->setValue(j); QString style_fc = "QProgressBar {border: 2px solid black; font: bold 10px} QProgressBar::chunk {background: hsva(" + QString::number(j*50-50) + ", 255, 255, 100%);} "; m_ProgressBar[i+boardID*85]->setStyleSheet(style_fc); - } - else - { + } else { m_ProgressBar[i+boardID*85]->setValue(3); m_ProgressBar[i+boardID*85]->setStatusTip(QString("П%1 ТЭ%2: Топливный Элемент не учитывается.").arg(QString::number(boardID+1), QString::number(i%85))); m_ProgressBar[i+boardID*85]->setWhatsThis(QString("П%1 ТЭ%2: Топливный Элемент не учитывается.").arg(QString::number(boardID+1), QString::number(i%85))); @@ -1637,8 +1569,11 @@ void M3KTE::displayResultOfScan(QModbusReply *reply, int boardID) Boards[boardID].ModbusModelCoil->set_currentU(unit.value(i), i); Boards[boardID].ModbusModelHoldingReg->set_currentU(unit.value(i), i); } - if(A_Flag) - { + Boards[boardID].ModbusModelCoil->dataChanged(ui->writeValueTable->model()->index(unit.startAddress(), 2), + ui->writeValueTable->model()->index(unit.startAddress() + unit.valueCount() -1, 2)); + Boards[boardID].ModbusModelHoldingReg->dataChanged(ui->writeValueTable->model()->index(unit.startAddress(), 3), + ui->writeValueTable->model()->index(unit.startAddress() + unit.valueCount() -1, 3)); + if(A_Flag) { statusM3KTE.Accidents[boardID] = true; unsigned newRow = loggerTable->rowCount(); loggerTable->insertRow(newRow); @@ -1650,11 +1585,9 @@ void M3KTE::displayResultOfScan(QModbusReply *reply, int boardID) loggerTable->resizeColumnsToContents(); if(!loggerTable->verticalScrollBar()->isSliderDown()) loggerTable->verticalScrollBar()->setSliderPosition(loggerTable->verticalScrollBar()->maximum()); - } - else - statusM3KTE.Accidents[boardID] = false; - if(W_Flag) - { + } else + statusM3KTE.Accidents[boardID] = false; + if(W_Flag) { statusM3KTE.Warnings[boardID] = true; unsigned newRow = loggerTable->rowCount(); loggerTable->insertRow(newRow); @@ -1666,33 +1599,28 @@ void M3KTE::displayResultOfScan(QModbusReply *reply, int boardID) loggerTable->resizeColumnsToContents(); if(!loggerTable->verticalScrollBar()->isSliderDown()) loggerTable->verticalScrollBar()->setSliderPosition(loggerTable->verticalScrollBar()->maximum()); - } - else + } else statusM3KTE.Warnings[boardID] = false; ui->BSM_Warning->setChecked(false); ui->BSM_Accident->setChecked(false); ui->BSM_WorkInProgress->setChecked(true); - for(int i = 0; i < 4; i++) - { - if(statusM3KTE.Accidents[i]) - { + for(int i = 0; i < 4; i++) { + if(statusM3KTE.Accidents[i]) { ui->BSM_WorkInProgress->setChecked(false); ui->BSM_Warning->setChecked(false); ui->BSM_Accident->setChecked(true); break; } - if(statusM3KTE.Warnings[i]) - { + if(statusM3KTE.Warnings[i]) { ui->BSM_WorkInProgress->setChecked(false); ui->BSM_Accident->setChecked(false); ui->BSM_Warning->setChecked(true); } } - } else if (reply->error() == QModbusDevice::ProtocolError) { + } else if(reply->error() == QModbusDevice::ProtocolError) { statusBar()->showMessage(tr("Read response error: %1 (Mobus exception: 0x%2)"). - arg(reply->errorString()). - arg(reply->rawResult().exceptionCode(), -1, 16), 5000); - + arg(reply->errorString()). + arg(reply->rawResult().exceptionCode(), -1, 16), 5000); unsigned newRow = loggerTable->rowCount(); loggerTable->insertRow(newRow); loggerTable->setItem(newRow, 0, new QTableWidgetItem((QTime::currentTime().toString("HH:mm:ss")))); @@ -1708,7 +1636,6 @@ void M3KTE::displayResultOfScan(QModbusReply *reply, int boardID) statusBar()->showMessage(tr("Read response error: %1 (code: 0x%2)"). arg(reply->errorString()). arg(reply->error(), -1, 16), 5000); - unsigned newRow = loggerTable->rowCount(); loggerTable->insertRow(newRow); loggerTable->setItem(newRow, 0, new QTableWidgetItem((QTime::currentTime().toString("HH:mm:ss")))); @@ -1726,37 +1653,28 @@ void M3KTE::displayResultOfScan(QModbusReply *reply, int boardID) void M3KTE::applySettingsFromScan(QModbusReply *reply) { int Adr = 255; - for(int i = 0; i < 4; i++) - { - if(Boards[i].adr==reply->serverAddress() &&Boards[i].isActive) - { + for(int i = 0; i < 4; i++) { + if(Boards[i].adr==reply->serverAddress() &&Boards[i].isActive) { Adr = i; break; } } - if (reply->error() == QModbusDevice::NoError) { + if(reply->error() == QModbusDevice::NoError) { const QModbusDataUnit unit = reply->result(); - for (int i = 0, total = int(unit.valueCount()); i < (total); ++i) { - if(unit.registerType() == QModbusDataUnit::Coils) - { + for(int i = 0, total = int(unit.valueCount()); i < (total); ++i) { + if(unit.registerType() == QModbusDataUnit::Coils) { Boards[Adr].coil[i + unit.startAddress()] = unit.value(i); - if(unit.value(i)==1) - { + if(unit.value(i)==1) { Boards[Adr].ModbusModelCoil->setData(ui->writeValueTable->model()->index(i + unit.startAddress(), 2), Qt::Checked, Qt::CheckStateRole); - } - else - { + } else { Boards[Adr].ModbusModelCoil->setData(ui->writeValueTable->model()->index(i + unit.startAddress(), 2), Qt::Unchecked, Qt::CheckStateRole); } - } - else if(unit.registerType() == QModbusDataUnit::HoldingRegisters) - { + } else if(unit.registerType() == QModbusDataUnit::HoldingRegisters) { Boards[Adr].HR[i + unit.startAddress()] = unit.value(i); Boards[Adr].ModbusModelHoldingReg->setData(Boards[Adr].ModbusModelHoldingReg->index(i + unit.startAddress(), 3), QString::number(unit.value(i), 16), Qt::EditRole); } } - } else if (reply->error() == QModbusDevice::ProtocolError) { - + } else if(reply->error() == QModbusDevice::ProtocolError) { statusBar()->showMessage(tr("Read response error: %1 (Mobus exception: 0x%2)"). arg(reply->errorString()). arg(reply->rawResult().exceptionCode(), -1, 16), 5000); @@ -1790,14 +1708,14 @@ void M3KTE::applySettingsFromScan(QModbusReply *reply) void M3KTE::slotmultipleRegWrite() { - if (!modbusDevice) + if(!modbusDevice) return; multipleRegWrite(); } void M3KTE::slotmultipleRegWriteAndSend() { - if (!modbusDevice) + if(!modbusDevice) return; multipleRegWrite(); multipleRegSend(); @@ -1806,33 +1724,27 @@ void M3KTE::slotmultipleRegWriteAndSend() void M3KTE::multipleRegSend() { QModbusDataUnit *unit_tx = nullptr; - if(m_regMultipleSettings->getTypeReg()) - { + if(m_regMultipleSettings->getTypeReg()) { unit_tx = new QModbusDataUnit(QModbusDataUnit::HoldingRegisters, m_regMultipleSettings->getStartAdr(), m_regMultipleSettings->getCountReg()); - } - else - { + } else { unit_tx = new QModbusDataUnit(QModbusDataUnit::Coils, m_regMultipleSettings->getStartAdr(), m_regMultipleSettings->getCountReg()); } - for (unsigned i = 0; i < m_regMultipleSettings->getCountReg(); i++) { + for(unsigned i = 0; i < m_regMultipleSettings->getCountReg(); i++) { unit_tx->setValue(i, m_regMultipleSettings->getNewValue()); - if(m_regMultipleSettings->getTypeReg()) - { + if(m_regMultipleSettings->getTypeReg()) { Boards[m_regMultipleSettings->getBoardId()].HR[i+m_regMultipleSettings->getStartAdr()] = m_regMultipleSettings->getNewValue(); - } - else - { + } else { Boards[m_regMultipleSettings->getBoardId()].coil[i+m_regMultipleSettings->getStartAdr()] = m_regMultipleSettings->getNewValue(); } } - if (auto *reply = modbusDevice->sendWriteRequest(*unit_tx, Boards[m_regMultipleSettings->getBoardId()].adr)) { + if(auto *reply = modbusDevice->sendWriteRequest(*unit_tx, Boards[m_regMultipleSettings->getBoardId()].adr)) { unsigned Adr = m_regMultipleSettings->getBoardId(); - if (!reply->isFinished()) { + if(!reply->isFinished()) { connect(reply, &QModbusReply::finished, this, [this, reply, Adr]() { - if (reply->error() == QModbusDevice::ProtocolError) { + if(reply->error() == QModbusDevice::ProtocolError) { statusBar()->showMessage(tr("Write response error: %1 (Mobus exception: 0x%2)") - .arg(reply->errorString()).arg(reply->rawResult().exceptionCode(), -1, 16), - 5000); + .arg(reply->errorString()).arg(reply->rawResult().exceptionCode(), -1, 16), + 5000); unsigned newRow = loggerTable->rowCount(); loggerTable->insertRow(newRow); loggerTable->setItem(newRow, 0, new QTableWidgetItem((QTime::currentTime().toString("HH:mm:ss")))); @@ -1843,9 +1755,9 @@ void M3KTE::multipleRegSend() loggerTable->resizeColumnsToContents(); if(!loggerTable->verticalScrollBar()->isSliderDown()) loggerTable->verticalScrollBar()->setSliderPosition(loggerTable->verticalScrollBar()->maximum()); - } else if (reply->error() != QModbusDevice::NoError) { + } else if(reply->error() != QModbusDevice::NoError) { statusBar()->showMessage(tr("Write response error: %1 (code: 0x%2)"). - arg(reply->errorString()).arg(reply->error(), -1, 16), 5000); + arg(reply->errorString()).arg(reply->error(), -1, 16), 5000); unsigned newRow = loggerTable->rowCount(); loggerTable->insertRow(newRow); loggerTable->setItem(newRow, 0, new QTableWidgetItem((QTime::currentTime().toString("HH:mm:ss")))); @@ -1870,13 +1782,10 @@ void M3KTE::multipleRegSend() void M3KTE::multipleRegWrite() { - for (unsigned i = 0; i < m_regMultipleSettings->getCountReg(); i++) { - if(m_regMultipleSettings->getTypeReg()) - { + for(unsigned i = 0; i < m_regMultipleSettings->getCountReg(); i++) { + if(m_regMultipleSettings->getTypeReg()) { Boards[m_regMultipleSettings->getBoardId()].ModbusModelHoldingReg->m_holdingRegisters[i+m_regMultipleSettings->getStartAdr()] = m_regMultipleSettings->getNewValue(); - } - else - { + } else { Boards[m_regMultipleSettings->getBoardId()].ModbusModelCoil->m_coils[i+m_regMultipleSettings->getStartAdr()] = (bool)m_regMultipleSettings->getNewValue(); } } @@ -1914,8 +1823,7 @@ bool M3KTE::autoBaudRateScan() bool isRun = false; bool *tmp_isRun = &isRun; auto bar = new QProgressDialog(this); - connect(bar, &QProgressDialog::canceled, this, [this, tmp_isRun]() - { + connect(bar, &QProgressDialog::canceled, this, [tmp_isRun]() { *tmp_isRun = true; }); @@ -1926,33 +1834,26 @@ bool M3KTE::autoBaudRateScan() QModbusRequest requestOfDeviceType(QModbusRequest::EncapsulatedInterfaceTransport, QByteArray::fromHex("0E0404")); - for(int i = 0; i < 8; i++) - { + for(int i = 0; i < 8; i++) { bar->setValue(i); bar->setLabelText(tr("Поиск плат... Текущая скорость: %1").arg(m_baud[i])); modbusDevice->setConnectionParameter(QModbusDevice::SerialBaudRateParameter, m_baud[i]); - if (!modbusDevice->connectDevice()) { + if(!modbusDevice->connectDevice()) { statusBar()->showMessage(tr("Connect failed: ") + modbusDevice->errorString(), 5000); } - for(int tmp_adr = 1; tmp_adr < 248; tmp_adr++) - { - - + for(int tmp_adr = 1; tmp_adr < 248; tmp_adr++) { auto *reply = modbusDevice->sendRawRequest(requestOfDeviceType, tmp_adr); //auto *reply = modbusDevice->sendReadRequest(*_unit, tmp_adr); //Запрос типа устройства. - if(reply == nullptr) - { + if(reply == nullptr) { onConnectClicked(); bar->close(); bar->deleteLater(); return false; } - while(!reply->isFinished()) - { - if(isRun) - { + while(!reply->isFinished()) { + if(isRun) { onConnectClicked(); bar->close(); bar->deleteLater(); @@ -1967,7 +1868,7 @@ bool M3KTE::autoBaudRateScan() bar->deleteLater(); return false; } - else if (!isRun) + else if(!isRun) { //Нужна проверка типа устройства if(reply->error()==QModbusDevice::NoError) @@ -1994,9 +1895,9 @@ bool M3KTE::autoBaudRateScan() { for(int i = 0; i < 8; i++) { - for (int j = 0; j < KTE[i].size(); j++) + for(int j = 0; j < KTE[i].size(); j++) { - for (int l = i; l < 8; l++) { + for(int l = i; l < 8; l++) { if(KTE[l].indexOf(KTE[i].at(j))==-1) { QMessageBox::warning(this, "Error", QString("Несколько устройств по адресу %1, работающих на скоростях %2 и %3.").arg(KTE[i].at(j)).arg(m_baud[i]).arg(m_baud[l])); @@ -2008,14 +1909,14 @@ bool M3KTE::autoBaudRateScan() QModbusDataUnit* _unit = new QModbusDataUnit(QModbusDataUnit::HoldingRegisters, 173, 1); _unit->setValue(0, m_scanBoard->getBaud()); - for (int i = 0; i < 8; i++) { + for(int i = 0; i < 8; i++) { bar->setValue(i); bar->setLabelText(tr("Синхронизация плат на скорости %1").arg(m_baud[i])); for(int j = 0; j < KTE[i].size(); j++) { modbusDevice->setConnectionParameter(QModbusDevice::SerialBaudRateParameter, m_baud[i]); - if (!modbusDevice->connectDevice()) { + if(!modbusDevice->connectDevice()) { statusBar()->showMessage(tr("Connect failed: ") + modbusDevice->errorString(), 5000); } auto *reply = modbusDevice->sendWriteRequest(*_unit, KTE[i].at(j)); @@ -2045,7 +1946,7 @@ bool M3KTE::autoBaudRateScan() m_settingsDialog->UpdateBaud(m_scanBoard->getBaud())); modbusDevice->connectDevice(); QModbusDataUnit* _unit = new QModbusDataUnit(QModbusDataUnit::InputRegisters, 85, 1); - if (auto *subreply = modbusDevice->sendReadRequest(*_unit, Boards[i].adr)) + if(auto *subreply = modbusDevice->sendReadRequest(*_unit, Boards[i].adr)) { while(!subreply->isFinished()) { @@ -2085,7 +1986,7 @@ bool M3KTE::autoBaudRateScan() void M3KTE::stopScanBoard() { - for (int i = 0; i < 4; i++) { + for(int i = 0; i < 4; i++) { Boards[i].boardScanners->stop(); } return; diff --git a/M3KTE_TERM/m3kte.h b/M3KTE_TERM/m3kte.h index 77d338f..1d9b702 100644 --- a/M3KTE_TERM/m3kte.h +++ b/M3KTE_TERM/m3kte.h @@ -140,6 +140,7 @@ private: WriteRegisterModel *ModbusModelCoil; WriteRegisterModel *ModbusModelHoldingReg; QTimer *boardScanners; + bool isScan = false; QElapsedTimer timerToStatusResponse; QElapsedTimer timerToDataResponse; diff --git a/M3KTE_TERM/m3kte.ui b/M3KTE_TERM/m3kte.ui index 06240e9..03bb816 100644 --- a/M3KTE_TERM/m3kte.ui +++ b/M3KTE_TERM/m3kte.ui @@ -161,6 +161,9 @@ + + true + 0 @@ -170,6 +173,9 @@ Статус Терминала + + false + 3 diff --git a/Release/.qmake.stash b/Release/.qmake.stash new file mode 100644 index 0000000..2b0d3ed --- /dev/null +++ b/Release/.qmake.stash @@ -0,0 +1,21 @@ +QMAKE_CXX.QT_COMPILER_STDCXX = 201402L +QMAKE_CXX.QMAKE_GCC_MAJOR_VERSION = 7 +QMAKE_CXX.QMAKE_GCC_MINOR_VERSION = 3 +QMAKE_CXX.QMAKE_GCC_PATCH_VERSION = 0 +QMAKE_CXX.COMPILER_MACROS = \ + QT_COMPILER_STDCXX \ + QMAKE_GCC_MAJOR_VERSION \ + QMAKE_GCC_MINOR_VERSION \ + QMAKE_GCC_PATCH_VERSION +QMAKE_CXX.INCDIRS = \ + C:/Qt/Qt5.14.2/Tools/mingw730_32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++ \ + C:/Qt/Qt5.14.2/Tools/mingw730_32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/i686-w64-mingw32 \ + C:/Qt/Qt5.14.2/Tools/mingw730_32/lib/gcc/i686-w64-mingw32/7.3.0/include/c++/backward \ + C:/Qt/Qt5.14.2/Tools/mingw730_32/lib/gcc/i686-w64-mingw32/7.3.0/include \ + C:/Qt/Qt5.14.2/Tools/mingw730_32/lib/gcc/i686-w64-mingw32/7.3.0/include-fixed \ + C:/Qt/Qt5.14.2/Tools/mingw730_32/i686-w64-mingw32/include +QMAKE_CXX.LIBDIRS = \ + C:/Qt/Qt5.14.2/Tools/mingw730_32/lib/gcc/i686-w64-mingw32/7.3.0 \ + C:/Qt/Qt5.14.2/Tools/mingw730_32/lib/gcc \ + C:/Qt/Qt5.14.2/Tools/mingw730_32/i686-w64-mingw32/lib \ + C:/Qt/Qt5.14.2/Tools/mingw730_32/lib diff --git a/Release/release/M3KTE_TERM.exe b/Release/release/M3KTE_TERM.exe new file mode 100644 index 0000000..56e076e Binary files /dev/null and b/Release/release/M3KTE_TERM.exe differ