diff --git a/serialConnectionManager/ModbusMaster.cpp b/serialConnectionManager/ModbusMaster.cpp index 8d6a774..fbd1d0f 100644 --- a/serialConnectionManager/ModbusMaster.cpp +++ b/serialConnectionManager/ModbusMaster.cpp @@ -14,7 +14,8 @@ modBusMaster::modBusMaster(QObject *parent) : QObject(parent) void modBusMaster::init() { - close(); + + /* close(); modbusDevice = nullptr; modbusDevice = new QModbusRtuSerialMaster(this); @@ -24,14 +25,14 @@ void modBusMaster::init() }); if (!modbusDevice) - throw serialPortException("Could not create Modbus master."); + throw serialPortException("Could not create Modbus master."); */ } void modBusMaster::open(QString serialPort , int slaveAddress) { - _serialPort = serialPort; + /* _serialPort = serialPort; _slaveAddress = slaveAddress; if (!modbusDevice) return; @@ -54,7 +55,7 @@ void modBusMaster::open(QString serialPort , int slaveAddress) if (!modbusDevice->connectDevice()) { throw serialPortException(modbusDevice->errorString()); - } + } */ } void modBusMaster::close() { diff --git a/serialConnectionManager/ModbusMaster.h b/serialConnectionManager/ModbusMaster.h index 1f4dcb6..c4c0ecf 100644 --- a/serialConnectionManager/ModbusMaster.h +++ b/serialConnectionManager/ModbusMaster.h @@ -20,8 +20,7 @@ class modBusMaster : public QObject public: explicit modBusMaster(QObject *parent = nullptr); - void init(); - void open(QString serialPort, int slaveAddress); + void start(); void deinit(); void close(); @@ -47,10 +46,12 @@ signals: void modbusConnectionState(bool state); private slots: void modbusReplyRecieved(); +public slots: + void init(); + void open(QString serialPort, int slaveAddress); private: QModbusReply *modbusReplyFromClient; - // QModbusDataUnit modbusReplyUnit; QModbusClient *modbusDevice = nullptr; QString _serialPort ; int _slaveAddress; diff --git a/serialConnectionManager/Modbuswrapper.cpp b/serialConnectionManager/Modbuswrapper.cpp new file mode 100644 index 0000000..d5b6aeb --- /dev/null +++ b/serialConnectionManager/Modbuswrapper.cpp @@ -0,0 +1,36 @@ +#include "Modbuswrapper.h" + +ModbusWrapper::ModbusWrapper(QObject *parent) : QObject(parent) +{ + modBusObj = new modBusMaster(); + connect(this, &ModbusWrapper::initConnectionOrder, modBusObj, &modBusMaster::init); + connect(this, &ModbusWrapper::openConnectionOrder, modBusObj, &modBusMaster::open); + connect(this, &ModbusWrapper::stopConnectionOrder, modBusObj, &modBusMaster::stop); + + modBusObj->moveToThread(&workerThread); + workerThread.setObjectName("workerThread"); + workerThread.start(); +} + +ModbusWrapper::~ModbusWrapper() +{ + workerThread.quit(); + workerThread.wait(); +} + +void ModbusWrapper::initWrapper(QString serialPort, int slaveAddress) +{ + emit initConnectionOrder(); + emit openConnectionOrder(serialPort, slaveAddress); +} + +void ModbusWrapper::stopWrapper() +{ + emit stopConnectionOrder(); +} + +QBitArray ModbusWrapper::getCoilWrapper(int startAddress, quint16 numberOfEntries) +{ + emit getCoilOrder(startAddress, numberOfEntries); +} + diff --git a/serialConnectionManager/Modbuswrapper.h b/serialConnectionManager/Modbuswrapper.h new file mode 100644 index 0000000..881c653 --- /dev/null +++ b/serialConnectionManager/Modbuswrapper.h @@ -0,0 +1,31 @@ +#ifndef MODBUSWRAPPER_H +#define MODBUSWRAPPER_H + +#include +#include +#include +class ModbusWrapper : public QObject +{ + Q_OBJECT +public: + explicit ModbusWrapper(QObject *parent = nullptr); + ~ModbusWrapper(); + void initWrapper(QString serialPort, int slaveAddress); + void stopWrapper(); + QBitArray getCoilWrapper( int startAddress, quint16 numberOfEntries); + +signals: + void openConnectionOrder(QString _serialPort, int _slaveAddress); + void initConnectionOrder(); + void stopConnectionOrder(); + QBitArray getCoilOrder(int startAddress, quint16 numberOfEntries); + +public slots: + + +private: + modBusMaster *modBusObj; + QThread workerThread; +}; + +#endif // MODBUSWRAPPER_H diff --git a/serialConnectionManager/SimulaterModbus.h b/serialConnectionManager/SimulaterModbus.h new file mode 100644 index 0000000..c992c51 --- /dev/null +++ b/serialConnectionManager/SimulaterModbus.h @@ -0,0 +1,17 @@ +#ifndef SIMULATERMODBUS_H +#define SIMULATERMODBUS_H + +#include + +class Simulatermodbus : public QObject +{ + Q_OBJECT +public: + explicit Simulatermodbus(QObject *parent = nullptr); + +signals: + +public slots: +}; + +#endif // SIMULATERMODBUS_H diff --git a/serialConnectionManager/mainwindow.cpp b/serialConnectionManager/mainwindow.cpp index 9a5907a..df2c688 100644 --- a/serialConnectionManager/mainwindow.cpp +++ b/serialConnectionManager/mainwindow.cpp @@ -12,12 +12,9 @@ MainWindow::MainWindow(QWidget *parent) ui->writeTable->addItem(tr("Discrete Inputs"), 1); ui->writeTable->addItem(tr("Input Registers"), 2); ui->writeTable->addItem(tr("Holding Registers"), 3); - modBusObj = new modBusMaster(); - modBusObj->moveToThread(&workerThread); - workerThread.setObjectName("workerThread"); - workerThread.start(); + // the thread starts the event loop and blocks waiting for events - connect(modBusObj, &modBusMaster::modbusConnectionState, this, &MainWindow::connectionState); + // connect(modBusObj, &modBusMaster::modbusConnectionState, this, &MainWindow::connectionState); } @@ -25,24 +22,19 @@ MainWindow::MainWindow(QWidget *parent) MainWindow::~MainWindow() { delete ui; - workerThread.quit(); - workerThread.wait(); - } void MainWindow::on_connectButton_clicked() { if( ui->connectButton->text()==tr("Disconnect")) { - modBusObj->stop(); + modBusWrapperObj->stopWrapper(); } else { - modBusObj->init(); - modBusObj->open(ui->portEdit->text(),ui->serverEdit->value()); - } - + modBusWrapperObj->initWrapper(ui->portEdit->text(),ui->serverEdit->value()); + } } void MainWindow::on_readButton_clicked() @@ -51,14 +43,14 @@ void MainWindow::on_readButton_clicked() // do not go beyond 10 entries int numberOfEntries = qMin(ui->readSize->currentText().toInt(), 10 - startAddress); switch (ui->writeTable->currentData().toInt()) { - case 0: printCoilsDataFromSlave(modBusObj->getCoil(startAddress,static_cast(numberOfEntries))); - break; - case 1: printCoilsDataFromSlave(modBusObj->getInputCoil(startAddress,static_cast(numberOfEntries))); - break; - case 2: printRegisterDataFromSlave(modBusObj->getInputRegister(startAddress,static_cast(numberOfEntries))); - break; - case 3: printRegisterDataFromSlave(modBusObj->getHoldingRegister(startAddress,static_cast(numberOfEntries))); + case 0: printCoilsDataFromSlave(modBusWrapperObj->getCoilWrapper(startAddress,static_cast(numberOfEntries))); break; + // case 1: printCoilsDataFromSlave(modBusObj->getInputCoil(startAddress,static_cast(numberOfEntries))); + // break; + // case 2: printRegisterDataFromSlave(modBusObj->getInputRegister(startAddress,static_cast(numberOfEntries))); + // break; + // case 3: printRegisterDataFromSlave(modBusObj->getHoldingRegister(startAddress,static_cast(numberOfEntries))); + // break; } } @@ -106,11 +98,11 @@ void MainWindow::on_writeButton_clicked() { uiCoils.setBit(0,ui->coilData1->isChecked()); uiCoils.setBit(1,ui->coilData2->isChecked()); - modBusObj->setMultipleCoil(startAddress, numberOfEntries, uiCoils); + // modBusObj->setMultipleCoil(startAddress, numberOfEntries, uiCoils); } else if (numberOfEntries==1) { - modBusObj->setSingleCoil(startAddress, ui->coilData1->isChecked()); + // modBusObj->setSingleCoil(startAddress, ui->coilData1->isChecked()); } break; @@ -119,11 +111,11 @@ void MainWindow::on_writeButton_clicked() { uiholdingRegisters[0]=ui->textEdit1->toPlainText().toUInt(); uiholdingRegisters[1]=ui->textEdit2->toPlainText().toUInt(); - modBusObj->setMultipleRegister(startAddress, numberOfEntries, uiholdingRegisters); + // modBusObj->setMultipleRegister(startAddress, numberOfEntries, uiholdingRegisters); } else if (numberOfEntries==1) { - modBusObj->setSingleRegister(startAddress, ui->textEdit1->toPlainText().toUInt()); + // modBusObj->setSingleRegister(startAddress, ui->textEdit1->toPlainText().toUInt()); } break; } diff --git a/serialConnectionManager/mainwindow.h b/serialConnectionManager/mainwindow.h index 1e9cce9..f0b5be1 100644 --- a/serialConnectionManager/mainwindow.h +++ b/serialConnectionManager/mainwindow.h @@ -1,8 +1,9 @@ #ifndef MAINWINDOW_H #define MAINWINDOW_H -#include + #include -#include "ModbusMaster.h" +#include +#include QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE @@ -26,9 +27,9 @@ private slots: private: Ui::MainWindow *ui; - modBusMaster *modBusObj; + ModbusWrapper *modBusWrapperObj; QBitArray uiCoils; QVector uiholdingRegisters; - QThread workerThread; + }; #endif // MAINWINDOW_H diff --git a/serialConnectionManager/serialConnectionManager.pro b/serialConnectionManager/serialConnectionManager.pro index c56ec63..22e721c 100644 --- a/serialConnectionManager/serialConnectionManager.pro +++ b/serialConnectionManager/serialConnectionManager.pro @@ -21,15 +21,19 @@ DEFINES += QT_DEPRECATED_WARNINGS SOURCES += \ ModbusMaster.cpp \ + Modbuswrapper.cpp \ SerialportException.cpp \ SettingSerialParameters..cpp \ main.cpp \ - mainwindow.cpp + mainwindow.cpp \ + simulatermodbus.cpp HEADERS += \ ModbusMaster.h \ + Modbuswrapper.h \ SerialportException.h \ SettingSerialParameters.h \ + SimulaterModbus.h \ mainwindow.h FORMS += \ diff --git a/serialConnectionManager/simulatermodbus.cpp b/serialConnectionManager/simulatermodbus.cpp new file mode 100644 index 0000000..b515373 --- /dev/null +++ b/serialConnectionManager/simulatermodbus.cpp @@ -0,0 +1,6 @@ +#include "SimulaterModbus.h" + +Simulatermodbus::Simulatermodbus(QObject *parent) : QObject(parent) +{ + +}