Browse Source

Add Close and Status

AddStatus
nasicurious 3 years ago
parent
commit
edbf2fa791
  1. 1
      Servo/Servo.pro
  2. 4
      Servo/include/ModbusMaster.h
  3. 1
      Servo/include/ModbusWrapper.h
  4. 11
      Servo/src/ModbusMaster.cpp
  5. 12
      Servo/src/ModbusWrapper.cpp
  6. 36
      Test/MainWindow.cpp
  7. 2
      Test/MainWindow.ui

1
Servo/Servo.pro

@ -25,7 +25,6 @@ SOURCES += \
HEADERS += \
$$files(*.h, true) \
include/ExpConfig.h
INCLUDEPATH += $$PWD/include

4
Servo/include/ModbusMaster.h

@ -36,7 +36,7 @@ public:
void writeRequest(QModbusDataUnit::RegisterType registerType,
int startAddress,
quint16 writeSize);
void close();
//uncrustify off
public slots:
@ -60,6 +60,8 @@ public slots:
quint16 writeSize,
QVector<quint16> registerValues,
ExpConfig& expConfig);
void close();
};
#endif //MODBUSMASTER_H

1
Servo/include/ModbusWrapper.h

@ -35,6 +35,7 @@ public:
signals:
void connectOrder(ModbusConfig modbusConfig, ExpConfig& expConfig);
void initOrder(ExpConfig& expConfig);
void closeOrder();
QBitArray getCoilOrder(int startAddress, quint16 readSize, ExpConfig& expConfig);
QBitArray getInputCoilOrder(int startAddress, quint16 readSize, ExpConfig& expConfig);

11
Servo/src/ModbusMaster.cpp

@ -2,9 +2,10 @@
#include <QModbusRtuSerialMaster>
#include <QEventLoop>
#include <QThread>
ModbusMaster::ModbusMaster(QObject* parent) : QObject(parent)
{
}
/*************************************************************************************************/
@ -18,6 +19,7 @@ void ModbusMaster::init(ExpConfig& expConfig)
connect(_modbusDevice, &QModbusClient::errorOccurred, [this](QModbusDevice::Error)
{
_initialized = false;
throw ServoException(_modbusDevice->errorString());
});
@ -363,7 +365,14 @@ void ModbusMaster::writeRequest(QModbusDataUnit::RegisterType registerType,
void ModbusMaster::close()
{
qDebug() << " ModbusMaster::close " <<QThread::currentThreadId() ;
if(_modbusDevice)
{
if (_modbusDevice->state() == QModbusDevice::ConnectedState || _modbusDevice->state() == QModbusDevice::ConnectingState)
{
_modbusDevice->disconnectDevice();
}
delete _modbusDevice;
_modbusDevice = nullptr;
}
}

12
Servo/src/ModbusWrapper.cpp

@ -74,6 +74,11 @@ void ModbusWrapper::init()
&_modbusMaster,
&ModbusMaster::setMultipleRegister,
Qt::BlockingQueuedConnection);
connect(this,
&ModbusWrapper::closeOrder,
&_modbusMaster,
&ModbusMaster::close,
Qt::BlockingQueuedConnection);
ExpConfig exp;
emit initOrder(exp);
@ -86,9 +91,14 @@ void ModbusWrapper::init()
/*************************************************************************************************/
void ModbusWrapper::close()
{
_modbusMaster.close();
if (_workerThread.isRunning())
{
emit closeOrder();
_workerThread.quit();
_workerThread.wait();
}
}
/*************************************************************************************************/

36
Test/MainWindow.cpp

@ -16,8 +16,12 @@ MainWindow::MainWindow(QWidget* parent)
/*************************************************************************************************/
MainWindow::~MainWindow()
{
delete ui;
if (timer->isActive())
{
timer->stop();
delete timer;
}
delete ui;
}
/*************************************************************************************************/
@ -198,12 +202,17 @@ void MainWindow::on_init_clicked()
try {
_servoControler.init(ui->serialPortServo->text());
timer = new QTimer();
timer->setInterval(1000);
timer->setInterval(2000);
timer->start();
connect(timer, &QTimer::timeout, this, &MainWindow::handleGetRequestFromServo);
}
catch(ServoException exp)
{
if (timer->isActive())
{
timer->stop();
delete timer;
}
ui->showServoError->setText(exp.getMessage());
}
}
@ -212,16 +221,29 @@ void MainWindow::on_init_clicked()
void MainWindow::handleGetRequestFromServo()
{
try {
// ui->showSpeed->setText(QString::number(_servoControler.getSpeed()));
//ui->showStartAngle->setText(QString::number(_servoControler.getStartAngle()));
//ui->showStopAngle->setText(QString::number(_servoControler.getStopAngle()));
//ui->showSpeed->setText(QString::number(_servoControler.getSpeed()));
// ui->showStartAngle->setText(QString::number(_servoControler.getStartAngle()));
// ui->showStopAngle->setText(QString::number(_servoControler.getStopAngle()));
//ui->showAngleOffset->setText(QString::number(_servoControler.getAngleOffset()));
//ui->showAzimuth->setText(QString::number(_servoControler.getAzimuth()));
ui->connectionState->setText(QVariant(_servoControler.getStatus()).toString());
// ui->showAzimuth->setText(QString::number(_servoControler.getAzimuth()));
auto currentstatus=_servoControler.getStatus();
if (!currentstatus)
{
if (timer->isActive())
{
timer->stop();
delete timer;
}
}
ui->connectionState->setText(QVariant(currentstatus).toString());
}
catch(ServoException exp)
{
if (timer->isActive())
{
timer->stop();
delete timer;
}
ui->showServoError->setText(exp.getMessage());
}

2
Test/MainWindow.ui

@ -957,7 +957,7 @@ color: rgb(238, 238, 236);
background-color: rgb(186, 178, 158);</string>
</property>
<property name="text">
<string>Error Monitoring</string>
<string/>
</property>
<property name="wordWrap">
<bool>true</bool>

Loading…
Cancel
Save