Compare commits
5 Commits
Author | SHA1 | Date |
---|---|---|
|
a9c2eb3a62 | 3 years ago |
|
4a58ffe9a8 | 3 years ago |
|
5aa976b17a | 3 years ago |
|
edbf2fa791 | 3 years ago |
|
11ab0aaca0 | 3 years ago |
10 changed files with 848 additions and 687 deletions
@ -1,287 +1,292 @@ |
|||||
#include "MainWindow.h" |
#include "MainWindow.h" |
||||
#include "ui_MainWindow.h" |
#include "ui_MainWindow.h" |
||||
|
#include "QtConcurrent/QtConcurrent" |
||||
|
|
||||
MainWindow::MainWindow(QWidget* parent) |
MainWindow::MainWindow(QWidget* parent) |
||||
: QMainWindow(parent) |
: QMainWindow(parent) |
||||
, ui(new Ui::MainWindow) |
, ui(new Ui::MainWindow) |
||||
{ |
{ |
||||
ui->setupUi(this); |
ui->setupUi(this); |
||||
|
|
||||
ui->writeTable->addItem(tr("Coils"), 0); |
ui->writeTable->addItem(tr("Coils"), 0); |
||||
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); |
||||
} |
} |
||||
|
|
||||
/*************************************************************************************************/ |
/*************************************************************************************************/ |
||||
MainWindow::~MainWindow() |
MainWindow::~MainWindow() |
||||
{ |
{ |
||||
delete ui; |
delete ui; |
||||
timer->stop(); |
|
||||
} |
} |
||||
|
|
||||
/*************************************************************************************************/ |
/*************************************************************************************************/ |
||||
void MainWindow::on_connect_clicked() |
void MainWindow::on_connect_clicked() |
||||
{ |
{ |
||||
try |
try |
||||
{ |
{ |
||||
configDevice.serialPort = "/dev/pts/2"; |
configDevice.serialPort = "/dev/pts/2"; |
||||
configDevice.clientAddress = 1; |
configDevice.clientAddress = 1; |
||||
configDevice.responseTime = 1000; |
configDevice.responseTime = 1000; |
||||
qDebug() << "before init"; |
qDebug() << "before init"; |
||||
modbusWrapper.init(); |
modbusWrapper.init(); |
||||
qDebug() << "after init"; |
qDebug() << "after init"; |
||||
qDebug() << "before connect"; |
qDebug() << "before connect"; |
||||
modbusWrapper.connectToDevice(configDevice); |
modbusWrapper.connectToDevice(configDevice); |
||||
qDebug() << "after connect"; |
qDebug() << "after connect"; |
||||
ui->errorMonitoring->setText("No Error"); |
ui->errorMonitoring->setText("No Error"); |
||||
} |
} |
||||
catch(ServoException ex) |
catch(ServoException ex) |
||||
{ |
{ |
||||
ui->errorMonitoring->setText(ex.getMessage()); |
ui->errorMonitoring->setText(ex.getMessage()); |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
/*************************************************************************************************/ |
/*************************************************************************************************/ |
||||
void MainWindow::on_readButton_clicked() |
void MainWindow::on_readButton_clicked() |
||||
{ |
{ |
||||
int startAddress = ui->startAddress->text().toInt(); |
int startAddress = ui->startAddress->text().toInt(); |
||||
int numberOfEntries = ui->readSize->text().toInt(); |
int numberOfEntries = ui->readSize->text().toInt(); |
||||
try |
try |
||||
{ |
{ |
||||
switch(ui->writeTable->currentData().toInt()) |
switch(ui->writeTable->currentData().toInt()) |
||||
{ |
{ |
||||
case 0: |
case 0: |
||||
printCoilsDataFromClient(modbusWrapper.getCoil(startAddress, |
printCoilsDataFromClient(modbusWrapper.getCoil(startAddress, |
||||
static_cast<quint16>(numberOfEntries))); |
static_cast<quint16>(numberOfEntries))); |
||||
break; |
break; |
||||
|
|
||||
case 1: |
case 1: |
||||
printCoilsDataFromClient(modbusWrapper.getInputCoil(startAddress, |
printCoilsDataFromClient(modbusWrapper.getInputCoil(startAddress, |
||||
static_cast<quint16>( |
static_cast<quint16>( |
||||
numberOfEntries))); |
numberOfEntries))); |
||||
break; |
break; |
||||
|
|
||||
case 2: |
case 2: |
||||
printRegisterDataFromClient(modbusWrapper.getInputRegister(startAddress, |
printRegisterDataFromClient(modbusWrapper.getInputRegister(startAddress, |
||||
static_cast<quint16>( |
static_cast<quint16>( |
||||
numberOfEntries))); |
numberOfEntries))); |
||||
break; |
break; |
||||
|
|
||||
case 3: |
case 3: |
||||
printRegisterDataFromClient(modbusWrapper.getHoldingRegister(startAddress, |
printRegisterDataFromClient(modbusWrapper.getHoldingRegister(startAddress, |
||||
static_cast<quint16>( |
static_cast<quint16>( |
||||
numberOfEntries))); |
numberOfEntries))); |
||||
break; |
break; |
||||
} |
} |
||||
ui->errorMonitoring->setText("No Error"); |
ui->errorMonitoring->setText("No Error"); |
||||
} |
} |
||||
catch(const ServoException& exp) |
catch(const ServoException& exp) |
||||
{ |
{ |
||||
ui->errorMonitoring->setText(exp.getMessage()); |
ui->errorMonitoring->setText(exp.getMessage()); |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
/*************************************************************************************************/ |
/*************************************************************************************************/ |
||||
void MainWindow::printCoilsDataFromClient(QBitArray uiCoils) |
void MainWindow::printCoilsDataFromClient(QBitArray uiCoils) |
||||
{ |
{ |
||||
QString readedData; |
QString readedData; |
||||
for(int i = 0; i < uiCoils.count(); i++) |
for(int i = 0; i < uiCoils.count(); i++) |
||||
{ |
{ |
||||
const QString entry = tr("Number: %1, Value: %2").arg(i) |
const QString entry = tr("Number: %1, Value: %2").arg(i) |
||||
.arg(QString::number(uiCoils[i])); |
.arg(QString::number(uiCoils[i])); |
||||
readedData += (entry + "\n"); |
readedData += (entry + "\n"); |
||||
} |
} |
||||
ui->textEditRead->setText(readedData); |
ui->textEditRead->setText(readedData); |
||||
} |
} |
||||
|
|
||||
/*************************************************************************************************/ |
/*************************************************************************************************/ |
||||
void MainWindow::printRegisterDataFromClient(QVector<quint16> uiHoldingRegisters) |
void MainWindow::printRegisterDataFromClient(QVector<quint16> uiHoldingRegisters) |
||||
{ |
{ |
||||
QString readedData; |
QString readedData; |
||||
for(int i = 0; i < uiHoldingRegisters.count(); i++) |
for(int i = 0; i < uiHoldingRegisters.count(); i++) |
||||
{ |
{ |
||||
const QString entry = tr("Number: %1, Value: %2").arg(i) |
const QString entry = tr("Number: %1, Value: %2").arg(i) |
||||
.arg(QString::number(uiHoldingRegisters[i])); |
.arg(QString::number(uiHoldingRegisters[i])); |
||||
readedData += (entry + "\n"); |
readedData += (entry + "\n"); |
||||
} |
} |
||||
ui->textEditRead->setText(readedData); |
ui->textEditRead->setText(readedData); |
||||
} |
} |
||||
|
|
||||
/*************************************************************************************************/ |
/*************************************************************************************************/ |
||||
void MainWindow::on_writeSingleCoil_clicked() |
void MainWindow::on_writeSingleCoil_clicked() |
||||
{ |
{ |
||||
try { |
try { |
||||
int startAddress = ui->writeSingleCoilAddress->text().toInt(); |
int startAddress = ui->writeSingleCoilAddress->text().toInt(); |
||||
modbusWrapper.setSingleCoil(startAddress, ui->coilData->isChecked()); |
modbusWrapper.setSingleCoil(startAddress, ui->coilData->isChecked()); |
||||
ui->errorMonitoring->setText("No Error"); |
ui->errorMonitoring->setText("No Error"); |
||||
} |
} |
||||
catch(const ServoException& exp) |
catch(const ServoException& exp) |
||||
{ |
{ |
||||
ui->errorMonitoring->setText(exp.getMessage()); |
ui->errorMonitoring->setText(exp.getMessage()); |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
/*************************************************************************************************/ |
/*************************************************************************************************/ |
||||
void MainWindow::on_writeMultiCoil_clicked() |
void MainWindow::on_writeMultiCoil_clicked() |
||||
{ |
{ |
||||
try { |
try { |
||||
int startAddress = ui->writeMultiCoilStartAddress->text().toInt(); |
int startAddress = ui->writeMultiCoilStartAddress->text().toInt(); |
||||
int writeQty = ui->writeMultiCoilQty->text().toInt(); |
int writeQty = ui->writeMultiCoilQty->text().toInt(); |
||||
QString valueToWrite = ui->writeMultiCoilValue->text(); |
QString valueToWrite = ui->writeMultiCoilValue->text(); |
||||
|
|
||||
QBitArray uiCoils; |
QBitArray uiCoils; |
||||
uiCoils.resize(writeQty); |
uiCoils.resize(writeQty); |
||||
|
|
||||
for(int i = 0; i < valueToWrite.size(); i++) |
for(int i = 0; i < valueToWrite.size(); i++) |
||||
{ |
{ |
||||
if(valueToWrite.at(i) == '0') |
if(valueToWrite.at(i) == '0') |
||||
uiCoils[i] = false; |
uiCoils[i] = false; |
||||
else |
else |
||||
uiCoils[i] = true; |
uiCoils[i] = true; |
||||
} |
} |
||||
modbusWrapper.setMultipleCoil(startAddress, static_cast<quint16>(writeQty), uiCoils); |
modbusWrapper.setMultipleCoil(startAddress, static_cast<quint16>(writeQty), uiCoils); |
||||
ui->errorMonitoring->setText("No Error"); |
ui->errorMonitoring->setText("No Error"); |
||||
} |
} |
||||
catch(const ServoException& exp) |
catch(const ServoException& exp) |
||||
{ |
{ |
||||
ui->errorMonitoring->setText(exp.getMessage()); |
ui->errorMonitoring->setText(exp.getMessage()); |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
/*************************************************************************************************/ |
/*************************************************************************************************/ |
||||
void MainWindow::on_writeSingleRegister_clicked() |
void MainWindow::on_writeSingleRegister_clicked() |
||||
{ |
{ |
||||
try { |
try { |
||||
int startAddress = ui->writeSingleRegisterAddress->text().toInt(); |
int startAddress = ui->writeSingleRegisterAddress->text().toInt(); |
||||
quint16 value = static_cast<quint16>(ui->writeSingleRegisterValue->text().toInt()); |
quint16 value = static_cast<quint16>(ui->writeSingleRegisterValue->text().toInt()); |
||||
modbusWrapper.setSingleRegister(startAddress, value); |
modbusWrapper.setSingleRegister(startAddress, value); |
||||
ui->errorMonitoring->setText("No Error"); |
ui->errorMonitoring->setText("No Error"); |
||||
} |
} |
||||
catch(const ServoException& exp) |
catch(const ServoException& exp) |
||||
{ |
{ |
||||
ui->errorMonitoring->setText(exp.getMessage()); |
ui->errorMonitoring->setText(exp.getMessage()); |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
/*************************************************************************************************/ |
/*************************************************************************************************/ |
||||
void MainWindow::on_writeMultiRegister_clicked() |
void MainWindow::on_writeMultiRegister_clicked() |
||||
{ |
{ |
||||
try { |
try { |
||||
int startAddress = ui->writeMultiRegisterStartAddress->text().toInt(); |
int startAddress = ui->writeMultiRegisterStartAddress->text().toInt(); |
||||
int writeQty = ui->writeMultiRegisterQty->text().toInt(); |
int writeQty = ui->writeMultiRegisterQty->text().toInt(); |
||||
QString valueToWrite = ui->writeMultiRegisterValue->text(); |
QString valueToWrite = ui->writeMultiRegisterValue->text(); |
||||
QVector<quint16> uiHoldingRegisters; |
QVector<quint16> uiHoldingRegisters; |
||||
uiHoldingRegisters.resize(writeQty); |
uiHoldingRegisters.resize(writeQty); |
||||
|
|
||||
QRegExp rx("(\\ |\\,|\\.|\\:|\\t)"); //RegEx for ' ' or ',' or '.' or ':' or '\t'
|
QRegExp rx("(\\ |\\,|\\.|\\:|\\t)"); //RegEx for ' ' or ',' or '.' or ':' or '\t'
|
||||
QStringList stringListValue = valueToWrite.split(rx); |
QStringList stringListValue = valueToWrite.split(rx); |
||||
|
|
||||
for(int i = 0; i < stringListValue.size(); i++) |
for(int i = 0; i < stringListValue.size(); i++) |
||||
{ |
{ |
||||
uiHoldingRegisters[i] = static_cast<quint16>(stringListValue[i].toInt()); |
uiHoldingRegisters[i] = static_cast<quint16>(stringListValue[i].toInt()); |
||||
} |
} |
||||
modbusWrapper.setMultipleRegister(startAddress, |
modbusWrapper.setMultipleRegister(startAddress, |
||||
static_cast<quint16>(writeQty), |
static_cast<quint16>(writeQty), |
||||
uiHoldingRegisters); |
uiHoldingRegisters); |
||||
ui->errorMonitoring->setText("No Error"); |
ui->errorMonitoring->setText("No Error"); |
||||
} |
} |
||||
catch(const ServoException& exp) |
catch(const ServoException& exp) |
||||
{ |
{ |
||||
ui->errorMonitoring->setText(exp.getMessage()); |
ui->errorMonitoring->setText(exp.getMessage()); |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
/*************************************************************************************************/ |
/*************************************************************************************************/ |
||||
void MainWindow::on_init_clicked() |
void MainWindow::on_init_clicked() |
||||
{ |
{ |
||||
try { |
try { |
||||
_servoControler.init(ui->serialPortServo->text()); |
ui->showServoError->setText(""); |
||||
timer = new QTimer(); |
_servoControler.init(ui->serialPortServo->text()); |
||||
timer->setInterval(1000); |
QtConcurrent::run(this,&MainWindow::handleGetRequestFromServo); |
||||
timer->start(); |
} |
||||
connect(timer, &QTimer::timeout, this, &MainWindow::handleGetRequestFromServo); |
catch(ServoException exp) |
||||
} |
{ |
||||
catch(ServoException exp) |
ui->showServoError->setText(exp.getMessage()); |
||||
{ |
} |
||||
ui->showServoError->setText(exp.getMessage()); |
|
||||
} |
|
||||
} |
} |
||||
|
|
||||
/*************************************************************************************************/ |
/*************************************************************************************************/ |
||||
void MainWindow::handleGetRequestFromServo() |
void MainWindow::handleGetRequestFromServo() |
||||
{ |
{ |
||||
try { |
while(1) |
||||
ui->showSpeed->setText(QString::number(_servoControler.getSpeed())); |
{ |
||||
ui->showStartAngle->setText(QString::number(_servoControler.getStartAngle())); |
try { |
||||
ui->showStopAngle->setText(QString::number(_servoControler.getStopAngle())); |
ui->showSpeed->setText(QString::number(_servoControler.getSpeed())); |
||||
ui->showAngleOffset->setText(QString::number(_servoControler.getAngleOffset())); |
ui->showStartAngle->setText(QString::number(_servoControler.getStartAngle())); |
||||
ui->showAzimuth->setText(QString::number(_servoControler.getAzimuth())); |
ui->showStopAngle->setText(QString::number(_servoControler.getStopAngle())); |
||||
} |
ui->showAngleOffset->setText(QString::number(_servoControler.getAngleOffset())); |
||||
catch(ServoException exp) |
ui->showAzimuth->setText(QString::number(_servoControler.getAzimuth())); |
||||
{ |
ui->showServoError->setText(""); |
||||
ui->showServoError->setText(exp.getMessage()); |
QThread::sleep(2); |
||||
} |
} |
||||
|
catch(ServoException exp) |
||||
|
{ |
||||
|
ui->showServoError->setText(exp.getMessage()); |
||||
|
} |
||||
|
auto currentstatus=_servoControler.getStatus(); |
||||
|
ui->connectionState->setText(QVariant(currentstatus).toString()); |
||||
|
} |
||||
} |
} |
||||
|
|
||||
/*************************************************************************************************/ |
/*************************************************************************************************/ |
||||
void MainWindow::on_startMoving_clicked() |
void MainWindow::on_startMoving_clicked() |
||||
{ |
{ |
||||
try { |
try { |
||||
_servoControler.startMoving(); |
_servoControler.startMoving(); |
||||
} |
} |
||||
catch(ServoException exp) |
catch(ServoException exp) |
||||
{ |
{ |
||||
ui->showServoError->setText(exp.getMessage()); |
ui->showServoError->setText(exp.getMessage()); |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
/*************************************************************************************************/ |
/*************************************************************************************************/ |
||||
void MainWindow::on_stopMoving_clicked() |
void MainWindow::on_stopMoving_clicked() |
||||
{ |
{ |
||||
try { |
try { |
||||
_servoControler.stopMoving(); |
_servoControler.stopMoving(); |
||||
} |
} |
||||
catch(ServoException exp) |
catch(ServoException exp) |
||||
{ |
{ |
||||
ui->showServoError->setText(exp.getMessage()); |
ui->showServoError->setText(exp.getMessage()); |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
/*************************************************************************************************/ |
/*************************************************************************************************/ |
||||
void MainWindow::on_ResetAzimuth_clicked() |
void MainWindow::on_ResetAzimuth_clicked() |
||||
{ |
{ |
||||
try { |
try { |
||||
_servoControler.resetAzimuth(); |
_servoControler.resetAzimuth(); |
||||
} |
} |
||||
catch(ServoException exp) |
catch(ServoException exp) |
||||
{ |
{ |
||||
ui->showServoError->setText(exp.getMessage()); |
ui->showServoError->setText(exp.getMessage()); |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
/*************************************************************************************************/ |
/*************************************************************************************************/ |
||||
void MainWindow::on_sectorSpeed_clicked() |
void MainWindow::on_sectorSpeed_clicked() |
||||
{ |
{ |
||||
try { |
try { |
||||
_servoControler.sector(ui->startAngle->text().toDouble(), |
_servoControler.sector(ui->startAngle->text().toDouble(), |
||||
ui->stopAngle->text().toDouble(), |
ui->stopAngle->text().toDouble(), |
||||
ui->speed->text().toDouble()); |
ui->speed->text().toDouble()); |
||||
} |
} |
||||
catch(ServoException exp) |
catch(ServoException exp) |
||||
{ |
{ |
||||
ui->showServoError->setText(exp.getMessage()); |
ui->showServoError->setText(exp.getMessage()); |
||||
} |
} |
||||
} |
} |
||||
|
|
||||
/*************************************************************************************************/ |
/*************************************************************************************************/ |
||||
void MainWindow::on_fix_clicked() |
void MainWindow::on_fix_clicked() |
||||
{ |
{ |
||||
try { |
try { |
||||
_servoControler.fix(ui->startAngle->text().toDouble()); |
_servoControler.fix(ui->startAngle->text().toDouble()); |
||||
} |
} |
||||
catch(ServoException exp) |
catch(ServoException exp) |
||||
{ |
{ |
||||
ui->showServoError->setText(exp.getMessage()); |
ui->showServoError->setText(exp.getMessage()); |
||||
} |
} |
||||
} |
} |
||||
|
Loading…
Reference in new issue