Обновление алгоритма для корректного опроса четвёртой платы.
This commit is contained in:
parent
c2a32e3ff5
commit
5ae694d254
@ -359,12 +359,12 @@ M3KTE::M3KTE(QWidget *parent)
|
||||
ui->writeTable->addItem(tr("Warnings"), QModbusDataUnit::HoldingRegisters);
|
||||
ui->writeTable->addItem(tr("Accidents"), QModbusDataUnit::HoldingRegisters);
|
||||
for(int i = 0; i < 4; i++) {
|
||||
Boards[i].ModbusModelCoil = new WriteRegisterModel(this, 85 - (i/4*20), false);
|
||||
Boards[i].ModbusModelCoil = new WriteRegisterModel(this, 85 - (i/3*20), false);
|
||||
Boards[i].ModbusModelCoil->setStartAddress(0);
|
||||
Boards[i].ModbusModelCoil->setNumberOfValues(QString::number(85-(i/4*20)));
|
||||
Boards[i].ModbusModelHoldingReg = new WriteRegisterModel(this, (85 - (i/4*20))*2, true);
|
||||
Boards[i].ModbusModelCoil->setNumberOfValues(QString::number(85-(i/3*20)));
|
||||
Boards[i].ModbusModelHoldingReg = new WriteRegisterModel(this, (85 - (i/3*20))*2, true);
|
||||
Boards[i].ModbusModelHoldingReg->setStartAddress(0);
|
||||
Boards[i].ModbusModelHoldingReg->setNumberOfValues(QString::number(85-(i/4*20)));
|
||||
Boards[i].ModbusModelHoldingReg->setNumberOfValues(QString::number(85-(i/3*20)));
|
||||
}
|
||||
m_deviceSettingsDialog = new DeviceSettingsDialog(this);
|
||||
m_debugTerminalDialog = new DebugTerminalDialog(this);
|
||||
@ -1371,12 +1371,12 @@ bool M3KTE::pingNetworkDevices()
|
||||
modbusDevice->setTimeout(m_settingsDialog->settings().responseTime);
|
||||
bar->setLabelText(tr("Считывание текущих настроек..."));
|
||||
bar->setRange(0, CurrentConnectedDevice*3);
|
||||
QModbusDataUnit* _unit_settings[3];
|
||||
_unit_settings[0] = new QModbusDataUnit(QModbusDataUnit::Coils, 0, 85);
|
||||
_unit_settings[1] = new QModbusDataUnit(QModbusDataUnit::HoldingRegisters, 0, 85);
|
||||
_unit_settings[2] = new QModbusDataUnit(QModbusDataUnit::HoldingRegisters, 85, 85);
|
||||
for(int i = 0; i < 4; i++) {
|
||||
if(Boards[i].isActive) {
|
||||
QModbusDataUnit* _unit_settings[3];
|
||||
_unit_settings[0] = new QModbusDataUnit(QModbusDataUnit::Coils, 0, 85-(i/3*20));
|
||||
_unit_settings[1] = new QModbusDataUnit(QModbusDataUnit::HoldingRegisters, 0, 85-(i/3*20));
|
||||
_unit_settings[2] = new QModbusDataUnit(QModbusDataUnit::HoldingRegisters, 85, 85-(i/3*20));
|
||||
Boards_Fields[i]->setEnabled(true);
|
||||
for(int j = 0; j < 3; j++) {
|
||||
bar->setValue(i*3+j);
|
||||
@ -1384,6 +1384,9 @@ bool M3KTE::pingNetworkDevices()
|
||||
onConnectClicked();
|
||||
bar->close();
|
||||
bar->deleteLater();
|
||||
delete _unit_settings[0];
|
||||
delete _unit_settings[1];
|
||||
delete _unit_settings[2];
|
||||
return false;
|
||||
}
|
||||
auto *reply = modbusDevice->sendReadRequest(*_unit_settings[j], Boards[i].adr);
|
||||
@ -1391,6 +1394,9 @@ bool M3KTE::pingNetworkDevices()
|
||||
onConnectClicked();
|
||||
bar->close();
|
||||
bar->deleteLater();
|
||||
delete _unit_settings[0];
|
||||
delete _unit_settings[1];
|
||||
delete _unit_settings[2];
|
||||
return false;
|
||||
}
|
||||
while(!reply->isFinished()) {
|
||||
@ -1400,6 +1406,9 @@ bool M3KTE::pingNetworkDevices()
|
||||
onConnectClicked();
|
||||
bar->close();
|
||||
bar->deleteLater();
|
||||
delete _unit_settings[0];
|
||||
delete _unit_settings[1];
|
||||
delete _unit_settings[2];
|
||||
return false;
|
||||
}
|
||||
QCoreApplication::processEvents();
|
||||
@ -1413,10 +1422,16 @@ bool M3KTE::pingNetworkDevices()
|
||||
bar->close();
|
||||
bar->deleteLater();
|
||||
onConnectClicked();
|
||||
delete _unit_settings[0];
|
||||
delete _unit_settings[1];
|
||||
delete _unit_settings[2];
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Boards_Fields[i]->setTitle(QString("Плата №%1 (ID %2)").arg(i+1).arg(Boards[i].adr));
|
||||
delete _unit_settings[0];
|
||||
delete _unit_settings[1];
|
||||
delete _unit_settings[2];
|
||||
}
|
||||
}
|
||||
modbusDevice->setNumberOfRetries(m_settingsDialog->settings().numberOfRetries);
|
||||
@ -1464,7 +1479,7 @@ void M3KTE::boardScan(unsigned boardID)
|
||||
StatusReg.AllReg = reply->result().value(0);
|
||||
|
||||
// Запрос полных данных
|
||||
QModbusDataUnit dataUnit(QModbusDataUnit::InputRegisters, 0, 85);
|
||||
QModbusDataUnit dataUnit(QModbusDataUnit::InputRegisters, 0, 85-(boardID/3*20));
|
||||
if (auto *dataReply = modbusDevice->sendReadRequest(dataUnit, Boards[boardID].adr)) {
|
||||
Boards[boardID].timerToDataResponse.start();
|
||||
|
||||
@ -1544,7 +1559,7 @@ void M3KTE::displayResultOfScan(QModbusReply *reply, int boardID, int status)
|
||||
bool W_Flag = false;
|
||||
bool A_Flag = false;
|
||||
|
||||
if(unit.startAddress() != 0 || unit.valueCount() != 85) {
|
||||
if(unit.startAddress() != 0 || unit.valueCount() != (unsigned)(85-(boardID/3*20))) {
|
||||
logError(tr("Плата %1 (ID %2)").arg(boardID+1).arg(Boards[boardID].adr),
|
||||
"Ошибка при приёме.", ++Boards[boardID].error_RX,
|
||||
tr("Принятый ответ: Стартовый адрес %1, Количество элементов %2").arg(unit.startAddress()).arg(unit.valueCount()));
|
||||
|
Loading…
Reference in New Issue
Block a user