Добрый день! Подскажие как получить float значения? Код для чтения регистров.
if(!modbusDevice)
return;
statusBar()->clearMessage();
QVector<quint16> mm;
mm.append(1);
mm.append(2);
mm.append(3);
mm.append(4);
mm.append(5);
mm.append(6);
QModbusDataUnit readUnit(QModbusDataUnit::HoldingRegisters, 4, mm);
if(auto *reply = modbusDevice->sendReadRequest(readUnit, 1)){
if(!reply->isFinished())
connect(reply, &QModbusReply::finished, this, &MainWindow::ReadyRead);
else
delete reply;
}else {
ui->textEdit->append(modbusDevice->errorString());
}
Integer считывает отлично, а вот float показывает странные числа. Например: В регистре число 4.12, но считываем его как 2 регистра со значениями 55050 и 16515. Как решить проблему?
Проблема в том, что размер регистра, как я понял, составляет 2 байта (quint16), а float хранится в 4-х байтах. Можно преобразовать 2 регистра quint16 в float:
QVector<quint16> mm;
mm.push_back(55050);
mm.push_back(16515);
quint16 valBuf[2] = { mm[0], mm[1] };
float result = *(float*)valBuf;
Или же вычитывать регистры как quint32 (QVector<quint32> mm;) и тогда:
float result = *(float*)&mm[0];
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости