Skip to content

Commit 9d07c84

Browse files
committed
fix Address Values Not Saving Correctly
1 parent f7cb79c commit 9d07c84

2 files changed

Lines changed: 62 additions & 0 deletions

File tree

omodsim/formmodsim.cpp

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,34 @@ ModbusSimulationMap FormModSim::simulationMap() const
448448
return result;
449449
}
450450

451+
452+
QModbusDataUnit FormModSim::serializeModbusDataUnit(QModbusDataUnit::RegisterType type,
453+
quint16 startAddress,
454+
quint16 length) const
455+
{
456+
QModbusDataUnit dataUnit;
457+
458+
const auto serverData = _mbMultiServer.data(type, startAddress, length);
459+
460+
const auto& unit = serverData;
461+
462+
if (startAddress >= unit.startAddress() &&
463+
(startAddress + length) <= (unit.startAddress() + unit.valueCount())) {
464+
465+
int offset = startAddress - unit.startAddress();
466+
467+
QVector<quint16> values;
468+
for (int i = 0; i < length; ++i) {
469+
values.append(unit.value(offset + i));
470+
}
471+
472+
dataUnit.setValues(values);
473+
dataUnit.setRegisterType(type);
474+
dataUnit.setStartAddress(startAddress);
475+
}
476+
477+
return dataUnit;
478+
}
451479
///
452480
/// \brief FormModSim::startSimulation
453481
/// \param type
@@ -459,6 +487,18 @@ void FormModSim::startSimulation(QModbusDataUnit::RegisterType type, quint16 add
459487
_dataSimulator->startSimulation(dataDisplayMode(), type, addr, params);
460488
}
461489

490+
void FormModSim::configureModbusDataUnit(QModbusDataUnit::RegisterType type,
491+
quint16 startAddress,
492+
const QVector<quint16>& values) const
493+
{
494+
QModbusDataUnit unit;
495+
unit.setRegisterType(type);
496+
unit.setStartAddress(startAddress);
497+
unit.setValues(values);
498+
_mbMultiServer.setData(unit);
499+
}
500+
501+
462502
///
463503
/// \brief FormModSim::descriptionMap
464504
/// \return

omodsim/formmodsim.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,13 @@ class FormModSim : public QWidget
8787
ModbusSimulationMap simulationMap() const;
8888
void startSimulation(QModbusDataUnit::RegisterType type, quint16 addr, const ModbusSimulationParams& params);
8989

90+
QModbusDataUnit serializeModbusDataUnit(QModbusDataUnit::RegisterType pointType,
91+
quint16 pointAddress,
92+
quint16 length) const;
93+
void configureModbusDataUnit(QModbusDataUnit::RegisterType type,
94+
quint16 startAddress,
95+
const QVector<quint16>& values) const;
96+
9097
AddressDescriptionMap descriptionMap() const;
9198
void setDescription(QModbusDataUnit::RegisterType type, quint16 addr, const QString& desc);
9299

@@ -274,6 +281,11 @@ inline QDataStream& operator <<(QDataStream& out, FormModSim* frm)
274281
out << frm->scriptSettings();
275282
out << frm->descriptionMap();
276283

284+
const auto unit = frm->serializeModbusDataUnit(dd.PointType, dd.PointAddress, dd.Length);
285+
out << unit.registerType();
286+
out << unit.startAddress();
287+
out << unit.values();
288+
277289
return out;
278290
}
279291

@@ -376,6 +388,16 @@ inline QDataStream& operator >>(QDataStream& in, FormModSim* frm)
376388
for(auto&& k : descriptionMap.keys())
377389
frm->setDescription(k.first, k.second, descriptionMap[k]);
378390

391+
QModbusDataUnit::RegisterType type;
392+
int startAddress;
393+
QVector<quint16> values;
394+
395+
in >> type;
396+
in >> startAddress;
397+
in >> values;
398+
399+
frm->configureModbusDataUnit(type, startAddress, values);
400+
379401
return in;
380402
}
381403

0 commit comments

Comments
 (0)