diff --git a/M3KTE_TERM/m3kte.cpp b/M3KTE_TERM/m3kte.cpp index 4f800ad..07fbf10 100644 --- a/M3KTE_TERM/m3kte.cpp +++ b/M3KTE_TERM/m3kte.cpp @@ -761,8 +761,7 @@ void M3KTE::onWriteButtonClicked() QModbusDataUnit writeUnit = writeRequest(); QModbusDataUnit::RegisterType table = writeUnit.registerType(); for(int i = 0, total = int(writeUnit.valueCount()); i < total; ++i) { - if(table == QModbusDataUnit::Coils) - { + 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()]); @@ -1230,7 +1229,6 @@ bool M3KTE::pingNetworkDevices() QModbusRequest requestOfBoardID(QModbusRequest::EncapsulatedInterfaceTransport, QByteArray::fromHex("0E0401")); modbusDevice->setTimeout(50); for(CurrentConnectedDevice=0; CurrentConnectedDevice<4;) { - auto *reply = modbusDevice->sendRawRequest(requestOfDeviceType, tmp_adr); //Запрос типа устройства. if(reply == nullptr) { @@ -1279,27 +1277,9 @@ bool M3KTE::pingNetworkDevices() } int plata_ind = 0; if(subreply->rawResult().data().size() >= MODBUS_REQUEST_PROTOCOL_INFO_LENGTH) // ответ принят - plata_ind = subreply->rawResult().data().at(MODBUS_REQUEST_PROTOCOL_INFO_LENGTH); // парс ответа - if(plata_ind == 0) // если номер = 0 повторяем всё еще раз - { - qDebug() << "Reqest plata_ind again for address " << tmp_adr; - subreply = modbusDevice->sendRawRequest(requestOfBoardID, tmp_adr); + plata_ind = subreply->rawResult().data().at(MODBUS_REQUEST_PROTOCOL_INFO_LENGTH) - 0x30; // парс ответа - while(!subreply->isFinished()) { - if(isRun && CurrentConnectedDevice < 1) { - onConnectClicked(); - bar->close(); - bar->deleteLater(); - return false; - } else if(isRun) { - break; - } - QCoreApplication::processEvents(); - } - plata_ind = subreply->rawResult().data().at(MODBUS_REQUEST_PROTOCOL_INFO_LENGTH); - } - if(plata_ind == 0) - { + if(plata_ind < 1 || plata_ind > 4) { QMessageBox::warning(this, "Ошибка при сканировании сети.", QString("Не удалось получить порядковый номер платы по адресу %1").arg(tmp_adr)); onConnectClicked(); @@ -1307,7 +1287,6 @@ bool M3KTE::pingNetworkDevices() bar->deleteLater(); return false; } - int board_ind = plata_ind-1; if(isRun && CurrentConnectedDevice < 1) { onConnectClicked(); @@ -1329,8 +1308,6 @@ bool M3KTE::pingNetworkDevices() } CurrentConnectedDevice++; Boards[board_ind].adr = Boards[board_ind]._tmp_adr = tmp_adr; - - Boards[board_ind].isActive = true; bar->setValue(CurrentConnectedDevice); } @@ -1459,24 +1436,19 @@ void M3KTE::boardScan(unsigned boardID) if (auto *reply = modbusDevice->sendReadRequest(statusUnit, Boards[boardID].adr)) { Boards[boardID].timerToStatusResponse.start(); - if (!reply->isFinished()) { connect(reply, &QModbusReply::finished, this, [this, boardID, reply]() { if(!Boards[boardID].isActive) return; - // Обработка ответа статуса 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); - // Запрос полных данных QModbusDataUnit dataUnit(QModbusDataUnit::InputRegisters, 0, 85-(boardID/3*20)); if (auto *dataReply = modbusDevice->sendReadRequest(dataUnit, Boards[boardID].adr)) { Boards[boardID].timerToDataResponse.start(); - if (!dataReply->isFinished()) { connect(dataReply, &QModbusReply::finished, this, [this, boardID, dataReply, StatusReg]() { if(!Boards[boardID].isActive) @@ -1508,7 +1480,6 @@ void M3KTE::boardScan(unsigned boardID) unsigned timerInterval = m_deviceSettingsDialog->currentBoardTimer(boardID); Boards[boardID].boardScanners->start(timerInterval); } - } else { // Ошибка в ответе статуса if (Boards[boardID].isActive && !(reply->error() == QModbusDevice::ReplyAbortedError)) { @@ -1518,7 +1489,6 @@ void M3KTE::boardScan(unsigned boardID) unsigned timerInterval = m_deviceSettingsDialog->currentBoardTimer(boardID); Boards[boardID].boardScanners->start(timerInterval); } - reply->deleteLater(); }); } else { @@ -1552,7 +1522,6 @@ void M3KTE::displayResultOfScan(QModbusReply *reply, int boardID, int status) const QModbusDataUnit unit = reply->result(); bool W_Flag = false; bool A_Flag = false; - 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, @@ -1560,10 +1529,8 @@ void M3KTE::displayResultOfScan(QModbusReply *reply, int boardID, int status) reply->deleteLater(); return; } - statusreg StatusReg; StatusReg.AllReg = status; - // Обрабатываем статус MZKT QString statusText; int state = StatusReg.ParsingReg.mzkte_status; @@ -1608,7 +1575,7 @@ void M3KTE::displayResultOfScan(QModbusReply *reply, int boardID, int status) statusText += QString(" (EEPROM Error)"); break; case 11: - statusText += QString(" (Unstable discharge level)"); + statusText += QString(" (Unstable discharge)"); break; case 12: statusText += QString(" (RS/UART Errors)"); @@ -1619,22 +1586,15 @@ void M3KTE::displayResultOfScan(QModbusReply *reply, int boardID, int status) } } Boards[boardID].localError->setText(statusText); - - Boards[boardID].localState[LOCAL_STATE_POLL]->setChecked(StatusReg.ParsingReg.poll_allowed); Boards[boardID].localState[LOCAL_STATE_WARN]->setChecked(StatusReg.ParsingReg.warning); Boards[boardID].localState[LOCAL_STATE_ERR]->setChecked(StatusReg.ParsingReg.accident); - - QString W_Adr; QString A_Adr; int total_qnt; - if(boardID == 3) - { + if(boardID == 3) { total_qnt = 65; - } - else - { + } else { total_qnt = 85; } for(int i = unit.startAddress(), total = total_qnt; i < total; ++i) { @@ -1838,10 +1798,8 @@ void M3KTE::writeSingleCoil(int boardId, int coilAddress, bool value) { if (!modbusDevice || !Boards[boardId].isActive) return; - QModbusDataUnit unit(QModbusDataUnit::Coils, coilAddress, 1); unit.setValue(0, value ? 1 : 0); - if (auto *reply = modbusDevice->sendWriteRequest(unit, Boards[boardId].adr)) { if (!reply->isFinished()) { connect(reply, &QModbusReply::finished, this, [this, boardId, reply]() { @@ -1862,10 +1820,8 @@ void M3KTE::writeSingleRegister(int boardID, int regAddress, quint16 value) { if (!modbusDevice || !Boards[boardID].isActive) return; - QModbusDataUnit unit(QModbusDataUnit::HoldingRegisters, regAddress, 1); unit.setValue(0, value); - if (auto *reply = modbusDevice->sendWriteRequest(unit, Boards[boardID].adr)) { if (!reply->isFinished()) { connect(reply, &QModbusReply::finished, this, [this, boardID, reply]() { @@ -1886,9 +1842,7 @@ QModbusReply* M3KTE::readSingleCoil(int boardID, int coilAddress) { if (!modbusDevice || !Boards[boardID].isActive) return nullptr; - QModbusDataUnit unit(QModbusDataUnit::Coils, coilAddress, 1); - auto *reply = modbusDevice->sendReadRequest(unit, Boards[boardID].adr); return reply; }