Алексей: сделал определение плат по char, а не hex
т.е. не 0x1-0x4, а "1"-"4" (0x31-0x34)
This commit is contained in:
parent
9071eb4322
commit
e402334153
@ -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;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user