Skip to content

Commit b8d0894

Browse files
committed
Refactor ModbusRegister
1 parent 77f791f commit b8d0894

15 files changed

Lines changed: 266 additions & 305 deletions
Lines changed: 33 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,54 @@
1-
#include "modbusregister.h"
1+
#include "datapoint.h"
22

33
#include <bit>
44

5-
ModbusRegister::ModbusRegister()
6-
: ModbusRegister(ModbusAddress(0), Device::cFirstDeviceId, ModbusDataType::Type::UNSIGNED_16)
5+
DataPoint::DataPoint() : DataPoint(QString(), Device::cFirstDeviceId, ModbusDataType::Type::UNSIGNED_16)
76
{
8-
97
}
108

11-
ModbusRegister::ModbusRegister(ModbusAddress const& address, deviceId_t deviceId, ModbusDataType::Type type)
9+
DataPoint::DataPoint(QString const& address, deviceId_t deviceId, ModbusDataType::Type type)
1210
: _address(address), _deviceId(deviceId), _type(type)
1311
{
14-
1512
}
1613

17-
ModbusAddress ModbusRegister::address() const
14+
QString DataPoint::address() const
1815
{
1916
return _address;
2017
}
2118

22-
void ModbusRegister::setAddress(ModbusAddress const& address)
19+
void DataPoint::setAddress(const QString& address)
2320
{
2421
_address = address;
2522
}
2623

27-
deviceId_t ModbusRegister::deviceId() const
24+
deviceId_t DataPoint::deviceId() const
2825
{
2926
return _deviceId;
3027
}
3128

32-
void ModbusRegister::setDeviceId(deviceId_t deviceId)
29+
void DataPoint::setDeviceId(deviceId_t deviceId)
3330
{
3431
_deviceId = deviceId;
3532
}
3633

37-
void ModbusRegister::setType(ModbusDataType::Type type)
34+
void DataPoint::setType(ModbusDataType::Type type)
3835
{
3936
_type = type;
4037
}
4138

42-
ModbusDataType::Type ModbusRegister::type() const
39+
ModbusDataType::Type DataPoint::type() const
4340
{
4441
return _type;
4542
}
4643

47-
QString ModbusRegister::description() const
44+
QString DataPoint::description() const
4845
{
4946
QString connStr = QString("device id %1").arg(deviceId());
5047

51-
return QString("%1, %2, %3").arg(address().toString(), ModbusDataType::description(_type), connStr);
48+
return QString("%1, %2, %3").arg(_address, ModbusDataType::description(_type), connStr);
5249
}
5350

54-
double ModbusRegister::processValue(uint16_t lowerRegister, uint16_t upperRegister, bool int32LittleEndian) const
51+
double DataPoint::processValue(uint16_t lowerRegister, uint16_t upperRegister, bool int32LittleEndian) const
5552
{
5653
double processedResult = 0u;
5754

@@ -89,25 +86,25 @@ double ModbusRegister::processValue(uint16_t lowerRegister, uint16_t upperRegist
8986
return processedResult;
9087
}
9188

92-
ModbusRegister& ModbusRegister::operator= (const ModbusRegister& modbusRegister)
89+
DataPoint& DataPoint::operator=(const DataPoint& dataPoint)
9390
{
9491
// self-assignment guard
95-
if (this == &modbusRegister)
92+
if (this == &dataPoint)
9693
{
9794
return *this;
9895
}
9996

100-
_address = modbusRegister.address();
101-
_deviceId = modbusRegister.deviceId();
102-
_type = modbusRegister.type();
97+
_address = dataPoint.address();
98+
_deviceId = dataPoint.deviceId();
99+
_type = dataPoint.type();
103100

104101
// return the existing object so we can chain this operator
105102
return *this;
106103
}
107104

108-
bool operator== (const ModbusRegister& reg1, const ModbusRegister& reg2)
105+
bool operator==(const DataPoint& dp1, const DataPoint& dp2)
109106
{
110-
if ((reg1._address == reg2._address) && (reg1._deviceId == reg2._deviceId) && (reg1._type == reg2._type))
107+
if ((dp1._address == dp2._address) && (dp1._deviceId == dp2._deviceId) && (dp1._type == dp2._type))
111108
{
112109
return true;
113110
}
@@ -117,18 +114,16 @@ bool operator== (const ModbusRegister& reg1, const ModbusRegister& reg2)
117114
}
118115
}
119116

120-
QDebug operator<<(QDebug debug, const ModbusRegister &reg)
117+
QDebug operator<<(QDebug debug, const DataPoint& dp)
121118
{
122119
QDebugStateSaver saver(debug);
123120

124-
debug.nospace().noquote() << '['
125-
<< reg.description()
126-
<< ']';
121+
debug.nospace().noquote() << '[' << dp.description() << ']';
127122

128123
return debug;
129124
}
130125

131-
QString ModbusRegister::dumpListToString(QList<ModbusRegister> list)
126+
QString DataPoint::dumpListToString(QList<DataPoint> list)
132127
{
133128
QString str;
134129
QDebug dStream(&str);
@@ -138,7 +133,7 @@ QString ModbusRegister::dumpListToString(QList<ModbusRegister> list)
138133
return str;
139134
}
140135

141-
uint32_t ModbusRegister::convertEndianness(bool bLittleEndian, quint16 value, quint16 nextValue) const
136+
uint32_t DataPoint::convertEndianness(bool bLittleEndian, quint16 value, quint16 nextValue) const
142137
{
143138
uint32_t combinedValue;
144139
if (bLittleEndian)
@@ -153,20 +148,19 @@ uint32_t ModbusRegister::convertEndianness(bool bLittleEndian, quint16 value, qu
153148
return combinedValue;
154149
}
155150

156-
double ModbusRegister::convertUint32ToFloat(quint32 value) const
151+
double DataPoint::convertUint32ToFloat(quint32 value) const
157152
{
158153
const double doubleValue = std::bit_cast<float>(value);
159154

160-
switch(std::fpclassify(doubleValue))
155+
switch (std::fpclassify(doubleValue))
161156
{
162-
case FP_INFINITE:
163-
case FP_NAN:
164-
case FP_ZERO:
165-
return 0.0f;
166-
case FP_NORMAL:
167-
case FP_SUBNORMAL:
168-
default:
169-
return doubleValue;
157+
case FP_INFINITE:
158+
case FP_NAN:
159+
case FP_ZERO:
160+
return 0.0f;
161+
case FP_NORMAL:
162+
case FP_SUBNORMAL:
163+
default:
164+
return doubleValue;
170165
}
171166
}
172-

src/communication/datapoint.h

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#ifndef DATAPOINT_H
2+
#define DATAPOINT_H
3+
4+
#include "models/device.h"
5+
#include "util/modbusdatatype.h"
6+
#include <QDebug>
7+
#include <QObject>
8+
#include <QString>
9+
10+
class DataPoint
11+
{
12+
public:
13+
DataPoint();
14+
DataPoint(QString const& address, deviceId_t deviceId, ModbusDataType::Type type);
15+
16+
QString address() const;
17+
void setAddress(const QString& address);
18+
19+
deviceId_t deviceId() const;
20+
void setDeviceId(deviceId_t deviceId);
21+
22+
void setType(ModbusDataType::Type type);
23+
ModbusDataType::Type type() const;
24+
25+
QString description() const;
26+
27+
double processValue(uint16_t lowerRegister, uint16_t upperRegister, bool int32LittleEndian) const;
28+
29+
DataPoint(const DataPoint& copy) : _address{ copy.address() }, _deviceId{ copy.deviceId() }, _type{ copy.type() }
30+
{
31+
}
32+
33+
DataPoint& operator=(const DataPoint& dataPoint);
34+
35+
friend bool operator==(const DataPoint& dp1, const DataPoint& dp2);
36+
37+
static QString dumpListToString(QList<DataPoint> list);
38+
39+
private:
40+
uint32_t convertEndianness(bool bLittleEndian, quint16 value, quint16 nextValue) const;
41+
double convertUint32ToFloat(quint32 value) const;
42+
43+
QString _address;
44+
deviceId_t _deviceId;
45+
ModbusDataType::Type _type;
46+
};
47+
48+
QDebug operator<<(QDebug debug, const DataPoint& dp);
49+
50+
#endif // DATAPOINT_H

src/communication/modbuspoll.cpp

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ void ModbusPoll::initAdapter()
4747
_pAdapterClient->prepareAdapter(adapterPath);
4848
}
4949

50-
void ModbusPoll::startCommunication(QList<ModbusRegister>& registerList)
50+
void ModbusPoll::startCommunication(QList<DataPoint>& registerList)
5151
{
5252
_registerList = registerList;
5353
_bPollActive = true;
@@ -119,15 +119,13 @@ void ModbusPoll::onDescribeResult(const QJsonObject& description)
119119
_pSettingsModel->updateAdapterFromDescribe("modbus", description);
120120
}
121121

122-
QStringList ModbusPoll::buildRegisterExpressions(const QList<ModbusRegister>& registerList)
122+
QStringList ModbusPoll::buildRegisterExpressions(const QList<DataPoint>& registerList)
123123
{
124124
QStringList expressions;
125-
for (const ModbusRegister& reg : registerList)
125+
for (const DataPoint& reg : registerList)
126126
{
127-
QString expr = QString("${%1 @ %2 : %3}")
128-
.arg(reg.address().fullAddress())
129-
.arg(reg.deviceId())
130-
.arg(ModbusDataType::typeString(reg.type()));
127+
QString expr =
128+
QString("${%1 @ %2 : %3}").arg(reg.address()).arg(reg.deviceId()).arg(ModbusDataType::typeString(reg.type()));
131129
expressions.append(expr);
132130
}
133131
return expressions;

src/communication/modbuspoll.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
#include "ProtocolAdapter/adapterclient.h"
55
#include "ProtocolAdapter/adapterprocess.h"
6-
#include "communication/modbusregister.h"
6+
#include "communication/datapoint.h"
77
#include "util/result.h"
88

99
#include <QJsonObject>
@@ -21,7 +21,7 @@ class ModbusPoll : public QObject
2121
~ModbusPoll();
2222

2323
void initAdapter();
24-
void startCommunication(QList<ModbusRegister>& registerList);
24+
void startCommunication(QList<DataPoint>& registerList);
2525
void stopCommunication();
2626

2727
bool isActive();
@@ -36,9 +36,9 @@ private slots:
3636
void onDescribeResult(const QJsonObject& description);
3737

3838
private:
39-
QStringList buildRegisterExpressions(const QList<ModbusRegister>& registerList);
39+
QStringList buildRegisterExpressions(const QList<DataPoint>& registerList);
4040

41-
QList<ModbusRegister> _registerList;
41+
QList<DataPoint> _registerList;
4242

4343
bool _bPollActive;
4444
QTimer* _pPollTimer;

src/communication/modbusregister.h

Lines changed: 0 additions & 52 deletions
This file was deleted.

0 commit comments

Comments
 (0)