Hot Fix 1.
>Отображение кнопок статуса МЗКТЭ было изменено. >Операция записи раньше использовала ИД вместо адреса - исправлено. >Стартовый адрес опроса плат смещён с нуля до первого. >При поиске плат в сети использовался адрес по умолчанию вместо итератора - исправлено. >При поиске плат в сети добавлена проверка на наличие ошибок при приёме. >Проверка на поведение терминала при отсутствии плат в сети - пройдена. >Изменено поведение progressbar при поиске плат и опросе их текущих настроек. >Добавлено сообщение об ошибке во время опроса плат об их текущих настройках. >Добавлено сообщение об ошибке при некорректном ответе во время опроса текущего напряжения.
This commit is contained in:
parent
5b2a64a39b
commit
d7063703b6
@ -472,6 +472,10 @@ M3KTE::M3KTE(QWidget *parent)
|
|||||||
Boards[2].adr = 3;
|
Boards[2].adr = 3;
|
||||||
Boards[3].adr = 4;
|
Boards[3].adr = 4;
|
||||||
|
|
||||||
|
ui->BSM_Warning->setEnabled(false);
|
||||||
|
ui->BSM_Accident->setEnabled(false);
|
||||||
|
ui->BSM_WorkInProgress->setEnabled(false);
|
||||||
|
|
||||||
initActions();
|
initActions();
|
||||||
|
|
||||||
ui->BST_Off->setChecked(true);
|
ui->BST_Off->setChecked(true);
|
||||||
@ -594,6 +598,9 @@ void M3KTE::onConnectClicked()
|
|||||||
ui->BST_Off->setChecked(false);
|
ui->BST_Off->setChecked(false);
|
||||||
ui->BST_On->setChecked(true);
|
ui->BST_On->setChecked(true);
|
||||||
|
|
||||||
|
ui->BSM_Warning->setEnabled(true);
|
||||||
|
ui->BSM_Accident->setEnabled(true);
|
||||||
|
ui->BSM_WorkInProgress->setEnabled(true);
|
||||||
ui->BSM_WorkInProgress->setChecked(true);
|
ui->BSM_WorkInProgress->setChecked(true);
|
||||||
|
|
||||||
if(pingNetworkDevices())
|
if(pingNetworkDevices())
|
||||||
@ -617,6 +624,9 @@ void M3KTE::onConnectClicked()
|
|||||||
ui->BSM_Warning->setChecked(false);
|
ui->BSM_Warning->setChecked(false);
|
||||||
ui->BSM_Accident->setChecked(false);
|
ui->BSM_Accident->setChecked(false);
|
||||||
ui->BSM_WorkInProgress->setChecked(false);
|
ui->BSM_WorkInProgress->setChecked(false);
|
||||||
|
ui->BSM_Warning->setEnabled(false);
|
||||||
|
ui->BSM_Accident->setEnabled(false);
|
||||||
|
ui->BSM_WorkInProgress->setEnabled(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -713,7 +723,7 @@ void M3KTE::onWriteButtonClicked()
|
|||||||
writeUnit.setValue(i, Boards[ui->boardSelectBox->currentIndex()].ModbusModelHoldingReg->m_holdingRegisters[i + writeUnit.startAddress()]);
|
writeUnit.setValue(i, Boards[ui->boardSelectBox->currentIndex()].ModbusModelHoldingReg->m_holdingRegisters[i + writeUnit.startAddress()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (auto *reply = modbusDevice->sendWriteRequest(writeUnit, ui->boardSelectBox->currentIndex()+1)) {
|
if (auto *reply = modbusDevice->sendWriteRequest(writeUnit, Boards[ui->boardSelectBox->currentIndex()].adr)) {
|
||||||
if (!reply->isFinished()) {
|
if (!reply->isFinished()) {
|
||||||
connect(reply, &QModbusReply::finished, this, [this, reply]() {
|
connect(reply, &QModbusReply::finished, this, [this, reply]() {
|
||||||
if (reply->error() == QModbusDevice::ProtocolError) {
|
if (reply->error() == QModbusDevice::ProtocolError) {
|
||||||
@ -931,7 +941,7 @@ bool M3KTE::pingNetworkDevices()
|
|||||||
connect(timer, &QTimer::timeout, this, &M3KTE::timeForPingIsGone);
|
connect(timer, &QTimer::timeout, this, &M3KTE::timeForPingIsGone);
|
||||||
timer->setSingleShot(true);
|
timer->setSingleShot(true);
|
||||||
QModbusDataUnit* _unit = new QModbusDataUnit(QModbusDataUnit::InputRegisters, 85, 1);
|
QModbusDataUnit* _unit = new QModbusDataUnit(QModbusDataUnit::InputRegisters, 85, 1);
|
||||||
int tmp_adr = 0;
|
int tmp_adr = 1;
|
||||||
|
|
||||||
auto bar = new QProgressDialog(this);
|
auto bar = new QProgressDialog(this);
|
||||||
bar->setLabelText(tr("Поиск плат..."));
|
bar->setLabelText(tr("Поиск плат..."));
|
||||||
@ -943,28 +953,34 @@ bool M3KTE::pingNetworkDevices()
|
|||||||
|
|
||||||
for(i=0; i<4;)
|
for(i=0; i<4;)
|
||||||
{
|
{
|
||||||
bar->setValue(i+1);
|
bar->setValue(i);
|
||||||
timerForPingSignal = false;
|
timerForPingSignal = false;
|
||||||
timer->start(m_settingsDialog->settings().responseTime);
|
timer->start(m_settingsDialog->settings().responseTime);
|
||||||
auto *reply = modbusDevice->sendReadRequest(*_unit, Boards[i].adr);
|
auto *reply = modbusDevice->sendReadRequest(*_unit, tmp_adr);
|
||||||
while(!reply->isFinished() && !timerForPingSignal)
|
while(!reply->isFinished() && !timerForPingSignal)
|
||||||
{
|
{
|
||||||
QCoreApplication::processEvents();
|
QCoreApplication::processEvents();
|
||||||
}
|
}
|
||||||
if(timerForPingSignal)
|
if(timerForPingSignal)
|
||||||
{}
|
{
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
timer->stop();
|
if(reply->error()==QModbusDevice::NoError)
|
||||||
Boards[i].adr = Boards[i]._tmp_adr = tmp_adr;
|
{
|
||||||
i++;
|
timer->stop();
|
||||||
|
Boards[i].adr = Boards[i]._tmp_adr = tmp_adr;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
tmp_adr++;
|
tmp_adr++;
|
||||||
if(tmp_adr>=247)
|
if(tmp_adr>=247)
|
||||||
{
|
{
|
||||||
//ERROR
|
//ERROR
|
||||||
//OUT OF RANGE
|
//OUT OF RANGE
|
||||||
QMessageBox::warning(this, "Ошибка при сканировании сети.", QString("Выход за пределы допустимых адресов. Найдено %1 плат").arg(i));
|
QMessageBox::warning(this, "Ошибка при сканировании сети.", QString("Выход за пределы допустимых адресов. Найдено %1 плат.").arg(i));
|
||||||
bar->deleteLater();
|
bar->deleteLater();
|
||||||
onConnectClicked();
|
onConnectClicked();
|
||||||
return false;
|
return false;
|
||||||
@ -982,7 +998,7 @@ bool M3KTE::pingNetworkDevices()
|
|||||||
{
|
{
|
||||||
for (int j = 0; j<3; j++)
|
for (int j = 0; j<3; j++)
|
||||||
{
|
{
|
||||||
bar->setValue(i*3+j+2);
|
bar->setValue(i*3+j);
|
||||||
timerForPingSignal = false;
|
timerForPingSignal = false;
|
||||||
timer->start(m_settingsDialog->settings().responseTime);
|
timer->start(m_settingsDialog->settings().responseTime);
|
||||||
auto *reply = modbusDevice->sendReadRequest(*_unit_settings[j], Boards[i].adr);
|
auto *reply = modbusDevice->sendReadRequest(*_unit_settings[j], Boards[i].adr);
|
||||||
@ -998,8 +1014,17 @@ bool M3KTE::pingNetworkDevices()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
timer->stop();
|
if(reply->error()==QModbusDevice::NoError)
|
||||||
stepForScanCurrentSettings(reply);
|
{
|
||||||
|
timer->stop();
|
||||||
|
stepForScanCurrentSettings(reply);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
QMessageBox::warning(this, "Ошибка при получении текущих настроек.", QString("Таймаут при опросе устройства %1 по адресу %2").arg(i).arg(Boards[i].adr));
|
||||||
|
onConnectClicked();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1208,6 +1233,14 @@ void M3KTE::displayResultOfScan(QModbusReply *reply, int boardID)
|
|||||||
ui->BSM_Warning->setEnabled(true);
|
ui->BSM_Warning->setEnabled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} 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);
|
||||||
|
} else {
|
||||||
|
statusBar()->showMessage(tr("Read response error: %1 (code: 0x%2)").
|
||||||
|
arg(reply->errorString()).
|
||||||
|
arg(reply->error(), -1, 16), 5000);
|
||||||
}
|
}
|
||||||
reply->deleteLater();
|
reply->deleteLater();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user