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