Skip to content

Commit a5343ee

Browse files
committed
fixed #37
1 parent 4ffe101 commit a5343ee

10 files changed

Lines changed: 122 additions & 39 deletions

omodsim/dialogs/dialogdisplaydefinition.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ DialogDisplayDefinition::DialogDisplayDefinition(DisplayDefinition dd, QWidget*
2626
ui->lineEditLogLimit->setValue(dd.LogViewLimit);
2727
ui->comboBoxPointType->setCurrentPointType(dd.PointType);
2828

29+
ui->checkBoxGlobalMap->setChecked(dd.UseGlobalUnitMap);
30+
2931
ui->buttonBox->setFocus();
3032
}
3133

@@ -48,11 +50,11 @@ void DialogDisplayDefinition::accept()
4850
_displayDefinition.Length = ui->lineEditLength->value<int>();
4951
_displayDefinition.LogViewLimit = ui->lineEditLogLimit->value<int>();
5052
_displayDefinition.ZeroBasedAddress = (ui->comboBoxAddressBase->currentAddressBase() == AddressBase::Base0);
53+
_displayDefinition.UseGlobalUnitMap = ui->checkBoxGlobalMap->isChecked();
5154

5255
QFixedSizeDialog::accept();
5356
}
5457

55-
5658
///
5759
/// \brief DialogDisplayDefinition::on_comboBoxAddressBase_currentIndexChanged
5860
/// \param index

omodsim/dialogs/dialogdisplaydefinition.ui

Lines changed: 51 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
<rect>
77
<x>0</x>
88
<y>0</y>
9-
<width>350</width>
10-
<height>285</height>
9+
<width>352</width>
10+
<height>387</height>
1111
</rect>
1212
</property>
1313
<property name="windowTitle">
@@ -23,7 +23,7 @@
2323
<set>Qt::AlignmentFlag::AlignHCenter|Qt::AlignmentFlag::AlignTop</set>
2424
</property>
2525
<property name="leftMargin">
26-
<number>40</number>
26+
<number>50</number>
2727
</property>
2828
<property name="topMargin">
2929
<number>9</number>
@@ -152,22 +152,15 @@
152152
</property>
153153
</widget>
154154
</item>
155-
<item row="2" column="0">
156-
<widget class="QLabel" name="labelPointAddress">
157-
<property name="text">
158-
<string>Point Address:</string>
159-
</property>
160-
</widget>
161-
</item>
162-
<item row="4" column="0">
163-
<widget class="QLabel" name="labelLength">
155+
<item row="3" column="0">
156+
<widget class="QLabel" name="labelAddressBase">
164157
<property name="text">
165-
<string>Length:</string>
158+
<string>Address Base:</string>
166159
</property>
167160
</widget>
168161
</item>
169-
<item row="4" column="1">
170-
<widget class="NumericLineEdit" name="lineEditLength">
162+
<item row="3" column="1">
163+
<widget class="AddressBaseComboBox" name="comboBoxAddressBase">
171164
<property name="sizePolicy">
172165
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
173166
<horstretch>0</horstretch>
@@ -176,19 +169,20 @@
176169
</property>
177170
<property name="minimumSize">
178171
<size>
179-
<width>0</width>
172+
<width>100</width>
180173
<height>25</height>
181174
</size>
182175
</property>
183-
<property name="maximumSize">
184-
<size>
185-
<width>60</width>
186-
<height>16777215</height>
187-
</size>
176+
</widget>
177+
</item>
178+
<item row="4" column="0">
179+
<widget class="QLabel" name="labelPointAddress">
180+
<property name="text">
181+
<string>Point Address:</string>
188182
</property>
189183
</widget>
190184
</item>
191-
<item row="2" column="1">
185+
<item row="4" column="1">
192186
<widget class="NumericLineEdit" name="lineEditPointAddress">
193187
<property name="sizePolicy">
194188
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
@@ -210,15 +204,15 @@
210204
</property>
211205
</widget>
212206
</item>
213-
<item row="3" column="0">
214-
<widget class="QLabel" name="labelAddressBase">
207+
<item row="7" column="0">
208+
<widget class="QLabel" name="labelLength">
215209
<property name="text">
216-
<string>Address Base:</string>
210+
<string>Length:</string>
217211
</property>
218212
</widget>
219213
</item>
220-
<item row="3" column="1">
221-
<widget class="AddressBaseComboBox" name="comboBoxAddressBase">
214+
<item row="7" column="1">
215+
<widget class="NumericLineEdit" name="lineEditLength">
222216
<property name="sizePolicy">
223217
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
224218
<horstretch>0</horstretch>
@@ -227,15 +221,44 @@
227221
</property>
228222
<property name="minimumSize">
229223
<size>
230-
<width>100</width>
224+
<width>0</width>
231225
<height>25</height>
232226
</size>
233227
</property>
228+
<property name="maximumSize">
229+
<size>
230+
<width>60</width>
231+
<height>16777215</height>
232+
</size>
233+
</property>
234234
</widget>
235235
</item>
236236
</layout>
237237
</widget>
238238
</item>
239+
<item>
240+
<widget class="QCheckBox" name="checkBoxGlobalMap">
241+
<property name="text">
242+
<string>Use Global Address Map (Unallocated registers will be zero)</string>
243+
</property>
244+
</widget>
245+
</item>
246+
<item>
247+
<spacer name="verticalSpacer">
248+
<property name="orientation">
249+
<enum>Qt::Orientation::Vertical</enum>
250+
</property>
251+
<property name="sizeType">
252+
<enum>QSizePolicy::Policy::Fixed</enum>
253+
</property>
254+
<property name="sizeHint" stdset="0">
255+
<size>
256+
<width>5</width>
257+
<height>9</height>
258+
</size>
259+
</property>
260+
</spacer>
261+
</item>
239262
<item>
240263
<widget class="QDialogButtonBox" name="buttonBox">
241264
<property name="orientation">
@@ -271,7 +294,6 @@
271294
<tabstops>
272295
<tabstop>lineEditSlaveAddress</tabstop>
273296
<tabstop>comboBoxPointType</tabstop>
274-
<tabstop>lineEditLength</tabstop>
275297
</tabstops>
276298
<resources/>
277299
<connections>

omodsim/displaydefinition.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ struct DisplayDefinition
1616
quint16 Length = 100;
1717
quint16 LogViewLimit = 30;
1818
bool ZeroBasedAddress = false;
19+
bool UseGlobalUnitMap = false;
1920

2021
void normalize()
2122
{
@@ -42,6 +43,7 @@ inline QSettings& operator <<(QSettings& out, const DisplayDefinition& dd)
4243
out.setValue("DisplayDefinition/Length", dd.Length);
4344
out.setValue("DisplayDefinition/LogViewLimit", dd.LogViewLimit);
4445
out.setValue("DisplayDefinition/ZeroBasedAddress", dd.ZeroBasedAddress);
46+
out.setValue("DisplayDefinition/UseGlobalUnitMap", dd.UseGlobalUnitMap);
4547

4648
return out;
4749
}
@@ -60,6 +62,7 @@ inline QSettings& operator >>(QSettings& in, DisplayDefinition& dd)
6062
dd.Length = in.value("DisplayDefinition/Length", 100).toUInt();
6163
dd.LogViewLimit = in.value("DisplayDefinition/LogViewLimit", 30).toUInt();
6264
dd.ZeroBasedAddress = in.value("DisplayDefinition/ZeroBasedAddress").toBool();
65+
dd.UseGlobalUnitMap = in.value("DisplayDefinition/UseGlobalUnitMap").toBool();
6366

6467
dd.normalize();
6568
return in;

omodsim/formmodsim.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ DisplayDefinition FormModSim::displayDefinition() const
138138
dd.PointType = ui->comboBoxModbusPointType->currentPointType();
139139
dd.Length = ui->lineEditLength->value<int>();
140140
dd.ZeroBasedAddress = ui->lineEditAddress->range<int>().from() == 0;
141+
dd.UseGlobalUnitMap = _mbMultiServer.useGlobalUnitMap();
141142

142143
return dd;
143144
}
@@ -167,6 +168,8 @@ void FormModSim::setDisplayDefinition(const DisplayDefinition& dd)
167168
ui->comboBoxModbusPointType->setCurrentPointType(dd.PointType);
168169
ui->comboBoxModbusPointType->blockSignals(false);
169170

171+
_mbMultiServer.setUseGlobalUnitMap(dd.UseGlobalUnitMap);
172+
170173
onDefinitionChanged();
171174
}
172175

omodsim/modbusdataunitmap.cpp

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ void setDataValue(QModbusDataUnitMap& modbusMap, QModbusDataUnit::RegisterType p
3535
/// \brief ModbusDataUnitMap::ModbusDataUnitMap
3636
///
3737
ModbusDataUnitMap::ModbusDataUnitMap()
38+
:_isGlobal(false)
3839
{
3940
_modbusDataUnitGlobalMap.insert(QModbusDataUnit::Coils, { QModbusDataUnit::Coils, 0, 65535 });
4041
_modbusDataUnitGlobalMap.insert(QModbusDataUnit::DiscreteInputs, { QModbusDataUnit::DiscreteInputs, 0, 65535 });
@@ -51,6 +52,9 @@ ModbusDataUnitMap::ModbusDataUnitMap()
5152
///
5253
void ModbusDataUnitMap::addUnitMap(int id, QModbusDataUnit::RegisterType pointType, quint16 pointAddress, quint16 length)
5354
{
55+
if(_isGlobal)
56+
return;
57+
5458
_dataUnits.insert(id, {pointType, pointAddress, length});
5559
updateDataUnitMap();
5660
}
@@ -65,13 +69,31 @@ void ModbusDataUnitMap::removeUnitMap(int id)
6569
updateDataUnitMap();
6670
}
6771

72+
///
73+
/// \brief ModbusDataUnitMap::isGlobalMap
74+
/// \return
75+
///
76+
bool ModbusDataUnitMap::isGlobalMap() const
77+
{
78+
return _isGlobal;
79+
}
80+
81+
///
82+
/// \brief ModbusDataUnitMap::setGlobalMap
83+
/// \param set
84+
///
85+
void ModbusDataUnitMap::setGlobalMap(bool set)
86+
{
87+
_isGlobal = set;
88+
}
89+
6890
///
6991
/// \brief ModbusDataUnitMap::begin
7092
/// \return
7193
///
7294
QModbusDataUnitMap::ConstIterator ModbusDataUnitMap::begin()
7395
{
74-
return _modbusDataUnitMap.begin();
96+
return _isGlobal ? _modbusDataUnitGlobalMap.begin() : _modbusDataUnitMap.begin();
7597
}
7698

7799
///
@@ -80,7 +102,7 @@ QModbusDataUnitMap::ConstIterator ModbusDataUnitMap::begin()
80102
///
81103
QModbusDataUnitMap::Iterator ModbusDataUnitMap::end()
82104
{
83-
return _modbusDataUnitMap.end();
105+
return _isGlobal ? _modbusDataUnitGlobalMap.end() : _modbusDataUnitMap.end();
84106
}
85107

86108
///

omodsim/modbusdataunitmap.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,24 @@ class ModbusDataUnitMap
1414
void addUnitMap(int id, QModbusDataUnit::RegisterType pointType, quint16 pointAddress, quint16 length);
1515
void removeUnitMap(int id);
1616

17+
bool isGlobalMap() const;
18+
void setGlobalMap(bool set);
19+
1720
void setData(const QModbusDataUnit& data);
1821
QModbusDataUnit getData(QModbusDataUnit::RegisterType pointType, quint16 pointAddress, quint16 length) const;
1922

2023
QModbusDataUnitMap::ConstIterator begin();
2124
QModbusDataUnitMap::Iterator end();
2225

2326
operator QModbusDataUnitMap(){
24-
return _modbusDataUnitMap;
27+
return _isGlobal ? _modbusDataUnitGlobalMap : _modbusDataUnitMap;
2528
}
2629

2730
private:
2831
void updateDataUnitMap();
2932

3033
private:
34+
bool _isGlobal;
3135
QMap<int, QModbusDataUnit> _dataUnits;
3236
QModbusDataUnitMap _modbusDataUnitMap;
3337
QModbusDataUnitMap _modbusDataUnitGlobalMap;

omodsim/modbusmultiserver.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,25 @@ void ModbusMultiServer::setDeviceId(quint8 deviceId)
4646
emit deviceIdChanged(deviceId);
4747
}
4848

49+
///
50+
/// \brief ModbusMultiServer::useGlobalUnitMap
51+
/// \return
52+
///
53+
bool ModbusMultiServer::useGlobalUnitMap() const
54+
{
55+
return _modbusDataUnitMap.isGlobalMap();
56+
}
57+
58+
///
59+
/// \brief ModbusMultiServer::setUseGlobalUnitMap
60+
/// \param use
61+
///
62+
void ModbusMultiServer::setUseGlobalUnitMap(bool use)
63+
{
64+
_modbusDataUnitMap.setGlobalMap(use);
65+
reconfigureServers();
66+
}
67+
4968
///
5069
/// \brief ModbusMultiServer::addUnitMap
5170
/// \param id

omodsim/modbusmultiserver.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,9 @@ class ModbusMultiServer final : public QObject
9898
quint8 deviceId() const;
9999
void setDeviceId(quint8 deviceId);
100100

101+
bool useGlobalUnitMap() const;
102+
void setUseGlobalUnitMap(bool use);
103+
101104
void addUnitMap(int id, QModbusDataUnit::RegisterType pointType, quint16 pointAddress, quint16 length);
102105
void removeUnitMap(int id);
103106

omodsim/translations/omodsim_ru.qm

185 Bytes
Binary file not shown.

omodsim/translations/omodsim_ru.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -337,17 +337,22 @@
337337
<translation>Тип регистров:</translation>
338338
</message>
339339
<message>
340-
<location filename="../dialogs/dialogdisplaydefinition.ui" line="158"/>
340+
<location filename="../dialogs/dialogdisplaydefinition.ui" line="242"/>
341+
<source>Use Global Address Map (Unallocated registers will be zero)</source>
342+
<translation>Использовать глобальную карту адресов</translation>
343+
</message>
344+
<message>
345+
<location filename="../dialogs/dialogdisplaydefinition.ui" line="181"/>
341346
<source>Point Address:</source>
342347
<translation>Начальный адрес:</translation>
343348
</message>
344349
<message>
345-
<location filename="../dialogs/dialogdisplaydefinition.ui" line="165"/>
350+
<location filename="../dialogs/dialogdisplaydefinition.ui" line="210"/>
346351
<source>Length:</source>
347352
<translation>Количество:</translation>
348353
</message>
349354
<message>
350-
<location filename="../dialogs/dialogdisplaydefinition.ui" line="216"/>
355+
<location filename="../dialogs/dialogdisplaydefinition.ui" line="158"/>
351356
<source>Address Base:</source>
352357
<translation>Адресация:</translation>
353358
</message>
@@ -1038,7 +1043,7 @@ Length: %2</source>
10381043
<translation type="vanished">Указана недопустимая длина данных</translation>
10391044
</message>
10401045
<message>
1041-
<location filename="../formmodsim.cpp" line="427"/>
1046+
<location filename="../formmodsim.cpp" line="430"/>
10421047
<source>Address Base: %1
10431048
Start Address: %2
10441049
Length: %3</source>
@@ -1047,7 +1052,7 @@ Length: %3</source>
10471052
Количество: %3</translation>
10481053
</message>
10491054
<message>
1050-
<location filename="../formmodsim.cpp" line="430"/>
1055+
<location filename="../formmodsim.cpp" line="433"/>
10511056
<source>Device Id: %1
10521057
MODBUS Point Type:
10531058
%2</source>
@@ -1942,7 +1947,7 @@ MODBUS Point Type:
19421947
<context>
19431948
<name>ModbusMultiServer</name>
19441949
<message>
1945-
<location filename="../modbusmultiserver.cpp" line="773"/>
1950+
<location filename="../modbusmultiserver.cpp" line="792"/>
19461951
<source>Connection error. %1</source>
19471952
<translation>Ошибка подключения. %1</translation>
19481953
</message>

0 commit comments

Comments
 (0)