Skip to content

Commit 46f9fd3

Browse files
committed
Developing new log view
1 parent 94b701f commit 46f9fd3

14 files changed

Lines changed: 459 additions & 53 deletions

omodsim/dialogs/dialogforcemultiplecoils.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
#include <QtMath>
22
#include <QLineEdit>
3+
#include "formatutils.h"
34
#include "dialogforcemultiplecoils.h"
45
#include "ui_dialogforcemultiplecoils.h"
56

67
///
78
/// \brief DialogForceMultipleCoils::DialogForceMultipleCoils
89
/// \param params
10+
/// \param type
11+
/// \param length
912
/// \param parent
1013
///
11-
DialogForceMultipleCoils::DialogForceMultipleCoils(ModbusWriteParams& params, int length, QWidget *parent) :
14+
DialogForceMultipleCoils::DialogForceMultipleCoils(ModbusWriteParams& params, QModbusDataUnit::RegisterType type, int length, QWidget *parent) :
1215
QDialog(parent)
1316
, ui(new Ui::DialogForceMultipleCoils)
1417
,_writeParams(params)
@@ -18,8 +21,8 @@ DialogForceMultipleCoils::DialogForceMultipleCoils(ModbusWriteParams& params, in
1821
Qt::CustomizeWindowHint |
1922
Qt::WindowTitleHint);
2023

21-
ui->labelAddress->setText(QString(tr("Address: %1")).arg(params.Address, 5, 10, QLatin1Char('0')));
22-
ui->labelLength->setText(QString(tr("Length: %1")).arg(length, 3, 10, QLatin1Char('0')));
24+
ui->labelAddress->setText(QString(tr("Address: <b>%1</b>")).arg(formatAddress(type, params.Address, false)));
25+
ui->labelLength->setText(QString(tr("Length: <b>%1</b>")).arg(length, 3, 10, QLatin1Char('0')));
2326

2427
_data = params.Value.value<QVector<quint16>>();
2528
if(_data.length() != length) _data.resize(length);

omodsim/dialogs/dialogforcemultiplecoils.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
#include <QDialog>
55
#include <QTableWidgetItem>
6+
#include <QModbusDataUnit>
67
#include "modbuswriteparams.h"
78

89
namespace Ui {
@@ -14,7 +15,7 @@ class DialogForceMultipleCoils : public QDialog
1415
Q_OBJECT
1516

1617
public:
17-
explicit DialogForceMultipleCoils(ModbusWriteParams& params, int length, QWidget *parent = nullptr);
18+
explicit DialogForceMultipleCoils(ModbusWriteParams& params, QModbusDataUnit::RegisterType type, int length, QWidget *parent = nullptr);
1819
~DialogForceMultipleCoils();
1920

2021
void accept() override;

omodsim/dialogs/dialogforcemultipleregisters.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include <QtMath>
22
#include <QRandomGenerator>
3+
#include "formatutils.h"
34
#include "numericutils.h"
45
#include "numericlineedit.h"
56
#include "dialogforcemultipleregisters.h"
@@ -8,10 +9,11 @@
89
///
910
/// \brief DialogForceMultipleRegisters::DialogForceMultipleRegisters
1011
/// \param params
12+
/// \param type
1113
/// \param length
1214
/// \param parent
1315
///
14-
DialogForceMultipleRegisters::DialogForceMultipleRegisters(ModbusWriteParams& params, int length, QWidget *parent) :
16+
DialogForceMultipleRegisters::DialogForceMultipleRegisters(ModbusWriteParams& params, QModbusDataUnit::RegisterType type, int length, QWidget *parent) :
1517
QDialog(parent)
1618
, ui(new Ui::DialogForceMultipleRegisters)
1719
,_writeParams(params)
@@ -21,8 +23,8 @@ DialogForceMultipleRegisters::DialogForceMultipleRegisters(ModbusWriteParams& pa
2123
Qt::CustomizeWindowHint |
2224
Qt::WindowTitleHint);
2325

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

2729
_data = params.Value.value<QVector<quint16>>();
2830
if(_data.length() != length) _data.resize(length);

omodsim/dialogs/dialogforcemultipleregisters.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
#include <QDialog>
55
#include <QTableWidgetItem>
6+
#include <QModbusDataUnit>
67
#include "numericlineedit.h"
78
#include "modbuswriteparams.h"
89

@@ -18,7 +19,7 @@ class DialogForceMultipleRegisters : public QDialog
1819
Q_OBJECT
1920

2021
public:
21-
explicit DialogForceMultipleRegisters(ModbusWriteParams& params, int length, QWidget *parent = nullptr);
22+
explicit DialogForceMultipleRegisters(ModbusWriteParams& params, QModbusDataUnit::RegisterType type, int length, QWidget *parent = nullptr);
2223
~DialogForceMultipleRegisters();
2324

2425
void accept() override;
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
#include <QPushButton>
2+
#include <QAbstractEventDispatcher>
3+
#include "dialogmsgparser.h"
4+
#include "ui_dialogmsgparser.h"
5+
6+
///
7+
/// \brief DialogMsgParser::DialogMsgParser
8+
/// \param mode
9+
/// \param parent
10+
///
11+
DialogMsgParser::DialogMsgParser(DataDisplayMode mode, QWidget *parent)
12+
: QDialog(parent)
13+
, ui(new Ui::DialogMsgParser)
14+
,_mm(nullptr)
15+
{
16+
ui->setupUi(this);
17+
18+
setWindowFlags(Qt::Dialog |
19+
Qt::CustomizeWindowHint |
20+
Qt::WindowTitleHint);
21+
22+
ui->info->setShowTimestamp(false);
23+
ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Parse"));
24+
ui->hexView->setCheckState(mode == DataDisplayMode::Hex ? Qt::Checked : Qt::Unchecked);
25+
26+
auto dispatcher = QAbstractEventDispatcher::instance();
27+
connect(dispatcher, &QAbstractEventDispatcher::awake, this, &DialogMsgParser::on_awake);
28+
}
29+
30+
///
31+
/// \brief DialogMsgParser::~DialogMsgParser
32+
///
33+
DialogMsgParser::~DialogMsgParser()
34+
{
35+
delete ui;
36+
if(_mm) delete _mm;
37+
}
38+
39+
///
40+
/// \brief DialogMsgParser::on_awake
41+
///
42+
void DialogMsgParser::on_awake()
43+
{
44+
ui->deviceIdIncluded->setVisible(ui->buttonPdu->isChecked());
45+
ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(!ui->bytesData->isEmpty());
46+
}
47+
48+
///
49+
/// \brief DialogMsgParser::on_hexView_toggled
50+
/// \param checked
51+
///
52+
void DialogMsgParser::on_hexView_toggled(bool checked)
53+
{
54+
ui->bytesData->setInputMode(checked ? ByteListTextEdit::HexMode : ByteListTextEdit::DecMode);
55+
ui->info->setDataDisplayMode(checked ? DataDisplayMode::Hex : DataDisplayMode::Decimal);
56+
}
57+
58+
///
59+
/// \brief DialogMsgParser::on_bytesData_valueChanged
60+
/// \param value
61+
///
62+
void DialogMsgParser::on_bytesData_valueChanged(const QByteArray& value)
63+
{
64+
if(value.size() < 3)
65+
{
66+
if(value.isEmpty())
67+
ui->info->clear();
68+
69+
return;
70+
}
71+
72+
const auto data = value.left(value.size() - 2);
73+
const int checksum = makeWord(value[value.size() - 1], value[value.size() - 2], ByteOrder::LittleEndian);
74+
ui->checksumIncluded->setChecked(QModbusAdu::calculateCRC(data, data.size()) == checksum);
75+
}
76+
77+
///
78+
/// \brief DialogMsgParser::accept
79+
///
80+
void DialogMsgParser::accept()
81+
{
82+
auto data = ui->bytesData->value();
83+
if(data.isEmpty()) return;
84+
85+
ModbusMessage::Type type = ModbusMessage::Adu;
86+
auto protocol = QModbusAdu::Tcp;
87+
int checksum = 0;
88+
89+
if(ui->buttonPdu->isChecked())
90+
{
91+
type = ModbusMessage::Pdu;
92+
}
93+
94+
if(!ui->deviceIdIncluded->isChecked())
95+
{
96+
data.push_front('\0');
97+
}
98+
99+
if(ui->checksumIncluded->isChecked())
100+
{
101+
protocol = QModbusAdu::Rtu;
102+
checksum = makeWord(data[data.size() - 1], data[data.size() - 2], ByteOrder::LittleEndian);
103+
data = data.left(data.size() - 2);
104+
}
105+
106+
if(_mm) delete _mm;
107+
_mm = ModbusMessage::parse(data, type, protocol, ui->request->isChecked(), checksum);
108+
ui->info->setModbusMessage(_mm);
109+
}

omodsim/dialogs/dialogmsgparser.h

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#ifndef DIALOGMSGPARSER_H
2+
#define DIALOGMSGPARSER_H
3+
4+
#include <QDialog>
5+
#include "enums.h"
6+
#include "modbusmessage.h"
7+
8+
namespace Ui {
9+
class DialogMsgParser;
10+
}
11+
12+
///
13+
/// \brief The DialogMsgParser class
14+
///
15+
class DialogMsgParser : public QDialog
16+
{
17+
Q_OBJECT
18+
19+
public:
20+
explicit DialogMsgParser(DataDisplayMode mode, QWidget *parent = nullptr);
21+
~DialogMsgParser();
22+
23+
void accept() override;
24+
25+
private slots:
26+
void on_awake();
27+
void on_hexView_toggled(bool);
28+
void on_bytesData_valueChanged(const QByteArray& value);
29+
30+
private:
31+
Ui::DialogMsgParser *ui;
32+
const ModbusMessage* _mm;
33+
};
34+
35+
#endif // DIALOGMSGPARSER_H

0 commit comments

Comments
 (0)