Skip to content

Commit 78ff28e

Browse files
committed
Add count of Tx/Rx packets statistic in status bar
1 parent 4bc9856 commit 78ff28e

34 files changed

+440
-271
lines changed

src/client/gui/client_ui.cpp

Lines changed: 4 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,6 @@ mbClientUi::mbClientUi(mbClient *core, QWidget *parent) :
5454
{
5555
ui->setupUi(this);
5656

57-
m_lbSystemName = nullptr;
58-
m_lbSystemStatus= nullptr;
5957
m_projectFileFilter = "Client Project (*.pjc);;" + m_projectFileFilter;
6058
m_helpFile = QStringLiteral("/help/ModbusClient.qhc");
6159
}
@@ -67,8 +65,6 @@ mbClientUi::~mbClientUi()
6765

6866
void mbClientUi::initialize()
6967
{
70-
mbCoreUi::initialize();
71-
7268
// LogView
7369
ui->dockLogView->setWidget(logView());
7470

@@ -186,20 +182,12 @@ void mbClientUi::initialize()
186182
connect(ui->actionHelpAboutQt , &QAction::triggered, this, &mbClientUi::menuSlotHelpAboutQt );
187183
connect(ui->actionHelpContents, &QAction::triggered, this, &mbClientUi::menuSlotHelpContents);
188184

189-
// status bar
190-
m_lbSystemName = new QLabel("Status", ui->statusbar);
191-
m_lbSystemStatus = new QLabel(ui->statusbar);
192-
m_lbSystemStatus->setFrameShape(QFrame::Panel);
193-
m_lbSystemStatus->setFrameStyle(QFrame::Sunken);
194-
m_lbSystemStatus->setAutoFillBackground(true);
195-
statusChange(m_core->status());
196-
ui->statusbar->addPermanentWidget(m_lbSystemName);
197-
ui->statusbar->addPermanentWidget(m_lbSystemStatus, 1);
198-
199-
connect(m_core, &mbClient::statusChanged, this, &mbClientUi::statusChange);
200-
201185
m_sendMessageUi = new mbClientSendMessageUi(this);
202186
m_scannerUi = new mbClientScannerUi(this);
187+
188+
m_ui.statusbar = ui->statusbar ;
189+
m_ui.actionRuntimeStartStop = ui->actionRuntimeStartStop;
190+
mbCoreUi::initialize();
203191
}
204192

205193
MBSETTINGS mbClientUi::cachedSettings() const
@@ -525,49 +513,6 @@ void mbClientUi::menuSlotToolsScanner()
525513
m_scannerUi->show();
526514
}
527515

528-
void mbClientUi::statusChange(int status)
529-
{
530-
switch (status)
531-
{
532-
case mbClient::Running:
533-
//break; no need break
534-
case mbClient::Stopping:
535-
{
536-
//QPalette palette = m_lbSystemStatus->palette();
537-
QPalette palette = this->palette();
538-
palette.setColor(m_lbSystemStatus->backgroundRole(), Qt::green);
539-
//palette.setColor(m_lbSystemStatus->foregroundRole(), Qt::green);
540-
m_lbSystemStatus->setPalette(palette);
541-
ui->actionRuntimeStartStop->setText("Stop");
542-
ui->actionRuntimeStartStop->setIcon(QIcon(":/core/icons/stop.png"));
543-
}
544-
break;
545-
case mbClient::Stopped:
546-
{
547-
//QPalette palette = m_lbSystemStatus->palette();
548-
QPalette palette = this->palette();
549-
palette.setColor(m_lbSystemStatus->backgroundRole(), Qt::gray);
550-
//palette.setColor(m_lbSystemStatus->foregroundRole(), Qt::yellow);
551-
m_lbSystemStatus->setPalette(palette);
552-
ui->actionRuntimeStartStop->setText("Start");
553-
ui->actionRuntimeStartStop->setIcon(QIcon(":/core/icons/play.png"));
554-
}
555-
break;
556-
case mbClient::NoProject:
557-
{
558-
//QPalette palette = m_lbSystemStatus->palette();
559-
QPalette palette = this->palette();
560-
palette.setColor(m_lbSystemStatus->backgroundRole(), Qt::yellow);
561-
//palette.setColor(m_lbSystemStatus->foregroundRole(), Qt::yellow);
562-
m_lbSystemStatus->setPalette(palette);
563-
ui->actionRuntimeStartStop->setText("Start");
564-
ui->actionRuntimeStartStop->setIcon(QIcon(":/core/icons/play.png"));
565-
}
566-
break;
567-
}
568-
m_lbSystemStatus->setText(mb::enumKeyTypeStr<mbClient::Status>(status));
569-
}
570-
571516
void mbClientUi::contextMenuPort(mbCorePort */*port*/)
572517
{
573518
QMenu mn(m_projectUi);

src/client/gui/client_ui.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -118,11 +118,6 @@ private Q_SLOTS:
118118
// ----------------------------
119119
void menuSlotToolsSendMessage();
120120
void menuSlotToolsScanner();
121-
// ----------------------------
122-
// -----------RUNTIME----------
123-
// ----------------------------
124-
//------------------------------
125-
void statusChange(int status);
126121

127122
private Q_SLOTS:
128123
void contextMenuPort(mbCorePort *port);
@@ -136,8 +131,6 @@ private Q_SLOTS:
136131
private:
137132
Ui::mbClientUi *ui;
138133
// status bar labels
139-
QLabel* m_lbSystemName;
140-
QLabel* m_lbSystemStatus;
141134
mbClientSendMessageUi *m_sendMessageUi;
142135
mbClientScannerUi *m_scannerUi;
143136
};

src/client/gui/project/client_projectmodel.cpp

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,17 @@ QVariant mbClientProjectModel::data(const QModelIndex &index, int role) const
8585
return QVariant();
8686
}
8787

88+
mbCorePort *mbClientProjectModel::getPortByIndex(const QModelIndex &index) const
89+
{
90+
mbClientPort *port = this->port(index);
91+
if (port)
92+
return port;
93+
mbClientDevice *device = this->device(index);
94+
if (device)
95+
return device->port();
96+
return nullptr;
97+
}
98+
8899
QModelIndex mbClientProjectModel::deviceIndex(mbClientDevice *device) const
89100
{
90101
mbClientPort *port = device->port();
@@ -99,22 +110,6 @@ mbClientDevice *mbClientProjectModel::device(const QModelIndex &index) const
99110
return nullptr;
100111
}
101112

102-
QString mbClientProjectModel::portName(const mbClientPort *port) const
103-
{
104-
if (useNameWithSettings())
105-
{
106-
switch (port->type())
107-
{
108-
case Modbus::TCP:
109-
return QString("%1[%2:%3:%4]").arg(port->name(), Modbus::toString(port->type()), port->host(), QString::number(port->port()));
110-
case Modbus::RTU:
111-
case Modbus::ASC:
112-
return QString("%1[%2:%3]").arg(port->name(), Modbus::toString(port->type()), port->serialPortName());
113-
}
114-
}
115-
return port->name();
116-
}
117-
118113
QString mbClientProjectModel::deviceName(const mbClientDevice *device) const
119114
{
120115
if (useNameWithSettings())

src/client/gui/project/client_projectmodel.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,13 @@ class mbClientProjectModel : public mbCoreProjectModel
4848
public:
4949
inline QModelIndex portIndex(mbClientPort *port) const { return mbCoreProjectModel::portIndex(reinterpret_cast<mbCorePort*>(port)); }
5050
inline mbClientPort *port(const QModelIndex &index) const { return reinterpret_cast<mbClientPort*>(portCore(index)); }
51+
mbCorePort *getPortByIndex(const QModelIndex &index) const override;
5152

5253
public:
5354
QModelIndex deviceIndex(mbClientDevice *device) const;
5455
mbClientDevice *device(const QModelIndex &index) const;
5556

5657
protected:
57-
QString portName(const mbClientPort *port) const;
5858
QString deviceName(const mbClientDevice *device) const;
5959

6060
protected Q_SLOTS:

src/client/gui/project/client_projectui.cpp

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -36,22 +36,6 @@ mbClientProjectUi::mbClientProjectUi(QWidget *parent) :
3636
{
3737
}
3838

39-
mbCorePort *mbClientProjectUi::currentPortCore() const
40-
{
41-
QModelIndexList ls = m_view->selectionModel()->selectedIndexes();
42-
if (!ls.isEmpty())
43-
{
44-
const QModelIndex index = ls.first();
45-
mbClientPort *port = static_cast<mbClientProjectModel*>(m_model)->port(index);
46-
if (port)
47-
return port;
48-
mbClientDevice *device = static_cast<mbClientProjectModel*>(m_model)->device(index);
49-
if (device)
50-
return device->port();
51-
}
52-
return nullptr;
53-
}
54-
5539
mbClientDevice *mbClientProjectUi::currentDevice() const
5640
{
5741
QModelIndexList ls = m_view->selectionModel()->selectedIndexes();

src/client/gui/project/client_projectui.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ class mbClientProjectUi : public mbCoreProjectUi
3535
explicit mbClientProjectUi(QWidget *parent = nullptr);
3636

3737
public:
38-
mbCorePort *currentPortCore() const override;
39-
mbClientPort *currentPort() const { return reinterpret_cast<mbClientPort*>(currentPortCore()); }
38+
mbClientPort *currentPort () const { return reinterpret_cast<mbClientPort*>(currentPortCore ()); }
39+
mbClientPort *selectedPort() const { return reinterpret_cast<mbClientPort*>(selectedPortCore()); }
4040
mbClientDevice *currentDevice() const;
4141

4242
Q_SIGNALS:

src/client/project/client_port.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,19 @@ mbClientPort::~mbClientPort()
3737
{
3838
}
3939

40+
QString mbClientPort::extendedName() const
41+
{
42+
switch (type())
43+
{
44+
case Modbus::TCP:
45+
return QString("%1[%2:%3:%4]").arg(name(), Modbus::toString(type()), host(), QString::number(port()));
46+
case Modbus::RTU:
47+
case Modbus::ASC:
48+
return QString("%1[%2:%3]").arg(name(), Modbus::toString(type()), serialPortName());
49+
}
50+
return name();
51+
}
52+
4053
mbClientDevice *mbClientPort::device(const QString &name) const
4154
{
4255
Q_FOREACH(mbClientDevice *d, m_devices)

src/client/project/client_port.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class mbClientPort : public mbCorePort
4141
virtual ~mbClientPort();
4242

4343
public:
44+
QString extendedName() const override;
4445
inline mbClientProject* project() const { return reinterpret_cast<mbClientProject*>(mbCorePort::projectCore()); }
4546
inline void setProject(mbClientProject* project) { mbCorePort::setProjectCore(reinterpret_cast<mbCoreProject*>(project)); }
4647

src/client/runtime/client_portrunnable.cpp

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -35,26 +35,28 @@
3535
#include "client_devicerunnable.h"
3636
#include "client_runmessage.h"
3737

38-
mbClientPortRunnable::mbClientPortRunnable(const Modbus::Settings &settings, const QList<mbClientRunDevice*> &devices, QObject *parent)
38+
mbClientPortRunnable::mbClientPortRunnable(mbClientPort *clientPort, const Modbus::Settings &settings, const QList<mbClientRunDevice*> &devices, QObject *parent)
3939
: QObject(parent)
4040
{
41+
m_clientPort = clientPort;
42+
m_stat = m_clientPort->statistic();
4143
m_devices = devices;
42-
m_port = Modbus::createClientPort(settings);
43-
// Note: m_port can NOT be nullptr
44-
if (m_port->type() == Modbus::ASC)
44+
m_modbusPort = Modbus::createClientPort(settings);
45+
// Note: m_modbusPort can NOT be nullptr
46+
if (m_modbusPort->type() == Modbus::ASC)
4547
{
46-
m_port->connect(&ModbusClientPort::signalTx, this, &mbClientPortRunnable::slotAsciiTx);
47-
m_port->connect(&ModbusClientPort::signalRx, this, &mbClientPortRunnable::slotAsciiRx);
48+
m_modbusPort->connect(&ModbusClientPort::signalTx, this, &mbClientPortRunnable::slotAsciiTx);
49+
m_modbusPort->connect(&ModbusClientPort::signalRx, this, &mbClientPortRunnable::slotAsciiRx);
4850
}
4951
else
5052
{
51-
m_port->connect(&ModbusClientPort::signalTx, this, &mbClientPortRunnable::slotBytesTx);
52-
m_port->connect(&ModbusClientPort::signalRx, this, &mbClientPortRunnable::slotBytesRx);
53+
m_modbusPort->connect(&ModbusClientPort::signalTx, this, &mbClientPortRunnable::slotBytesTx);
54+
m_modbusPort->connect(&ModbusClientPort::signalRx, this, &mbClientPortRunnable::slotBytesRx);
5355
}
5456

5557
Q_FOREACH (mbClientRunDevice *device, m_devices)
5658
{
57-
mbClientDeviceRunnable *d = new mbClientDeviceRunnable(device, m_port);
59+
mbClientDeviceRunnable *d = new mbClientDeviceRunnable(device, m_modbusPort);
5860
m_runnables.append(d);
5961
m_hashRunnables.insert(d->modbusClient(), d);
6062
}
@@ -66,7 +68,7 @@ mbClientPortRunnable::~mbClientPortRunnable()
6668
m_hashRunnables.clear();
6769
qDeleteAll(m_runnables);
6870
m_runnables.clear();
69-
delete m_port;
71+
delete m_modbusPort;
7072
}
7173

7274
void mbClientPortRunnable::run()
@@ -77,12 +79,12 @@ void mbClientPortRunnable::run()
7779

7880
void mbClientPortRunnable::close()
7981
{
80-
m_port->close();
82+
m_modbusPort->close();
8183
}
8284

8385
void mbClientPortRunnable::slotBytesTx(const Modbus::Char */*source*/, const uint8_t* buff, uint16_t size)
8486
{
85-
const ModbusClient *c = reinterpret_cast<const ModbusClient*>(m_port->currentClient());
87+
const ModbusClient *c = reinterpret_cast<const ModbusClient*>(m_modbusPort->currentClient());
8688
mbClientDeviceRunnable *r = deviceRunnable(c);
8789
QByteArray bytes(reinterpret_cast<const char*>(buff), size);
8890
if (r)
@@ -92,11 +94,13 @@ void mbClientPortRunnable::slotBytesTx(const Modbus::Char */*source*/, const uin
9294
}
9395
else
9496
mbClient::LogTxRx(name(), QStringLiteral("Tx: ") + Modbus::bytesToString(buff, size).data());
97+
m_stat.countTx++;
98+
m_clientPort->setStatCountTx(m_stat.countTx);
9599
}
96100

97101
void mbClientPortRunnable::slotBytesRx(const Modbus::Char */*source*/, const uint8_t* buff, uint16_t size)
98102
{
99-
const ModbusClient *c = reinterpret_cast<const ModbusClient*>(m_port->currentClient());
103+
const ModbusClient *c = reinterpret_cast<const ModbusClient*>(m_modbusPort->currentClient());
100104
mbClientDeviceRunnable *r = deviceRunnable(c);
101105
QByteArray bytes(reinterpret_cast<const char*>(buff), size);
102106
if (r)
@@ -106,11 +110,13 @@ void mbClientPortRunnable::slotBytesRx(const Modbus::Char */*source*/, const uin
106110
}
107111
else
108112
mbClient::LogTxRx(name(), QStringLiteral("Rx: ") + Modbus::bytesToString(buff, size).data());
113+
m_stat.countRx++;
114+
m_clientPort->setStatCountRx(m_stat.countRx);
109115
}
110116

111117
void mbClientPortRunnable::slotAsciiTx(const Modbus::Char */*source*/, const uint8_t* buff, uint16_t size)
112118
{
113-
const ModbusClient *c = reinterpret_cast<const ModbusClient*>(m_port->currentClient());
119+
const ModbusClient *c = reinterpret_cast<const ModbusClient*>(m_modbusPort->currentClient());
114120
mbClientDeviceRunnable *r = deviceRunnable(c);
115121
QByteArray bytes(reinterpret_cast<const char*>(buff), size);
116122
if (r)
@@ -120,11 +126,13 @@ void mbClientPortRunnable::slotAsciiTx(const Modbus::Char */*source*/, const uin
120126
}
121127
else
122128
mbClient::LogTxRx(name(), QStringLiteral("Tx: ") + Modbus::asciiToString(buff, size).data());
129+
m_stat.countTx++;
130+
m_clientPort->setStatCountTx(m_stat.countTx);
123131
}
124132

125133
void mbClientPortRunnable::slotAsciiRx(const Modbus::Char */*source*/, const uint8_t* buff, uint16_t size)
126134
{
127-
const ModbusClient *c = reinterpret_cast<const ModbusClient*>(m_port->currentClient());
135+
const ModbusClient *c = reinterpret_cast<const ModbusClient*>(m_modbusPort->currentClient());
128136
mbClientDeviceRunnable *r = deviceRunnable(c);
129137
QByteArray bytes(reinterpret_cast<const char*>(buff), size);
130138
if (r)
@@ -134,4 +142,6 @@ void mbClientPortRunnable::slotAsciiRx(const Modbus::Char */*source*/, const uin
134142
}
135143
else
136144
mbClient::LogTxRx(name(), QStringLiteral("Rx: ") + Modbus::asciiToString(buff, size).data());
145+
m_stat.countRx++;
146+
m_clientPort->setStatCountRx(m_stat.countRx);
137147
}

src/client/runtime/client_portrunnable.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
#include <client_global.h>
2929

30+
#include <project/client_port.h>
3031

3132
class ModbusClient;
3233
class ModbusClientPort;
@@ -38,7 +39,7 @@ class mbClientPortRunnable : public QObject
3839
{
3940
Q_OBJECT
4041
public:
41-
explicit mbClientPortRunnable(const Modbus::Settings &settings, const QList<mbClientRunDevice*> &devices, QObject *parent = nullptr);
42+
explicit mbClientPortRunnable(mbClientPort *clientPort, const Modbus::Settings &settings, const QList<mbClientRunDevice*> &devices, QObject *parent = nullptr);
4243
~mbClientPortRunnable();
4344

4445
public:
@@ -59,10 +60,10 @@ private Q_SLOTS:
5960
void slotAsciiRx(const Modbus::Char *source, const uint8_t* buff, uint16_t size);
6061

6162
private:
62-
ModbusClientPort *m_port;
63-
64-
private:
63+
mbClientPort *m_clientPort;
64+
ModbusClientPort *m_modbusPort;
6565
QList<mbClientRunDevice*> m_devices;
66+
mbClientPort::Statistic m_stat;
6667

6768
private:
6869
typedef QList<mbClientDeviceRunnable*> Runnables_t;

0 commit comments

Comments
 (0)