Browse Source

Add Close and Status

AddStatus
nasicurious 4 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. 28
      Test/MainWindow.cpp
  7. 2
      Test/MainWindow.ui

1
Servo/Servo.pro

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

4
Servo/include/ModbusMaster.h

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

1
Servo/include/ModbusWrapper.h

@ -35,6 +35,7 @@ public:
signals: signals:
void connectOrder(ModbusConfig modbusConfig, ExpConfig& expConfig); void connectOrder(ModbusConfig modbusConfig, ExpConfig& expConfig);
void initOrder(ExpConfig& expConfig); void initOrder(ExpConfig& expConfig);
void closeOrder();
QBitArray getCoilOrder(int startAddress, quint16 readSize, ExpConfig& expConfig); QBitArray getCoilOrder(int startAddress, quint16 readSize, ExpConfig& expConfig);
QBitArray getInputCoilOrder(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 <QModbusRtuSerialMaster>
#include <QEventLoop> #include <QEventLoop>
#include <QThread>
ModbusMaster::ModbusMaster(QObject* parent) : QObject(parent) ModbusMaster::ModbusMaster(QObject* parent) : QObject(parent)
{ {
} }
/*************************************************************************************************/ /*************************************************************************************************/
@ -18,6 +19,7 @@ void ModbusMaster::init(ExpConfig& expConfig)
connect(_modbusDevice, &QModbusClient::errorOccurred, [this](QModbusDevice::Error) connect(_modbusDevice, &QModbusClient::errorOccurred, [this](QModbusDevice::Error)
{ {
_initialized = false;
throw ServoException(_modbusDevice->errorString()); throw ServoException(_modbusDevice->errorString());
}); });
@ -363,7 +365,14 @@ void ModbusMaster::writeRequest(QModbusDataUnit::RegisterType registerType,
void ModbusMaster::close() void ModbusMaster::close()
{ {
qDebug() << " ModbusMaster::close " <<QThread::currentThreadId() ;
if(_modbusDevice) if(_modbusDevice)
{
if (_modbusDevice->state() == QModbusDevice::ConnectedState || _modbusDevice->state() == QModbusDevice::ConnectingState)
{
_modbusDevice->disconnectDevice(); _modbusDevice->disconnectDevice();
}
delete _modbusDevice; delete _modbusDevice;
_modbusDevice = nullptr;
}
} }

12
Servo/src/ModbusWrapper.cpp

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

28
Test/MainWindow.cpp

@ -16,8 +16,12 @@ MainWindow::MainWindow(QWidget* parent)
/*************************************************************************************************/ /*************************************************************************************************/
MainWindow::~MainWindow() MainWindow::~MainWindow()
{ {
delete ui; if (timer->isActive())
{
timer->stop(); timer->stop();
delete timer;
}
delete ui;
} }
/*************************************************************************************************/ /*************************************************************************************************/
@ -198,12 +202,17 @@ void MainWindow::on_init_clicked()
try { try {
_servoControler.init(ui->serialPortServo->text()); _servoControler.init(ui->serialPortServo->text());
timer = new QTimer(); timer = new QTimer();
timer->setInterval(1000); timer->setInterval(2000);
timer->start(); timer->start();
connect(timer, &QTimer::timeout, this, &MainWindow::handleGetRequestFromServo); connect(timer, &QTimer::timeout, this, &MainWindow::handleGetRequestFromServo);
} }
catch(ServoException exp) catch(ServoException exp)
{ {
if (timer->isActive())
{
timer->stop();
delete timer;
}
ui->showServoError->setText(exp.getMessage()); ui->showServoError->setText(exp.getMessage());
} }
} }
@ -217,11 +226,24 @@ void MainWindow::handleGetRequestFromServo()
// ui->showStopAngle->setText(QString::number(_servoControler.getStopAngle())); // ui->showStopAngle->setText(QString::number(_servoControler.getStopAngle()));
//ui->showAngleOffset->setText(QString::number(_servoControler.getAngleOffset())); //ui->showAngleOffset->setText(QString::number(_servoControler.getAngleOffset()));
// ui->showAzimuth->setText(QString::number(_servoControler.getAzimuth())); // ui->showAzimuth->setText(QString::number(_servoControler.getAzimuth()));
ui->connectionState->setText(QVariant(_servoControler.getStatus()).toString()); auto currentstatus=_servoControler.getStatus();
if (!currentstatus)
{
if (timer->isActive())
{
timer->stop();
delete timer;
}
}
ui->connectionState->setText(QVariant(currentstatus).toString());
} }
catch(ServoException exp) catch(ServoException exp)
{
if (timer->isActive())
{ {
timer->stop(); timer->stop();
delete timer;
}
ui->showServoError->setText(exp.getMessage()); 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> background-color: rgb(186, 178, 158);</string>
</property> </property>
<property name="text"> <property name="text">
<string>Error Monitoring</string> <string/>
</property> </property>
<property name="wordWrap"> <property name="wordWrap">
<bool>true</bool> <bool>true</bool>

Loading…
Cancel
Save