Skip to content

Commit c0e5d7b

Browse files
committed
Updated save and restore test config
1 parent 36bcbdb commit c0e5d7b

6 files changed

Lines changed: 113 additions & 40 deletions

File tree

omodsim/controls/outputwidget.cpp

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -291,13 +291,14 @@ void OutputListModel::updateData(const QModbusDataUnit& data)
291291

292292
///
293293
/// \brief OutputListModel::find
294+
/// \param deviceId
294295
/// \param type
295296
/// \param addr
296297
/// \return
297298
///
298-
QModelIndex OutputListModel::find(QModbusDataUnit::RegisterType type, quint16 addr) const
299+
QModelIndex OutputListModel::find(quint8 deviceId, QModbusDataUnit::RegisterType type, quint16 addr) const
299300
{
300-
if(_parentWidget->_displayDefinition.PointType != type)
301+
if(_parentWidget->_displayDefinition.PointType != type || _parentWidget->_displayDefinition.DeviceId != deviceId)
301302
return QModelIndex();
302303

303304
const auto dd = _parentWidget->_displayDefinition;
@@ -382,7 +383,7 @@ QVector<quint16> OutputWidget::data() const
382383
/// \param simulations
383384
/// \param data
384385
///
385-
void OutputWidget::setup(const DisplayDefinition& dd, const ModbusSimulationMap& simulations, const QModbusDataUnit& data)
386+
void OutputWidget::setup(const DisplayDefinition& dd, const ModbusSimulationMap2& simulations, const QModbusDataUnit& data)
386387
{
387388
_descriptionMap.insert(descriptionMap());
388389
_displayDefinition = dd;
@@ -393,10 +394,10 @@ void OutputWidget::setup(const DisplayDefinition& dd, const ModbusSimulationMap&
393394
_listModel->clear();
394395

395396
for(auto&& key : simulations.keys())
396-
_listModel->setData(_listModel->find(key.Type, key.Address), true, SimulationRole);
397+
_listModel->setData(_listModel->find(key.DeviceId, key.Type, key.Address), true, SimulationRole);
397398

398399
for(auto&& key : _descriptionMap.keys())
399-
setDescription(key.first, key.second, _descriptionMap[key]);
400+
setDescription(key.DeviceId, key.Type, key.Address, _descriptionMap[key]);
400401

401402
updateData(data);
402403
}
@@ -686,38 +687,40 @@ void OutputWidget::updateData(const QModbusDataUnit& data)
686687
/// \brief OutputWidget::descriptionMap
687688
/// \return
688689
///
689-
AddressDescriptionMap OutputWidget::descriptionMap() const
690+
AddressDescriptionMap2 OutputWidget::descriptionMap() const
690691
{
691-
AddressDescriptionMap descriptionMap;
692+
AddressDescriptionMap2 descriptionMap;
692693
for(int i = 0; i < _listModel->rowCount(); i++)
693694
{
694695
const auto desc = _listModel->data(_listModel->index(i), DescriptionRole).toString();
695696
const quint16 addr = _listModel->data(_listModel->index(i), AddressRole).toUInt() - (_displayDefinition.ZeroBasedAddress ? 0 : 1);
696-
descriptionMap[{_displayDefinition.PointType, addr }] = desc;
697+
descriptionMap[{_displayDefinition.DeviceId, _displayDefinition.PointType, addr }] = desc;
697698
}
698699
return descriptionMap;
699700
}
700701

701702
///
702703
/// \brief OutputWidget::setDescription
704+
/// \param deviceId
703705
/// \param type
704706
/// \param addr
705707
/// \param desc
706708
///
707-
void OutputWidget::setDescription(QModbusDataUnit::RegisterType type, quint16 addr, const QString& desc)
709+
void OutputWidget::setDescription(quint8 deviceId, QModbusDataUnit::RegisterType type, quint16 addr, const QString& desc)
708710
{
709-
_listModel->setData(_listModel->find(type, addr), desc, DescriptionRole);
711+
_listModel->setData(_listModel->find(deviceId, type, addr), desc, DescriptionRole);
710712
}
711713

712714
///
713715
/// \brief OutputWidget::setSimulated
716+
/// \param deviceId
714717
/// \param type
715718
/// \param addr
716719
/// \param on
717720
///
718-
void OutputWidget::setSimulated(QModbusDataUnit::RegisterType type, quint16 addr, bool on)
721+
void OutputWidget::setSimulated(quint8 deviceId, QModbusDataUnit::RegisterType type, quint16 addr, bool on)
719722
{
720-
_listModel->setData(_listModel->find(type, addr), on, SimulationRole);
723+
_listModel->setData(_listModel->find(deviceId, type, addr), on, SimulationRole);
721724
}
722725

723726
///

omodsim/controls/outputwidget.h

Lines changed: 53 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,22 @@ class OutputWidget;
1515
}
1616

1717
class OutputWidget;
18+
19+
struct AddressDescriptionMapKey {
20+
quint8 DeviceId;
21+
QModbusDataUnit::RegisterType Type;
22+
quint16 Address;
23+
24+
bool operator<(const AddressDescriptionMapKey &other) const {
25+
if (DeviceId != other.DeviceId)
26+
return DeviceId < other.DeviceId;
27+
if (Type != other.Type)
28+
return Type < other.Type;
29+
return Address < other.Address;
30+
}
31+
};
32+
33+
typedef QMap<AddressDescriptionMapKey, QString> AddressDescriptionMap2;
1834
typedef QMap<QPair<QModbusDataUnit::RegisterType, quint16>, QString> AddressDescriptionMap;
1935

2036
///
@@ -40,7 +56,7 @@ class OutputListModel : public QAbstractListModel
4056
void update();
4157
void updateData(const QModbusDataUnit& data);
4258

43-
QModelIndex find(QModbusDataUnit::RegisterType type, quint16 addr) const;
59+
QModelIndex find(quint8 deviceId, QModbusDataUnit::RegisterType type, quint16 addr) const;
4460

4561
private:
4662
struct ItemData
@@ -69,13 +85,13 @@ class OutputWidget : public QWidget
6985

7086
friend class OutputListModel;
7187

72-
public:
88+
public:
7389
explicit OutputWidget(QWidget *parent = nullptr);
7490
~OutputWidget();
7591

7692
QVector<quint16> data() const;
7793

78-
void setup(const DisplayDefinition& dd,const ModbusSimulationMap& simulations, const QModbusDataUnit& data);
94+
void setup(const DisplayDefinition& dd,const ModbusSimulationMap2& simulations, const QModbusDataUnit& data);
7995

8096
DisplayMode displayMode() const;
8197
void setDisplayMode(DisplayMode mode);
@@ -124,10 +140,10 @@ class OutputWidget : public QWidget
124140
void updateTraffic(const QModbusResponse& response, int server, int transactionId, ModbusMessage::ProtocolType protocol);
125141
void updateData(const QModbusDataUnit& data);
126142

127-
AddressDescriptionMap descriptionMap() const;
128-
void setDescription(QModbusDataUnit::RegisterType type, quint16 addr, const QString& desc);
143+
AddressDescriptionMap2 descriptionMap() const;
144+
void setDescription(quint8 deviceId, QModbusDataUnit::RegisterType type, quint16 addr, const QString& desc);
129145

130-
void setSimulated(QModbusDataUnit::RegisterType type, quint16 addr, bool on);
146+
void setSimulated(quint8 deviceId, QModbusDataUnit::RegisterType type, quint16 addr, bool on);
131147

132148
public slots:
133149
void clearLogView();
@@ -160,8 +176,38 @@ private slots:
160176
QString _codepage;
161177
DisplayDefinition _displayDefinition;
162178
QFile _fileCapture;
163-
AddressDescriptionMap _descriptionMap;
179+
AddressDescriptionMap2 _descriptionMap;
164180
QSharedPointer<OutputListModel> _listModel;
165181
};
166182

183+
184+
///
185+
/// \brief operator <<
186+
/// \param out
187+
/// \param key
188+
/// \return
189+
///
190+
inline QDataStream& operator <<(QDataStream& out, const AddressDescriptionMapKey& key)
191+
{
192+
out << key.DeviceId;
193+
out << key.Type;
194+
out << key.Address;
195+
196+
return out;
197+
}
198+
199+
///
200+
/// \brief operator >>
201+
/// \param in
202+
/// \param params
203+
/// \return
204+
///
205+
inline QDataStream& operator >>(QDataStream& in, AddressDescriptionMapKey& key)
206+
{
207+
in >> key.DeviceId;
208+
in >> key.Type;
209+
in >> key.Address;
210+
return in;
211+
}
212+
167213
#endif // OUTPUTWIDGET_H

omodsim/datasimulator.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,9 @@ ModbusSimulationParams DataSimulator::simulationParams(quint8 deviceId, QModbusD
121121
/// \brief DataSimulator::simulationMap
122122
/// \return
123123
///
124-
ModbusSimulationMap DataSimulator::simulationMap() const
124+
ModbusSimulationMap2 DataSimulator::simulationMap() const
125125
{
126-
ModbusSimulationMap map;
126+
ModbusSimulationMap2 map;
127127
for(auto&& key : _simulationMap.keys())
128128
map[key] = _simulationMap[key].Params;
129129

omodsim/datasimulator.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ struct ModbusSimulationMapKey {
1919
}
2020
};
2121

22-
typedef QMap<ModbusSimulationMapKey, ModbusSimulationParams> ModbusSimulationMap;
22+
typedef QMap<QPair<QModbusDataUnit::RegisterType, quint16>, ModbusSimulationParams> ModbusSimulationMap;
23+
typedef QMap<ModbusSimulationMapKey, ModbusSimulationParams> ModbusSimulationMap2;
2324

2425
///
2526
/// \brief The DataSimulator class
@@ -40,7 +41,7 @@ class DataSimulator : public QObject
4041
void restartSimulations();
4142

4243
ModbusSimulationParams simulationParams(quint8 deviceId, QModbusDataUnit::RegisterType type, quint16 addr) const;
43-
ModbusSimulationMap simulationMap() const;
44+
ModbusSimulationMap2 simulationMap() const;
4445

4546
signals:
4647
void simulationStarted(quint8 deviceId, QModbusDataUnit::RegisterType type, quint16 addr);

omodsim/formmodsim.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
#include "formmodsim.h"
1414
#include "ui_formmodsim.h"
1515

16-
QVersionNumber FormModSim::VERSION = QVersionNumber(1, 9);
16+
QVersionNumber FormModSim::VERSION = QVersionNumber(1, 10);
1717

1818
///
1919
/// \brief FormModSim::FormModSim
@@ -471,13 +471,13 @@ void FormModSim::print(QPrinter* printer)
471471
/// \brief FormModSim::simulationMap
472472
/// \return
473473
///
474-
ModbusSimulationMap FormModSim::simulationMap() const
474+
ModbusSimulationMap2 FormModSim::simulationMap() const
475475
{
476476
const auto dd = displayDefinition();
477477
const auto startAddr = dd.PointAddress - (dd.ZeroBasedAddress ? 0 : 1);
478478
const auto endAddr = startAddr + dd.Length;
479479

480-
ModbusSimulationMap result;
480+
ModbusSimulationMap2 result;
481481
const auto simulationMap = _dataSimulator->simulationMap();
482482
for(auto&& key : simulationMap.keys())
483483
{
@@ -556,20 +556,21 @@ void FormModSim::configureModbusDataUnit(quint8 deviceId, QModbusDataUnit::Regis
556556
/// \brief FormModSim::descriptionMap
557557
/// \return
558558
///
559-
AddressDescriptionMap FormModSim::descriptionMap() const
559+
AddressDescriptionMap2 FormModSim::descriptionMap() const
560560
{
561561
return ui->outputWidget->descriptionMap();
562562
}
563563

564564
///
565565
/// \brief FormModSim::setDescription
566+
/// \param deviceId
566567
/// \param type
567568
/// \param addr
568569
/// \param desc
569570
///
570-
void FormModSim::setDescription(QModbusDataUnit::RegisterType type, quint16 addr, const QString& desc)
571+
void FormModSim::setDescription(quint8 deviceId, QModbusDataUnit::RegisterType type, quint16 addr, const QString& desc)
571572
{
572-
ui->outputWidget->setDescription(type, addr, desc);
573+
ui->outputWidget->setDescription(deviceId, type, addr, desc);
573574
}
574575

575576
///
@@ -988,7 +989,7 @@ void FormModSim::on_simulationStarted(quint8 deviceId, QModbusDataUnit::Register
988989
if(deviceId != ui->lineEditDeviceId->value<quint8>())
989990
return;
990991

991-
ui->outputWidget->setSimulated(type, addr, true);
992+
ui->outputWidget->setSimulated(deviceId, type, addr, true);
992993
}
993994

994995
///
@@ -1001,7 +1002,7 @@ void FormModSim::on_simulationStopped(quint8 deviceId, QModbusDataUnit::Register
10011002
if(deviceId != ui->lineEditDeviceId->value<quint8>())
10021003
return;
10031004

1004-
ui->outputWidget->setSimulated(type, addr, false);
1005+
ui->outputWidget->setSimulated(deviceId, type, addr, false);
10051006
}
10061007

10071008
///

omodsim/formmodsim.h

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -88,14 +88,14 @@ class FormModSim : public QWidget
8888

8989
void print(QPrinter* painter);
9090

91-
ModbusSimulationMap simulationMap() const;
91+
ModbusSimulationMap2 simulationMap() const;
9292
void startSimulation(QModbusDataUnit::RegisterType type, quint16 addr, const ModbusSimulationParams& params);
9393

9494
QModbusDataUnit serializeModbusDataUnit(quint8 deviceId, QModbusDataUnit::RegisterType pointType, quint16 pointAddress, quint16 length) const;
9595
void configureModbusDataUnit(quint8 deviceId, QModbusDataUnit::RegisterType type, quint16 startAddress, const QVector<quint16>& values) const;
9696

97-
AddressDescriptionMap descriptionMap() const;
98-
void setDescription(QModbusDataUnit::RegisterType type, quint16 addr, const QString& desc);
97+
AddressDescriptionMap2 descriptionMap() const;
98+
void setDescription(quint8 deviceId, QModbusDataUnit::RegisterType type, quint16 addr, const QString& desc);
9999

100100
bool canRunScript() const;
101101
bool canStopScript() const;
@@ -371,11 +371,18 @@ inline QDataStream& operator >>(QDataStream& in, FormModSim* frm)
371371
}
372372

373373
ModbusSimulationMap simulationMap;
374+
ModbusSimulationMap2 simulationMap2;
374375
ByteOrder byteOrder = ByteOrder::Direct;
375376
if(ver >= QVersionNumber(1, 1))
376377
{
377378
in >> byteOrder;
378-
in >> simulationMap;
379+
380+
if(ver >= QVersionNumber(1, 10)) {
381+
in >> simulationMap2;
382+
}
383+
else {
384+
in >> simulationMap;
385+
}
379386
}
380387

381388
ScriptSettings scriptSettings;
@@ -386,9 +393,15 @@ inline QDataStream& operator >>(QDataStream& in, FormModSim* frm)
386393
}
387394

388395
AddressDescriptionMap descriptionMap;
396+
AddressDescriptionMap2 descriptionMap2;
389397
if(ver >= QVersionNumber(1, 3))
390398
{
391-
in >> descriptionMap;
399+
if(ver >= QVersionNumber(1, 10)) {
400+
in >> descriptionMap2;
401+
}
402+
else {
403+
in >> descriptionMap;
404+
}
392405
}
393406

394407
QString codepage;
@@ -418,11 +431,20 @@ inline QDataStream& operator >>(QDataStream& in, FormModSim* frm)
418431
frm->setCodepage(codepage);
419432
frm->setScriptSettings(scriptSettings);
420433

421-
for(auto&& k : simulationMap.keys())
422-
frm->startSimulation(k.Type, k.Address, simulationMap[k]);
434+
if(ver >= QVersionNumber(1,10)) {
435+
for(auto&& k : simulationMap2.keys())
436+
frm->startSimulation(k.Type, k.Address, simulationMap2[k]);
437+
438+
for(auto&& k : descriptionMap2.keys())
439+
frm->setDescription(k.DeviceId, k.Type, k.Address, descriptionMap2[k]);
440+
}
441+
else {
442+
for(auto&& k : simulationMap.keys())
443+
frm->startSimulation(k.first, k.second, simulationMap[k]);
423444

424-
for(auto&& k : descriptionMap.keys())
425-
frm->setDescription(k.first, k.second, descriptionMap[k]);
445+
for(auto&& k : descriptionMap.keys())
446+
frm->setDescription(dd.DeviceId, k.first, k.second, descriptionMap[k]);
447+
}
426448

427449
if(ver >= QVersionNumber(1, 7))
428450
{

0 commit comments

Comments
 (0)