| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -2,6 +2,7 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include "ui_mainwindow.h" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include "qdebug.h" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include <QThread> | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					#include "QtConcurrent/QtConcurrent" | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					MainWindow::MainWindow(QWidget *parent) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    : QMainWindow(parent) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    , ui(new Ui::MainWindow) | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -11,13 +12,21 @@ 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); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    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() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    delete ui; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    workerThread.quit(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    workerThread.wait(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -25,12 +34,12 @@ void MainWindow::on_connectButton_clicked() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    if( ui->connectButton->text()==tr("Disconnect")) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        modBusObj.stop(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        modBusObj->stop(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    else | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        modBusObj.init(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        modBusObj.open(ui->portEdit->text(),ui->serverEdit->value()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        modBusObj->init(); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        modBusObj->open(ui->portEdit->text(),ui->serverEdit->value()); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -42,13 +51,13 @@ 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<quint16>(numberOfEntries))); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    case 0:  printCoilsDataFromSlave(modBusObj->getCoil(startAddress,static_cast<quint16>(numberOfEntries))); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    case 1:  printCoilsDataFromSlave(modBusObj.getInputCoil(startAddress,static_cast<quint16>(numberOfEntries))); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    case 1:  printCoilsDataFromSlave(modBusObj->getInputCoil(startAddress,static_cast<quint16>(numberOfEntries))); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    case 2:  printRegisterDataFromSlave(modBusObj.getInputRegister(startAddress,static_cast<quint16>(numberOfEntries))); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    case 2:  printRegisterDataFromSlave(modBusObj->getInputRegister(startAddress,static_cast<quint16>(numberOfEntries))); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    case 3:  printRegisterDataFromSlave(modBusObj.getHoldingRegister(startAddress,static_cast<quint16>(numberOfEntries))); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    case 3:  printRegisterDataFromSlave(modBusObj->getHoldingRegister(startAddress,static_cast<quint16>(numberOfEntries))); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        break; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -97,11 +106,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; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -110,11 +119,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; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    } | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  |