Добрый день! Прошу помощи, так как я не могу понять почему так. Проблема заключается в количестве считаных HoldingRegisters. Вот так выглядит код.
if(!modbusDevice)
return;
statusBar()->clearMessage();
QModbusDataUnit readUnit(QModbusDataUnit::HoldingRegisters, 0, 10);
if(auto *reply = modbusDevice->sendReadRequest(readUnit, 1)){
if(!reply->isFinished())
connect(reply, &QModbusReply::finished, this, &MainWindow::ReadyRead);
else
delete reply;
}else {
statusBar()->showMessage(tr("Read error: " ) + modbusDevice->errorString(), 5000);
}
В таком состоянии он считывает 10 регистров, можно считывать меньше 10. Но, у меня 18 регистров. Если я меняю 10 на 18, то ничего не происходит. Что я делаю не так? Как считать 18 регистров? Может проблема со слотом ReadyRead, вот его код:
auto reply = qobject_cast<QModbusReply *>(sender());
if(!reply)
return;
if(reply->error() == QModbusDevice::NoError){
const QModbusDataUnit unit = reply->result();
for(uint i = 0; i < unit.valueCount(); i++ ){
const QString entry = tr("Addres:: %1, Value: %2").arg(unit.startAddress()).arg(QString::number(unit.value(i),
unit.registerType() <= QModbusDataUnit::Coils ? 10 :16));
ui->textEdit->append(entry);
}
} else if(reply->error() == QModbusDevice::ProtocolError) {
statusBar()->showMessage(tr("Read error: %1, Modbus 0x%2 ").arg(reply->errorString()).arg(reply->error(), -1, 16), 5000);
} else {
statusBar()->showMessage(tr("Read error: %1, code 0x%2").arg(reply->errorString().arg(reply->error(), -1, 16), 5000));
}
reply->deleteLater();
Разобрался с этой проблемой. В коде написано всё нормально, просто нужно было внимательно почитать Modbus и для чтения регистров использовать
QModbusDataUnit::QModbusDataUnit(RegisterType type, int address, const QVector<quint16> &data)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Ничего не понимаю, каким образом мне передать в конструктор QScopedPointer функцию deleter'a, как я это делал в std::unique_ptr?
При создании любого проекта, консольного, классического, вылезает такая ошибка, может кто сталкивался с такой проблемой? C# работает прекрасно,...
Здравствуйте, как можно передать анонимную функцию из Delphi в C++? Delphi: