Skip to content

Commit 11f4ea2

Browse files
committed
Added 'ByteOrder' for device settings
1 parent 56f12e5 commit 11f4ea2

File tree

7 files changed

+58
-9
lines changed

7 files changed

+58
-9
lines changed

src/core/gui/dialogs/core_dialogdataviewitem.cpp

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -108,8 +108,8 @@ void mbCoreDialogDataViewItem::initializeBaseUi()
108108
// Byte Order
109109
cmb = m_ui.cmbByteOrder;
110110
ls = mb::enumDataOrderKeyList();
111-
for (int i = 1; i < mb::enumDataOrderKeyCount(); i++) // i = 1 (i != 0) => pass 'DefaultOrder' for byte order
112-
cmb->addItem(ls.at(i));
111+
Q_FOREACH (const QString &s, ls)
112+
cmb->addItem(s);
113113
cmb->setCurrentIndex(0);
114114

115115
// Register Order
@@ -293,13 +293,27 @@ void mbCoreDialogDataViewItem::fillFormFormat(const QVariant &v)
293293
m_ui.cmbFormat->setCurrentText(mb::enumFormatKey(format));
294294
}
295295

296-
void mbCoreDialogDataViewItem::fillFormByteOrder(const QVariant &v)
296+
void mbCoreDialogDataViewItem::fillFormByteOrder(const QVariant &v, mbCoreDevice *dev)
297297
{
298+
QComboBox* cmb = m_ui.cmbByteOrder;
299+
if (!dev)
300+
{
301+
mbCoreProject* project = mbCore::globalCore()->projectCore();
302+
if (project)
303+
dev = project->deviceCore(m_ui.cmbDevice->currentIndex());
304+
}
305+
if (dev)
306+
{
307+
QString s = QString("Default(%1)").arg(mb::enumDataOrderKey(dev->byteOrder()));
308+
cmb->setItemText(0, s);
309+
}
310+
else
311+
cmb->setItemText(0, mb::enumDataOrderKey(mb::DefaultOrder));
312+
298313
bool ok;
299314
mb::DataOrder e = mb::enumDataOrderValue(v, &ok);
300315
if (!ok)
301316
return;
302-
QComboBox* cmb = m_ui.cmbByteOrder;
303317
if (e == mb::DefaultOrder)
304318
cmb->setCurrentIndex(0);
305319
else
@@ -486,7 +500,9 @@ void mbCoreDialogDataViewItem::fillDataFormat(MBSETTINGS &settings, const QStrin
486500

487501
void mbCoreDialogDataViewItem::fillDataByteOrder(MBSETTINGS &settings, const QString &key) const
488502
{
489-
settings[key] = mb::enumDataOrderValue(m_ui.cmbByteOrder->currentText());
503+
QComboBox* cmb = m_ui.cmbByteOrder;
504+
mb::DataOrder r = static_cast<mb::DataOrder>(cmb->currentIndex()-1);
505+
settings[key] = mb::enumDataOrderKey(r);
490506
}
491507

492508
void mbCoreDialogDataViewItem::fillDataRegisterOrder(MBSETTINGS &settings, const QString &key) const
@@ -557,6 +573,9 @@ void mbCoreDialogDataViewItem::deviceChanged(int i)
557573
return;
558574
mbCoreDevice *dev = project->deviceCore(i);
559575

576+
mb::DataOrder bo = mb::enumDataOrderValueByIndex(m_ui.cmbByteOrder->currentIndex());
577+
fillFormByteOrder(bo, dev);
578+
560579
mb::RegisterOrder ro = mb::enumRegisterOrderValueByIndex(m_ui.cmbRegisterOrder->currentIndex());
561580
fillFormRegisterOrder(ro, dev);
562581

src/core/gui/dialogs/core_dialogdataviewitem.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ class MB_EXPORT mbCoreDialogDataViewItem : public mbCoreDialogEdit
6363
protected:
6464
void fillForm(const MBSETTINGS &settings);
6565
void fillFormFormat(const QVariant &v);
66-
void fillFormByteOrder(const QVariant &v);
66+
void fillFormByteOrder(const QVariant &v, mbCoreDevice *dev = nullptr);
6767
void fillFormRegisterOrder(const QVariant &v, mbCoreDevice *dev = nullptr);
6868
void fillFormByteArrayFormat(const QVariant &v, mbCoreDevice *dev = nullptr);
6969
void fillFormByteArraySeparator(const QVariant &v, mbCoreDevice *dev = nullptr);

src/core/project/core_dataview.cpp

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,7 @@ QByteArray mbCoreDataViewItem::toByteArray(const QVariant &value) const
399399
return mb::toByteArray(value,
400400
m_format,
401401
m_address.type,
402-
m_byteOrder,
402+
getByteOrder(),
403403
getRegisterOrder(),
404404
m_byteArrayFormat,
405405
getStringEncoding(),
@@ -417,7 +417,7 @@ QVariant mbCoreDataViewItem::toVariant(const QByteArray &v) const
417417
return mb::toVariant(data,
418418
m_format,
419419
m_address.type,
420-
m_byteOrder,
420+
getByteOrder(),
421421
getRegisterOrder(),
422422
m_byteArrayFormat,
423423
getStringEncoding(),
@@ -426,6 +426,17 @@ QVariant mbCoreDataViewItem::toVariant(const QByteArray &v) const
426426
m_variableLength);
427427
}
428428

429+
mb::DataOrder mbCoreDataViewItem::getByteOrder() const
430+
{
431+
if (m_byteOrder == mb::DefaultOrder)
432+
{
433+
if (m_device && (m_device->byteOrder() != mb::DefaultOrder))
434+
return m_device->byteOrder();
435+
return mbCoreDevice::Defaults::instance().byteOrder;
436+
}
437+
return m_byteOrder;
438+
}
439+
429440
mb::RegisterOrder mbCoreDataViewItem::getRegisterOrder() const
430441
{
431442
if (m_registerOrder == mb::DefaultRegisterOrder)

src/core/project/core_dataview.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ class MB_EXPORT mbCoreDataViewItem : public QObject
163163
void valueChanged();
164164

165165
protected:
166+
mb::DataOrder getByteOrder() const;
166167
mb::RegisterOrder getRegisterOrder() const;
167168
mb::StringEncoding getStringEncoding() const;
168169
mb::StringLengthType getStringLengthType() const;

src/core/project/core_device.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ mbCoreDevice::Strings::Strings() :
3232
maxReadInputRegisters (QStringLiteral("maxReadInputRegisters")),
3333
maxWriteMultipleCoils (QStringLiteral("maxWriteMultipleCoils")),
3434
maxWriteMultipleRegisters(QStringLiteral("maxWriteMultipleRegisters")),
35+
byteOrder (QStringLiteral("byteOrder")),
3536
registerOrder (QStringLiteral("registerOrder")),
3637
byteArrayFormat (QStringLiteral("byteArrayFormat")),
3738
byteArraySeparator (QStringLiteral("byteArraySeparator")),
@@ -54,6 +55,7 @@ mbCoreDevice::Defaults::Defaults() :
5455
maxReadInputRegisters(MB_MAX_REGISTERS),
5556
maxWriteMultipleCoils(MB_MAX_DISCRETS),
5657
maxWriteMultipleRegisters(MB_MAX_REGISTERS),
58+
byteOrder(mb::LessSignifiedFirst),
5759
registerOrder(mb::R0R1R2R3),
5860
byteArrayFormat(mb::Hex),
5961
byteArraySeparator(QStringLiteral(" ")),
@@ -81,6 +83,7 @@ mbCoreDevice::mbCoreDevice(QObject *parent)
8183
m_settingsCore.maxReadInputRegisters = d.maxReadInputRegisters ;
8284
m_settingsCore.maxWriteMultipleCoils = d.maxWriteMultipleCoils ;
8385
m_settingsCore.maxWriteMultipleRegisters = d.maxWriteMultipleRegisters;
86+
m_settingsCore.byteOrder = d.byteOrder ;
8487
m_settingsCore.registerOrder = d.registerOrder ;
8588
m_settingsCore.byteArrayFormat = d.byteArrayFormat ;
8689
m_settingsCore.byteArraySeparator = d.byteArraySeparator ;
@@ -142,6 +145,7 @@ MBSETTINGS mbCoreDevice::settings() const
142145
r.insert(s.maxReadInputRegisters , maxReadInputRegisters ());
143146
r.insert(s.maxWriteMultipleCoils , maxWriteMultipleCoils ());
144147
r.insert(s.maxWriteMultipleRegisters, maxWriteMultipleRegisters ());
148+
r.insert(s.byteOrder , mb::enumDataOrderKey(byteOrder()));
145149
r.insert(s.registerOrder , mb::toString(registerOrder()));
146150
r.insert(s.byteArrayFormat , mb::enumDigitalFormatKey(byteArrayFormat()));
147151
r.insert(s.byteArraySeparator , byteArraySeparatorStr());
@@ -220,6 +224,15 @@ bool mbCoreDevice::setSettings(const MBSETTINGS &settings)
220224
setMaxWriteMultipleRegisters(v);
221225
}
222226

227+
it = settings.find(s.byteOrder);
228+
if (it != end)
229+
{
230+
QVariant var = it.value();
231+
mb::DataOrder v = mb::enumDataOrderValue(var.toString(), &ok);
232+
if (ok)
233+
setByteOrder(v);
234+
}
235+
223236
it = settings.find(s.registerOrder);
224237
if (it != end)
225238
{

src/core/project/core_device.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ class MB_EXPORT mbCoreDevice : public QObject
4343
const QString maxReadInputRegisters ;
4444
const QString maxWriteMultipleCoils ;
4545
const QString maxWriteMultipleRegisters;
46+
const QString byteOrder ;
4647
const QString registerOrder ;
4748
const QString byteArrayFormat ;
4849
const QString byteArraySeparator ;
@@ -62,6 +63,7 @@ class MB_EXPORT mbCoreDevice : public QObject
6263
const uint16_t maxReadInputRegisters ;
6364
const uint16_t maxWriteMultipleCoils ;
6465
const uint16_t maxWriteMultipleRegisters;
66+
const mb::DataOrder byteOrder ;
6567
const mb::RegisterOrder registerOrder ;
6668
const mb::DigitalFormat byteArrayFormat ;
6769
const QString byteArraySeparator ;
@@ -79,7 +81,6 @@ class MB_EXPORT mbCoreDevice : public QObject
7981
inline mbCoreProject* projectCore() const { return m_project; }
8082
void setProjectCore(mbCoreProject* project);
8183

82-
// TODO: maybe make `str` version of some methods, e.g. `mb::toStringEncoding(stringEncodingStrStr`
8384
public: // settings
8485
inline QString name() const { return objectName(); }
8586
void setName(const QString& name);
@@ -95,6 +96,8 @@ class MB_EXPORT mbCoreDevice : public QObject
9596
inline void setMaxWriteMultipleCoils(uint16_t max) { m_settingsCore.maxWriteMultipleCoils = max; }
9697
inline uint16_t maxWriteMultipleRegisters() const { return m_settingsCore.maxWriteMultipleRegisters; }
9798
inline void setMaxWriteMultipleRegisters(uint16_t max) { m_settingsCore.maxWriteMultipleRegisters = max; }
99+
inline mb::DataOrder byteOrder() const { return m_settingsCore.byteOrder; }
100+
inline void setByteOrder(mb::DataOrder byteOrder) { m_settingsCore.byteOrder = byteOrder; }
98101
inline mb::RegisterOrder registerOrder() const { return m_settingsCore.registerOrder; }
99102
inline void setRegisterOrder(mb::RegisterOrder registerOrder) { m_settingsCore.registerOrder = registerOrder; }
100103
inline mb::DigitalFormat byteArrayFormat() const { return m_settingsCore.byteArrayFormat; }
@@ -129,6 +132,7 @@ class MB_EXPORT mbCoreDevice : public QObject
129132
uint16_t maxReadHoldingRegisters ;
130133
uint16_t maxWriteMultipleCoils ;
131134
uint16_t maxWriteMultipleRegisters;
135+
mb::DataOrder byteOrder ;
132136
mb::RegisterOrder registerOrder ;
133137
mb::DigitalFormat byteArrayFormat ;
134138
QString byteArraySeparator ;

src/core/project/core_dom.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ const mbCoreDomDataView::Strings &mbCoreDomDataView::Strings::instance()
148148
mbCoreDomDataView::mbCoreDomDataView()
149149
{
150150
m_attr_period = mbCoreDataView::Defaults::instance().period;
151+
m_useDefaultColumns = mbCoreDataView::Defaults::instance().useDefaultColumns;
151152
}
152153

153154
mbCoreDomDataView::~mbCoreDomDataView()

0 commit comments

Comments
 (0)