Skip to content

Commit fc80ca2

Browse files
committed
Merge remote-tracking branch 'origin/dev'
2 parents 3d8a31e + 4475576 commit fc80ca2

29 files changed

Lines changed: 298 additions & 265 deletions

omodsim/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
cmake_minimum_required(VERSION 3.25)
22

33
project(omodsim
4-
VERSION 1.8.1
4+
VERSION 1.8.2
55
LANGUAGES CXX)
66

77
set(CMAKE_AUTOUIC ON)

omodsim/byteorderutils.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@ inline T toByteOrderValue(T value, ByteOrder order)
1515
{
1616
switch(order)
1717
{
18-
case ByteOrder::Direct:
18+
case ByteOrder::Swapped:
1919
return qToBigEndian<T>(value);
2020

21-
case ByteOrder::Swapped:
21+
case ByteOrder::Direct:
2222
return qToLittleEndian<T>(value);
2323
}
2424

omodsim/controls/modbuslogwidget.cpp

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,12 @@ void ModbusLogModel::clear()
7070
/// \brief ModbusLogModel::append
7171
/// \param data
7272
///
73-
void ModbusLogModel::append(const ModbusMessage* data)
73+
void ModbusLogModel::append(QSharedPointer<const ModbusMessage> data)
7474
{
7575
if(data == nullptr) return;
7676

7777
while(rowCount() >= _rowLimit)
7878
{
79-
delete _items.first();
8079
_items.removeFirst();
8180
}
8281

@@ -108,9 +107,6 @@ void ModbusLogModel::setRowLimit(int val)
108107
///
109108
void ModbusLogModel::deleteItems()
110109
{
111-
for(auto&& i : _items)
112-
delete i;
113-
114110
_items.clear();
115111
}
116112

@@ -183,9 +179,9 @@ QModelIndex ModbusLogWidget::index(int row)
183179
/// \param request
184180
/// \return
185181
///
186-
const ModbusMessage* ModbusLogWidget::addItem(const QModbusPdu& pdu, ModbusMessage::ProtocolType protocol, int deviceId, int transactionId, const QDateTime& timestamp, bool request)
182+
QSharedPointer<const ModbusMessage> ModbusLogWidget::addItem(const QModbusPdu& pdu, ModbusMessage::ProtocolType protocol, int deviceId, int transactionId, const QDateTime& timestamp, bool request)
187183
{
188-
const ModbusMessage* msg = nullptr;
184+
QSharedPointer<const ModbusMessage> msg;
189185
if(model())
190186
{
191187
msg = ModbusMessage::create(pdu, protocol, deviceId, timestamp, request);
@@ -202,13 +198,13 @@ const ModbusMessage* ModbusLogWidget::addItem(const QModbusPdu& pdu, ModbusMessa
202198
/// \param index
203199
/// \return
204200
///
205-
const ModbusMessage* ModbusLogWidget::itemAt(const QModelIndex& index)
201+
QSharedPointer<const ModbusMessage> ModbusLogWidget::itemAt(const QModelIndex& index)
206202
{
207203
if(!index.isValid())
208204
return nullptr;
209205

210206
return model() ?
211-
model()->data(index, Qt::UserRole).value<const ModbusMessage*>() :
207+
model()->data(index, Qt::UserRole).value<QSharedPointer<const ModbusMessage>>() :
212208
nullptr;
213209
}
214210

omodsim/controls/modbuslogwidget.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class ModbusLogModel : public QAbstractListModel
2222
QVariant data(const QModelIndex& index, int role) const override;
2323

2424
void clear();
25-
void append(const ModbusMessage* data);
25+
void append(QSharedPointer<const ModbusMessage> data);
2626
void update(){
2727
emit dataChanged(index(0), index(_items.size() - 1));
2828
}
@@ -36,7 +36,7 @@ class ModbusLogModel : public QAbstractListModel
3636
private:
3737
int _rowLimit = 30;
3838
ModbusLogWidget* _parentWidget;
39-
QQueue<const ModbusMessage*> _items;
39+
QQueue<QSharedPointer<const ModbusMessage>> _items;
4040
};
4141

4242
///
@@ -53,8 +53,8 @@ class ModbusLogWidget : public QListView
5353
int rowCount() const;
5454
QModelIndex index(int row);
5555

56-
const ModbusMessage* addItem(const QModbusPdu& pdu, ModbusMessage::ProtocolType protocol, int deviceId, int transactionId, const QDateTime& timestamp, bool request);
57-
const ModbusMessage* itemAt(const QModelIndex& index);
56+
QSharedPointer<const ModbusMessage> addItem(const QModbusPdu& pdu, ModbusMessage::ProtocolType protocol, int deviceId, int transactionId, const QDateTime& timestamp, bool request);
57+
QSharedPointer<const ModbusMessage> itemAt(const QModelIndex& index);
5858

5959
DataDisplayMode dataDisplayMode() const;
6060
void setDataDisplayMode(DataDisplayMode mode);

omodsim/controls/modbusmessagewidget.cpp

Lines changed: 35 additions & 35 deletions
Large diffs are not rendered by default.

omodsim/controls/modbusmessagewidget.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ class ModbusMessageWidget : public QListWidget
2121
ByteOrder byteOrder() const;
2222
void setByteOrder(ByteOrder order);
2323

24-
const ModbusMessage* modbusMessage() const;
25-
void setModbusMessage(const ModbusMessage* msg);
24+
QSharedPointer<const ModbusMessage> modbusMessage() const;
25+
void setModbusMessage(QSharedPointer<const ModbusMessage> msg);
2626

2727
bool showTimestamp() const;
2828
void setShowTimestamp(bool on);
@@ -40,7 +40,7 @@ class ModbusMessageWidget : public QListWidget
4040
ByteOrder _byteOrder;
4141
DataDisplayMode _dataDisplayMode;
4242
bool _showTimestamp;
43-
const ModbusMessage* _mm;
43+
QSharedPointer<const ModbusMessage> _mm;
4444
};
4545

4646
#endif // MODBUSMESSAGEWIDGET_H

omodsim/dialogs/dialogdisplaydefinition.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ DialogDisplayDefinition::DialogDisplayDefinition(DisplayDefinition dd, QWidget*
1414
, ui(new Ui::DialogDisplayDefinition)
1515
{
1616
ui->setupUi(this);
17+
ui->lineEditPointAddress->setInputMode(dd.HexAddress ? NumericLineEdit::HexMode : NumericLineEdit::Int32Mode);
1718
ui->lineEditPointAddress->setInputRange(ModbusLimits::addressRange(dd.ZeroBasedAddress));
1819
ui->lineEditLength->setInputRange(ModbusLimits::lengthRange());
1920
ui->lineEditSlaveAddress->setInputRange(ModbusLimits::slaveRange());

omodsim/dialogs/dialogforcemultiplecoils.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,20 +9,22 @@
99
/// \param params
1010
/// \param type
1111
/// \param length
12+
/// \param hexAddress
1213
/// \param parent
1314
///
14-
DialogForceMultipleCoils::DialogForceMultipleCoils(ModbusWriteParams& params, QModbusDataUnit::RegisterType type, int length, QWidget *parent) :
15+
DialogForceMultipleCoils::DialogForceMultipleCoils(ModbusWriteParams& params, QModbusDataUnit::RegisterType type, int length, bool hexAddress, QWidget *parent) :
1516
QDialog(parent)
1617
, ui(new Ui::DialogForceMultipleCoils)
1718
,_writeParams(params)
1819
,_type(type)
20+
,_hexAddress(hexAddress)
1921
{
2022
ui->setupUi(this);
2123
setWindowFlags(Qt::Dialog |
2224
Qt::CustomizeWindowHint |
2325
Qt::WindowTitleHint);
2426

25-
ui->labelAddress->setText(QString(tr("Address: <b>%1</b>")).arg(formatAddress(type, params.Address, false)));
27+
ui->labelAddress->setText(QString(tr("Address: <b>%1</b>")).arg(formatAddress(type, params.Address, _hexAddress)));
2628
ui->labelLength->setText(QString(tr("Length: <b>%1</b>")).arg(length, 3, 10, QLatin1Char('0')));
2729

2830
_data = params.Value.value<QVector<quint16>>();
@@ -111,8 +113,8 @@ void DialogForceMultipleCoils::updateTableWidget()
111113

112114
for(int i = 0; i < ui->tableWidget->rowCount(); i++)
113115
{
114-
const auto addressFrom = formatAddress(_type, _writeParams.Address + i * columns, false);
115-
const auto addressTo = formatAddress(_type, _writeParams.Address + qMin(length - 1, (i + 1) * columns - 1), false);
116+
const auto addressFrom = formatAddress(_type, _writeParams.Address + i * columns, _hexAddress);
117+
const auto addressTo = formatAddress(_type, _writeParams.Address + qMin(length - 1, (i + 1) * columns - 1), _hexAddress);
116118
ui->tableWidget->setVerticalHeaderItem(i, new QTableWidgetItem(QString("%1-%2").arg(addressFrom, addressTo)));
117119

118120
for(int j = 0; j < columns; j++)
@@ -123,7 +125,7 @@ void DialogForceMultipleCoils::updateTableWidget()
123125
auto item = new QTableWidgetItem(QString::number(_data[idx]));
124126
item->setData(Qt::UserRole, idx);
125127
item->setTextAlignment(Qt::AlignCenter);
126-
item->setToolTip(formatAddress(_type,_writeParams.Address + idx, false));
128+
item->setToolTip(formatAddress(_type,_writeParams.Address + idx, _hexAddress));
127129
ui->tableWidget->setItem(i, j, item);
128130
}
129131
else

omodsim/dialogs/dialogforcemultiplecoils.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class DialogForceMultipleCoils : public QDialog
1515
Q_OBJECT
1616

1717
public:
18-
explicit DialogForceMultipleCoils(ModbusWriteParams& params, QModbusDataUnit::RegisterType type, int length, QWidget *parent = nullptr);
18+
explicit DialogForceMultipleCoils(ModbusWriteParams& params, QModbusDataUnit::RegisterType type, int length, bool hexAddress, QWidget *parent = nullptr);
1919
~DialogForceMultipleCoils();
2020

2121
void accept() override;
@@ -33,6 +33,7 @@ private slots:
3333
QVector<quint16> _data;
3434
ModbusWriteParams& _writeParams;
3535
QModbusDataUnit::RegisterType _type;
36+
bool _hexAddress;
3637
};
3738

3839
#endif // DIALOGFORCEMULTIPLECOILS_H

omodsim/dialogs/dialogforcemultipleregisters.cpp

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,22 @@
1111
/// \param params
1212
/// \param type
1313
/// \param length
14+
/// \param hexAddress
1415
/// \param parent
1516
///
16-
DialogForceMultipleRegisters::DialogForceMultipleRegisters(ModbusWriteParams& params, QModbusDataUnit::RegisterType type, int length, QWidget *parent) :
17+
DialogForceMultipleRegisters::DialogForceMultipleRegisters(ModbusWriteParams& params, QModbusDataUnit::RegisterType type, int length, bool hexAddress, QWidget *parent) :
1718
QDialog(parent)
1819
, ui(new Ui::DialogForceMultipleRegisters)
1920
,_writeParams(params)
2021
,_type(type)
22+
,_hexAddress(hexAddress)
2123
{
2224
ui->setupUi(this);
2325
setWindowFlags(Qt::Dialog |
2426
Qt::CustomizeWindowHint |
2527
Qt::WindowTitleHint);
2628

27-
ui->labelAddress->setText(QString(tr("Address: <b>%1</b>")).arg(formatAddress(type, params.Address, false)));
29+
ui->labelAddress->setText(QString(tr("Address: <b>%1</b>")).arg(formatAddress(type, params.Address, _hexAddress)));
2830
ui->labelLength->setText(QString(tr("Length: <b>%1</b>")).arg(length, 3, 10, QLatin1Char('0')));
2931

3032
switch(_writeParams.DisplayMode)
@@ -33,7 +35,13 @@ DialogForceMultipleRegisters::DialogForceMultipleRegisters(ModbusWriteParams& pa
3335
ui->lineEditValue->setPaddingZeroes(true);
3436
ui->lineEditValue->setInputMode(NumericLineEdit::HexMode);
3537
ui->lineEditValue->setInputRange(0, USHRT_MAX);
36-
break;
38+
break;
39+
40+
case DataDisplayMode::Ansi:
41+
ui->lineEditValue->setInputMode(NumericLineEdit::AnsiMode);
42+
ui->lineEditValue->setCodepage(params.Codepage);
43+
ui->lineEditValue->setInputRange(0, USHRT_MAX);
44+
break;
3745

3846
case DataDisplayMode::Int16:
3947
ui->lineEditValue->setInputMode(NumericLineEdit::Int32Mode);
@@ -110,6 +118,7 @@ void DialogForceMultipleRegisters::accept()
110118
{
111119
case DataDisplayMode::Binary:
112120
case DataDisplayMode::Hex:
121+
case DataDisplayMode::Ansi:
113122
case DataDisplayMode::UInt16:
114123
case DataDisplayMode::Int16:
115124
{
@@ -245,6 +254,7 @@ void DialogForceMultipleRegisters::on_pushButtonRandom_clicked()
245254
{
246255
case DataDisplayMode::Binary:
247256
case DataDisplayMode::Hex:
257+
case DataDisplayMode::Ansi:
248258
case DataDisplayMode::UInt16:
249259
_data[i] = QRandomGenerator::global()->bounded(0, USHRT_MAX);
250260
break;
@@ -328,6 +338,7 @@ void DialogForceMultipleRegisters::on_pushButtonValue_clicked()
328338
switch(_writeParams.DisplayMode)
329339
{
330340
case DataDisplayMode::Hex:
341+
case DataDisplayMode::Ansi:
331342
case DataDisplayMode::Binary:
332343
case DataDisplayMode::UInt16:
333344
_data[i] = ui->lineEditValue->value<quint16>();
@@ -420,6 +431,13 @@ NumericLineEdit* DialogForceMultipleRegisters::createNumEdit(int idx)
420431
numEdit->setValue(toByteOrderValue(_data[idx], _writeParams.Order));
421432
break;
422433

434+
case DataDisplayMode::Ansi:
435+
numEdit = new NumericLineEdit(NumericLineEdit::AnsiMode, ui->tableWidget);
436+
numEdit->setInputRange(0, USHRT_MAX);
437+
numEdit->setCodepage(_writeParams.Codepage);
438+
numEdit->setValue(toByteOrderValue(_data[idx], _writeParams.Order));
439+
break;
440+
423441
case DataDisplayMode::UInt16:
424442
numEdit = new NumericLineEdit(NumericLineEdit::Int32Mode, ui->tableWidget);
425443
numEdit->setInputRange(0, USHRT_MAX);
@@ -575,8 +593,8 @@ void DialogForceMultipleRegisters::updateTableWidget()
575593

576594
for(int i = 0; i < ui->tableWidget->rowCount(); i++)
577595
{
578-
const auto addressFrom = formatAddress(QModbusDataUnit::HoldingRegisters, _writeParams.Address + i * columns, _hexView);
579-
const auto addressTo = formatAddress(QModbusDataUnit::HoldingRegisters, _writeParams.Address + qMin(length - 1, (i + 1) * columns - 1), _hexView);
596+
const auto addressFrom = formatAddress(QModbusDataUnit::HoldingRegisters, _writeParams.Address + i * columns, _hexAddress);
597+
const auto addressTo = formatAddress(QModbusDataUnit::HoldingRegisters, _writeParams.Address + qMin(length - 1, (i + 1) * columns - 1), _hexAddress);
580598
ui->tableWidget->setVerticalHeaderItem(i, new QTableWidgetItem(QString("%1-%2").arg(addressFrom, addressTo)));
581599

582600
for(int j = 0; j < columns; j++)

0 commit comments

Comments
 (0)