не могу разобраться, где я ошибся. Отправляю запрос на чтение. Данные приходят, стандартный препроцессор их обрабатывает, который в QModbusClient и я их получаю. Но они пустые - значение всегда ноль, а values() возвращает нулевой вектор. Если же сервер генерит ошибку, он спокойно парсится.
Нашел в инете пример и максимально привел мой код к коду автора(https://zhitenev.ru/vcaimodeistvie-s-ustroistvami-cherez-modbus-rtu-in-qt/), но результат прежний
Вот мой фрагмент
auto dataPair = getAllBoardsState();
auto reply_a = _modbusReaderClient->sendReadRequest(dataPair.first, 1);
connect(reply_a, &QModbusReply::finished, this, [&](){
auto reply = qobject_cast<QModbusReply*>(sender());
if (!reply){
qDebug()<<"[Cassette -> readCassetteState() -> ERROR] !reply";
}
if (reply->error()!=QModbusDevice::NoError){
qDebug() << "[Cassette -> readCassetteState() -> ERROR]" << reply->errorString() << reply->error();
std::exit(1);
}
qDebug() << "[Cassette -> readCassetteState() -> ERROR]" << reply->error();
auto result_a = reply->result();
qDebug() << "[Cassette -> readCassetteState() -> STATE]" << result_a.isValid() << reply->isFinished();
for (int i = 0; i < result_a.valueCount(); i++){
uint result = result_a.value(i);
qDebug() << QString("State A of [%1]: %2").arg(i).arg(result);
}
std::exit(0);
});
У автора аналогичный функционал в функции prepareRead(int startAddress, int count).
Ответ от сервера клиент получает(видно по пакетам), но данные из клиента получить не получается.
сырые данные смотрели?
Под сырыми данные вы имеете ввиду данные до процесса обработки?
которые в последовательный порт приходят
modbus tcp да, смотрел. они корректны
Поменял версию qt - заработало) С 5 на 6
Обсуждают сегодня