Second checkpoint
This commit is contained in:
parent
1b7388821e
commit
009ac176f9
@ -1407,6 +1407,7 @@ bool M3KTE::autoBaudRateScan()
|
|||||||
{
|
{
|
||||||
unsigned countOfDeviceOnLine = 0;
|
unsigned countOfDeviceOnLine = 0;
|
||||||
QString resultOfScan;
|
QString resultOfScan;
|
||||||
|
QVector<unsigned> KTE[8];
|
||||||
|
|
||||||
modbusDevice->setConnectionParameter(QModbusDevice::SerialPortNameParameter,
|
modbusDevice->setConnectionParameter(QModbusDevice::SerialPortNameParameter,
|
||||||
m_settingsDialog->settings().portName);
|
m_settingsDialog->settings().portName);
|
||||||
@ -1441,6 +1442,7 @@ bool M3KTE::autoBaudRateScan()
|
|||||||
for(int i = 0; i < 8; i++)
|
for(int i = 0; i < 8; i++)
|
||||||
{
|
{
|
||||||
bar->setValue(i);
|
bar->setValue(i);
|
||||||
|
bar->setLabelText(tr("Поиск плат... Текущая скорость: %1").arg(m_baud[i]));
|
||||||
modbusDevice->setConnectionParameter(QModbusDevice::SerialBaudRateParameter,
|
modbusDevice->setConnectionParameter(QModbusDevice::SerialBaudRateParameter,
|
||||||
m_baud[i]);
|
m_baud[i]);
|
||||||
if (!modbusDevice->connectDevice()) {
|
if (!modbusDevice->connectDevice()) {
|
||||||
@ -1448,7 +1450,7 @@ bool M3KTE::autoBaudRateScan()
|
|||||||
}
|
}
|
||||||
for(int tmp_adr = 1; tmp_adr < 248; tmp_adr++)
|
for(int tmp_adr = 1; tmp_adr < 248; tmp_adr++)
|
||||||
{
|
{
|
||||||
bar->setLabelText(tr("Поиск плат... Текущий адрес: %1").arg(tmp_adr));
|
|
||||||
|
|
||||||
auto *reply = modbusDevice->sendRawRequest(requestOfDeviceType, tmp_adr);
|
auto *reply = modbusDevice->sendRawRequest(requestOfDeviceType, tmp_adr);
|
||||||
//auto *reply = modbusDevice->sendReadRequest(*_unit, tmp_adr);
|
//auto *reply = modbusDevice->sendReadRequest(*_unit, tmp_adr);
|
||||||
@ -1489,6 +1491,7 @@ bool M3KTE::autoBaudRateScan()
|
|||||||
if(result == QString("KTE"))
|
if(result == QString("KTE"))
|
||||||
{
|
{
|
||||||
countOfDeviceOnLine++;
|
countOfDeviceOnLine++;
|
||||||
|
KTE[i].append(tmp_adr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1496,12 +1499,95 @@ bool M3KTE::autoBaudRateScan()
|
|||||||
if(countOfDeviceOnLine>0)
|
if(countOfDeviceOnLine>0)
|
||||||
resultOfScan += QString("%1 плат M3KTE работают на скорости %2.\n").arg(countOfDeviceOnLine).arg(m_baud[i]);
|
resultOfScan += QString("%1 плат M3KTE работают на скорости %2.\n").arg(countOfDeviceOnLine).arg(m_baud[i]);
|
||||||
countOfDeviceOnLine = 0;
|
countOfDeviceOnLine = 0;
|
||||||
|
modbusDevice->disconnectDevice();
|
||||||
}
|
}
|
||||||
if(m_scanBoard->exec()==QDialog::Accepted)
|
if(m_scanBoard->exec()==QDialog::Accepted)
|
||||||
{
|
{
|
||||||
if(m_scanBoard->getCheckState()==Qt::Checked)
|
if(m_scanBoard->getCheckState()==Qt::Checked)
|
||||||
{
|
{
|
||||||
|
for(int i = 0; i < 8; i++)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < KTE[i].size(); j++)
|
||||||
|
{
|
||||||
|
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]));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QModbusDataUnit* _unit = new QModbusDataUnit(QModbusDataUnit::HoldingRegisters, 173, 1);
|
||||||
|
_unit->setValue(0, m_scanBoard->getBaud());
|
||||||
|
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()) {
|
||||||
|
statusBar()->showMessage(tr("Connect failed: ") + modbusDevice->errorString(), 5000);
|
||||||
|
}
|
||||||
|
auto *reply = modbusDevice->sendWriteRequest(*_unit, KTE[i].at(j));
|
||||||
|
if(!reply)
|
||||||
|
{
|
||||||
|
onConnectClicked();
|
||||||
|
bar->close();
|
||||||
|
bar->deleteLater();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
while(!reply->isFinished())
|
||||||
|
{
|
||||||
|
if(isRun)
|
||||||
|
{
|
||||||
|
dfQMessageBox::warning(this, "Ошибка при получении текущих настроек.", QString("Прерывание по запросу пользователя."));
|
||||||
|
onConnectClicked();
|
||||||
|
bar->close();
|
||||||
|
bar->deleteLater();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
QCoreApplication::processEvents();
|
||||||
|
}
|
||||||
|
if(reply->error()==QModbusDevice::TimeoutError)
|
||||||
|
{
|
||||||
|
modbusDevice->disconnectDevice();
|
||||||
|
modbusDevice->setConnectionParameter(QModbusDevice::SerialBaudRateParameter,
|
||||||
|
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))
|
||||||
|
{
|
||||||
|
while(!subreply->isFinished())
|
||||||
|
{
|
||||||
|
if(isRun)
|
||||||
|
{
|
||||||
|
dfQMessageBox::warning(this, "Ошибка при получении текущих настроек.", QString("Прерывание по запросу пользователя."));
|
||||||
|
onConnectClicked();
|
||||||
|
bar->close();
|
||||||
|
bar->deleteLater();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
QCoreApplication::processEvents();
|
||||||
|
}
|
||||||
|
if(subreply->error()!=QModbusDevice::NoError)
|
||||||
|
{
|
||||||
|
QMessageBox::warning()
|
||||||
|
onConnectClicked();
|
||||||
|
bar->close();
|
||||||
|
bar->deleteLater();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(reply->error()!=QModbusDevice::NoError)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
modbusDevice->disconnectDevice();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -27,3 +27,13 @@ void ScanBoard::showMeTheTruth(QString resultOfScan)
|
|||||||
{
|
{
|
||||||
ui->logger->append(resultOfScan);
|
ui->logger->append(resultOfScan);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
quint16 ScanBoard::getBaud()
|
||||||
|
{
|
||||||
|
return baud;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ScanBoard::on_baudRateBox_currentTextChanged(const QString &arg1)
|
||||||
|
{
|
||||||
|
baud = arg1.toInt(nullptr, 10);
|
||||||
|
}
|
||||||
|
@ -17,11 +17,15 @@ public:
|
|||||||
|
|
||||||
Qt::CheckState getCheckState();
|
Qt::CheckState getCheckState();
|
||||||
void showMeTheTruth(QString resultOfScan);
|
void showMeTheTruth(QString resultOfScan);
|
||||||
|
quint16 getBaud();
|
||||||
private slots:
|
private slots:
|
||||||
void on_applyToAllBox_stateChanged(int arg1);
|
void on_applyToAllBox_stateChanged(int arg1);
|
||||||
|
|
||||||
|
void on_baudRateBox_currentTextChanged(const QString &arg1);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Qt::CheckState checkState;
|
Qt::CheckState checkState;
|
||||||
|
quint16 baud;
|
||||||
|
|
||||||
Ui::ScanBoard *ui;
|
Ui::ScanBoard *ui;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user