diff --git a/.coderabbit.yaml b/.coderabbit.yaml index 49d494c..c02ae28 100644 --- a/.coderabbit.yaml +++ b/.coderabbit.yaml @@ -9,6 +9,7 @@ reviews: review_status: true collapse_walkthrough: false changed_files_summary: false + sequence_diagrams: false estimate_code_review_effort: false auto_review: enabled: true diff --git a/ModbusSim.png b/ModbusSim.png new file mode 100644 index 0000000..2c9381c Binary files /dev/null and b/ModbusSim.png differ diff --git a/ModbusTestSlave.png b/ModbusTestSlave.png deleted file mode 100644 index bb472ab..0000000 Binary files a/ModbusTestSlave.png and /dev/null differ diff --git a/README.md b/README.md index ad2ac17..f054d4e 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,14 @@ -# Build status -[![Build status](https://ci.appveyor.com/api/projects/status/v7ysjn9c2koy1tb8?svg=true)](https://ci.appveyor.com/project/jgeudens/modbustestslave) +modbussim logo -# What is ModbusTestSlave -ModbusTestSlave is an application that can be used to test a modbus master. The application consists of 2 main set of modules. A GUI-less part that contains all logic that can also be used in automated tests. The second part is a GUI that can be used for manual testing. +Build status: [![Build](https://github.com/ModbusScope/ModbusSim/actions/workflows/ccpp.yml/badge.svg?branch=master)](https://github.com/ModbusScope/ModbusSim/actions/workflows/ccpp.yml) -![ModbusTestSlave demo](ModbusTestSlave.png) +# What is ModbusSim +ModbusSim is a Modbus slave test application for validating Modbus master implementations. + +Key features: + +- Implements multiple configurable holding registers (values can be automatically incremented). +- Generates a sine-wave signal as register values. +- Can inject configurable communication errors to exercise master error handling. + +![ModbusSim demo](ModbusSim.png) diff --git a/misc/icon/Icons8_flat_sim_card.svg b/misc/icon/Icons8_flat_sim_card.svg index 8859250..332c658 100644 --- a/misc/icon/Icons8_flat_sim_card.svg +++ b/misc/icon/Icons8_flat_sim_card.svg @@ -5,8 +5,8 @@ enable-background="new 0 0 48 48" id="svg8" sodipodi:docname="Icons8_flat_sim_card.svg" - inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)" - inkscape:export-filename="/home/jens/Projects/ModbusTestSlave/ModbusTestSlave.git/misc/icon/icon-256x256.png" + inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)" + inkscape:export-filename="icon-256x256.png" inkscape:export-xdpi="512" inkscape:export-ydpi="512" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" @@ -38,18 +38,20 @@ guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" - inkscape:window-width="1852" - inkscape:window-height="1016" + inkscape:window-width="1854" + inkscape:window-height="1011" id="namedview10" showgrid="false" inkscape:zoom="12.698459" inkscape:cx="35.004247" - inkscape:cy="18.860556" - inkscape:window-x="68" - inkscape:window-y="27" + inkscape:cy="18.821181" + inkscape:window-x="0" + inkscape:window-y="0" inkscape:window-maximized="1" inkscape:current-layer="svg8" - inkscape:pagecheckerboard="0" /> + inkscape:pagecheckerboard="0" + inkscape:showpageshadow="2" + inkscape:deskcolor="#d1d1d1" /> Modbus + x="10.867574" + y="15.368117" + style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:6.77647px;font-family:Mallanna;-inkscape-font-specification:Mallanna;stroke-width:0.847058">Modbus diff --git a/misc/icon/icon-256x256.png b/misc/icon/icon-256x256.png new file mode 100644 index 0000000..c721492 Binary files /dev/null and b/misc/icon/icon-256x256.png differ diff --git a/misc/icon/icon-64x64.png b/misc/icon/icon-64x64.png deleted file mode 100644 index 1a1ac9b..0000000 Binary files a/misc/icon/icon-64x64.png and /dev/null differ diff --git a/scripts/deploy_linux.sh b/scripts/deploy_linux.sh index 7209c8f..5a5a766 100644 --- a/scripts/deploy_linux.sh +++ b/scripts/deploy_linux.sh @@ -3,7 +3,7 @@ set -ex # Copy assets cp misc/ModbusSim.desktop release/bin/linux/ -cp misc/icon/icon-64x64.png release/bin/linux/ModbusSim.png +cp misc/icon/icon-256x256.png release/bin/linux/ModbusSim.png cd release/bin/linux/ # now, build AppImage using linuxdeploy and linuxdeploy-plugin-qt diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 912ba0a..fc84873 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -2,13 +2,11 @@ #include "ui_mainwindow.h" +#include #include #include -#include -MainWindow::MainWindow(QWidget *parent) : - QMainWindow(parent), - _pUi(new Ui::MainWindow) +MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), _pUi(new Ui::MainWindow) { _pUi->setupUi(this); @@ -65,10 +63,8 @@ MainWindow::MainWindow(QWidget *parent) : /** Setup registerView **/ _pUi->tblRegData->setModel(_pRegisterDataModel); _pUi->tblRegData->verticalHeader()->show(); - _pUi->tblRegData->horizontalHeader()->show(); // Not sure yet (show or not to show?) - - /* Don't stretch columns, resize to contents */ - _pUi->tblRegData->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); + _pUi->tblRegData->horizontalHeader()->show(); + _pUi->tblRegData->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); QList registerList = QList() << 0 << 1 << 2 << 3 << 4; _pSlaveData->setRegisterState(registerList, true); @@ -80,7 +76,7 @@ MainWindow::MainWindow(QWidget *parent) : _pSineGraph->setPeriod(10000); QString windowCaption; - windowCaption = QString("ModbusTestSim"); + windowCaption = QString("ModbusSim"); setWindowTitle(windowCaption); } diff --git a/src/mainwindow.h b/src/mainwindow.h index d2a7147..305a96f 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -1,14 +1,14 @@ #ifndef MAINWINDOW_H #define MAINWINDOW_H -#include #include +#include -#include "testslavemodbus.h" #include "testslavedata.h" +#include "testslavemodbus.h" -#include "registerdatamodel.h" #include "incgraph.h" +#include "registerdatamodel.h" #include "sinegraph.h" namespace Ui { @@ -20,7 +20,7 @@ class MainWindow : public QMainWindow Q_OBJECT public: - explicit MainWindow(QWidget *parent = nullptr); + explicit MainWindow(QWidget* parent = nullptr); ~MainWindow(); private slots: @@ -34,8 +34,7 @@ private slots: void handleRequestProcessed(); private: - - Ui::MainWindow *_pUi; + Ui::MainWindow* _pUi; bool _bAutoInc; @@ -47,10 +46,10 @@ private slots: QButtonGroup _exceptionGroup; QButtonGroup _errorRecurrenceGroup; - TestSlaveModbus *_pSlaveModbus; - TestSlaveData *_pSlaveData; + TestSlaveModbus* _pSlaveModbus; + TestSlaveData* _pSlaveData; - RegisterDataModel *_pRegisterDataModel; + RegisterDataModel* _pRegisterDataModel; }; #endif // MAINWINDOW_H diff --git a/src/mainwindow.ui b/src/mainwindow.ui index a4bb9c1..9be831c 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -6,7 +6,7 @@ 0 0 - 700 + 1021 628 @@ -28,7 +28,7 @@ - Qt::LeftToRight + Qt::LayoutDirection::LeftToRight Once @@ -97,7 +97,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -125,7 +125,7 @@ - Qt::Vertical + Qt::Orientation::Vertical @@ -185,7 +185,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal @@ -231,7 +231,7 @@ - Qt::Horizontal + Qt::Orientation::Horizontal