Skip to content

Commit 8822924

Browse files
committed
Merge remote-tracking branch 'origin/dev'
2 parents c0bec9e + 186292c commit 8822924

36 files changed

+232
-170
lines changed

omodscan/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.16)
22

33
project(omodscan
4-
VERSION 1.12.0
4+
VERSION 1.12.1
55
DESCRIPTION "An Open Source Modbus Master (Client) Utility"
66
LANGUAGES CXX)
77

omodscan/controls/modbuslogwidget.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,12 @@ QVariant ModbusLogModel::data(const QModelIndex& index, int role) const
5454
return QString(R"(
5555
<span style="color:#444444">%1</span>
5656
<b style="color:%2">%3</b>
57-
<span>%4</span>
57+
<span style="color:%4">%5</span>
5858
)")
5959
.arg(item->timestamp().toString(Qt::ISODateWithMs),
6060
item->isRequest() ? "#0066cc" : "#009933",
6161
item->isRequest() ? "[Tx] ←" : "[Rx] →",
62+
(item->isException() || !item->isValid()) ? "#cc0000" : "#000000",
6263
item->toString(_parentWidget->dataDisplayMode(), _parentWidget->showLeadingZeros()));
6364

6465
case Qt::UserRole:

omodscan/controls/statisticwidget.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@
55
/// \brief StatisticWidget::StatisticWidget
66
/// \param parent
77
///
8-
StatisticWidget::StatisticWidget(QWidget *parent) :
9-
QWidget(parent)
8+
StatisticWidget::StatisticWidget(QWidget *parent)
9+
: QWidget(parent)
1010
, ui(new Ui::StatisticWidget)
1111
,_numberOfPolls(0)
1212
,_validSlaveResponses(0)
13+
,_pollState(static_cast<PollState>(-1))
1314
{
1415
ui->setupUi(this);
16+
setPollState(PollState::Off);
1517
}
1618

1719
///
@@ -88,6 +90,9 @@ PollState StatisticWidget::pollState() const
8890
///
8991
void StatisticWidget::setPollState(PollState state)
9092
{
93+
if(_pollState == state)
94+
return;
95+
9196
_pollState = state;
9297
switch (state)
9398
{
@@ -104,6 +109,7 @@ void StatisticWidget::setPollState(PollState state)
104109
ui->pushButtonPause->setText(tr("Resume Polling"));
105110
break;
106111
}
112+
emit pollStateChanged(pollState());
107113
}
108114

109115
///

omodscan/dialogs/dialogprintsettings.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -197,10 +197,6 @@ QList<PapeSource> DialogPrintSettings::supportedPaperSources(const QPrinter* pri
197197
name = tr("Cassette");
198198
break;
199199

200-
case QPrinter::MaxPageSource:
201-
name = tr("Max Page Source");
202-
break;
203-
204200
case QPrinter::CustomSource:
205201
name = tr("Custom Source");
206202
break;

omodscan/dialogs/dialogusermsg.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -227,11 +227,16 @@ void DialogUserMsg::on_modbusReply(const ModbusReply* const reply)
227227
return;
228228
}
229229

230-
if(reply->error() != ModbusDevice::NoError &&
231-
reply->error() != ModbusDevice::ProtocolError)
230+
switch(reply->error())
232231
{
233-
QMessageBox::warning(this, windowTitle(), reply->errorString());
234-
return;
232+
case ModbusDevice::NoError:
233+
case ModbusDevice::ProtocolError:
234+
case ModbusDevice::InvalidResponseError:
235+
break;
236+
237+
default:
238+
QMessageBox::warning(this, windowTitle(), reply->errorString());
239+
break;
235240
}
236241

237242
ui->pushButtonSend->setEnabled(true);

omodscan/fontutils.h

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

4-
#pragma once
5-
64
#include <QFont>
75
#include <QList>
86
#include <QFontDatabase>

omodscan/formmodsca.cpp

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#include <QMouseEvent>
12
#include <QPainter>
23
#include <QPalette>
34
#include <QDateTime>
@@ -37,18 +38,26 @@ FormModSca::FormModSca(int id, ModbusClient& client, DataSimulator* simulator, M
3738

3839
_timer.setInterval(1000);
3940

41+
ui->lineEditAddress->blockSignals(true);
4042
ui->lineEditAddress->setLeadingZeroes(true);
4143
ui->lineEditAddress->setInputRange(ModbusLimits::addressRange(true));
42-
ui->lineEditAddress->setValue(0);
44+
ui->lineEditAddress->setValue(1);
45+
ui->lineEditAddress->blockSignals(false);
4346

47+
ui->lineEditLength->blockSignals(true);
4448
ui->lineEditLength->setInputRange(ModbusLimits::lengthRange());
4549
ui->lineEditLength->setValue(50);
50+
ui->lineEditLength->blockSignals(false);
4651

52+
ui->lineEditDeviceId->blockSignals(true);
4753
ui->lineEditDeviceId->setLeadingZeroes(true);
4854
ui->lineEditDeviceId->setInputRange(ModbusLimits::slaveRange());
4955
ui->lineEditDeviceId->setValue(1);
56+
ui->lineEditDeviceId->blockSignals(false);
5057

58+
ui->comboBoxAddressBase->blockSignals(true);
5159
ui->comboBoxAddressBase->setCurrentAddressBase(AddressBase::Base1);
60+
ui->comboBoxAddressBase->blockSignals(false);
5261

5362
const auto dd = displayDefinition();
5463
const auto protocol = _modbusClient.connectionType() == ConnectionType::Serial ? ModbusMessage::Rtu : ModbusMessage::Tcp;
@@ -83,6 +92,8 @@ FormModSca::FormModSca(int id, ModbusClient& client, DataSimulator* simulator, M
8392
connect(_dataSimulator, &DataSimulator::simulationStarted, this, &FormModSca::on_simulationStarted);
8493
connect(_dataSimulator, &DataSimulator::simulationStopped, this, &FormModSca::on_simulationStopped);
8594
connect(_dataSimulator, &DataSimulator::dataSimulated, this, &FormModSca::on_dataSimulated);
95+
96+
ui->frameDataDefinition->installEventFilter(this);
8697
}
8798

8899
///
@@ -107,6 +118,24 @@ void FormModSca::changeEvent(QEvent* event)
107118
QWidget::changeEvent(event);
108119
}
109120

121+
///
122+
/// \brief FormModSca::eventFilter
123+
/// \param watched
124+
/// \param event
125+
/// \return
126+
///
127+
bool FormModSca::eventFilter(QObject* watched, QEvent* event)
128+
{
129+
if (watched == ui->frameDataDefinition && event->type() == QEvent::MouseButtonDblClick) {
130+
auto* me = static_cast<QMouseEvent*>(event);
131+
if(me->pos().x() > ui->statisticWidget->geometry().right()) {
132+
emit doubleClicked();
133+
return true;
134+
}
135+
}
136+
return QWidget::eventFilter(watched, event);
137+
}
138+
110139
///
111140
/// \brief FormModSca::filename
112141
/// \return
@@ -557,6 +586,8 @@ void FormModSca::show()
557586
{
558587
QWidget::show();
559588
emit showed();
589+
590+
beginUpdate();
560591
}
561592

562593
///
@@ -573,11 +604,11 @@ void FormModSca::on_timeout()
573604
{
574605
if(_validSlaveResponses == ui->statisticWidget->validSlaveResposes())
575606
{
576-
_noSlaveResponsesCounter++;
577607
if(_noSlaveResponsesCounter > _modbusClient.numberOfRetries())
578608
{
579609
ui->outputWidget->setStatus(tr("No Responses from Slave Device"));
580610
}
611+
_noSlaveResponsesCounter++;
581612
}
582613

583614
_modbusClient.sendReadRequest(dd.PointType, addr, dd.Length, dd.DeviceId, _formId);
@@ -602,7 +633,6 @@ void FormModSca::beginUpdate()
602633
ui->outputWidget->setStatus(tr("No Scan: Invalid Data Length Specified"));
603634

604635
if(pollState() == PollState::Off) {
605-
_timer.start();
606636
setPollState(PollState::Running);
607637
}
608638
}
@@ -732,7 +762,10 @@ void FormModSca::on_modbusReply(const ModbusReply* const reply)
732762
else
733763
{
734764
ui->outputWidget->updateData(reply->result());
735-
ui->outputWidget->setStatus(QString());
765+
766+
if(pollState() != PollState::Paused) {
767+
ui->outputWidget->setStatus(QString());
768+
}
736769
ui->statisticWidget->increaseValidSlaveResponses();
737770
}
738771
}
@@ -769,7 +802,6 @@ void FormModSca::on_modbusConnected(const ConnectionDetails&)
769802
///
770803
void FormModSca::on_modbusDisconnected(const ConnectionDetails&)
771804
{
772-
_timer.stop();
773805
setPollState(PollState::Off);
774806
ui->outputWidget->setStatus(tr("Device NOT CONNECTED!"));
775807
}
@@ -782,6 +814,7 @@ void FormModSca::on_lineEditAddress_valueChanged(const QVariant&)
782814
const quint8 deviceId = ui->lineEditDeviceId->value<int>();
783815
const auto protocol = _modbusClient.connectionType() == ConnectionType::Serial ? ModbusMessage::Rtu : ModbusMessage::Tcp;
784816
ui->outputWidget->setup(displayDefinition(), protocol, _dataSimulator->simulationMap(deviceId));
817+
785818
beginUpdate();
786819
}
787820

@@ -793,6 +826,7 @@ void FormModSca::on_lineEditLength_valueChanged(const QVariant&)
793826
const quint8 deviceId = ui->lineEditDeviceId->value<int>();
794827
const auto protocol = _modbusClient.connectionType() == ConnectionType::Serial ? ModbusMessage::Rtu : ModbusMessage::Tcp;
795828
ui->outputWidget->setup(displayDefinition(), protocol, _dataSimulator->simulationMap(deviceId));
829+
796830
beginUpdate();
797831
}
798832

@@ -804,6 +838,7 @@ void FormModSca::on_lineEditDeviceId_valueChanged(const QVariant&)
804838
const quint8 deviceId = ui->lineEditDeviceId->value<int>();
805839
const auto protocol = _modbusClient.connectionType() == ConnectionType::Serial ? ModbusMessage::Rtu : ModbusMessage::Tcp;
806840
ui->outputWidget->setup(displayDefinition(), protocol, _dataSimulator->simulationMap(deviceId));
841+
807842
beginUpdate();
808843
}
809844

@@ -828,9 +863,10 @@ void FormModSca::on_comboBoxModbusPointType_pointTypeChanged(QModbusDataUnit::Re
828863
const quint8 deviceId = ui->lineEditDeviceId->value<int>();
829864
const auto protocol = _modbusClient.connectionType() == ConnectionType::Serial ? ModbusMessage::Rtu : ModbusMessage::Tcp;
830865
ui->outputWidget->setup(displayDefinition(), protocol, _dataSimulator->simulationMap(deviceId));
831-
beginUpdate();
832866

833867
emit pointTypeChanged(type);
868+
869+
beginUpdate();
834870
}
835871

836872
///

omodscan/formmodsca.h

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,11 @@ public slots:
108108
void numberOfPollsChanged(uint value);
109109
void validSlaveResposesChanged(uint value);
110110
void captureError(const QString& error);
111+
void doubleClicked();
111112

112113
protected:
113114
void changeEvent(QEvent* event) override;
115+
bool eventFilter(QObject* watched, QEvent* event) override;
114116

115117
private slots:
116118
void on_timeout();
@@ -414,6 +416,10 @@ inline QXmlStreamWriter& operator <<(QXmlStreamWriter& xml, FormModSca* frm)
414416
xml.writeAttribute("Maximized", boolToString(wnd->isMaximized()));
415417
xml.writeAttribute("Minimized", boolToString(wnd->isMinimized()));
416418

419+
const auto windowPos = wnd->pos();
420+
xml.writeAttribute("Left", QString::number(windowPos.x()));
421+
xml.writeAttribute("Top", QString::number(windowPos.y()));
422+
417423
const auto windowSize = (wnd->isMinimized() || wnd->isMaximized()) ? wnd->sizeHint() : wnd->size();
418424
xml.writeAttribute("Width", QString::number(windowSize.width()));
419425
xml.writeAttribute("Height", QString::number(windowSize.height()));
@@ -523,6 +529,15 @@ inline QXmlStreamReader& operator >>(QXmlStreamReader& xml, FormModSca* frm)
523529

524530
const auto wnd = frm->parentWidget();
525531
if (wnd) {
532+
if(windowAttrs.hasAttribute("Left") && windowAttrs.hasAttribute("Top")) {
533+
bool okLeft, okTop;
534+
const int left = windowAttrs.value("Left").toInt(&okLeft);
535+
const int top = windowAttrs.value("Top").toInt(&okTop);
536+
if(okLeft && okTop) {
537+
wnd->move(left, top);
538+
}
539+
}
540+
526541
if (windowAttrs.hasAttribute("Width") && windowAttrs.hasAttribute("Height")) {
527542
bool okWidth, okHeight;
528543
const int width = windowAttrs.value("Width").toInt(&okWidth);

omodscan/mainwindow.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1441,6 +1441,11 @@ FormModSca* MainWindow::createMdiChild(int id)
14411441
QMessageBox::critical(this, windowTitle(), tr("Capture Error:\r\n %1").arg(error));
14421442
});
14431443

1444+
connect(frm, &FormModSca::doubleClicked, this, [this]()
1445+
{
1446+
ui->actionDataDefinition->trigger();
1447+
});
1448+
14441449
_windowActionList->addWindow(wnd);
14451450

14461451
return frm;

omodscan/modbusclientprivate.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -331,9 +331,12 @@ void ModbusClientPrivate::processQueueElement(const QModbusResponse& pdu, Modbus
331331
if (element.reply.isNull())
332332
return;
333333

334-
const quint16 transactionId = element.reply->transactionId();
335-
const auto msg = ModbusMessage::create(pdu, protocolType, serverAddress, transactionId, QDateTime::currentDateTime(), false);
336-
emit modbusResponse(element.reply->requestGroupId(), msg);
334+
if(pdu.isValid())
335+
{
336+
const quint16 transactionId = element.reply->transactionId();
337+
const auto msg = ModbusMessage::create(pdu, protocolType, serverAddress, transactionId, QDateTime::currentDateTime(), false);
338+
emit modbusResponse(element.reply->requestGroupId(), msg);
339+
}
337340

338341
element.reply->setRawResult(pdu);
339342

0 commit comments

Comments
 (0)