|
@ -2,6 +2,7 @@ |
|
|
#include "ui_mainwindow.h" |
|
|
#include "ui_mainwindow.h" |
|
|
#include "qdebug.h" |
|
|
#include "qdebug.h" |
|
|
#include <QThread> |
|
|
#include <QThread> |
|
|
|
|
|
#include "QtConcurrent/QtConcurrent" |
|
|
MainWindow::MainWindow(QWidget *parent) |
|
|
MainWindow::MainWindow(QWidget *parent) |
|
|
: QMainWindow(parent) |
|
|
: QMainWindow(parent) |
|
|
, ui(new Ui::MainWindow) |
|
|
, ui(new Ui::MainWindow) |
|
@ -11,13 +12,21 @@ MainWindow::MainWindow(QWidget *parent) |
|
|
ui->writeTable->addItem(tr("Discrete Inputs"), 1); |
|
|
ui->writeTable->addItem(tr("Discrete Inputs"), 1); |
|
|
ui->writeTable->addItem(tr("Input Registers"), 2); |
|
|
ui->writeTable->addItem(tr("Input Registers"), 2); |
|
|
ui->writeTable->addItem(tr("Holding Registers"), 3); |
|
|
ui->writeTable->addItem(tr("Holding Registers"), 3); |
|
|
connect(&modBusObj, &modBusMaster::modbusConnectionState, this, &MainWindow::connectionState); |
|
|
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); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
MainWindow::~MainWindow() |
|
|
MainWindow::~MainWindow() |
|
|
{ |
|
|
{ |
|
|
delete ui; |
|
|
delete ui; |
|
|
|
|
|
workerThread.quit(); |
|
|
|
|
|
workerThread.wait(); |
|
|
|
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -25,12 +34,12 @@ void MainWindow::on_connectButton_clicked() |
|
|
{ |
|
|
{ |
|
|
if( ui->connectButton->text()==tr("Disconnect")) |
|
|
if( ui->connectButton->text()==tr("Disconnect")) |
|
|
{ |
|
|
{ |
|
|
modBusObj.stop(); |
|
|
modBusObj->stop(); |
|
|
} |
|
|
} |
|
|
else |
|
|
else |
|
|
{ |
|
|
{ |
|
|
modBusObj.init(); |
|
|
modBusObj->init(); |
|
|
modBusObj.open(ui->portEdit->text(),ui->serverEdit->value()); |
|
|
modBusObj->open(ui->portEdit->text(),ui->serverEdit->value()); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -42,13 +51,13 @@ void MainWindow::on_readButton_clicked() |
|
|
// do not go beyond 10 entries
|
|
|
// do not go beyond 10 entries
|
|
|
int numberOfEntries = qMin(ui->readSize->currentText().toInt(), 10 - startAddress); |
|
|
int numberOfEntries = qMin(ui->readSize->currentText().toInt(), 10 - startAddress); |
|
|
switch (ui->writeTable->currentData().toInt()) { |
|
|
switch (ui->writeTable->currentData().toInt()) { |
|
|
case 0: printCoilsDataFromSlave(modBusObj.getCoil(startAddress,static_cast<quint16>(numberOfEntries))); |
|
|
case 0: printCoilsDataFromSlave(modBusObj->getCoil(startAddress,static_cast<quint16>(numberOfEntries))); |
|
|
break; |
|
|
break; |
|
|
case 1: printCoilsDataFromSlave(modBusObj.getInputCoil(startAddress,static_cast<quint16>(numberOfEntries))); |
|
|
case 1: printCoilsDataFromSlave(modBusObj->getInputCoil(startAddress,static_cast<quint16>(numberOfEntries))); |
|
|
break; |
|
|
break; |
|
|
case 2: printRegisterDataFromSlave(modBusObj.getInputRegister(startAddress,static_cast<quint16>(numberOfEntries))); |
|
|
case 2: printRegisterDataFromSlave(modBusObj->getInputRegister(startAddress,static_cast<quint16>(numberOfEntries))); |
|
|
break; |
|
|
break; |
|
|
case 3: printRegisterDataFromSlave(modBusObj.getHoldingRegister(startAddress,static_cast<quint16>(numberOfEntries))); |
|
|
case 3: printRegisterDataFromSlave(modBusObj->getHoldingRegister(startAddress,static_cast<quint16>(numberOfEntries))); |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -97,11 +106,11 @@ void MainWindow::on_writeButton_clicked() |
|
|
{ |
|
|
{ |
|
|
uiCoils.setBit(0,ui->coilData1->isChecked()); |
|
|
uiCoils.setBit(0,ui->coilData1->isChecked()); |
|
|
uiCoils.setBit(1,ui->coilData2->isChecked()); |
|
|
uiCoils.setBit(1,ui->coilData2->isChecked()); |
|
|
modBusObj.setMultipleCoil(startAddress, numberOfEntries, uiCoils); |
|
|
modBusObj->setMultipleCoil(startAddress, numberOfEntries, uiCoils); |
|
|
} |
|
|
} |
|
|
else if (numberOfEntries==1) |
|
|
else if (numberOfEntries==1) |
|
|
{ |
|
|
{ |
|
|
modBusObj.setSingleCoil(startAddress, ui->coilData1->isChecked()); |
|
|
modBusObj->setSingleCoil(startAddress, ui->coilData1->isChecked()); |
|
|
} |
|
|
} |
|
|
break; |
|
|
break; |
|
|
|
|
|
|
|
@ -110,11 +119,11 @@ void MainWindow::on_writeButton_clicked() |
|
|
{ |
|
|
{ |
|
|
uiholdingRegisters[0]=ui->textEdit1->toPlainText().toUInt(); |
|
|
uiholdingRegisters[0]=ui->textEdit1->toPlainText().toUInt(); |
|
|
uiholdingRegisters[1]=ui->textEdit2->toPlainText().toUInt(); |
|
|
uiholdingRegisters[1]=ui->textEdit2->toPlainText().toUInt(); |
|
|
modBusObj.setMultipleRegister(startAddress, numberOfEntries, uiholdingRegisters); |
|
|
modBusObj->setMultipleRegister(startAddress, numberOfEntries, uiholdingRegisters); |
|
|
} |
|
|
} |
|
|
else if (numberOfEntries==1) |
|
|
else if (numberOfEntries==1) |
|
|
{ |
|
|
{ |
|
|
modBusObj.setSingleRegister(startAddress, ui->textEdit1->toPlainText().toUInt()); |
|
|
modBusObj->setSingleRegister(startAddress, ui->textEdit1->toPlainText().toUInt()); |
|
|
} |
|
|
} |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|