From 9288237f108f90fe9d75bb6796dc5808d9c07fb1 Mon Sep 17 00:00:00 2001 From: QuShuailong Date: Tue, 26 Sep 2023 00:56:14 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=86Tcp=E5=AE=A2=E6=88=B7=E7=AB=AF?= =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E6=94=BE=E5=85=A5=E5=AD=90=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/CameraControl.cpp | 5 ++++ src/NetControl.cpp | 7 +++-- src/NetControl.h | 3 +- src/SmokeBoxIdentification.cpp | 28 +++++++++++++------ src/SmokeBoxIdentification.h | 6 ++-- .../SmokeBoxIdentification.vcxproj | 4 +++ .../SmokeBoxIdentification.vcxproj.filters | 3 ++ 7 files changed, 41 insertions(+), 15 deletions(-) diff --git a/src/CameraControl.cpp b/src/CameraControl.cpp index d6c055a..6cf71a0 100644 --- a/src/CameraControl.cpp +++ b/src/CameraControl.cpp @@ -463,6 +463,11 @@ void CameraControl::capture(const QStringList& serialNumberList) void CameraControl::flipImg(const cv::Mat& imgSrc, cv::Mat& imgDst, int rotationAngle) { + if (imgSrc.empty()) + { + qWarning() << "imgSrc is empty"; + return; + } switch (rotationAngle) { case 90: diff --git a/src/NetControl.cpp b/src/NetControl.cpp index d0d4aff..0bc52cd 100644 --- a/src/NetControl.cpp +++ b/src/NetControl.cpp @@ -6,15 +6,16 @@ NetControl::NetControl(const QString& configPath, bool bAutoReconnect /* = false : QObject(parent), m_bAutoReconnect(bAutoReconnect), m_configPath(configPath) { + qRegisterMetaType("QAbstractSocket::SocketError"); + initIpAddress(m_configPath); m_pTimerHeartbeat = new QTimer(this); connect(m_pTimerHeartbeat, &QTimer::timeout, this, &NetControl::sendHeartbeatPack); m_pTcpSocket = new QTcpSocket(this); connect(m_pTcpSocket, SIGNAL(connected()), this, SLOT(onConnected())); - connect(m_pTcpSocket, SIGNAL(disconnected()), this, SLOT(onDisconnected())); connect(m_pTcpSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onErrorHandler(QAbstractSocket::SocketError))); connect(m_pTcpSocket, SIGNAL(readyRead()), this, SLOT(onMsgReceived())); - initIpAddress(m_configPath); + connect(m_pTcpSocket, SIGNAL(disconnected()), this, SLOT(onDisconnected())); connectNet(m_szHostIp, m_port); } @@ -190,7 +191,7 @@ void NetControl::waitForConnected(int msec) } } -void NetControl::sendMsg(const QString& msg) +Q_SLOT void NetControl::onSendMsg(const QString& msg) { if (m_pTcpSocket->state() != QAbstractSocket::SocketState::ConnectedState) { diff --git a/src/NetControl.h b/src/NetControl.h index fea49ec..e6e6171 100644 --- a/src/NetControl.h +++ b/src/NetControl.h @@ -25,7 +25,7 @@ public: public: //void deCodeMsg(QString recInfo); void waitForConnected(int msec); - void sendMsg(const QString& msg); + Q_SLOT void onSendMsg(const QString& msg); private: bool initIpAddress(const QString& path); @@ -47,6 +47,7 @@ private: QString m_configPath; int m_heartInterval{ 5 }; + //QThread* m_pThread; QTimer* m_pTimerHeartbeat; signals: void sgReceiveData(const QString& data); diff --git a/src/SmokeBoxIdentification.cpp b/src/SmokeBoxIdentification.cpp index 8337e0d..5fb0dd4 100644 --- a/src/SmokeBoxIdentification.cpp +++ b/src/SmokeBoxIdentification.cpp @@ -38,6 +38,9 @@ SmokeBoxIdentification::SmokeBoxIdentification(QWidget *parent) } QString filePath = applicationDirPath + NET_CONFIG; m_pNetControl = new NetControl(filePath, true); + m_pTcpClientThread = new QThread(); + m_pNetControl->moveToThread(m_pTcpClientThread); + m_pTcpClientThread->start(); connect(m_pNetControl, &NetControl::sgReceiveData, this, &SmokeBoxIdentification::onDecodeMsg); ADModule::instance()->loadParameters(filePath); filePath = applicationDirPath + COM_CONFIG; @@ -68,7 +71,8 @@ SmokeBoxIdentification::SmokeBoxIdentification(QWidget *parent) connect(ADModule::instance(), &ADModule::sgNewNumData, this, &SmokeBoxIdentification::onNewNumData); //connect(this, &SmokeBoxIdentification::sgSendData2AndAlgo, ADModule::instance(), &ADModule::onSendData2Algo); //connect(this, &SmokeBoxIdentification::sgSaveSensorData2Local, ADModule::instance(), &ADModule::onSaveData2File); - connect(this, &SmokeBoxIdentification::sgSendStockCheckMsg, this, &SmokeBoxIdentification::onSendStockCheckResults, Qt::QueuedConnection); + //connect(this, &SmokeBoxIdentification::sgSendResults, this, &SmokeBoxIdentification::onSendResults); + connect(this, &SmokeBoxIdentification::sgSendMsg, m_pNetControl, &NetControl::onSendMsg, Qt::QueuedConnection); connect(ui.action_templateNum, SIGNAL(triggered()), this, SLOT(onActionClicked())); emit sgControlSideLight(lightCtrl::emTurnOnLight); } @@ -78,6 +82,12 @@ SmokeBoxIdentification::~SmokeBoxIdentification() emit sgControlSideLight(lightCtrl::emTurnOffLight); DELETE_POINTER(m_pNetControl); DELETE_POINTER(m_pCategoryMatcher); + if (m_pTcpClientThread) + { + m_pTcpClientThread->quit(); + m_pTcpClientThread->wait(); + m_pTcpClientThread = nullptr; + } } Q_SLOT void SmokeBoxIdentification::onActionClicked() @@ -170,11 +180,11 @@ Q_SLOT void SmokeBoxIdentification::onCapturedImage(const QVector& ve saveImage(vecImageInfo, m_workMode); if (m_workMode == WorkMode::StockCheck) { - emit sgSendStockCheckMsg(MsgType::DataCollectionEndSC); + sendResults(MsgType::DataCollectionEndSC); } else if (m_workMode = WorkMode::IntoStock) { - emit sgSendStockCheckMsg(MsgType::IntoStockResult); + sendResults(MsgType::IntoStockResult); } m_workMode = WorkMode::Idle; }); @@ -323,7 +333,7 @@ Q_SLOT void SmokeBoxIdentification::onNumStatistic(QString typeNum) { m_currtStockCheckInfo.smokeQuantityRlt = "0"; m_currtStockCheckInfo.correctness = false; - emit sgSendStockCheckMsg(MsgType::StockCheckResult); + sendResults(MsgType::StockCheckResult); } else { @@ -359,7 +369,7 @@ Q_SLOT void SmokeBoxIdentification::onNumStatistic(QString typeNum) m_currtStockCheckInfo.smokeQuantityRlt = QString::number(matchLabel); m_currtStockCheckInfo.correctness = true; } - emit sgSendStockCheckMsg(MsgType::StockCheckResult); + sendResults(MsgType::StockCheckResult); }); } else @@ -367,13 +377,13 @@ Q_SLOT void SmokeBoxIdentification::onNumStatistic(QString typeNum) qWarning() << "Template folder not find: " << smokeCnName; m_currtStockCheckInfo.smokeQuantityRlt = "0"; m_currtStockCheckInfo.correctness = false; - emit sgSendStockCheckMsg(MsgType::StockCheckResult); + sendResults(MsgType::StockCheckResult); } } } } -void SmokeBoxIdentification::onSendStockCheckResults(int mode) +void SmokeBoxIdentification::sendResults(int mode) { QString resultInfoMsg; switch (mode) @@ -412,7 +422,7 @@ void SmokeBoxIdentification::onSendStockCheckResults(int mode) default: break; } - m_pNetControl->sendMsg(resultInfoMsg); + emit sgSendMsg(resultInfoMsg); qDebug() << "send msg: " << resultInfoMsg; } @@ -555,7 +565,7 @@ Q_SLOT void SmokeBoxIdentification::onSendEmptyCheckResults(const QMapsendMsg(emptyResult); + emit sgSendMsg(emptyResult); qDebug() << "send msg: " << emptyResult; } diff --git a/src/SmokeBoxIdentification.h b/src/SmokeBoxIdentification.h index fb7b314..6727191 100644 --- a/src/SmokeBoxIdentification.h +++ b/src/SmokeBoxIdentification.h @@ -102,12 +102,12 @@ signals: //void sgSaveSensorData2Local(QString filePath); void sgNumDataCollectStart(int sideId); void sgNumDataCollectStop(); - void sgSendStockCheckMsg(int mode); + //void sgSendResults(int mode); void sgStartEmptyPlaceCheck(QString streetName); void sgStopEmptyPlaceCheck(); void sgControlSideLight(int); + void sgSendMsg(QString msg); private: - Q_SLOT void onSendStockCheckResults(int mode); Q_SLOT void onDecodeMsg(const QString& msg); Q_SLOT void onCapturedImage(const QVector& vecImageInfo, int camearLocation); @@ -120,6 +120,7 @@ private: Q_SLOT void onSendEmptyCheckResults(const QMap&); Q_SLOT void onNewNumData(const QVector>& vec, const QVector& strVec, int side); + void sendResults(int mode); void saveData2File(const QVector& strVec, QString folderPath, int side); void captureTop(); void captureSide(); @@ -150,6 +151,7 @@ private: EmptyCheckInfo m_currtEmptyCheckInfo; QNumTemplateBuild* m_pNumTemplateBuild{ nullptr }; + QThread* m_pTcpClientThread; //QLabel* m_pShowRltImgLabel; Ui::SmokeBoxIdentificationClass ui; }; diff --git a/tpvs17/SmokeBoxIdentification/SmokeBoxIdentification.vcxproj b/tpvs17/SmokeBoxIdentification/SmokeBoxIdentification.vcxproj index dbb7ae1..2baf707 100644 --- a/tpvs17/SmokeBoxIdentification/SmokeBoxIdentification.vcxproj +++ b/tpvs17/SmokeBoxIdentification/SmokeBoxIdentification.vcxproj @@ -145,6 +145,10 @@ + + .\GeneratedFiles;.;.\..\..\src;.\..\..\src\libzkq;.\..\..\src\lpSerial;.\..\..\src\lpSerial\include;.\..\..\src\numStatisticAlgo;.\..\..\src\MVCameraDriver;.\..\..\src\common;.\..\..\src\lpv;.\..\..\3rdparty\opencv\include;.\..\..\3rdparty\opencv\include\opencv;.\..\..\3rdparty\opencv\include\opencv2;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtSerialPort;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtWinExtras;$(QTDIR)\include\QtXlsx + .\GeneratedFiles;.;.\..\..\src;.\..\..\src\libzkq;.\..\..\src\lpSerial;.\..\..\src\lpSerial\include;.\..\..\src\numStatisticAlgo;.\..\..\src\MVCameraDriver;.\..\..\src\common;.\..\..\src\lpv;.\..\..\3rdparty\opencv\include;.\..\..\3rdparty\opencv\include\opencv;.\..\..\3rdparty\opencv\include\opencv2;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtSerialPort;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtWinExtras;$(QTDIR)\include\QtXlsx + .\GeneratedFiles;.;.\..\..\src;.\..\..\src\libzkq;.\..\..\src\lpSerial;.\..\..\src\lpSerial\include;.\..\..\src\numStatisticAlgo;.\..\..\src\MVCameraDriver;.\..\..\src\common;.\..\..\src\lpv;.\..\..\3rdparty\opencv\include;.\..\..\3rdparty\opencv\include\opencv;.\..\..\3rdparty\opencv\include\opencv2;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtSerialPort;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtWinExtras;$(QTDIR)\include\QtXlsx .\GeneratedFiles;.;.\..\..\src;.\..\..\src\libzkq;.\..\..\src\lpSerial;.\..\..\src\lpSerial\include;.\..\..\src\numStatisticAlgo;.\..\..\src\MVCameraDriver;.\..\..\src\common;.\..\..\src\lpv;.\..\..\3rdparty\opencv\include;.\..\..\3rdparty\opencv\include\opencv;.\..\..\3rdparty\opencv\include\opencv2;$(QTDIR)\include;.\GeneratedFiles\$(ConfigurationName);$(QTDIR)\include\QtCore;$(QTDIR)\include\QtGui;$(QTDIR)\include\QtNetwork;$(QTDIR)\include\QtSerialPort;$(QTDIR)\include\QtWebSockets;$(QTDIR)\include\QtWidgets;$(QTDIR)\include\QtWinExtras;$(QTDIR)\include\QtXlsx diff --git a/tpvs17/SmokeBoxIdentification/SmokeBoxIdentification.vcxproj.filters b/tpvs17/SmokeBoxIdentification/SmokeBoxIdentification.vcxproj.filters index 2948583..b843483 100644 --- a/tpvs17/SmokeBoxIdentification/SmokeBoxIdentification.vcxproj.filters +++ b/tpvs17/SmokeBoxIdentification/SmokeBoxIdentification.vcxproj.filters @@ -120,6 +120,9 @@ Header Files + + Header Files +