Добрый день! Подскажие как получить 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];
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть два сервера с идентичным ПО, железом и рабочим окружениемОС старый добрый 6 дебиан
на вход дается положительное целое число, нужно найти последующее четное число, причем программа должна быть БЕЗ использования условного...
В методе actionPerformed одной JButton у меня выполняются определенные операции с переменными, например:
Имеется объект типа Entry со своими полями где хранятся ключ (Long) и значение (String) и ссылка на следующий объект этого же типаЭти объекты в свою...