fixed float value conversion

This commit is contained in:
Boernsman 2021-04-21 21:05:15 +02:00 committed by Michael Zanetti
parent cd91ae28c8
commit 465936f9ac
2 changed files with 22 additions and 16 deletions

View File

@ -150,12 +150,12 @@ void EnergyMeter::getRegister(ModbusRegisterType type, ModbusRegisterDescriptor
emit connectedChanged(m_connected); emit connectedChanged(m_connected);
} }
} }
double value = 0; modbus_32_t value;
if (reply->result().length() == 1) { if (reply->result().length() == 1) {
value = static_cast<float>(reply->result().at(0)); value.u = static_cast<float>(reply->result().at(0));
} else if (reply->result().length() == 2) { } else if (reply->result().length() == 2) {
if (descriptor.dataType() == "float") { if (descriptor.dataType() == "float") {
value = static_cast<float>(reply->result().at(0) << 16 | reply->result().at(1)); value.u = static_cast<float>(static_cast<uint32_t>(reply->result().at(0)) << 16 | reply->result().at(1));
} else { } else {
qCWarning(dcEnergyMeters()) << "Data type not supported" << descriptor.dataType(); qCWarning(dcEnergyMeters()) << "Data type not supported" << descriptor.dataType();
} }
@ -163,35 +163,35 @@ void EnergyMeter::getRegister(ModbusRegisterType type, ModbusRegisterDescriptor
if (type == ModbusRegisterType::Voltage) { if (type == ModbusRegisterType::Voltage) {
if (descriptor.unit() == "mV") if (descriptor.unit() == "mV")
value /= 1000; value.f /= 1000.00;
emit voltageReceived(value); emit voltageReceived(value.f);
} else if (type == ModbusRegisterType::Current) { } else if (type == ModbusRegisterType::Current) {
if (descriptor.unit() == "mA") if (descriptor.unit() == "mA")
value /= 1000; value.f /= 1000.00;
emit currentReceived(value); emit currentReceived(value.f);
} else if (type == ModbusRegisterType::ActivePower) { } else if (type == ModbusRegisterType::ActivePower) {
if (descriptor.unit() == "kW") { if (descriptor.unit() == "kW") {
value *= 1000; value.f *= 1000;
} else if (descriptor.unit() == "mW") { } else if (descriptor.unit() == "mW") {
value /= 1000; value.f /= 1000.00;
} }
emit activePowerReceived(value); emit activePowerReceived(value.f);
} else if (type == ModbusRegisterType::PowerFactor) { } else if (type == ModbusRegisterType::PowerFactor) {
emit powerFactorReceived(value); emit powerFactorReceived(value.f);
} else if (type == ModbusRegisterType::Frequency) { } else if (type == ModbusRegisterType::Frequency) {
emit frequencyReceived(value); emit frequencyReceived(value.f);
} else if (type == ModbusRegisterType::EnergyConsumed) { } else if (type == ModbusRegisterType::EnergyConsumed) {
if (descriptor.unit() == "Wh") { if (descriptor.unit() == "Wh") {
value /= 1000; value.f /= 1000.00;
} }
emit consumedEnergyReceived(value); emit consumedEnergyReceived(value.f);
} else if (type == ModbusRegisterType::EnergyProduced) { } else if (type == ModbusRegisterType::EnergyProduced) {
if (descriptor.unit() == "Wh") { if (descriptor.unit() == "Wh") {
value /= 1000; value.f /= 1000.00;
} }
emit producedEnergyReceived(value); emit producedEnergyReceived(value.f);
} }
}); });
} }

View File

@ -55,6 +55,12 @@ public:
bool getEnergyConsumed(); bool getEnergyConsumed();
private: private:
typedef union {
int32_t s;
uint32_t u;
float f;
} modbus_32_t;
bool m_connected = false; bool m_connected = false;
ModbusRtuMaster *m_modbusRtuMaster = nullptr; ModbusRtuMaster *m_modbusRtuMaster = nullptr;