Skip to content

Commit 0f21be7

Browse files
author
Ананьев Александр
committed
Merge remote-tracking branch 'origin/dev'
2 parents 28026cd + d0eb492 commit 0f21be7

32 files changed

Lines changed: 1819 additions & 195 deletions

omodsim/byteorderutils.h

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
#ifndef BYTEORDERUTILS_H
2+
#define BYTEORDERUTILS_H
3+
4+
#include <QtEndian>
5+
#include "enums.h"
6+
7+
///
8+
/// \brief toByteOrderValue
9+
/// \param value
10+
/// \param order
11+
/// \return
12+
///
13+
inline quint16 toByteOrderValue(quint16 value, ByteOrder order)
14+
{
15+
switch(order)
16+
{
17+
case ByteOrder::BigEndian:
18+
return qToBigEndian<quint16>(value);
19+
20+
case ByteOrder::LittleEndian:
21+
return qToLittleEndian<quint16>(value);
22+
}
23+
24+
return value;
25+
}
26+
27+
#endif // BYTEORDERUTILS_H

omodsim/controls/outputwidget.cpp

Lines changed: 44 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ OutputWidget::OutputWidget(QWidget *parent) :
2323
,_displayHexAddreses(false)
2424
,_displayMode(DisplayMode::Data)
2525
,_dataDisplayMode(DataDisplayMode::Hex)
26+
,_byteOrder(ByteOrder::LittleEndian)
2627
{
2728
ui->setupUi(this);
2829
ui->stackedWidget->setCurrentIndex(0);
@@ -318,16 +319,37 @@ void OutputWidget::setDataDisplayMode(DataDisplayMode mode)
318319
updateDataWidget(_lastData);
319320
}
320321

322+
///
323+
/// \brief OutputWidget::byteOrder
324+
/// \return
325+
///
326+
ByteOrder OutputWidget::byteOrder() const
327+
{
328+
return _byteOrder;
329+
}
330+
331+
///
332+
/// \brief OutputWidget::setByteOrder
333+
/// \param order
334+
///
335+
void OutputWidget::setByteOrder(ByteOrder order)
336+
{
337+
_byteOrder = order;
338+
updateDataWidget(_lastData);
339+
}
340+
321341
///
322342
/// \brief formatBinaryValue
323343
/// \param pointType
324344
/// \param value
325345
/// \param outValue
326346
/// \return
327347
///
328-
QString formatBinaryValue(QModbusDataUnit::RegisterType pointType, quint16 value, QVariant& outValue)
348+
QString formatBinaryValue(QModbusDataUnit::RegisterType pointType, quint16 value, ByteOrder order, QVariant& outValue)
329349
{
330350
QString result;
351+
value = toByteOrderValue(value, order);
352+
331353
switch(pointType)
332354
{
333355
case QModbusDataUnit::Coils:
@@ -352,9 +374,11 @@ QString formatBinaryValue(QModbusDataUnit::RegisterType pointType, quint16 value
352374
/// \param outValue
353375
/// \return
354376
///
355-
QString formatDecimalValue(QModbusDataUnit::RegisterType pointType, quint16 value, QVariant& outValue)
377+
QString formatDecimalValue(QModbusDataUnit::RegisterType pointType, quint16 value, ByteOrder order, QVariant& outValue)
356378
{
357379
QString result;
380+
value = toByteOrderValue(value, order);
381+
358382
switch(pointType)
359383
{
360384
case QModbusDataUnit::Coils:
@@ -379,9 +403,11 @@ QString formatDecimalValue(QModbusDataUnit::RegisterType pointType, quint16 valu
379403
/// \param outValue
380404
/// \return
381405
///
382-
QString formatIntegerValue(QModbusDataUnit::RegisterType pointType, qint16 value, QVariant& outValue)
406+
QString formatIntegerValue(QModbusDataUnit::RegisterType pointType, qint16 value ,ByteOrder order, QVariant& outValue)
383407
{
384408
QString result;
409+
value = toByteOrderValue(value, order);
410+
385411
switch(pointType)
386412
{
387413
case QModbusDataUnit::Coils:
@@ -406,9 +432,11 @@ QString formatIntegerValue(QModbusDataUnit::RegisterType pointType, qint16 value
406432
/// \param outValue
407433
/// \return
408434
///
409-
QString formatHexValue(QModbusDataUnit::RegisterType pointType, quint16 value, QVariant& outValue)
435+
QString formatHexValue(QModbusDataUnit::RegisterType pointType, quint16 value, ByteOrder order, QVariant& outValue)
410436
{
411437
QString result;
438+
value = toByteOrderValue(value, order);
439+
412440
switch(pointType)
413441
{
414442
case QModbusDataUnit::Coils:
@@ -435,7 +463,7 @@ QString formatHexValue(QModbusDataUnit::RegisterType pointType, quint16 value, Q
435463
/// \param outValue
436464
/// \return
437465
///
438-
QString formatFloatValue(QModbusDataUnit::RegisterType pointType, quint16 value1, quint16 value2, bool flag, QVariant& outValue)
466+
QString formatFloatValue(QModbusDataUnit::RegisterType pointType, quint16 value1, quint16 value2, ByteOrder order, bool flag, QVariant& outValue)
439467
{
440468
QString result;
441469
switch(pointType)
@@ -450,7 +478,7 @@ QString formatFloatValue(QModbusDataUnit::RegisterType pointType, quint16 value1
450478
{
451479
if(flag) break;
452480

453-
const float value = makeFloat(value1, value2);
481+
const float value = makeFloat(value1, value2, order);
454482
outValue = value;
455483
result = QLocale().toString(value);
456484
}
@@ -472,7 +500,7 @@ QString formatFloatValue(QModbusDataUnit::RegisterType pointType, quint16 value1
472500
/// \param outValue
473501
/// \return
474502
///
475-
QString formatDoubleValue(QModbusDataUnit::RegisterType pointType, quint16 value1, quint16 value2, quint16 value3, quint16 value4, bool flag, QVariant& outValue)
503+
QString formatDoubleValue(QModbusDataUnit::RegisterType pointType, quint16 value1, quint16 value2, quint16 value3, quint16 value4, ByteOrder order, bool flag, QVariant& outValue)
476504
{
477505
QString result;
478506
switch(pointType)
@@ -487,7 +515,7 @@ QString formatDoubleValue(QModbusDataUnit::RegisterType pointType, quint16 value
487515
{
488516
if(flag) break;
489517

490-
const double value = makeDouble(value1, value2, value3, value4);
518+
const double value = makeDouble(value1, value2, value3, value4, order);
491519
outValue = value;
492520
result = QLocale().toString(value);
493521
}
@@ -622,38 +650,38 @@ void OutputWidget::updateDataWidget(const QModbusDataUnit& data)
622650
switch(_dataDisplayMode)
623651
{
624652
case DataDisplayMode::Binary:
625-
valstr = formatBinaryValue(_displayDefinition.PointType, value, itemData.Value);
653+
valstr = formatBinaryValue(_displayDefinition.PointType, value, byteOrder(), itemData.Value);
626654
break;
627655

628656
case DataDisplayMode::Decimal:
629-
valstr = formatDecimalValue(_displayDefinition.PointType, value, itemData.Value);
657+
valstr = formatDecimalValue(_displayDefinition.PointType, value, byteOrder(), itemData.Value);
630658
break;
631659

632660
case DataDisplayMode::Integer:
633-
valstr = formatIntegerValue(_displayDefinition.PointType, value, itemData.Value);
661+
valstr = formatIntegerValue(_displayDefinition.PointType, value, byteOrder(), itemData.Value);
634662
break;
635663

636664
case DataDisplayMode::Hex:
637-
valstr = formatHexValue(_displayDefinition.PointType, value, itemData.Value);
665+
valstr = formatHexValue(_displayDefinition.PointType, value, byteOrder(), itemData.Value);
638666
break;
639667

640668
case DataDisplayMode::FloatingPt:
641-
valstr = formatFloatValue(_displayDefinition.PointType, value, data.value(i + 1),
669+
valstr = formatFloatValue(_displayDefinition.PointType, value, data.value(i + 1), byteOrder(),
642670
(i%2) || (i+1>=_displayDefinition.Length), itemData.Value);
643671
break;
644672

645673
case DataDisplayMode::SwappedFP:
646-
valstr = formatFloatValue(_displayDefinition.PointType, data.value(i + 1), value,
674+
valstr = formatFloatValue(_displayDefinition.PointType, data.value(i + 1), value, byteOrder(),
647675
(i%2) || (i+1>=_displayDefinition.Length), itemData.Value);
648676
break;
649677

650678
case DataDisplayMode::DblFloat:
651-
valstr = formatDoubleValue(_displayDefinition.PointType, value, data.value(i + 1), data.value(i + 2), data.value(i + 3),
679+
valstr = formatDoubleValue(_displayDefinition.PointType, value, data.value(i + 1), data.value(i + 2), data.value(i + 3), byteOrder(),
652680
(i%4) || (i+3>=_displayDefinition.Length), itemData.Value);
653681
break;
654682

655683
case DataDisplayMode::SwappedDbl:
656-
valstr = formatDoubleValue(_displayDefinition.PointType, data.value(i + 3), data.value(i + 2), data.value(i + 1), value,
684+
valstr = formatDoubleValue(_displayDefinition.PointType, data.value(i + 3), data.value(i + 2), data.value(i + 1), value, byteOrder(),
657685
(i%4) || (i+3>=_displayDefinition.Length), itemData.Value);
658686
break;
659687
}

omodsim/controls/outputwidget.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ class OutputWidget : public QWidget
3333
DataDisplayMode dataDisplayMode() const;
3434
void setDataDisplayMode(DataDisplayMode mode);
3535

36+
ByteOrder byteOrder() const;
37+
void setByteOrder(ByteOrder order);
38+
3639
bool displayHexAddresses() const;
3740
void setDisplayHexAddresses(bool on);
3841

@@ -78,6 +81,7 @@ private slots:
7881
bool _displayHexAddreses;
7982
DisplayMode _displayMode;
8083
DataDisplayMode _dataDisplayMode;
84+
ByteOrder _byteOrder;
8185
DisplayDefinition _displayDefinition;
8286
QModbusDataUnit _lastData;
8387
QFile _fileCapture;

omodsim/datasimulator.cpp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,31 @@ void DataSimulator::restartSimulations()
100100
}
101101
}
102102

103+
///
104+
/// \brief DataSimulator::simulationParams
105+
/// \param type
106+
/// \param addr
107+
/// \return
108+
///
109+
ModbusSimulationParams DataSimulator::simulationParams(QModbusDataUnit::RegisterType type, quint16 addr) const
110+
{
111+
const auto it = _simulationMap.find({type, addr});
112+
return (it != _simulationMap.end()) ? it->Params : ModbusSimulationParams();
113+
}
114+
115+
///
116+
/// \brief DataSimulator::simulationMap
117+
/// \return
118+
///
119+
ModbusSimulationMap DataSimulator::simulationMap() const
120+
{
121+
ModbusSimulationMap map;
122+
for(auto&& key : _simulationMap.keys())
123+
map[key] = _simulationMap[key].Params;
124+
125+
return map;
126+
}
127+
103128
///
104129
/// \brief DataSimulator::on_timeout
105130
///

omodsim/datasimulator.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@
55
#include <QModbusDataUnit>
66
#include "modbussimulationparams.h"
77

8-
class ModbusMultiServer;
8+
typedef QMap<QPair<QModbusDataUnit::RegisterType, quint16>, ModbusSimulationParams> ModbusSimulationMap;
99

10+
///
11+
/// \brief The DataSimulator class
12+
///
1013
class DataSimulator : public QObject
1114
{
1215
Q_OBJECT
@@ -22,6 +25,9 @@ class DataSimulator : public QObject
2225
void resumeSimulations();
2326
void restartSimulations();
2427

28+
ModbusSimulationParams simulationParams(QModbusDataUnit::RegisterType type, quint16 addr) const;
29+
ModbusSimulationMap simulationMap() const;
30+
2531
signals:
2632
void dataSimulated(DataDisplayMode mode, QModbusDataUnit::RegisterType type, quint16 addr, QVariant value);
2733

0 commit comments

Comments
 (0)