From bd5f3be35d125845773e84c23500a4126e0d0f0d Mon Sep 17 00:00:00 2001 From: Hermann Detz Date: Fri, 16 Oct 2020 09:20:02 +0200 Subject: [PATCH] Helper functions to convert modbus reg to float --- modbus/modbushelpers.cpp | 52 ++++++++++++++++++++++++++++++++++++++++ modbus/modbushelpers.h | 42 ++++++++++++++++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 modbus/modbushelpers.cpp create mode 100644 modbus/modbushelpers.h diff --git a/modbus/modbushelpers.cpp b/modbus/modbushelpers.cpp new file mode 100644 index 0000000..96b5394 --- /dev/null +++ b/modbus/modbushelpers.cpp @@ -0,0 +1,52 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2020, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project is distributed in the hope that +* it will be useful, but WITHOUT ANY WARRANTY; without even the implied +* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#include "modbushelpers.h" + +#include + +float ModbusHelpers::convertRegisterToFloat(const quint16 *reg) { + float result = 0.0; + + if (reg != nullptr) { + /* low-order byte is sent first, so swap order */ + quint32 tmp = 0.0; + + tmp |= ((quint32)(reg[1]) << 16) & 0xFFFF0000; + tmp |= reg[0]; + + /* copy value over to float variable without any conversion */ + /* needs to be done with char * to avoid pedantic compiler errors */ + memcpy((char *)&result, (char *)&tmp, sizeof(result)); + } + + return result; +} + diff --git a/modbus/modbushelpers.h b/modbus/modbushelpers.h new file mode 100644 index 0000000..c9e7af2 --- /dev/null +++ b/modbus/modbushelpers.h @@ -0,0 +1,42 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2020, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project is distributed in the hope that +* it will be useful, but WITHOUT ANY WARRANTY; without even the implied +* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef MODBUSHELPERS_H +#define MODBUSHELPERS_H + +#include + +class ModbusHelpers { +public: + static float convertRegisterToFloat(const quint16 *reg); +}; + +#endif +