Skip to content

Commit ec2f211

Browse files
committed
Developing 1-based/0-based address switch
1 parent 3113bc8 commit ec2f211

17 files changed

Lines changed: 247 additions & 110 deletions

omodsim/dialogs/dialogdisplaydefinition.cpp

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,13 @@ DialogDisplayDefinition::DialogDisplayDefinition(DisplayDefinition dd, QWidget*
1414
, ui(new Ui::DialogDisplayDefinition)
1515
{
1616
ui->setupUi(this);
17-
ui->lineEditPointAddress->setInputRange(ModbusLimits::addressRange());
17+
ui->lineEditPointAddress->setInputRange(ModbusLimits::addressRange(dd.ZeroBasedAddress));
1818
ui->lineEditLength->setInputRange(ModbusLimits::lengthRange());
1919
ui->lineEditSlaveAddress->setInputRange(ModbusLimits::slaveRange());
2020
ui->lineEditLogLimit->setInputRange(4, 1000);
2121

2222
ui->lineEditPointAddress->setValue(dd.PointAddress);
23+
ui->comboBoxAddressBase->setCurrentIndex(dd.ZeroBasedAddress ? 0 : 1);
2324
ui->lineEditSlaveAddress->setValue(dd.DeviceId);
2425
ui->lineEditLength->setValue(dd.Length);
2526
ui->lineEditLogLimit->setValue(dd.LogViewLimit);
@@ -46,6 +47,20 @@ void DialogDisplayDefinition::accept()
4647
_displayDefinition.PointType = ui->comboBoxPointType->currentPointType();
4748
_displayDefinition.Length = ui->lineEditLength->value<int>();
4849
_displayDefinition.LogViewLimit = ui->lineEditLogLimit->value<int>();
50+
_displayDefinition.ZeroBasedAddress = (ui->comboBoxAddressBase->currentAddressBase() == AddressBase::Base0);
4951

5052
QFixedSizeDialog::accept();
5153
}
54+
55+
56+
///
57+
/// \brief DialogDisplayDefinition::on_comboBoxAddressBase_currentIndexChanged
58+
/// \param index
59+
///
60+
void DialogDisplayDefinition::on_comboBoxAddressBase_addressBaseChanged(AddressBase base)
61+
{
62+
const auto addr = ui->lineEditPointAddress->value<int>();
63+
64+
ui->lineEditPointAddress->setInputRange(ModbusLimits::addressRange(base == AddressBase::Base0));
65+
ui->lineEditPointAddress->setValue(base == AddressBase::Base1 ? qMax(1, addr + 1) : qMax(0, addr - 1));
66+
}

omodsim/dialogs/dialogdisplaydefinition.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#ifndef DIALOGDISPLAYDEFINITION_H
22
#define DIALOGDISPLAYDEFINITION_H
33

4+
#include "enums.h"
45
#include "qfixedsizedialog.h"
56
#include "displaydefinition.h"
67

@@ -25,6 +26,9 @@ class DialogDisplayDefinition : public QFixedSizeDialog
2526

2627
void accept() override;
2728

29+
private slots:
30+
void on_comboBoxAddressBase_addressBaseChanged(AddressBase base);
31+
2832
private:
2933
DisplayDefinition _displayDefinition;
3034
Ui::DialogDisplayDefinition *ui;

omodsim/dialogs/dialogdisplaydefinition.ui

Lines changed: 59 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717
<item>
1818
<layout class="QFormLayout" name="formLayout_2">
1919
<property name="labelAlignment">
20-
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
20+
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
2121
</property>
2222
<property name="formAlignment">
23-
<set>Qt::AlignHCenter|Qt::AlignTop</set>
23+
<set>Qt::AlignmentFlag::AlignHCenter|Qt::AlignmentFlag::AlignTop</set>
2424
</property>
2525
<property name="leftMargin">
2626
<number>40</number>
@@ -89,13 +89,16 @@
8989
</property>
9090
<layout class="QFormLayout" name="formLayout">
9191
<property name="labelAlignment">
92-
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
92+
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
93+
</property>
94+
<property name="formAlignment">
95+
<set>Qt::AlignmentFlag::AlignHCenter|Qt::AlignmentFlag::AlignTop</set>
9396
</property>
9497
<property name="verticalSpacing">
9598
<number>12</number>
9699
</property>
97100
<property name="leftMargin">
98-
<number>40</number>
101+
<number>9</number>
99102
</property>
100103
<item row="0" column="0">
101104
<widget class="QLabel" name="labelSlaveAddress">
@@ -186,64 +189,60 @@
186189
</widget>
187190
</item>
188191
<item row="2" column="1">
189-
<layout class="QHBoxLayout" name="horizontalLayout">
190-
<property name="spacing">
191-
<number>8</number>
192+
<widget class="NumericLineEdit" name="lineEditPointAddress">
193+
<property name="sizePolicy">
194+
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
195+
<horstretch>0</horstretch>
196+
<verstretch>0</verstretch>
197+
</sizepolicy>
198+
</property>
199+
<property name="minimumSize">
200+
<size>
201+
<width>0</width>
202+
<height>25</height>
203+
</size>
192204
</property>
193-
<item>
194-
<widget class="NumericLineEdit" name="lineEditPointAddress">
195-
<property name="sizePolicy">
196-
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
197-
<horstretch>0</horstretch>
198-
<verstretch>0</verstretch>
199-
</sizepolicy>
200-
</property>
201-
<property name="minimumSize">
202-
<size>
203-
<width>0</width>
204-
<height>25</height>
205-
</size>
206-
</property>
207-
<property name="maximumSize">
208-
<size>
209-
<width>60</width>
210-
<height>16777215</height>
211-
</size>
212-
</property>
213-
</widget>
214-
</item>
215-
<item>
216-
<widget class="QLabel" name="labelAddressBase">
217-
<property name="text">
218-
<string>(1-based)</string>
219-
</property>
220-
</widget>
221-
</item>
222-
<item>
223-
<spacer name="horizontalSpacer">
224-
<property name="orientation">
225-
<enum>Qt::Horizontal</enum>
226-
</property>
227-
<property name="sizeHint" stdset="0">
228-
<size>
229-
<width>40</width>
230-
<height>20</height>
231-
</size>
232-
</property>
233-
</spacer>
234-
</item>
235-
</layout>
205+
<property name="maximumSize">
206+
<size>
207+
<width>60</width>
208+
<height>16777215</height>
209+
</size>
210+
</property>
211+
</widget>
212+
</item>
213+
<item row="3" column="0">
214+
<widget class="QLabel" name="labelAddressBase">
215+
<property name="text">
216+
<string>Address Base:</string>
217+
</property>
218+
</widget>
219+
</item>
220+
<item row="3" column="1">
221+
<widget class="AddressBaseComboBox" name="comboBoxAddressBase">
222+
<property name="sizePolicy">
223+
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
224+
<horstretch>0</horstretch>
225+
<verstretch>0</verstretch>
226+
</sizepolicy>
227+
</property>
228+
<property name="minimumSize">
229+
<size>
230+
<width>100</width>
231+
<height>25</height>
232+
</size>
233+
</property>
234+
</widget>
236235
</item>
237236
</layout>
238237
</widget>
239238
</item>
240239
<item>
241240
<widget class="QDialogButtonBox" name="buttonBox">
242241
<property name="orientation">
243-
<enum>Qt::Horizontal</enum>
242+
<enum>Qt::Orientation::Horizontal</enum>
244243
</property>
245244
<property name="standardButtons">
246-
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
245+
<set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok</set>
247246
</property>
248247
<property name="centerButtons">
249248
<bool>true</bool>
@@ -253,15 +252,20 @@
253252
</layout>
254253
</widget>
255254
<customwidgets>
255+
<customwidget>
256+
<class>NumericLineEdit</class>
257+
<extends>QLineEdit</extends>
258+
<header>numericlineedit.h</header>
259+
</customwidget>
256260
<customwidget>
257261
<class>PointTypeComboBox</class>
258262
<extends>QComboBox</extends>
259263
<header>pointtypecombobox.h</header>
260264
</customwidget>
261265
<customwidget>
262-
<class>NumericLineEdit</class>
263-
<extends>QLineEdit</extends>
264-
<header>numericlineedit.h</header>
266+
<class>AddressBaseComboBox</class>
267+
<extends>QComboBox</extends>
268+
<header>addressbasecombobox.h</header>
265269
</customwidget>
266270
</customwidgets>
267271
<tabstops>

omodsim/dialogs/dialogsetuppresetdata.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ DialogSetupPresetData::DialogSetupPresetData(SetupPresetParams& params, QModbus
1414
,_params(params)
1515
{
1616
ui->setupUi(this);
17-
ui->lineEditAddress->setInputRange(ModbusLimits::addressRange());
17+
ui->lineEditAddress->setInputRange(ModbusLimits::addressRange(params.ZeroBasedAddress));
1818
ui->lineEditNumberOfPoints->setInputRange(ModbusLimits::lengthRange());
1919
ui->lineEditAddress->setValue(params.PointAddress);
2020
ui->lineEditNumberOfPoints->setValue(params.Length);

omodsim/dialogs/dialogsetuppresetdata.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ struct SetupPresetParams
88
{
99
quint16 PointAddress;
1010
quint16 Length;
11+
bool ZeroBasedAddress;
1112
};
1213

1314
namespace Ui {

omodsim/dialogs/dialogwritecoilregister.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ DialogWriteCoilRegister::DialogWriteCoilRegister(ModbusWriteParams& writeParams,
1616
,_simParams(simParams)
1717
{
1818
ui->setupUi(this);
19-
ui->lineEditAddress->setInputRange(ModbusLimits::addressRange());
19+
ui->lineEditAddress->setInputRange(ModbusLimits::addressRange(writeParams.ZeroBasedAddress));
2020
ui->lineEditAddress->setValue(_writeParams.Address);
2121
ui->radioButtonOn->setChecked(_writeParams.Value.toBool());
2222
ui->radioButtonOff->setChecked(!_writeParams.Value.toBool());

omodsim/dialogs/dialogwriteholdingregister.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ DialogWriteHoldingRegister::DialogWriteHoldingRegister(ModbusWriteParams& writeP
1717
,_simParams(simParams)
1818
{
1919
ui->setupUi(this);
20-
ui->lineEditAddress->setInputRange(ModbusLimits::addressRange());
20+
ui->lineEditAddress->setInputRange(ModbusLimits::addressRange(writeParams.ZeroBasedAddress));
2121
ui->lineEditAddress->setValue(_writeParams.Address);
2222

2323
if(simParams.Mode != SimulationMode::No)

omodsim/dialogs/dialogwriteholdingregisterbits.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ DialogWriteHoldingRegisterBits::DialogWriteHoldingRegisterBits(ModbusWriteParams
1414
,_writeParams(params)
1515
{
1616
ui->setupUi(this);
17-
ui->lineEditAddress->setInputRange(ModbusLimits::addressRange());
17+
ui->lineEditAddress->setInputRange(ModbusLimits::addressRange(params.ZeroBasedAddress));
1818
ui->lineEditAddress->setValue(params.Address);
1919

2020
quint16 value = params.Value.toUInt();

omodsim/displaydefinition.h

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@ struct DisplayDefinition
1515
QModbusDataUnit::RegisterType PointType = QModbusDataUnit::HoldingRegisters;
1616
quint16 Length = 100;
1717
quint16 LogViewLimit = 30;
18+
bool ZeroBasedAddress = false;
1819

1920
void normalize()
2021
{
2122
DeviceId = qMax<quint8>(ModbusLimits::slaveRange().from(), DeviceId);
22-
PointAddress = qMax<quint16>(ModbusLimits::addressRange().from(), PointAddress);
23+
PointAddress = qMax<quint16>(ModbusLimits::addressRange(ZeroBasedAddress).from(), PointAddress);
2324
PointType = qBound(QModbusDataUnit::DiscreteInputs, PointType, QModbusDataUnit::HoldingRegisters);
2425
Length = qBound<quint16>(ModbusLimits::lengthRange().from(), Length, ModbusLimits::lengthRange().to());
2526
LogViewLimit = qBound<quint16>(4, LogViewLimit, 1000);
@@ -35,11 +36,12 @@ Q_DECLARE_METATYPE(DisplayDefinition)
3536
///
3637
inline QSettings& operator <<(QSettings& out, const DisplayDefinition& dd)
3738
{
38-
out.setValue("DisplayDefinition/DeviceId", dd.DeviceId);
39-
out.setValue("DisplayDefinition/PointAddress", dd.PointAddress);
40-
out.setValue("DisplayDefinition/PointType", dd.PointType);
41-
out.setValue("DisplayDefinition/Length", dd.Length);
42-
out.setValue("DisplayDefinition/LogViewLimit", dd.LogViewLimit);
39+
out.setValue("DisplayDefinition/DeviceId", dd.DeviceId);
40+
out.setValue("DisplayDefinition/PointAddress", dd.PointAddress);
41+
out.setValue("DisplayDefinition/PointType", dd.PointType);
42+
out.setValue("DisplayDefinition/Length", dd.Length);
43+
out.setValue("DisplayDefinition/LogViewLimit", dd.LogViewLimit);
44+
out.setValue("DisplayDefinition/ZeroBasedAddress", dd.ZeroBasedAddress);
4345

4446
return out;
4547
}
@@ -57,6 +59,7 @@ inline QSettings& operator >>(QSettings& in, DisplayDefinition& dd)
5759
dd.PointType = (QModbusDataUnit::RegisterType)in.value("DisplayDefinition/PointType", 4).toUInt();
5860
dd.Length = in.value("DisplayDefinition/Length", 100).toUInt();
5961
dd.LogViewLimit = in.value("DisplayDefinition/LogViewLimit", 30).toUInt();
62+
dd.ZeroBasedAddress = in.value("DisplayDefinition/ZeroBasedAddress").toBool();
6063

6164
dd.normalize();
6265
return in;

omodsim/enums.h

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,40 @@
44
#include <QMetaType>
55
#include <QSettings>
66

7+
///
8+
/// \brief The AddressBase enum
9+
///
10+
enum class AddressBase
11+
{
12+
Base0 = 0,
13+
Base1
14+
};
15+
Q_DECLARE_METATYPE(AddressBase);
16+
17+
///
18+
/// \brief operator <<
19+
/// \param out
20+
/// \param params
21+
/// \return
22+
///
23+
inline QSettings& operator <<(QSettings& out, const AddressBase& base)
24+
{
25+
out.setValue("AddressBase", (uint)base);
26+
return out;
27+
}
28+
29+
///
30+
/// \brief operator >>
31+
/// \param in
32+
/// \param params
33+
/// \return
34+
///
35+
inline QSettings& operator >>(QSettings& in, AddressBase& base)
36+
{
37+
base = (AddressBase)in.value("AddressBase").toUInt();
38+
return in;
39+
}
40+
741
///
842
/// \brief The DisplayMode enum
943
///

0 commit comments

Comments
 (0)