QModbusDataUnit + float

206
24 марта 2018, 16:39

Добрый день! Подскажие как получить 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. Как решить проблему?

Answer 1

Проблема в том, что размер регистра, как я понял, составляет 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];
READ ALSO
Неочевидная утечка памяти

Неочевидная утечка памяти

Есть два сервера с идентичным ПО, железом и рабочим окружениемОС старый добрый 6 дебиан

168
Как найти следующее четное число?

Как найти следующее четное число?

на вход дается положительное целое число, нужно найти последующее четное число, причем программа должна быть БЕЗ использования условного...

267
Как в JFrame взаимодействовать с переменными, созданными в разных методах actionPerformed?

Как в JFrame взаимодействовать с переменными, созданными в разных методах actionPerformed?

В методе actionPerformed одной JButton у меня выполняются определенные операции с переменными, например:

146
Цикл по связанным объектам

Цикл по связанным объектам

Имеется объект типа Entry со своими полями где хранятся ключ (Long) и значение (String) и ссылка на следующий объект этого же типаЭти объекты в свою...

232