|
8 | 8 | ModbusMultiServer::ModbusMultiServer(QObject *parent) |
9 | 9 | : QObject{parent} |
10 | 10 | ,_deviceId(1) |
| 11 | + ,_simulator(new DataSimulator(this)) |
11 | 12 | { |
12 | | - _simulator = QSharedPointer<DataSimulator>(new DataSimulator(this)); |
13 | 13 | } |
14 | 14 |
|
15 | 15 | /// |
@@ -45,56 +45,28 @@ void ModbusMultiServer::setDeviceId(quint8 deviceId) |
45 | 45 | } |
46 | 46 |
|
47 | 47 | /// |
48 | | -/// \brief ModbusServer::addUnitMap |
| 48 | +/// \brief ModbusMultiServer::addUnitMap |
| 49 | +/// \param id |
49 | 50 | /// \param pointType |
50 | 51 | /// \param pointAddress |
51 | 52 | /// \param length |
52 | 53 | /// |
53 | 54 | void ModbusMultiServer::addUnitMap(int id, QModbusDataUnit::RegisterType pointType, quint16 pointAddress, quint16 length) |
54 | 55 | { |
55 | | - _modbusDataUnitMap.insert(id, {pointType, pointAddress, length}); |
| 56 | + _modbusDataUnitMap.addUnitMap(id, pointType, pointAddress, length); |
56 | 57 | reconfigureServers(); |
57 | 58 | } |
58 | 59 |
|
59 | 60 | /// |
60 | | -/// \brief ModbusServer::removeUnitMap |
61 | | -/// \param pointType |
| 61 | +/// \brief ModbusMultiServer::removeUnitMap |
| 62 | +/// \param id |
62 | 63 | /// |
63 | 64 | void ModbusMultiServer::removeUnitMap(int id) |
64 | 65 | { |
65 | | - _modbusDataUnitMap.remove(id); |
| 66 | + _modbusDataUnitMap.removeUnitMap(id); |
66 | 67 | reconfigureServers(); |
67 | 68 | } |
68 | 69 |
|
69 | | -/// |
70 | | -/// \brief ModbusServer::createDataUnitMap |
71 | | -/// \return |
72 | | -/// |
73 | | -QModbusDataUnitMap ModbusMultiServer::createDataUnitMap() |
74 | | -{ |
75 | | - QMultiMap<QModbusDataUnit::RegisterType, QModbusDataUnit> multimap; |
76 | | - for(auto&& unit : _modbusDataUnitMap) |
77 | | - { |
78 | | - multimap.insert(unit.registerType(), unit); |
79 | | - } |
80 | | - |
81 | | - QModbusDataUnitMap modbusMap; |
82 | | - for(auto&& type: multimap.uniqueKeys()) |
83 | | - { |
84 | | - quint16 startAddress = 65535; |
85 | | - quint16 endAddress = 0; |
86 | | - for(auto&& unit : multimap.values(type)) |
87 | | - { |
88 | | - startAddress = qMin<quint16>(startAddress, unit.startAddress()); |
89 | | - endAddress = qMax<quint16>(endAddress, unit.startAddress() + unit.valueCount()); |
90 | | - } |
91 | | - |
92 | | - const quint16 length = endAddress - startAddress; |
93 | | - if(length > 0) modbusMap.insert(type, {type, startAddress, length}); |
94 | | - } |
95 | | - return modbusMap; |
96 | | -} |
97 | | - |
98 | 70 | /// |
99 | 71 | /// \brief ModbusMultiServer::findModbusServer |
100 | 72 | /// \param cd |
@@ -210,11 +182,9 @@ void ModbusMultiServer::connectDevice(const ConnectionDetails& cd) |
210 | 182 | } |
211 | 183 |
|
212 | 184 | modbusServer->setServerAddress(_deviceId); |
| 185 | + modbusServer->setMap(_modbusDataUnitMap); |
213 | 186 |
|
214 | | - const auto dataUintMap = createDataUnitMap(); |
215 | | - modbusServer->setMap(dataUintMap); |
216 | | - |
217 | | - for(auto data : dataUintMap) |
| 187 | + for(auto data : _modbusDataUnitMap) |
218 | 188 | { |
219 | 189 | _modbusServerList.first()->data(&data); |
220 | 190 | modbusServer->setData(data); |
@@ -280,9 +250,8 @@ void ModbusMultiServer::reconfigureServers() |
280 | 250 | { |
281 | 251 | if(!_modbusServerList.isEmpty()) |
282 | 252 | { |
283 | | - const auto dataUintMap = createDataUnitMap(); |
284 | 253 | for(auto&& s : _modbusServerList) |
285 | | - s->setMap(dataUintMap); |
| 254 | + s->setMap(_modbusDataUnitMap); |
286 | 255 | } |
287 | 256 | } |
288 | 257 |
|
@@ -346,6 +315,7 @@ QModbusDataUnit ModbusMultiServer::data(QModbusDataUnit::RegisterType pointType, |
346 | 315 | /// |
347 | 316 | void ModbusMultiServer::setData(const QModbusDataUnit& data) |
348 | 317 | { |
| 318 | + _modbusDataUnitMap.setData(data); |
349 | 319 | for(auto&& s : _modbusServerList) |
350 | 320 | { |
351 | 321 | s->blockSignals(true); |
|
0 commit comments