diff --git a/HanddleAI/HandleAiUi-new/FrontendBackendBridge.cpp b/HanddleAI/HandleAiUi-new/FrontendBackendBridge.cpp index 6df29aec..6ee1a8c6 100644 --- a/HanddleAI/HandleAiUi-new/FrontendBackendBridge.cpp +++ b/HanddleAI/HandleAiUi-new/FrontendBackendBridge.cpp @@ -11,29 +11,26 @@ void backEnd::Init() // for (auto data : json.LightSources.LightSourceList) { - QSerialPort* serialPort = new QSerialPort;//¹âԴ´®¿Ú - //serialPort->clear(); - serialPort->close(); - serialPort->setPortName(data.comPort); - serialPort->open(QIODevice::ReadWrite); - serialPort->setBaudRate(data.baudRate); - serialPort->setDataBits(QSerialPort::Data8); - serialPort->setParity(QSerialPort::NoParity); - serialPort->setStopBits(QSerialPort::OneStop); - serialPort->setFlowControl(QSerialPort::NoFlowControl); - serialPort->write(data.initStr.toUtf8()); - serialPort->waitForBytesWritten(); - if (serialPort->isOpen() != true) - qDebug() << data.comPort << "open failure!!"; - QSerialPorts.append(serialPort); - QSerialPortsName.append(data.name); + //QSerialPort* serialPort = new QSerialPort;//¹âԴ´®¿Ú + ////serialPort->clear(); + //serialPort->close(); + //serialPort->setPortName(data.comPort); + //serialPort->open(QIODevice::ReadWrite); + //serialPort->setBaudRate(data.baudRate); + //serialPort->setDataBits(QSerialPort::Data8); + //serialPort->setParity(QSerialPort::NoParity); + //serialPort->setStopBits(QSerialPort::OneStop); + //serialPort->setFlowControl(QSerialPort::NoFlowControl); + //serialPort->write(data.initStr.toUtf8()); + //serialPort->waitForBytesWritten(); + //if (serialPort->isOpen() != true) + // qDebug() << data.comPort << "open failure!!"; + //QSerialPorts.append(serialPort); + //QSerialPortsName.append(data.name); } } -void backEnd::setFins(Base* finsPtr) -{ - finstcp_ptr = finsPtr; -} + //WIDGET void frontEnd::showImg(QString name, cv::Mat mtx, int showindex) { @@ -84,53 +81,53 @@ void frontEnd::showImg(QString name, cv::Mat mtx, int showindex) //return true; } //FINS -bool backEnd::sendFinsMsg(QString cmdx) -{ - if (!finstcp_ptr->reciveData(vec_mat, cmdx.toUtf8())) - { - qCritical() << "[TCP Error] " << QString::fromUtf8("FinsÊý¾ݷ¢ËÍʧ°ܣ¡") << cmdx; - return false; - } - return true; -} -bool backEnd::sendFinsMsg(const char* cmdx) -{ - QString str = cmdx; - if (!finstcp_ptr->reciveData(vec_mat, str.toUtf8())) - { - qCritical() << "[TCP Error] " << QString::fromUtf8("FinsÊý¾ݷ¢ËÍʧ°ܣ¡") << cmdx; - return false; - } - return true; -} -bool backEnd::sendFinsMsg(QByteArray write_byte) -{ - if (!finstcp_ptr->reciveData(vec_mat, write_byte)) - { - qCritical() << "[TCP Error] " << QString::fromUtf8("FinsÊý¾ݷ¢ËÍʧ°ܣ¡") << write_byte; - return false; - } - return true; -} -bool backEnd::reciveFinsMsg(QByteArray &readByte) -{ - if (!finstcp_ptr->sendData(vec_mat, readByte)) - { - qCritical() << "[TCP] " << " finstcp_ptr sendData error!"; - return false; - } - return true; -} -// -QSerialPort* backEnd::getSerialPort(QString Name) -{ - for (int i = 0; i < QSerialPortsName.size();i++) - { - if (QSerialPortsName[i] == Name) - { - return QSerialPorts[i]; - } - - } - return NULL; -} \ No newline at end of file +//bool backEnd::sendFinsMsg(QString cmdx) +//{ +// if (!finstcp_ptr->reciveData(vec_mat, cmdx.toUtf8())) +// { +// qCritical() << "[TCP Error] " << QString::fromUtf8("FinsÊý¾ݷ¢ËÍʧ°ܣ¡") << cmdx; +// return false; +// } +// return true; +//} +//bool backEnd::sendFinsMsg(const char* cmdx) +//{ +// QString str = cmdx; +// if (!finstcp_ptr->reciveData(vec_mat, str.toUtf8())) +// { +// qCritical() << "[TCP Error] " << QString::fromUtf8("FinsÊý¾ݷ¢ËÍʧ°ܣ¡") << cmdx; +// return false; +// } +// return true; +//} +//bool backEnd::sendFinsMsg(QByteArray write_byte) +//{ +// if (!finstcp_ptr->reciveData(vec_mat, write_byte)) +// { +// qCritical() << "[TCP Error] " << QString::fromUtf8("FinsÊý¾ݷ¢ËÍʧ°ܣ¡") << write_byte; +// return false; +// } +// return true; +//} +//bool backEnd::reciveFinsMsg(QByteArray &readByte) +//{ +// if (!finstcp_ptr->sendData(vec_mat, readByte)) +// { +// qCritical() << "[TCP] " << " finstcp_ptr sendData error!"; +// return false; +// } +// return true; +//} +//// +//QSerialPort* backEnd::getSerialPort(QString Name) +//{ +// for (int i = 0; i < QSerialPortsName.size();i++) +// { +// if (QSerialPortsName[i] == Name) +// { +// return QSerialPorts[i]; +// } +// +// } +// return NULL; +//} \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/FrontendBackendBridge.h b/HanddleAI/HandleAiUi-new/FrontendBackendBridge.h index 0bc2abb0..106bb6c3 100644 --- a/HanddleAI/HandleAiUi-new/FrontendBackendBridge.h +++ b/HanddleAI/HandleAiUi-new/FrontendBackendBridge.h @@ -5,7 +5,6 @@ #include #include #include -#include "processtask.h" #include "jsonParsing.h" #include class frontEnd : public QObject @@ -25,20 +24,20 @@ public: backEnd(QObject* parent = nullptr); //explicit backEnd(QObject* parent = nullptr) :QObject(parent) {} void Init(); - void setFins(Base* finsPtr); + //void setFins(Base* finsPtr); //FINS// - bool sendFinsMsg(QString cmdx); - bool sendFinsMsg(QByteArray write_byte); - bool sendFinsMsg(const char* cmdx); - bool reciveFinsMsg(QByteArray &write_byte); + //bool sendFinsMsg(QString cmdx); + //bool sendFinsMsg(QByteArray write_byte); + //bool sendFinsMsg(const char* cmdx); + //bool reciveFinsMsg(QByteArray &write_byte); //SERIAL//PORT// - QList< QSerialPort* > QSerialPorts; + //QList< QSerialPort* > QSerialPorts; QList< QString >QSerialPortsName; - QSerialPort* getSerialPort(QString Name); + //QSerialPort* getSerialPort(QString Name); signals: private: - Base* finstcp_ptr = nullptr; + //Base* finstcp_ptr = nullptr; std::vector vec_mat; }; class fbBridge :public QObject diff --git a/HanddleAI/HandleAiUi-new/back/algorithmThread.cpp b/HanddleAI/HandleAiUi-new/back/algorithmThread.cpp index 17fca760..1a0afbe1 100644 --- a/HanddleAI/HandleAiUi-new/back/algorithmThread.cpp +++ b/HanddleAI/HandleAiUi-new/back/algorithmThread.cpp @@ -1,6 +1,4 @@ #include -#include "camera_thread.h" -#include "myiothread.h" #include "FrontendBackendBridge.h" #include @@ -477,7 +475,7 @@ void calculateLineSegmentDistances(const std::vector data) { detQueueMutex.lock(); detQueue.append(data); @@ -485,7 +483,7 @@ bool algoThread::addDetTask(detData* data) this->start(); return false; } -bool algoThread::waitForImg(detData* data,int timeOutSet=10000) +bool algoThread::waitForImg(std::shared_ptr data,int timeOutSet=10000) { int timeOut = 0; int sleepMs = 100; @@ -509,7 +507,7 @@ void algoThread::run() { detQueueMutex.lock(); - detData* data = detQueue.dequeue();//取出数据 + std::shared_ptr data = detQueue.dequeue();//取出数据 detQueueMutex.unlock(); int threadId = data->algoThreadIndex;//获取线程id if (waitForImg(data) == false) @@ -598,7 +596,7 @@ void matsToMat(cv::Mat& mat1, cv::Mat& mat2, cv::Mat* Paint) auto duration = std::chrono::duration_cast(end_time - start_time); std::cout << "matsToMat: " << duration.count() << " microseconds" << std::endl; } -void algoThread::ALGO_Correction(detData* data) +void algoThread::ALGO_Correction(std::shared_ptr data) { ALGO_Inspection(data); int pValueBounus = 100; @@ -732,60 +730,60 @@ void algoThread::ALGO_Correction(detData* data) return; } //originX - bridge.back.sendFinsMsg("write_short_310_" + QString::number(out_Origin[0] < 0 ? 2 : 1)); - bridge.back.sendFinsMsg("write_short_311_" + QString::number(abs(static_cast(out_Origin[0])))); + _triggerManager->sendFinsMsg("write_short_310_" + QString::number(out_Origin[0] < 0 ? 2 : 1)); + _triggerManager->sendFinsMsg("write_short_311_" + QString::number(abs(static_cast(out_Origin[0])))); double pvalue = out_Origin[0] - static_cast(out_Origin[0]); - bridge.back.sendFinsMsg("write_short_312_" + QString::number(abs(pvalue* pValueBounus))); + _triggerManager->sendFinsMsg("write_short_312_" + QString::number(abs(pvalue* pValueBounus))); //originY - bridge.back.sendFinsMsg("write_short_313_" + QString::number(out_Origin[1] < 0 ? 2 : 1)); - bridge.back.sendFinsMsg("write_short_314_" + QString::number(abs(static_cast(out_Origin[1])))); + _triggerManager->sendFinsMsg("write_short_313_" + QString::number(out_Origin[1] < 0 ? 2 : 1)); + _triggerManager->sendFinsMsg("write_short_314_" + QString::number(abs(static_cast(out_Origin[1])))); pvalue = out_Origin[1] - static_cast(out_Origin[1]); - bridge.back.sendFinsMsg("write_short_315_" + QString::number(abs(pvalue * pValueBounus))); + _triggerManager->sendFinsMsg("write_short_315_" + QString::number(abs(pvalue * pValueBounus))); //originZ - bridge.back.sendFinsMsg("write_short_316_" + QString::number(out_Origin[2] < 0 ? 2 : 1)); - bridge.back.sendFinsMsg("write_short_317_" + QString::number(abs(static_cast(out_Origin[2])))); + _triggerManager->sendFinsMsg("write_short_316_" + QString::number(out_Origin[2] < 0 ? 2 : 1)); + _triggerManager->sendFinsMsg("write_short_317_" + QString::number(abs(static_cast(out_Origin[2])))); pvalue = out_Origin[2] - static_cast(out_Origin[2]); - bridge.back.sendFinsMsg("write_short_318_" + QString::number(abs(pvalue * pValueBounus))); + _triggerManager->sendFinsMsg("write_short_318_" + QString::number(abs(pvalue * pValueBounus))); //ResultX1 - bridge.back.sendFinsMsg("write_short_319_" + QString::number(out_Result_X[0] < 0 ? 2 : 1)); - bridge.back.sendFinsMsg("write_short_320_" + QString::number(abs(static_cast(out_Result_X[0])))); + _triggerManager->sendFinsMsg("write_short_319_" + QString::number(out_Result_X[0] < 0 ? 2 : 1)); + _triggerManager->sendFinsMsg("write_short_320_" + QString::number(abs(static_cast(out_Result_X[0])))); pvalue = out_Result_X[0] - static_cast(out_Result_X[0]); - bridge.back.sendFinsMsg("write_short_321_" + QString::number(abs(pvalue * pValueBounus))); + _triggerManager->sendFinsMsg("write_short_321_" + QString::number(abs(pvalue * pValueBounus))); //ResultX2 - bridge.back.sendFinsMsg("write_short_322_" + QString::number(out_Result_X[1] < 0 ? 2 : 1)); - bridge.back.sendFinsMsg("write_short_323_" + QString::number(abs(static_cast(out_Result_X[1])))); + _triggerManager->sendFinsMsg("write_short_322_" + QString::number(out_Result_X[1] < 0 ? 2 : 1)); + _triggerManager->sendFinsMsg("write_short_323_" + QString::number(abs(static_cast(out_Result_X[1])))); pvalue = out_Result_X[1] - static_cast(out_Result_X[1]); - bridge.back.sendFinsMsg("write_short_324_" + QString::number(abs(pvalue * pValueBounus))); + _triggerManager->sendFinsMsg("write_short_324_" + QString::number(abs(pvalue * pValueBounus))); //ResultX3 - bridge.back.sendFinsMsg("write_short_325_" + QString::number(out_Result_X[2] < 0 ? 2 : 1)); - bridge.back.sendFinsMsg("write_short_326_" + QString::number(abs(static_cast(out_Result_X[2])))); + _triggerManager->sendFinsMsg("write_short_325_" + QString::number(out_Result_X[2] < 0 ? 2 : 1)); + _triggerManager->sendFinsMsg("write_short_326_" + QString::number(abs(static_cast(out_Result_X[2])))); pvalue = out_Result_X[2] - static_cast(out_Result_X[2]); - bridge.back.sendFinsMsg("write_short_327_" + QString::number(abs(pvalue * pValueBounus))); + _triggerManager->sendFinsMsg("write_short_327_" + QString::number(abs(pvalue * pValueBounus))); //ResultY1 - bridge.back.sendFinsMsg("write_short_328_" + QString::number(out_Result_Y[0] < 0 ? 2 : 1)); - bridge.back.sendFinsMsg("write_short_329_" + QString::number(abs(static_cast(out_Result_Y[0])))); + _triggerManager->sendFinsMsg("write_short_328_" + QString::number(out_Result_Y[0] < 0 ? 2 : 1)); + _triggerManager->sendFinsMsg("write_short_329_" + QString::number(abs(static_cast(out_Result_Y[0])))); pvalue = out_Result_Y[0] - static_cast(out_Result_Y[0]); - bridge.back.sendFinsMsg("write_short_330_" + QString::number(abs(pvalue * pValueBounus))); + _triggerManager->sendFinsMsg("write_short_330_" + QString::number(abs(pvalue * pValueBounus))); //ResultY2 - bridge.back.sendFinsMsg("write_short_331_" + QString::number(out_Result_Y[1] < 0 ? 2 : 1)); - bridge.back.sendFinsMsg("write_short_332_" + QString::number(abs(static_cast(out_Result_Y[1])))); + _triggerManager->sendFinsMsg("write_short_331_" + QString::number(out_Result_Y[1] < 0 ? 2 : 1)); + _triggerManager->sendFinsMsg("write_short_332_" + QString::number(abs(static_cast(out_Result_Y[1])))); pvalue = out_Result_Y[1] - static_cast(out_Result_Y[1]); - bridge.back.sendFinsMsg("write_short_333_" + QString::number(abs(pvalue * pValueBounus))); + _triggerManager->sendFinsMsg("write_short_333_" + QString::number(abs(pvalue * pValueBounus))); //ResultY3 - bridge.back.sendFinsMsg("write_short_334_" + QString::number(out_Result_Y[2] < 0 ? 2 : 1)); - bridge.back.sendFinsMsg("write_short_335_" + QString::number(abs(static_cast(out_Result_Y[2])))); + _triggerManager->sendFinsMsg("write_short_334_" + QString::number(out_Result_Y[2] < 0 ? 2 : 1)); + _triggerManager->sendFinsMsg("write_short_335_" + QString::number(abs(static_cast(out_Result_Y[2])))); pvalue = out_Result_Y[2] - static_cast(out_Result_Y[2]); - bridge.back.sendFinsMsg("write_short_336_" + QString::number(abs(pvalue * pValueBounus))); + _triggerManager->sendFinsMsg("write_short_336_" + QString::number(abs(pvalue * pValueBounus))); } -void algoThread::ALGO_Inspection(detData* data) +void algoThread::ALGO_Inspection(std::shared_ptr data) { if (data->imgs.size() < 1) { @@ -851,7 +849,7 @@ void algoThread::ALGO_Inspection(detData* data) rectangle(Paint, Result[0], cv::Scalar(0, 0, 255), 4); _sleep(100); } -void algoThread::Camera1_Algo(detData* data) +void algoThread::Camera1_Algo(std::shared_ptr data) { auto start_time = std::chrono::high_resolution_clock::now(); if (data->imgs.size() < 1) diff --git a/HanddleAI/HandleAiUi-new/back/algorithmThread.h b/HanddleAI/HandleAiUi-new/back/algorithmThread.h index 15f3a3a9..25f07cb7 100644 --- a/HanddleAI/HandleAiUi-new/back/algorithmThread.h +++ b/HanddleAI/HandleAiUi-new/back/algorithmThread.h @@ -14,6 +14,7 @@ #include #include #include +#include using namespace std; using namespace HalconCpp; enum ngTypeEnum @@ -711,14 +712,18 @@ public: bool m_runFlag = true; QString threadName; - + ~algoThread() + { + this->terminate(); + } handleAiModel* modelPtr; sqlManager* sql; threadManager* tManager; sncodeCls* snDatas; + triggerManager* _triggerManager; QMutex detQueueMutex; - QQueue detQueue; + QQueue> detQueue; QMutex currentMutex, nextMutex, globalMutex; std::string snErrorsnError = std::string("snErrNoSn"); @@ -727,7 +732,7 @@ public: int Index = 1; int areaIndex = 0; void run(); - bool waitForImg(detData* data,int); + bool waitForImg(std::shared_ptr data,int); void getAllFiles(std::string path, std::vector& files, std::string format); void Init(threadManager* threadManager) { tManager = threadManager; @@ -735,12 +740,12 @@ public: sql = threadManager->sql; snDatas = &threadManager->snDatas; } - bool addDetTask(detData*);//Ìí¼ÓÈÎÎñ + bool addDetTask(std::shared_ptr );//Ìí¼ÓÈÎÎñ //Ë㷨 - void ALGO_Correction(detData*); - void ALGO_Inspection(detData*); - void Camera1_Algo(detData*); + void ALGO_Correction(std::shared_ptr ); + void ALGO_Inspection(std::shared_ptr ); + void Camera1_Algo(std::shared_ptr ); signals: void subThreadStart(); }; diff --git a/HanddleAI/HandleAiUi-new/back/backEndManager.cpp b/HanddleAI/HandleAiUi-new/back/backEndManager.cpp index 53fedbef..f260a5e7 100644 --- a/HanddleAI/HandleAiUi-new/back/backEndManager.cpp +++ b/HanddleAI/HandleAiUi-new/back/backEndManager.cpp @@ -6,22 +6,36 @@ backEndManager::backEndManager() { _jsonConfiguration = new jsonConfiguration(); + _detDataManager = new detDataManager(); + _triggerManager = new triggerManager(); _cameraManager = new cameraManager(); _threadManager = new threadManager(); - _detDataManager = new detDataManager(); - std::vector> futures;//Ò첽³õʼ»¯ - futures.push_back(std::async(std::launch::async, &triggerManager::init, _triggerManager, this)); - futures.push_back(std::async(std::launch::async, &cameraManager::init, _cameraManager, this)); - for (auto& future : futures) { - future.wait(); +} +void backEndManager::run() +{ + if(isinit ==false) + { + std::vector> futures;//Ò첽³õʼ»¯ + futures.push_back(std::async(std::launch::async, &triggerManager::init, _triggerManager, this)); + futures.push_back(std::async(std::launch::async, &cameraManager::init, _cameraManager, this)); + for (auto& future : futures) { + future.wait(); + } + isinit = true; + sendInitFinished(true); } - /*_triggerManager->init(this); - _cameraManager->init(this);*/ } backEndManager::~backEndManager() { - delete _triggerManager; + _triggerManager->stop(); + _cameraManager->stop(); + _threadManager->stop(); + delete _cameraManager; + delete _threadManager; + delete _triggerManager; delete _jsonConfiguration; + delete _detDataManager; + } \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/back/backEndManager.h b/HanddleAI/HandleAiUi-new/back/backEndManager.h index e8f82e96..b4f15bea 100644 --- a/HanddleAI/HandleAiUi-new/back/backEndManager.h +++ b/HanddleAI/HandleAiUi-new/back/backEndManager.h @@ -2,27 +2,38 @@ #define BACKENDManager_H #include #include +#include +#include class triggerManager; class cameraManager; class jsonConfiguration; class threadManager; class detDataManager; -class backEndManager :public QObject +class backEndManager :public QThread { Q_OBJECT public: - bool init = false; + QMutex mutex; + //Êý¾ÝÀà jsonConfiguration* _jsonConfiguration; - - triggerManager* _triggerManager;//´¥·¢Æ÷ - cameraManager* _cameraManager; - threadManager* _threadManager; detDataManager* _detDataManager; + //Ï߳ÌÀà + triggerManager* _triggerManager;//´¥·¢Æ÷ + cameraManager* _cameraManager;// + threadManager* _threadManager; backEndManager(); ~backEndManager(); + + void init() + { + this->start(); + } + void run(); +private: + bool isinit = false; signals: void sendErrorToMainwindow(backEndError); void sendPixmapImageWidget(showImgPack*); - + void sendInitFinished(bool); }; #endif \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/back/backStruct.h b/HanddleAI/HandleAiUi-new/back/backStruct.h index 6a58e714..c788493c 100644 --- a/HanddleAI/HandleAiUi-new/back/backStruct.h +++ b/HanddleAI/HandleAiUi-new/back/backStruct.h @@ -1,6 +1,5 @@ #include #include - typedef Base* (*CreateFunction)(); typedef void (*ReleaseFunction)(Base* animal); diff --git a/HanddleAI/HandleAiUi-new/back/cameraManager.cpp b/HanddleAI/HandleAiUi-new/back/cameraManager.cpp index 7b3333d0..dc149f20 100644 --- a/HanddleAI/HandleAiUi-new/back/cameraManager.cpp +++ b/HanddleAI/HandleAiUi-new/back/cameraManager.cpp @@ -83,7 +83,7 @@ void camera::run() if (queueSize >0) { mutex.lock(); - detData *data = requestQueue.dequeue(); + std::shared_ptr data = requestQueue.dequeue(); trigger(); data->imgMutex.lock(); const unsigned long long timeCode = data->timeCode; @@ -132,6 +132,8 @@ cameraManager::~cameraManager() Base* base_ptr = module.module_ptr; delete base_ptr; } + + } void cameraManager::init(backEndManager* input) { diff --git a/HanddleAI/HandleAiUi-new/back/cameraManager.h b/HanddleAI/HandleAiUi-new/back/cameraManager.h index 0a7e7324..ac7afb83 100644 --- a/HanddleAI/HandleAiUi-new/back/cameraManager.h +++ b/HanddleAI/HandleAiUi-new/back/cameraManager.h @@ -24,12 +24,17 @@ public: ~camera() { runFlag = false; - QThread::msleep(2000); + this->terminate(); + while (this->isRunning() == true); } void run(); + void stop() + { + runFlag = false; + while (this->isRunning() == true); + } void getImgQueueSize(); - - void Process(detData* dataIn) + void Process(std::shared_ptr dataIn) { requestQueue.enqueue(dataIn); } @@ -90,7 +95,7 @@ private: QMutex mutex; cameraModule cameraModulePtr; QQueueimgQueue; - QQueuerequestQueue; + QQueue>requestQueue; backEndManager* _backEndManager; bool runFlag = true; @@ -115,10 +120,16 @@ public: // //} //} } + void stop() + { + for (auto camera : cameras) + camera.second->stop(); + this->terminate(); + } + private: bool loadModule(QString keyName, QString moduleName, QByteArray initByte); backEndManager* _backEndManager; - std::vectorcamerasVec;//ÓÃÓڳõʼ»¯ºÍÏú»Ù std::vector vec_mat;//ûɶÓã¬һֱ±£³ÖΪ¿վͺà QList lib_list; diff --git a/HanddleAI/HandleAiUi-new/back/camera_thread.cpp b/HanddleAI/HandleAiUi-new/back/camera_thread.cpp deleted file mode 100644 index 70c11a1e..00000000 --- a/HanddleAI/HandleAiUi-new/back/camera_thread.cpp +++ /dev/null @@ -1,299 +0,0 @@ -#include "camera_thread.h" -#include -#include -#include -#include -QQueue ImageDataPack; -MyThread::~MyThread() -{ - this->setStopRun(); - wait(100); - exit(); - qDebug() << "[INFO] " << " m_name:" << m_name << " delete thread success! "; -} - -//bool MyThread::setModule(QString station_name, QString name, QString type, MyModule module, QJsonObject obj) -bool MyThread::setModule(QString station_name, QString name, QString type, MyModule module) -{ - m_name = name; - m_triggermodel = type; - m_Module = module; - // m_moduleobj = obj; - m_stationName = station_name; - m_staticName = m_name; - qCritical() << "[DEBUG] " << " name " << name; - - //QString image_queue_num = m_moduleobj.value("image_queue_num").toString(); - //picNum = image_queue_num.toInt(); - if (m_triggermodel.isEmpty()) - { - qCritical() << "[Error] " << " trigger_mod is null ! "; - return false; - } - - return true; -} -void MyThread::run() -{ - try - { - qDebug() << "[INFO] " << " m_type:" << m_type << " module start time: " << "now!"; - if (!runCameraModule()) - { - qCritical() << "[Error] " << "runCameraModule run failed! "; - return; - } - - } - catch (QString ev) - { - qCritical() << "[Error] " << "catch ev:" << ev; - return; - } - //qDebug() << __FUNCTION__ << " line:" << __LINE__ << " module run end time :" << QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz") ; -} -void MyThread::setMutex(QMutex* mutex) -{ - m_mutex = mutex; -} -bool MyThread::cameraTrigger() -{ - if (!m_Module.module_ptr->run()) - { - qCritical() << "[Error] " << " m_name:" << m_name << " run failed!"; - return false; - } - return true; -} - -void MyThread::getImageFromCamera(std::vector& mats) -{ - std::vector camera_mat; - QByteArray task_name; - if (!m_Module.module_ptr->sendData(camera_mat, task_name)) - qCritical() << "[Error] " << " camera_mat is error! "; - qDebug() << __FUNCTION__ << " line:" << __LINE__ << "camera_mat size:"<< camera_mat.size(); - - for (auto img : camera_mat) - mats.push_back(img); -} -double MyThread::getValueFromCamera() -{ - double value = 0; - std::vector camera_mat; - QByteArray task_name; - if (!m_Module.module_ptr->sendData(camera_mat, task_name)) - qCritical() << "[Error] " << " camera_mat is error! "; - value = task_name.toDouble(); - return value; -} - -void MyThread::setExposureTime(float value) -{ - QByteArray task_name("exposure_" + QByteArray::number(value)); - std::vector camera_mat; - if (!m_Module.module_ptr->sendData(camera_mat, task_name)) - qCritical() << "[Error] " << "set exposure error!"; -} -void MyThread::setUserSet(int value) -{ - QByteArray task_name("userset_" + QByteArray::number(value)); - std::vector camera_mat; - if (!m_Module.module_ptr->sendData(camera_mat, task_name)) - qCritical() << "[Error] " << "set exposure error!"; -} -void MyThread::setLightSourceValue(int aLine = -1, int bLine = -1, int cLine = -1, int dLine = -1,QString Name="") -{ - //ex:"SA0200#SB0100#SC000#" - std::string aLineStr(std::to_string(aLine)), - bLineStr(std::to_string(bLine)), - cLineStr(std::to_string(cLine)), - dLineStr(std::to_string(dLine)), - controllCommand(""); - // - if (aLine != -1) - { - controllCommand += "SA0"; - if (aLineStr.length() < 3) - for (int i = 0; i < 3 - aLineStr.length(); i++) - controllCommand += "0"; - controllCommand += aLineStr + "#"; - } - // - if (bLine != -1) - { - controllCommand += "SB0"; - if (bLineStr.length() < 3) - for (int i = 0; i < 3 - bLineStr.length(); i++) - controllCommand += "0"; - controllCommand += bLineStr + "#"; - } - // - if (cLine != -1) - { - controllCommand += "SC0"; - if (cLineStr.length() < 3) - for (int i = 0; i < 3 - cLineStr.length(); i++) - controllCommand += "0"; - controllCommand += cLineStr + "#"; - } - // - if (dLine != -1) - { - controllCommand += "SD0"; - if (dLineStr.length() < 3) - for (int i = 0; i < 3 - dLineStr.length(); i++) - controllCommand += "0"; - controllCommand += dLineStr + "#"; - } - QSerialPort* Port = bridge.back.getSerialPort(Name); - if (Port != NULL) - { - Port->write(controllCommand.c_str()); - Port->waitForBytesWritten(); - } -} - -void MyThread::takeImg(unsigned long long timeCode, filmMode type, QString name,detData * datas,QString FinsAfter) -{ - finsAfter = FinsAfter; - if (currentHash != 0)//currentHash会在完成触发后清零,在runCameraModule() - qDebug() << "[WARNING]当前模块似乎有没完成的触发,请检查信号是否完整 hashCode:" << currentHash; - globalMode = type; - if (name != "") - { - m_name = name; - } - else - { - m_name = m_staticName; - } - gloabalMats = &datas->imgs; - currentHash = timeCode; - globalDetData = datas; - this->start(); -} - -bool MyThread::runCameraModule() -{ - QByteArray task_name; - std::vector camera_mat; - // 判断触发模式 - if (m_triggermodel.contains("software")) - { - camera_mat = cameraModule(globalMode); - } - else if (m_triggermodel.contains("hardware")) // 硬触发 hardware_trigger - { - camera_mat = cameraModule(hardware_trigger); - } - if (finsAfter != "") - bridge.back.sendFinsMsg(finsAfter); - if (camera_mat.empty()) - { - qCritical() << "[Error] " << " camera_mat is null! "; - return false; - } - mutex.lock(); -#if 0 //使用容器 bug - cameraImgsPtr->insertImg(currentHash, &camera_mat); -#endif -#if 1//使用指针 - if (gloabalMats != nullptr) - { - if (globalDetData != nullptr) - { - //globalDetData->imgsMutex.lock(); - for (auto img : camera_mat) - gloabalMats->push_back(img); - //globalDetData->imgsMutex.unlock(); - } - else - { - for (auto img : camera_mat) - gloabalMats->push_back(img); - } - cout << "sucess" << currentHash << endl; - - - } -#endif - globalDetData = nullptr; - mutex.unlock(); - - camera_mat.clear(); - currentHash = 0; - - return true; -} -std::vector MyThread::getImage(int amount) -{ - std::vector mats; - if (detImgVec.size() < amount)//数量不满足要求 - return mats; - mutex.lock(); - mats.swap(detImgVec); - mutex.unlock(); - return mats; -} -std::vector MyThread::cameraModule(filmMode type) -{ - std::vector mats; - - QByteArray task_name; - std::vector camera_mat; - cv::Mat a, b, c; - switch (type) - { - case MyThread::hardware_trigger: - getImageFromCamera(camera_mat); - break; - case MyThread::normal: - if (!cameraTrigger()) - { - cv::Mat nullMat = cv::Mat::zeros(cv::Size(500, 500), CV_8UC1); - camera_mat.push_back(nullMat); - } - else - { - getImageFromCamera(camera_mat); - } - break; - case MyThread::takeTwo: - if (!cameraTrigger()) - { - cv::Mat nullMat = cv::Mat::zeros(cv::Size(500, 500), CV_8UC1); - camera_mat.push_back(nullMat); - } - else - { - getImageFromCamera(camera_mat); - } - if (!cameraTrigger()) - { - cv::Mat nullMat = cv::Mat::zeros(cv::Size(500, 500), CV_8UC1); - camera_mat.push_back(nullMat); - } - else - { - getImageFromCamera(camera_mat); - } - break; - } - return camera_mat; -} -bool MyThread::sendDataCommond(QString m_type, cv::Mat mat, QByteArray byte) -{ - QMutexLocker locker(m_mutex); // 加锁 - - dataPack m_pack; - m_pack.mat = mat; - m_pack.byte = byte; - m_pack.retFlag = m_type; - m_pack.name = m_name;//名字 - m_pack.showIndex = showIndex;//第几个窗口 - // 界面显示包 - ImageDataPack.append(m_pack); - QMetaObject::invokeMethod(m_obj, "reciveImageData"); - return true; -} \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/back/camera_thread.h b/HanddleAI/HandleAiUi-new/back/camera_thread.h deleted file mode 100644 index 419e0695..00000000 --- a/HanddleAI/HandleAiUi-new/back/camera_thread.h +++ /dev/null @@ -1,110 +0,0 @@ -#ifndef M_THREAD_H -#define M_THREAD_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "struct.h" -#include -#include -#pragma execution_character_set("utf-8") -// 模块线程 - -class MyThread : public QThread -{ - Q_OBJECT -public: - explicit MyThread(QObject* parent = nullptr) :m_obj(parent) {} - enum filmMode - { - hardware_trigger, - normal, - takeTwo, - getValue - }; - ~MyThread(); - QMutex mutex; - std::string SN; - int showIndex = -1; - QObject* m_obj; - std::vector getImage(int amount = 1); - filmMode globalMode; - std::vector* gloabalMats; - QMutex* globalMutex; - detData* globalDetData; - void run(); - void setStopRun() { m_stoprun = false; } - void setMutex(QMutex* mutex); - void setSaveImage(QString save) { m_saveImage = save; } - bool sendDataCommond(QString m_type, cv::Mat mat, QByteArray byte); - bool runCameraModule(); - bool setModule(QString station_name, QString name, QString type, MyModule module); - int getImageAmount() { - return detImgVec.size(); - } - cameraImages* cameraImgsPtr; - /// - /// 相机软触发 - /// - bool cameraTrigger(); - /// - /// 从相机模块取图 - /// - /// 输出图片,累加 - /// - void getImageFromCamera(std::vector& mats); - /// - /// 相机拍摄 - /// - double getValueFromCamera(); - void takeImg(unsigned long long hash, filmMode, QString name, detData * datas,QString finsAfter=""); - QString getName() { return m_name; } - QString getType() { return m_type; } - QString getTriggerModel() { return m_triggermodel; } - std::vector cameraModule(filmMode); - - void setExposureTime(float); - void setUserSet(int); - void setLightSourceValue(int aLine, int bLine, int cLine, int dLine,QString name); -private: - QString finsAfter; - std::vectordetImgVec; - bool offLineMode = false; - bool m_stoprun = true; - //QObject* m_obj; - QMutex* m_mutex; - QString m_name; - QString m_type; - QJsonArray trigger_condition; - QString m_saveImage = nullptr; - QString m_stationName = nullptr; - QString m_staticName = nullptr; - QString m_summaryflag = nullptr; // 结果汇总标志,默认不汇总 - MyModule m_Module; - QJsonObject m_moduleobj; // 模块的object - QString m_triggermodel = nullptr; // 设置相机触发模式 - unsigned long long currentHash = 0; - int picIndex = 0; - int picNum = 0; - int picFlag = 0; - int SendImgIndex = 0; -signals: - void mvDisconnect(); -}; - -#endif // M_THREAD_H diff --git a/HanddleAI/HandleAiUi-new/back/hdataprocess.cpp b/HanddleAI/HandleAiUi-new/back/hdataprocess.cpp deleted file mode 100644 index 77c8d2d7..00000000 --- a/HanddleAI/HandleAiUi-new/back/hdataprocess.cpp +++ /dev/null @@ -1,1075 +0,0 @@ -#include "hdataprocess.h" -#include "struct.h" -HCameraData::HCameraData() -{ - m_mutex = new QMutex; -} - -HCameraData::~HCameraData() -{ - if(m_mutex) - { - delete m_mutex; - m_mutex = nullptr; - } - - for( int i = 0; i < camera_vector_queue_vector_mat_ptr.size(); i++ ) - { - if(camera_vector_queue_vector_mat_ptr.at(i)) - { - delete camera_vector_queue_vector_mat_ptr.at(i); - } - } -} - -bool HCameraData::initCameraVectorQueue(int num) -{ - if( num <= 0 || num > 50 ) - { - qCritical() << "[Error] " << " num is error! num:" << num; - return false; - } - - image_queue_num = num; - for( int i = 0; i < num; i++ ) - { - QQueue> *queue_mats_ptr = new QQueue>; - camera_vector_queue_vector_mat_ptr.append(queue_mats_ptr); - } - //qDebug() << __FUNCTION__ << " line:" << __LINE__ << " ----------------------- len:" << camera_vector_queue_vector_mat_ptr.length(); - return true; -} - -bool HCameraData::checkImageData(QString index) -{ - QMutexLocker locker(m_mutex); - int m_value = index.toInt(); - if (camera_vector_queue_vector_mat_ptr.size() == 0) - return false; - if(m_value>= camera_vector_queue_vector_mat_ptr.size()) - return false; - QQueue> *queue_ptr = camera_vector_queue_vector_mat_ptr.at(m_value); - if ( queue_ptr ) - { - if ( !queue_ptr->isEmpty() ) - { - return true; // 获取数据 - } - } - return false; -} - -std::vector HCameraData::getCameraImageData(QString m_index) -{ - QMutexLocker locker(m_mutex); - std::vector picVec; - int index = m_index.toInt(); - //qDebug() << __FUNCTION__ << " line:" << __LINE__ << " index:" <= index && index >= 0 ) - { - QQueue> *queue_ptr = camera_vector_queue_vector_mat_ptr.at(index); - if ( queue_ptr ) - { - if ( !queue_ptr->isEmpty() ) - { - picVec = queue_ptr->dequeue(); - // qDebug() << "[INFO] " << " picVec len:" << picVec.size(); - return picVec; // 获取数据 - } - } - } - return picVec; -} - -void HCameraData::clearData() -{ - QMutexLocker locker(m_mutex); - int size = camera_vector_queue_vector_mat_ptr.size(); - for (int i = 0; i < size; i++) - { - QQueue>* queue_ptr = camera_vector_queue_vector_mat_ptr.at(i); - queue_ptr->clear(); - } - m_index = 0; -} - -int HCameraData::GetMatNum() -{ - return m_index; -} - -bool HCameraData::addImageData( std::vector data ) -{ - QMutexLocker locker ( m_mutex ); - qDebug() << " cameraKey:" << cameraKey << " m_index/ image_queue_num:" << m_index << " /:" << image_queue_num; - if ( m_index >= image_queue_num ) - { - m_index = 0; - } - - if(camera_vector_queue_vector_mat_ptr.at(m_index)) - { - camera_vector_queue_vector_mat_ptr.at(m_index)->append(data); - m_index++; - return true; - } - else - { - return false; - } - return false; -} - -//////////////////////////////// -HSnData::HSnData() -{ - m_mutex = new QMutex; -} - -void HSnData::addSnInfo(SNINFO* snInfo) -{ - QMutexLocker locker(m_mutex); - sninfo_list.push_back(snInfo); -} - -void HSnData::checkPhotoPoint() -{ - -} - -int HSnData::getSnInfo(QString stationKey, QString cameraKey, QString& sn, QString& dateTime, int& cameraIndex, int& picIndex,QString& GYid) -{ - - int result = -1; - QMutexLocker locker(m_mutex); - if (stationKey == "Station1") - { - if (sninfo_list.size() < 1) - qDebug() << "pic do not find sn info"; - for (int i = 0; i < sninfo_list.size(); i++) - { - if (sninfo_list[i]->sn1 != "" && sninfo_list[i]->sn2 != "")//error - { - if (sninfo_list[i]->getcamreaIndexMapValue(cameraKey) != camreaPicNumMap.value(cameraKey)) - { - result = i; - sninfo_list[i]->updatecamreaIndexMap(cameraKey, sninfo_list[i]->getcamreaIndexMapValue(cameraKey) + 1); - picIndex = sninfo_list[i]->getcamreaIndexMapValue(cameraKey); - if (picIndex == 1 || picIndex == 4) - { - sn = sninfo_list[i]->sn1; - dateTime = sninfo_list[i]->dataTime; - if (picIndex > 2) - { - cameraIndex = 2; - } - else - { - cameraIndex = 1; - } - - picIndex = 1; - } - else if (picIndex == 2 || picIndex == 3) - { - sn = sninfo_list[i]->sn2; - dateTime = sninfo_list[i]->dataTime; - if (picIndex > 2) - { - cameraIndex = 2; - } - else - { - cameraIndex = 1; - } - - picIndex = 2; - } - else - { - - } - break; - } - else - { - qDebug() <<"stationKey:" << stationKey <<" sn info size:" << sninfo_list.size();; - } - } - } - } - - else if (stationKey == "Station2") - { - if (sninfo_list.size() < 1) - qDebug() << "pic do not find sn info"; - for (int i = 0; i < sninfo_list.size(); i++) - { - if (sninfo_list[i]->sn1 != "" && sninfo_list[i]->sn2 != "") - { - if (sninfo_list[i]->getcamreaIndexMapValue(cameraKey) != camreaPicNumMap.value(cameraKey)) - { - result = i; - sninfo_list[i]->updatecamreaIndexMap(cameraKey, sninfo_list[i]->getcamreaIndexMapValue(cameraKey) + 1); - picIndex = sninfo_list[i]->getcamreaIndexMapValue(cameraKey); - if (picIndex == 1 || picIndex == 4) - { - sn = sninfo_list[i]->sn2; - dateTime = sninfo_list[i]->dataTime; - if (picIndex > 2) - { - cameraIndex = 2; - } - else - { - cameraIndex = 1; - } - - picIndex = 2; - } - else if (picIndex == 2 || picIndex == 3) - { - sn = sninfo_list[i]->sn1; - dateTime = sninfo_list[i]->dataTime; - if (picIndex > 2) - { - cameraIndex = 2; - } - else - { - cameraIndex = 1; - } - - picIndex = 1; - } - else - { - - } - break; - } - else - { - qDebug() << "stationKey:" << stationKey << " sn info size:" << sninfo_list.size();; - } - } - } - } - - else if (stationKey == "Station3") - { - if (sninfo_list.size() < 1) - qDebug() << "pic do not find sn info"; - for (int i = 0; i < sninfo_list.size(); i++) - { - if (sninfo_list[i]->sn1 != "" && sninfo_list[i]->sn2 != "") - { - if (sninfo_list[i]->getcamreaIndexMapValue(cameraKey) != camreaPicNumMap.value(cameraKey)) - { - result = i; - sninfo_list[i]->updatecamreaIndexMap(cameraKey, sninfo_list[i]->getcamreaIndexMapValue(cameraKey) + 1); - picIndex = sninfo_list[i]->getcamreaIndexMapValue(cameraKey); - if (picIndex == 1) - { - dateTime = sninfo_list[i]->dataTime; - cameraIndex = 1; - if (cameraKey == m_camera3Key || cameraKey == m_camera1Key) - { - sn = sninfo_list[i]->sn2; - picIndex = 2; - - } - else - { - sn = sninfo_list[i]->sn1; - picIndex = 1; - - } - - } - else - { - - - sn = sninfo_list[i]->sn1; - dateTime = sninfo_list[i]->dataTime; - cameraIndex = 2; - if (cameraKey == m_camera3Key || cameraKey == m_camera1Key) - { - sn = sninfo_list[i]->sn1; - picIndex = 1; - } - else - { - sn = sninfo_list[i]->sn2; - picIndex = 2; - } - - } - break; - } - else - { - //qDebug() << "stationKey:" << stationKey << " sn info size:" << sninfo_list.size();; - } - } - } - } - - else if (stationKey == "Station4") - { - if (sninfo_list.size() < 1) - qDebug() << "pic do not find sn info"; - - for (int i = 0; i < sninfo_list.size(); i++) - { - if (sninfo_list[i]->sn1 != "" && sninfo_list[i]->sn2 != "") - { - if (sninfo_list[i]->getcamreaIndexMapValue(cameraKey) != camreaPicNumMap.value(cameraKey)) - { - result = i; - sninfo_list[i]->updatecamreaIndexMap(cameraKey, sninfo_list[i]->getcamreaIndexMapValue(cameraKey) + 1); - picIndex = sninfo_list[i]->getcamreaIndexMapValue(cameraKey); - if (picIndex == 1 || picIndex == 4) - { - sn = sninfo_list[i]->sn2; - dateTime = sninfo_list[i]->dataTime; - if (picIndex > 2) - { - cameraIndex = 2; - } - else - { - cameraIndex = 1; - } - - picIndex = 2; - } - else if (picIndex == 2 || picIndex == 3) - { - sn = sninfo_list[i]->sn1; - dateTime = sninfo_list[i]->dataTime; - if (picIndex > 2) - { - cameraIndex = 2; - } - else - { - cameraIndex = 1; - } - - picIndex = 1; - } - else - { - - } - break; - } - else - { - //qDebug() << "stationKey:" << stationKey << " sn info size:" << sninfo_list.size();; - } - } - } - } - - else if (stationKey == "Station5") - { - if (sninfo_list.size() < 1) - qDebug() << "pic do not find sn info"; - - for (int i = 0; i < sninfo_list.size(); i++) - { - if (sninfo_list[i]->sn1 != "" && sninfo_list[i]->sn2 != "") - { - if (sninfo_list[i]->getcamreaIndexMapValue(cameraKey) != camreaPicNumMap.value(cameraKey)) - { - result = i; - sninfo_list[i]->updatecamreaIndexMap(cameraKey, sninfo_list[i]->getcamreaIndexMapValue(cameraKey) + 1); - picIndex = sninfo_list[i]->getcamreaIndexMapValue(cameraKey); - if (picIndex < camreaPicNumMap.value(cameraKey) / 2 + 1) - { - sn = sninfo_list[i]->sn1; - dateTime = sninfo_list[i]->dataTime; - cameraIndex = picIndex; - - picIndex = 1; - } - else - { - sn = sninfo_list[i]->sn2; - dateTime = sninfo_list[i]->dataTime; - cameraIndex = picIndex - camreaPicNumMap.value(cameraKey)/2; - - picIndex = 2; - } - - if (cameraKey == m_camera7Key) - { - if (cameraIndex == 3) - { - GYid = "1"; - } - else if (cameraIndex == 4) - { - GYid = "2"; - } - - else - GYid = QString::number(cameraIndex); - - } - else - GYid = QString::number(cameraIndex); - - break; - } - else - { - //qDebug() << "stationKey:" << stationKey << " sn info size:" << sninfo_list.size(); - } - } - } - } - else if (stationKey == "Station10"|| stationKey == "station10") - { - if (sninfo_list.size() < 1) - qDebug() << "pic do not find sn info"; - - for (int i = 0; i < sninfo_list.size(); i++) - { - if (sninfo_list[i]->sn1 != "" && sninfo_list[i]->sn2 != "") - { - if (sninfo_list[i]->getcamreaIndexMapValue(cameraKey) != camreaPicNumMap.value(cameraKey)) - { - result = i; - sninfo_list[i]->updatecamreaIndexMap(cameraKey, sninfo_list[i]->getcamreaIndexMapValue(cameraKey) + 1); - picIndex = sninfo_list[i]->getcamreaIndexMapValue(cameraKey); - if (picIndex < camreaPicNumMap.value(cameraKey) / 2 + 1) - { - sn = sninfo_list[i]->sn1; - dateTime = sninfo_list[i]->dataTime; - cameraIndex = picIndex; - - picIndex = 1; - } - else - { - sn = sninfo_list[i]->sn2; - dateTime = sninfo_list[i]->dataTime; - cameraIndex = picIndex - camreaPicNumMap.value(cameraKey) / 2; - - picIndex = 2; - } - - if (cameraKey == m_camera7Key) - { - if (cameraIndex == 3) - { - GYid = "1"; - } - else if (cameraIndex == 4) - { - GYid = "2"; - } - - else - GYid = QString::number(cameraIndex); - - } - else - GYid = QString::number(cameraIndex); - - break; - } - else - { - //qDebug() << "stationKey:" << stationKey << " sn info size:" << sninfo_list.size(); - } - } - } - } - else { - qDebug() << "pic do not find Station"< dst_camreaIndexMap = snInfo->getcamreaIndexMap(); - QStringList keyList = dst_camreaIndexMap.keys(); - - for (int i = 0; i < keyList.size(); i++) - { - if (snInfo->getcamreaIndexMapValue(keyList[i]) != camreaPicNumMap.value(keyList[i])) - { - - result= false; - } - - } - delete[]checkNum; - checkNum = nullptr; - return result; -} - -bool HSnData::checkCount(int* checkNum, QString station) -{ - bool result = true; - SNINFO* snInfo = getFristSnInfo(); - if (snInfo == nullptr) - return result; - QMutexLocker locker(m_mutex); - QMap dst_camreaIndexMap = snInfo->getcamreaIndexMap(); - QStringList keyList = dst_camreaIndexMap.keys(); - - for (int i = 0; i < keyList.size(); i++) - { - HCameraData* cameraPtr = station_list.value(station)->getCameraData(keyList[i]); - if (cameraPtr->GetMatNum() != camreaPicNumMap.value(keyList[i])) - { - qDebug() <<"cameraKey:" << keyList[i] <<"cameraPicMax:"<< camreaPicNumMap.value(keyList[i]) << " cameraPtr->GetMatNum():" << cameraPtr->GetMatNum(); - int count = camreaPicNumMap.value(keyList[i]) - cameraPtr->GetMatNum(); - qDebug() << "snImage loss,add " << count << " pics"; - for (int m = 0; m < count; m++) - { - HCameraData* cameraPtr = station_list.value(station)->getCameraData(keyList[i]); - if (cameraPtr) - { - std::vector camera_mat; - camera_mat.push_back(cv::Mat(0, 0, CV_8UC1).setTo(0)); - camera_mat.push_back(cv::Mat(0, 0, CV_8UC1).setTo(0)); - cameraPtr->addImageData(camera_mat); - camera_mat.clear(); - } - } - } - - } - delete[]checkNum; - checkNum = nullptr; - return result; -} - -bool HSnData::waitSnOver(int* checkNum, QString station) -{ - bool result = true; - SNINFO* snInfo = getFristSnInfo(); - if (snInfo == nullptr) - return result; - QMutexLocker locker(m_mutex); - QMap dst_camreaIndexMap = snInfo->getcamreaIndexMap(); - QStringList keyList = dst_camreaIndexMap.keys(); - - for (int i = 0; i < keyList.size(); i++) - { - HCameraData* cameraPtr = station_list.value(station)->getCameraData(keyList[i]); - if (cameraPtr->GetMatNum() != camreaPicNumMap.value(keyList[i])) - { - qDebug() << "cameraKey:" << keyList[i] << "cameraPicMax:" << camreaPicNumMap.value(keyList[i]) << " cameraPtr->GetMatNum():" << cameraPtr->GetMatNum(); - result = false; - } - - } - delete[]checkNum; - checkNum = nullptr; - return result; -} - -bool HSnData::setCount(int* Num) -{ - SNINFO* snInfo = getFristSnInfo(); - QMap dst_camreaIndexMap = snInfo->getcamreaIndexMap(); - QStringList keyList = dst_camreaIndexMap.keys(); - - for (int i = 0; i < keyList.size(); i++) - { - snInfo->updatecamreaIndexMap(keyList[i], *Num); - Num++; - } - //delete[]Num; - return true; -} - -SNINFO* HSnData::getFristSnInfo() -{ - QMutexLocker locker(m_mutex); - if (sninfo_list.size() > 0) - return sninfo_list.first(); - else - return nullptr; -} - -void HSnData::removeOne() -{ - QMutexLocker locker(m_mutex); - if (sninfo_list.size() > 0) { - SNINFO* sninfo = sninfo_list.at(0); - sninfo_list.removeAt(0); - delete sninfo; - sninfo = nullptr; - } - -} - -void HSnData::removeSn(int* checkNum) -{ - while (true) - { - SNINFO* snInfo = getFristSnInfo(); - if (snInfo == nullptr) - break; - QMutexLocker locker(m_mutex); - bool result = true; - QMap dst_camreaIndexMap = snInfo->getcamreaIndexMap(); - QStringList keyList = dst_camreaIndexMap.keys(); - - for (int i = 0; i < keyList.size(); i++) - { - if (snInfo->getcamreaIndexMapValue(keyList[i]) != camreaPicNumMap.value(keyList[i])) - { - result = false; - } - } - if (result) - { - sninfo_list.removeAt(0); - delete snInfo; - snInfo = nullptr; - qDebug() << "delete an old sn"; - } - else - break; - } - delete[]checkNum; - checkNum = nullptr; - return ; - -} - -int HSnData::snInfoSize() -{ - QMutexLocker locker(m_mutex); - return sninfo_list.size(); -} - -bool HSnData::checkSn(QString sn1, QString sn2) -{ - bool checkResult = false; - - if (sn1 == "NG" || sn2 == "NG") - return checkResult; - - for (int i = 0; i < sninfo_list.size(); i++) - { - if (sninfo_list[i]->sn1 == sn1 && sninfo_list[i]->sn2 == sn2)//产品连续NG会导致拍照跳出,PLC卡停 - { - checkResult = true; - break; - } - } - return checkResult; -} - -void HSnData::clearData() -{ - QMutexLocker locker(m_mutex); - sninfo_list.clear(); -} - -void HSnData::setcamreaPicNumMap(QMap m_camreaPicNumMap) -{ - camreaPicNumMap = m_camreaPicNumMap; - camreaPicNumMap.detach(); -} - -void HSnData::setcameraProductSurface(QMap> m_cameraProductSurfaceMap) -{ - cameraProductSurfaceMap = m_cameraProductSurfaceMap; - cameraProductSurfaceMap.detach(); -} - -QString HSnData::getcameraProductSurface(QString cameraKey, int index) -{ - QVector valueVec = cameraProductSurfaceMap.value(cameraKey); - if (valueVec.size() > index) - return valueVec.at(index); - else - return ""; -} - -// 存储算法结果的数据 -HAlgorithmData::HAlgorithmData() -{ - m_mutex = new QMutex; -} - -HAlgorithmData::~HAlgorithmData() -{ - if(m_mutex) - { - delete m_mutex; - m_mutex = nullptr; - } -} - -void HAlgorithmData::setDeleteResultMap(QMap map) -{ - map_delete_Result_index = map; -} - -QByteArray HAlgorithmData::getAlgorithmData(QString cameraName_and_index,QString algorithm_result_index) -{ - QByteArray result_byte; - QMutexLocker locker(m_mutex); - - if ( map_algorithm_resultData.keys().contains(cameraName_and_index) ) - { - return getIndexData(cameraName_and_index,map_algorithm_resultData.value(cameraName_and_index),algorithm_result_index); - } - else - return result_byte; -} - -QByteArray HAlgorithmData::getIndexData ( QString cameraName_and_index,Algorithm_Result_Data result_data,QString algorithm_result_index) -{ - //qDebug() << __FUNCTION__ << " line: " << __LINE__ << " algorithmKey:" << algorithmKey << " cameraName_and_index: " << cameraName_and_index << " result_data.byte len:" << result_data.byte.length(); - - QByteArray index_byte; - QStringList list = cameraName_and_index.split("_"); - if ( list.size() != 2 ) - { - qCritical() << "[Error] " << " check list value is error! list len:" << list.length(); - return ""; - } - - // 删除map中的数据 - map_algorithm_resultData.remove(cameraName_and_index); - - QString cameraName = list.at(0); - QString task_index = list.at(1); - QByteArray byte = result_data.byte; - - QVector vec_Data; - while ( !byte.isEmpty() ) - { - int type = 0; - QByteArray m_type = byte.mid(0,4); - memcpy((void*)&type,(void*)m_type.data(), 4); - byte.remove(0,4); - - int len = 0; - QByteArray m_len = byte.mid(0,4); - memcpy((void*)&len,(void*)m_len.data(), 4); - byte.remove(0,4); - - QByteArray m_data = byte.mid(0,len); - vec_Data.append(QString(m_data)); - byte.remove(0,len); - } - - if ( vec_Data.size() < algorithm_result_index.toInt() ) - { - qCritical() << "[Error] " << " algorithmKey:" << algorithmKey << " get Index Data is error!"; - return index_byte; - } - - QString m_data = vec_Data.at(algorithm_result_index.toInt()); - - std::string sendMsg; - // type - int type = 3; - std::string m_type; - m_type.insert(0, 4, '1'); - memcpy((void*)m_type.c_str(), (void*)&type, 4); - sendMsg.append(m_type); - - // len - int len = m_data.toStdString().length(); - std::string m_len; - m_len.insert(0, 4, '1'); - memcpy((void*)m_len.c_str(), (void*)&len, 4); - sendMsg.append(m_len); - - // data x - sendMsg.append(m_data.toStdString()); - - index_byte = QByteArray::fromStdString(sendMsg); - //qDebug() << __FUNCTION__ << " line:" << __LINE__ << " algorithmKey:" << algorithmKey << " index_byte len: " << index_byte.length(); - return index_byte; -} - -void HAlgorithmData::clearData() -{ - QMutexLocker locker(m_mutex); - map_algorithm_resultData.clear(); -} - -bool HAlgorithmData::checkAlgorithmData( QString cameraName_and_index ) -{ - if ( map_algorithm_resultData.keys().contains(cameraName_and_index)) - { - return true; - } - //qDebug() << __FUNCTION__ << " line:" << __LINE__ << " algorithmKey:" << algorithmKey << " algorithmData len:" << algorithmData.length(); - return false;; -} - -void HAlgorithmData::addAlgorithmData( QString cameraName_and_index,Algorithm_Result_Data result_data ) -{ - QMutexLocker locker(m_mutex); - map_algorithm_resultData.insert(cameraName_and_index,result_data); - //qDebug() << __FUNCTION__ << " line:" << __LINE__ << " algorithmKey:"<< algorithmKey << " cameraName_and_index:" << cameraName_and_index ; -} - -/********************************/ -HAlgorithmExecData::HAlgorithmExecData() -{ - m_mutex = new QMutex; -} - -HAlgorithmExecData::~HAlgorithmExecData() -{ - if(m_mutex) - { - delete m_mutex; - m_mutex = nullptr; - } -} - -bool HAlgorithmExecData::getDetectData(testData& picVec) -{ - bool result = true; - if(!m_detectData.isEmpty()) - { - QMutexLocker locker(m_mutex); - testData picVec1 = m_detectData.head(); - picVec.cameraName = picVec1.cameraName; // 提取名称 - picVec.task_index = picVec1.task_index; // 任务下标 - picVec.byte = picVec1.byte; - picVec.dstImageMat.assign(picVec1.dstImageMat.begin(),picVec1.dstImageMat.end()); - } - else - result = false; - - return result; -} - -bool HAlgorithmExecData::deleteDetectData() -{ - bool result = false; - - QMutexLocker locker(m_mutex); - if(!m_detectData.isEmpty()) - { - m_detectData.dequeue(); - result = true; - } - - return result; -} - -void HAlgorithmExecData::addDetectData(testData detectData) -{ - QMutexLocker locker(m_mutex); - m_detectData.append(detectData); - //qDebug() << __FUNCTION__ << " line:" << __LINE__ << " algorithmName: " << algorithmName << " m_detectData len:" << m_detectData.length(); -} - -void HAlgorithmExecData::clearData() -{ - QMutexLocker locker(m_mutex); - m_detectData.clear(); -} - - -/*********************************/ -HStationData::HStationData() -{ - -} - -HStationData::~HStationData() -{ - foreach(HCameraData *ptr,camera_list_Ptr) - { - if(ptr) - { - delete ptr; - ptr = nullptr; - } - } - qDebug() << "[INFO] " << " ~HStationData success!"; -} - -bool HStationData::checkCameraData(QString cameraKey,QString index) -{ - HCameraData *camera_ptr = nullptr; - foreach ( HCameraData *ptr,camera_list_Ptr ) - { - if ( ptr->getCameraKey() == cameraKey ) - { - camera_ptr = ptr; - break; - } - } - - if ( camera_ptr ) - { - if ( camera_ptr->checkImageData(index) ) - return true; - } - else - { - return false; - } - return false; -} - -// 获取相机数据 -HCameraData* HStationData::getCameraData(QString cameraKey) -{ - //qDebug() << __FUNCTION__ << " line:" << __LINE__ << " cameraKey:" << cameraKey; - foreach ( HCameraData *ptr,camera_list_Ptr ) - { - if(ptr->getCameraKey() == cameraKey) - return ptr; - } - return nullptr; -} - -// 添加相机数据 -void HStationData::addCameraData(HCameraData *cameraData) -{ - camera_list_Ptr.append(cameraData); -} - - -// 添加算法数据 -void HStationData::addAlgorithmData(HAlgorithmData* algorithmData) -{ - algotithmlist_Ptr.append(algorithmData); - // qDebug() << __FUNCTION__ << " line:" << __LINE__ << " algotithmlist_Ptr len:" << algotithmlist_Ptr.length(); -} - -// 获取 算法指针 -HAlgorithmData* HStationData::getAlgorithmData( QString algorithmKey ) -{ - foreach ( HAlgorithmData *ptr,algotithmlist_Ptr ) - { - if ( ptr->getAlgorithmKey() == algorithmKey ) - return ptr; - } - return nullptr; -} - -bool HStationData::checkAlgorithmResultData(QString algorithmKey,QString index) -{ - HAlgorithmData *algorithm_ptr = nullptr; - foreach ( HAlgorithmData *m_ptr,algotithmlist_Ptr ) - { - if ( m_ptr->getAlgorithmKey() == algorithmKey ) - { - algorithm_ptr = m_ptr; - break; - } - } - - if ( algorithm_ptr ) - { - if ( algorithm_ptr->checkAlgorithmData(index) ) - return true; - } - else - { - return false; - } - return false; -} - -/**************************************/ - -void HStationData::addAlgorithmExecData(HAlgorithmExecData* algorithmData) -{ - algotithmExecList_Ptr.append(algorithmData); - //qDebug() << __FUNCTION__ << " line:" << __LINE__ << " algotithmlist_Ptr len:" << algotithmlist_Ptr.length(); -} - -void HStationData::clearData() -{ - for (int i = 0; i < camera_list_Ptr.size(); i++) - camera_list_Ptr[i]->clearData(); - - if(m_snData != nullptr) - m_snData->clearData(); - - for (int i = 0; i < algotithmExecList_Ptr.size(); i++) - algotithmExecList_Ptr[i]->clearData(); - - for (int i = 0; i < algotithmlist_Ptr.size(); i++) - algotithmlist_Ptr[i]->clearData(); -} - - -HAlgorithmExecData* HStationData::getAlgorithmExecData( QString algorithmKey ) -{ - foreach ( HAlgorithmExecData *ptr,algotithmExecList_Ptr ) - { - if ( ptr->getAlgorithmName() == algorithmKey ) - return ptr; - } - return nullptr; -} - -void SNINFO::setcamreaIndexMap(QMap m_camreaIndexMap) -{ - camreaIndexMap = m_camreaIndexMap; - camreaIndexMap.detach(); -} - -QMap SNINFO::getcamreaIndexMap() -{ - //qDebug() << "size:" << camreaIndexMap.size(); - return camreaIndexMap; -} - -void SNINFO::updatecamreaIndexMap(QString cameraKey, int value) -{ - camreaIndexMap.insert(cameraKey, value); -} - -int SNINFO::getcamreaIndexMapValue(QString cameraKey) -{ - return camreaIndexMap.value(cameraKey); -} - -ResultSnData::ResultSnData() -{ - m_mutex = new QMutex(); -} - -void ResultSnData::addResultSnInfo(resultSnInfo* snInfo) -{ - QMutexLocker locker(m_mutex); - resultSnInfo_list.push_back(snInfo); -} - -resultSnInfo* ResultSnData::getResultSnInfo() -{ - resultSnInfo* info = nullptr; - QMutexLocker locker(m_mutex); - if (resultSnInfo_list.size() > 0) - { - info = resultSnInfo_list.at(0); - resultSnInfo_list.removeAt(0); - } - return info; -} diff --git a/HanddleAI/HandleAiUi-new/back/hdataprocess.h b/HanddleAI/HandleAiUi-new/back/hdataprocess.h deleted file mode 100644 index 4f951bcf..00000000 --- a/HanddleAI/HandleAiUi-new/back/hdataprocess.h +++ /dev/null @@ -1,231 +0,0 @@ -#ifndef HDATAPROCESS_H -#define HDATAPROCESS_H -#include -#include -#include -#include -#include -#include -#include -#include - -#pragma execution_character_set("utf-8") //能够正常显示中文字符串 - -typedef struct -{ - QString cameraName; // 相机名称 - QString task_index; // 当前相机的任务下标 - QByteArray byte; // 单产品多工站时,SN等信息也当作参数传递 - std::vector dstImageMat; -}testData; - -// 存储算法下标的数据 -typedef struct -{ - int get_result_index = 1; - int delete_Result_index = -1; // 赋值 根据配置文件来决定 -}Algorithm_Result_Data_index; - -class resultSnInfo -{ -public: - resultSnInfo() { ; }; - QString sn1 = ""; - QString sn2 = ""; - QString sn3 = "";//预留 - QString sn4 = "";//预留 - QString dataTime; -}; - -//typedef struct -//{ -// QString sn1 = ""; -// QString sn2 = ""; -// QString sn3 = "";//预留 -// QString sn4 = "";//预留 -// QString dataTime; -// QMap camreaIndexMap; -//}SNINFO; - -class ResultSnData -{ -public: - ResultSnData(); - void addResultSnInfo(resultSnInfo* snInfo); - resultSnInfo* getResultSnInfo(); - -private: - QList resultSnInfo_list; - QMutex* m_mutex; -}; - -class SNINFO -{ - //根据一次写进多个sn码选择使用 - public: - SNINFO() { ; }; - QString sn1 = ""; - QString sn2 = ""; - QString sn3 = "";//预留 - QString sn4 = "";//预留 - QString dataTime; - //记录相机拍照数目 - void setcamreaIndexMap(QMap m_camreaIndexMap);// { camreaIndexMap = m_camreaIndexMap; /*camreaIndexMap.detach();*/ } - QMap getcamreaIndexMap();// { return camreaIndexMap; } - void updatecamreaIndexMap(QString cameraKey, int value); - int getcamreaIndexMapValue(QString cameraKey); -private: - QMap camreaIndexMap;//记录当前工站对应相机的拍照次数 -}; - -//存储算法结果的容器的结构体 -typedef struct -{ - QByteArray byte; // 存储算法结果数据 - std::vector dstImageMat; // 存储算法结果图 -}Algorithm_Result_Data; - -// 存储相机数据 -class HCameraData -{ -public: - HCameraData(); - ~HCameraData(); - bool initCameraVectorQueue(int num); - void setCameraKey(QString key){ cameraKey = key; } - bool addImageData(std::vector data); - bool checkImageData(QString index); - QString getCameraKey(){ return cameraKey;} - std::vector getCameraImageData(QString m_index); - void clearData(); - int GetMatNum(); -private: - int m_index = 0; - int image_queue_num = 0; //划分相机任务的数量 - QString cameraKey; - QVector>*> camera_vector_queue_vector_mat_ptr; // 存储相机图片任务的容器 - QMutex* m_mutex; -}; - -//存储sn码的数据 -class HSnData -{ -public: - HSnData(); - - void addSnInfo(SNINFO* snInfo); - void checkPhotoPoint(); - int getSnInfo(QString stationKey,QString cameraKey, QString& sn, QString& dateTime, int& cameraIndex, int& picIndex, QString& surfaceInfo); - bool checkCount(int* checkNum); - bool checkCount(int* checkNum, QString station); - bool waitSnOver(int* checkNum, QString station); - bool setCount(int* Num); - SNINFO* getFristSnInfo(); - void removeOne(); - void removeSn(int* checkNum); - int snInfoSize(); - bool checkSn(QString sn1, QString sn2); - void clearData(); - //void setMutex(QMutex* mutex){m_mutex = mutex;} - - void setcamreaPicNumMap(QMap m_camreaPicNumMap); - void setcameraProductSurface(QMap> m_cameraProductSurfaceMap); - QString getcameraProductSurface(QString cameraKey, int index); - - void setCamera1Key(QString camera1Key) { m_camera1Key = camera1Key; } - void setCamera3Key(QString camera3Key) { m_camera3Key = camera3Key; } - void setCamera7Key(QString camera7Key) { m_camera7Key = camera7Key; } - -private: - QList sninfo_list; - QMap camreaPicNumMap;//记录当前工站对应相机执行单次任务时需要拍的图片总数目 - QMap> cameraProductSurfaceMap; //记录当前工站对应相机执行单次任务时需要拍的每个面(产品的哪个面)的信息 - QMutex* m_mutex; - QString stationName; - QString m_camera1Key; - QString m_camera3Key; - QString m_camera7Key; - int m_picIndex = 0; -}; - -// 存储算法结果的数据 -class HAlgorithmData -{ - -public: - HAlgorithmData(); - ~HAlgorithmData(); - void setDeleteResultMap(QMap map); // 设置删除算法结果的下标 - void setAlgorithmKey(QString key){ algorithmKey = key; } - void addAlgorithmData(QString cameraName_and_index,Algorithm_Result_Data result_data); - bool checkAlgorithmData(QString cameraName_and_index); - QString getAlgorithmKey(){ return algorithmKey; } - QByteArray getAlgorithmData(QString cameraName_and_index,QString algorithm_result_index); - QByteArray getIndexData(QString cameraName_and_index,Algorithm_Result_Data result_data,QString algorithm_result_index); - void clearData(); -private: - QString algorithmKey; - QMap map_algorithm_resultData; // 示例:key camera1_1 value:Algorithm_Result_Data - QMutex* m_mutex; - QMap map_delete_Result_index; -}; - -// 保存执行算法所需要的数据 -class HAlgorithmExecData -{ -public: - HAlgorithmExecData(); - ~HAlgorithmExecData(); - void setAlgorithmName(QString key){ algorithmName = key; } - QString getAlgorithmName(){ return algorithmName; } - bool getDetectData(testData& picVec); - bool deleteDetectData(); - void addDetectData(testData detectData); - void clearData(); -private: - QString algorithmName; - QQueue m_detectData; - QMutex* m_mutex; -}; - -// 站的数据 -class HStationData -{ - -public: - HStationData(); - ~HStationData(); - - void setStationKey(QString key){ stationKey = key;} - - // 相机数据 - void addCameraData(HCameraData* cameraData); - bool checkCameraData(QString cameraKey,QString index); - HCameraData *getCameraData(QString cameraKey); - - //sn数据 - void setsnInfoData(HSnData* snData) { m_snData = snData; }; - HSnData* getsnInfoData() { return m_snData; }; - - // 算法结果数据 - void addAlgorithmData ( HAlgorithmData* algorithmData ); - bool checkAlgorithmResultData(QString algorithmKey,QString index); - HAlgorithmData* getAlgorithmData ( QString algorithmKey ); - - // 执行算法所需要的数据容器 - void addAlgorithmExecData ( HAlgorithmExecData* algorithmData ); - HAlgorithmExecData* getAlgorithmExecData ( QString algorithmKey ); - - QList getAllCameraData() { return camera_list_Ptr; } - - void clearData(); -private: - QString stationKey; - QQueue> vectror_sn_queue; - QList camera_list_Ptr; // 工位相机列表指针 - HSnData* m_snData = nullptr; - QList algotithmlist_Ptr; // 当前工位算法结果汇总指针 - QList algotithmExecList_Ptr; // 执行算法所需要的数据容器指针 -}; - -#endif // HDATAPROCESS_H diff --git a/HanddleAI/HandleAiUi-new/back/logmsg.cpp b/HanddleAI/HandleAiUi-new/back/logmsg.cpp new file mode 100644 index 00000000..957a8a3e --- /dev/null +++ b/HanddleAI/HandleAiUi-new/back/logmsg.cpp @@ -0,0 +1,165 @@ + #include "logmsg.h" +#include +key_sendMsg m_key_callback = NULL; + +LogMsg* LogMsg::ms_manager{ nullptr }; +bool LogMsg::ms_IsWorking{ false }; +std::mutex LogMsg::ms_WorkStarusLock; +std::once_flag LogMsg::ms_CreateOnce; +QString LogMsg::ms_LogDirPath; +LogMsg::LogMsgType LogMsg::ms_LogMstType; +QString LogMsg::ms_TrailMSG; + +LogMsg::LogMsg(const LogMsgType logmsgtype) +{ + ms_LogMstType = logmsgtype; + ms_IsWorking = true; + qInstallMessageHandler(outputMessage);//初始化日志处理函数 + m_WriteBufferThread = std::thread(&LogMsg::WriteBufferThread, this); +} + +LogMsg::~LogMsg() +{ + try + { + ms_IsWorking = false; + + std::lock(ms_WorkStarusLock, ms_manager->m_LogMsgBufDeqLock); + std::lock_guard lock1(ms_WorkStarusLock, std::adopt_lock); + std::lock_guard lock2(ms_manager->m_LogMsgBufDeqLock, std::adopt_lock); + + //close write thread + m_BufferCondVar.notify_all(); + if (m_WriteBufferThread.joinable()) + { + m_WriteBufferThread.join(); + } + + //write buffer + const auto vecsize = ms_manager->m_LogMsgBufVec.size(); + if (vecsize > 0) + { + OpenFile(); + if (nullptr != m_OutFile) + { + QTextStream text_stream(ms_manager->m_OutFile); + text_stream.setCodec("UTF-8"); + for (size_t i = 0; i < vecsize; ++i) + { + text_stream << ms_manager->m_LogMsgBufVec[i]; + } + text_stream.flush(); + ms_manager->m_LogMsgBufVec.clear(); + } + CloseFile(); + } + } + catch (...) + { + std::cout << "~LogMsg throw exception msg=" /*<< expt.what()*/ << std::endl; + } +} + +void LogMsg::OpenFile() +{ + if (m_OutFile) + { + return; + } + + const QString LogFileName = QDateTime::currentDateTime().toString("yyyy-MM-dd") + ".log"; + const QDir dir(ms_LogDirPath); + if (!dir.exists()) + { + int tryamount{ 0 }; + bool rval{ false }; + do + { + if (tryamount++ >= 3) + { + std::cout << "mkdir failed"; + break; + } + rval = dir.mkpath(ms_LogDirPath); + } while (!rval); + } + QString logfilepath = ms_LogDirPath + QDir::separator() + LogFileName; + logfilepath = QDir::toNativeSeparators(logfilepath); + + m_OutFile = new QFile(logfilepath); + if (m_OutFile) + { + m_FileIsOpen = m_OutFile->open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Unbuffered); + } +} + +void LogMsg::CloseFile() +{ + if (nullptr != m_OutFile) + { + m_OutFile->flush(); + m_OutFile->close(); + SAFEDELETE(m_OutFile); + } +} + +void LogMsg::WriteBufferThread() +{ + QDateTime lastcheckdatetime; + while (ms_IsWorking) + { + std::unique_lock ulock(m_BufferMutex); + m_BufferCondVar.wait(ulock, [this] { + return (!m_LogMsgBufVec.empty() || !ms_IsWorking); + }); + if (!ms_IsWorking) + { + break; + } + + if (!ms_WorkStarusLock.try_lock()) + { + continue; + } + if (ms_IsWorking && !m_LogMsgBufVec.empty()) + { + std::vector bufque; + { + std::lock_guard veclock(m_LogMsgBufDeqLock); + bufque.swap(m_LogMsgBufVec); + } + const auto nowtime = QDateTime::currentDateTime(); + if (!lastcheckdatetime.isValid() || 0 != nowtime.daysTo(lastcheckdatetime)) + { + CloseFile(); + OpenFile(); + } + lastcheckdatetime = nowtime; + if (nullptr != m_OutFile && m_FileIsOpen) + { + const auto vecsize = bufque.size(); + QTextStream text_stream(m_OutFile); + text_stream.setCodec("UTF-8"); + for (size_t i = 0; i < vecsize; ++i) + { + + int iswrite = 1; + text_stream << bufque[i]; + + } + text_stream.flush(); + } + else + { + std::cout << "open logfile failed"; + } + } + else if (!ms_IsWorking) + { + ms_WorkStarusLock.unlock(); + break; + } + ms_WorkStarusLock.unlock(); + } + CloseFile(); +} diff --git a/HanddleAI/HandleAiUi-new/back/logmsg.h b/HanddleAI/HandleAiUi-new/back/logmsg.h new file mode 100644 index 00000000..dde3e7ea --- /dev/null +++ b/HanddleAI/HandleAiUi-new/back/logmsg.h @@ -0,0 +1,205 @@ +#ifndef LOGMSG_H +#define LOGMSG_H + +#include +#include +#include +//红黑树 +#include +#include +#include +#include +#include +#include +#include +#include + +#pragma execution_character_set("utf-8") + + +#define SAFEDELETE(Pt_t) {\ + if ((Pt_t) != nullptr)\ + {\ + delete (Pt_t);(Pt_t) = nullptr;\ + }\ + } +#define SAFEDELETEARRAY(Pt_t) {\ + if ((Pt_t) != nullptr)\ + {\ + delete[](Pt_t);(Pt_t) = nullptr;\ + }\ + } + +//定义日志宏 difine log macro +#define logDebug QMessageLogger(__FILE__, __LINE__, Q_FUNC_INFO).debug +#define logInfo QMessageLogger(__FILE__, __LINE__, Q_FUNC_INFO).info +#define logWarning QMessageLogger(__FILE__, __LINE__, Q_FUNC_INFO).warning +#define logCritical QMessageLogger(__FILE__, __LINE__, Q_FUNC_INFO).critical +#define logFatal QMessageLogger(__FILE__, __LINE__, Q_FUNC_INFO).fatal + +typedef std::functionkey_sendMsg;//time msg +extern key_sendMsg m_key_callback; +class LogMsg final +{ +private: + +public: + LogMsg(const LogMsg&) = delete; + LogMsg& operator=(const LogMsg&) = delete; + LogMsg(const LogMsg&&) = delete; + LogMsg& operator=(LogMsg&&) = delete; + + enum class LogMsgType : char { + ALL = 1,//全部 + DebugMsg,//debug及以上 + InfoMsg,//info及以上 + WarningMsg, + CriticalMsg, + FatalMsg, + }; + +public: + + static inline void outputMessage(QtMsgType type, const QMessageLogContext& context, const QString& msg) + { + if (LogMsgType::InfoMsg == ms_LogMstType && QtDebugMsg == type) + { + return; + } + else if (LogMsgType::WarningMsg == ms_LogMstType && (QtDebugMsg == type || QtInfoMsg == type)) + { + return; + } + else if (LogMsgType::CriticalMsg == ms_LogMstType && (QtDebugMsg == type || QtInfoMsg == type || QtWarningMsg == type)) + { + return; + } + else if (LogMsgType::FatalMsg == ms_LogMstType && (QtDebugMsg == type || QtInfoMsg == type || QtWarningMsg == type || QtCriticalMsg == type)) + { + return; + } + + if (!ms_IsWorking) + { + return; + } + QString pretext; + switch (type) + { + case QtDebugMsg: + { + pretext = QString("Debug:"); + break; + } + case QtInfoMsg: + { + pretext = QString("Info:"); + break; + } + case QtWarningMsg: + { + pretext = QString("Warning:"); + break; + } + case QtCriticalMsg: + { + pretext = QString("Critical:"); + break; + } + case QtFatalMsg: + { + pretext = QString("Fatal:"); + break; + } + default: + { + pretext = QString("Unknown:"); + }; + } + + const QString context_info = QString("FUN:(%1) Line:(%2)").arg(QString(context.function)).arg(context.line); + const QString current_date_time = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss zzz ddd"); + const QString current_date = QString("(%1)").arg(current_date_time); + const QString message = QString("%1 ,%2 ,%3 ,%4 ,%5").arg(current_date).arg(pretext).arg(context_info).arg(msg).arg(ms_TrailMSG) + "\n"; + { + std::lock_guard lock2(ms_manager->m_LogMsgBufDeqLock); + ms_manager->m_LogMsgBufVec.push_back(message); + } + ms_manager->m_BufferCondVar.notify_all(); + } + + static void SetExtMsg(const std::string& trailmsg) + { + + ms_TrailMSG = QString::fromStdString(trailmsg); + } + + static int Create(const LogMsgType logmsgtype) + { + int retval{ -1 }; + std::call_once(ms_CreateOnce, [&]() + { + const QString workdir = QCoreApplication::applicationDirPath(); + ms_LogDirPath = workdir + QDir::separator() + "Log"; + ms_LogDirPath = QDir::toNativeSeparators(ms_LogDirPath); + const QDir dir(ms_LogDirPath); + if (!dir.exists()) + { + if (dir.mkpath(ms_LogDirPath)) + { + retval = 0; + } + else + { + retval = -1; + } + } + else + { + retval = 0; + } + std::lock_guard lock(ms_WorkStarusLock); + ms_manager = new LogMsg(logmsgtype); + }); + return retval; + } + + static void Destroy() + { + SAFEDELETE(ms_manager); + } + + static void set_key_callback(key_sendMsg func) { + m_key_callback = func; + } +private: + explicit LogMsg(const LogMsgType logmsgtype = LogMsgType::ALL); + ~LogMsg(); + + void OpenFile(); + void CloseFile(); + void WriteBufferThread(); + +private: + static LogMsg* ms_manager; + static bool ms_IsWorking; + static std::mutex ms_WorkStarusLock; + static std::once_flag ms_CreateOnce; + static QString ms_LogDirPath; + static LogMsgType ms_LogMstType; + + //mutable QString m_HeadMSG; + static QString ms_TrailMSG; + + QFile* m_OutFile{ nullptr }; + mutable std::vector m_LogMsgBufVec; + mutable std::mutex m_LogMsgBufDeqLock; + bool m_FileIsOpen{ false }; + std::thread m_WriteBufferThread; + + std::mutex m_BufferMutex; + std::condition_variable m_BufferCondVar; + +}; + +#endif // LOGMSG_H diff --git a/HanddleAI/HandleAiUi-new/back/myiothread.cpp b/HanddleAI/HandleAiUi-new/back/myiothread.cpp deleted file mode 100644 index aa46b75d..00000000 --- a/HanddleAI/HandleAiUi-new/back/myiothread.cpp +++ /dev/null @@ -1,870 +0,0 @@ -#include "myiothread.h" -#include -#include -#include -#include -#include -#include - -std::string snErrorsnError("snErrNoSn"); -QQueue writeCommondPack; - -MyIoThread::~MyIoThread() -{ - io_runflag = false; - for( int i = 0 ; i < vector_camera_signal_pack_ptr.size();i++) - { - if(vector_camera_signal_pack_ptr.at(i)) - delete vector_camera_signal_pack_ptr.at(i); - } - - wait(100); - exit(); - - qDebug() << "[INFO] " << " ~MyIoThread success! "; -} -void writeToDataSheetCSV(bool isOK); - -//IO线程 -void MyIoThread::run() -{ - bool isInitTcp = true; - int times = 0; - m_timer = new QTimer(); - m_timer->setInterval(8000); - connect(m_timer, &QTimer::timeout, [this] { - qDebug() << "[TCP Error] " << QString::fromUtf8("注意心跳发送超时") << endl; - }); - - if (m_IoType == "Heart")//心跳线程 - { - //m_heartCmd = bridge.back.json.tcp.heartCmd; - //while (io_runflag) - //{ - // QMutexLocker locker(m_iomutex); - // QString cmd1 = m_heartCmd;//心跳 - // //bridge.back.sendFinsMsg("writeHeart_DM8054_1"); - // if (bridge.back.sendFinsMsg(cmd1)) - // { - // m_timer->setInterval(8000); - // m_timer->start(); - // } - // QThread::msleep(100); - //} - } - else//解析fins线程 - { - //初始化 - m_readAllCmd = bridge.back.json.tcp.finstcp_readAllCmd; - - /*for (int i = 0; i < 1000; i++) - bridge.back.sendFinsMsg( - QString::fromStdString("write_DM" + to_string(bridge.back.json.tcp.startPos + i) + "_0"));*/ - - workThread = new threadManager(); - - for (auto thread : threadlist) - thread->cameraImgsPtr = &workThread->cameraImgs; - //while (io_runflag) - //{ - // server.insertIMG(cv::imread("E:\\SSDBackup\\1-12\\19H\\none32865\\typeUnknow-0-18-57-54.bmp", 0)); - // msleep(1000); - //} - msleep(1000); - while (io_runflag) - { - // emit _imageReciveServer->sendReq(); - reciveCommond(); -// _imageReciveServer->sendImg(); - QThread::msleep(1); - - } - } -} - -// 写入数据 -void MyIoThread::writeCommond() -{ - while( !writeCommondPack.isEmpty()) - { - //qDebug() << __FUNCTION__ << " line:" << __LINE__ << " writeCommondPack len:" << writeCommondPack.length(); - QByteArray write_byte = writeCommondPack.dequeue(); - if ( !bridge.back.sendFinsMsg(write_byte) ) - { - qCritical() << "[TCP] " << " finstcp_ptr reciveData error!"; - return; - } - } -} - -void MyIoThread::reciveCommond() -{ - auto start = std::chrono::high_resolution_clock::now(); - QByteArray byte = m_readAllCmd.toUtf8(); // 设置 从起始位开始读取的指令 - if (!bridge.back.sendFinsMsg(byte)) - { - qCritical() << "[TCP] " << " finstcp_ptr reciveData error!"; - } - - // 读取到的信息解析 - QByteArray readByte; - if (!bridge.back.reciveFinsMsg(readByte)) - { - qCritical() << "[TCP] " << " finstcp_ptr sendData error!"; - } - auto end = std::chrono::high_resolution_clock::now(); - auto duration = std::chrono::duration_cast(end - start); - //std::cout << "cost: " << duration.count() << " mm" << std::endl; - tLocker.reFreshLocker(readByte); - decodeCameraCMD(readByte); - workThread->snDatas.checkSnFromWaittingVec(readByte); -} - -void MyIoThread::setIOMutex(QMutex *mutex) -{ - m_iomutex = mutex; -} - -void MyIoThread::setStationObject( QJsonObject camera_obj) -{ - - QVector camera_trigger_cmds; - QJsonArray stationlist = camera_obj.value("stationlist").toArray(); - - for ( int i = 0; i < stationlist.size(); i++ ) - { - QJsonObject station_obj = stationlist.at(i).toObject(); - QJsonArray cameramodulelist = station_obj.value("cameramodulelist").toArray(); - QString stationKey = station_obj.value("key").toString(); -#if 1 - for( int val = 0 ; val < cameramodulelist.size();val++) - { - trigger_camera_pack *m_pack = new trigger_camera_pack; - QJsonObject m_obj = cameramodulelist.at(val).toObject(); - QString trigger_camera_name = m_obj.value("key").toString(); - QJsonArray trigger_camera_startpos = m_obj.value("trigger_camera_startpos").toArray(); - QJsonArray plc_feedback_msg = m_obj.value("plc_feedback_msg").toArray(); - QString read_clear_plc_startpos = m_obj.value("read_clear_plc_startpos").toString(); - QString clear_plc_data_msg = m_obj.value("clear_plc_data_msg").toString(); - QString clear_camera_startpos_flag = m_obj.value("clear_camera_startpos_flag").toString(); - if(stationKey == m_stationKey) - m_StationCameraIndexMap.insert(trigger_camera_name, 0); - // 添加相机名称 - if ( !trigger_camera_name.isEmpty() ) - m_pack->trigger_camera_name = trigger_camera_name; - - if ( !trigger_camera_startpos.isEmpty()) - { - m_pack->trigger_camera_startpos = trigger_camera_startpos; - } - - if ( !plc_feedback_msg.isEmpty() ) - { - m_pack->plc_feedback_msg = plc_feedback_msg; - } - - if( !read_clear_plc_startpos.isEmpty()) - { - QString clear_startpos = read_clear_plc_startpos.split("_")[0]; - QString clear_value = read_clear_plc_startpos.split("_")[1]; - if ( !clear_startpos.isEmpty() && !clear_value.isEmpty()) - { - m_pack->read_clear_plc_startpos = clear_startpos; - m_pack->read_clear_plc_value = clear_value; - } - } - - if( !clear_plc_data_msg.isEmpty()) - { - m_pack->clear_plc_data_msg = clear_plc_data_msg; - } - - // 是否清楚当前点位的信号 - if( !clear_camera_startpos_flag.isEmpty()) - { - m_pack->clear_camera_startpos_flag = clear_camera_startpos_flag; - } - - vector_camera_signal_pack_ptr.push_back(m_pack); // 添加 - } - - - // -#endif - //if (stationKey == m_stationKey) - //{ - //获取write指令 - QJsonObject writeCmdObject = station_obj.value("plcwrite_area").toObject(); - QString snOkCmd = writeCmdObject.value("snOkCmd").toString(); - QString snErrorCmd = writeCmdObject.value("snErrorCmd").toString(); - QString overOkCmd = writeCmdObject.value("overOkCmd").toString(); - QString overErrorCmd = writeCmdObject.value("overErrorCmd").toString(); - QString dateCmd = writeCmdObject.value("dateCmd").toString(); - writeCmdMap.insert("snOkCmd", snOkCmd); - writeCmdMap.insert("snErrorCmd", snErrorCmd); - writeCmdMap.insert("overOkCmd", overOkCmd); - writeCmdMap.insert("overErrorCmd", overErrorCmd); - writeCmdMap.insert("dateCmd", dateCmd); - - //qDebug() << m_stationKey; - m_cameralist = cameramodulelist; - cameraSize = cameramodulelist.size(); - //qDebug() << cameraSize; - readPlcCmd = station_obj.value("plcread_area").toObject(); - m_readAllCmd = readPlcCmd.value("finstcp_readAllCmd").toString(); - writePlcCmd = station_obj.value("plcwrite_area").toObject(); - //} - //addReadAndWritePlcCmd(stationKey, readPlcCmd, writePlcCmd); - } -} - -void MyIoThread::writeSnFromString(string SN, int startPos, bool highLowConversion) -{ - std::vectorasciiCodes; - for (auto a : SN) - asciiCodes.push_back(toascii(a)); - if (highLowConversion == false) - for (int i = 0; i < asciiCodes.size(); i += 2) - { - if (i != asciiCodes.size() - 1) - bridge.back.sendFinsMsg("write_DM" + QString::number(startPos + i / 2) + "_" + QString::number(asciiCodes[i + 1] * 256 + asciiCodes[i]));//SN - else - bridge.back.sendFinsMsg("write_DM" + QString::number(startPos + i / 2) + "_" + QString::number(asciiCodes[i] * 256));//SN - } - else - for (int i = 0; i < asciiCodes.size(); i += 2)//未测试 - { - if (i != asciiCodes.size() - 1) - bridge.back.sendFinsMsg("write_DM" + QString::number(startPos + i / 2) + "_" + QString::number(asciiCodes[i] * 256));//SN - else - bridge.back.sendFinsMsg("write_DM" + QString::number(startPos + i / 2) + "_" + QString::number(asciiCodes[i + 1] * 256 + asciiCodes[i]));//SN - } -} - -void writeToDataSheetCSV(bool isOK) -{ - QDateTime currentDateTime = QDateTime::currentDateTime(); - //年-月-日 - QString ymd = currentDateTime.toString("yyyy-MM-dd"); - int h = currentDateTime.time().hour(); - string hour; - if (h < 10) - hour = "0" + to_string(h); - else - hour = to_string(h); - - QStringList dataList; - QString filePathCurrentDay =".//DataSheet//statics_" + ymd+".csv"; - // 创建CSV文件 - QFile file(filePathCurrentDay); - if (!file.exists()) - { - QFile sourceFile(".//DataSheet//statics_default.csv"); - if (!sourceFile.open(QIODevice::ReadOnly)) { - qDebug() << "无法打开源文件: " << sourceFile.errorString(); - } - else - { - QString destinationFilePath = filePathCurrentDay; - QFile destinationFile(destinationFilePath); - if (!destinationFile.open(QIODevice::WriteOnly)) { - qDebug() << "无法打开目标文件: " << destinationFile.errorString(); - } - else - { - QByteArray fileData = sourceFile.readAll(); - destinationFile.write(fileData); - sourceFile.close(); - destinationFile.close(); - } - } - } - QList data; - QStringList headers; - // 打开CSV文件并写入数据 - if (file.open(QIODevice::ReadOnly | QIODevice::Text)) - { - QTextStream stream(&file); - ///// - - while (!stream.atEnd()) { - QString line = stream.readLine(); - QStringList fields = line.split(','); - - if (headers.isEmpty()) { - // 如果headers为空,则当前行为标题行 - headers = fields; - } - else { - data.append(fields); - } - } - - for (int i = 0; i < data.size(); i++) { - QStringList& row = data[i]; - - // 在当前行中检索字符串 - if (row[0].contains(QString::fromStdString(hour), Qt::CaseInsensitive)) { - // 匹配到字符串,进行修改 - if (row.size() >= 4) - { - int goods = row[1].toInt(); - int bads = row[2].toInt(); - double rate = row[3].toDouble(); - if (isOK == true) - goods++; - else - bads++; - rate = row[1].toDouble() / (row[1].toDouble() + row[2].toDouble()); - rate = round(rate * 100) / 100; - row[1] = QString::number(goods); - row[2] = QString::number(bads); - row[3] = QString::number(rate*100); - } - } - - } - } - file.close(); - QFile writeFile(filePathCurrentDay); - if (!writeFile.open(QIODevice::WriteOnly | QIODevice::Text)) { - qDebug() << "Error opening file for writing."; - } - - QTextStream out(&writeFile); - // 写入标题行 - out << headers.join(",") << "\n"; - - // 写入修改后的数据行 - for (const auto& row : data) { - out << row.join(",") << "\n"; - } - - writeFile.close(); - - //else - // qWarning() << "无法打开CSV文件:" << filePath; - -} -/// -/// 检测QByteArray中某位置的值是否和输入一样,使用了绝对位置 -/// -/// 绝对位置 -/// 想判断的值 -/// QByteArray -/// -bool MyIoThread::checkTrigger(int dmPos, int value, QByteArray byte) -{ - int triggerPos = (dmPos - bridge.back.json.tcp.startPos) * 2 + 1; - if (byte.size() < triggerPos) - return false; - if (byte.at(triggerPos) == value) - { - if (tLocker.checkLocker(triggerPos) == false) - return false; - tLocker.adddLocker(triggerPos); - return true; - } - else - return false; -}/// -int MyIoThread::getValue(int dmPos, QByteArray byte) -{ - int triggerPos = (dmPos - bridge.back.json.tcp.startPos) * 2; - if (byte.size()/2 < triggerPos) - return false; - int val1 = byte.at(triggerPos) * 256; - int val2 = static_cast( byte.at(triggerPos + 1)); - return val1 + val2; -}/// -/// 目前只负责检测fins信号,拍照和传递数据到等待队列 -/// -/// 从reciveCommond传入,从fins(JSON->finstcp_readAllCmd)读取的数据 - -correctionStruct* correctionData=nullptr; -void MyIoThread::decodeCameraCMD(QByteArray byte) -{ - if (byte.isEmpty()) - return; - double cameraData = 0; - if (checkTrigger(1, 1, byte) == true) - { - correctionData = new correctionStruct(); - correctionData->in_X_X0Y = { -258.71,-447.8,-447.2 }; - correctionData->in_Y_X0Y = { -1099.67,-1133.42,-938.83 }; - correctionData->in_Z_X0Y = { 711.77,711.62,711.730000 }; - correctionData->in_Z_X0Y_Value = { 63.9795,64.5333,65.859300 }; - - correctionData->in_X_X0Z = { -402.3,-455.91,-236.75 }; - correctionData->in_Y_X0Z = { -539.46,-536.21,-536.2 }; - correctionData->in_Z_X0Z = { -418.88,425.12,425.13 }; - correctionData->in_Y_X0Z_Value = {118.15,-228.19,-256.5 }; - - correctionData->in_X_Y0Z = { 395.250000,395.23,328.34 }; - correctionData->in_Y_Y0Z = { -1147.29,-1147.28,-940.82 }; - correctionData->in_Z_Y0Z = { 118.15,-228.19,-256.5 }; - correctionData->in_X_Y0Z_Value = { -36.652200,-36.7302,41.0436 }; - detData* data = dManager.insertDetData("Camera1", "correctionDataThread", "TEST", 0); - data->correctionData = correctionData; - workThread->addTask(data);//添加任务 - correctionData = nullptr; - } - - //总流程开始,机器人发送1至寄存器259 - - //上位机确认OK之后,清零寄存器259,并发送1至寄存器260 - //如产品型号为Product_1且为正面,则上位机发送1至寄存器256,发送0至寄存器257 - //之后机器人确认之后需发送测量点位总数具体值至寄存器258 - if (checkTrigger(259, 1, byte) == true) - { - bridge.back.sendFinsMsg("write_short_259_0");//触发信号清零 - bridge.back.sendFinsMsg("write_short_260_1");//开始检测信号 - } - - //机器人激光当前点位 264 1...9 - //机器人到达激光点位1时,寄存器261至1,264至1,并将机器人在激光点位1坐标XYZ按照定义规则,保存进寄存器265~270 - - //上位机确认机器人到达点位1(264)时,确认OK后,寄存器262至1,261至0,取点完成后,发送寄存器263至1 - if (checkTrigger(261, 1, byte) == true)//读取请求地址 - { - int armPos = getValue(264, byte); - - int xValue1 = getValue(265, byte); - int xValue2 = getValue(266, byte); - int xValue3 = getValue(267, byte); - - int yValue1 = getValue(268, byte); - int yValue2 = getValue(269, byte); - int yValue3 = getValue(270, byte); - - int zValue1 = getValue(271, byte); - int zValue2 = getValue(272, byte); - int zValue3 = getValue(273, byte); - - double xValue = (xValue1 == 1 ? 1 : -1) * ((double)xValue2 + ((double)xValue3) / (std::pow(10, to_string(xValue3).length()))); - double yValue = (yValue1 == 1 ? 1 : -1) * ((double)yValue2 + ((double)yValue3) / (std::pow(10, to_string(yValue3).length()))); - double zValue = (zValue1 == 1 ? 1 : -1) * ((double)zValue2 + ((double)zValue3) / (std::pow(10, to_string(zValue3).length()))); - double rangeData = threadlist[0]->getValueFromCamera(); - - if (armPos == 1)//第一次 - correctionData = new correctionStruct(); - if (correctionData != nullptr) - { - if (armPos <= 3) - { - correctionData->in_X_X0Y.push_back(xValue); - correctionData->in_Y_X0Y.push_back(yValue); - correctionData->in_Z_X0Y.push_back(zValue); - correctionData->in_Z_X0Y_Value.push_back(rangeData); - } - else if (armPos <= 6) - { - correctionData->in_X_X0Z.push_back(xValue); - correctionData->in_Y_X0Z.push_back(yValue); - correctionData->in_Z_X0Z.push_back(zValue); - correctionData->in_Y_X0Z_Value.push_back(rangeData); - } - else if (armPos <= 9) - { - correctionData->in_X_Y0Z.push_back(xValue); - correctionData->in_Y_Y0Z.push_back(yValue); - correctionData->in_Z_Y0Z.push_back(zValue); - correctionData->in_X_Y0Z_Value.push_back(rangeData); - } - } - bridge.back.sendFinsMsg("write_short_261_0");//清零 - bridge.back.sendFinsMsg("write_short_262_1"); - bridge.back.sendFinsMsg("write_short_263_1"); - - //上位机校正完成,将寄存器274置为1,并将结果按照定义XYZ规则放入310~336中 - if (armPos == 9) - { - detData* data = dManager.insertDetData("Camera1", "correctionDataThread", "TEST", 0); - data->correctionData = correctionData; - workThread->addTask(data);//添加任务 - correctionData = nullptr; - } - } - - - - - //机器人到达激光点位9时,寄存器261至1,264至9,并将机器人在激光点位9坐标XYZ按照定义规则,保存进寄存器265~270 - - - - - - if (checkTrigger(300, 1, byte) == true) - { - bridge.back.sendFinsMsg("write_short_300_0");//触发信号清零 - bridge.back.sendFinsMsg("write_short_301_1");//开始检测信号 - int Pos = getValue(303, byte); - } - - - //if (checkTrigger(850, 1, byte) == true)//正面拍照信号 - //{ - // //int snPos = 9300; - // bridge.back.sendFinsMsg("write_short_850_0");//触发信号清零 - // bridge.back.sendFinsMsg("write_short_851_10");//开始检测信号 - // //bridge.back.sendFinsMsg("write_short_851_100");//开始检测信号 - // /////////数据初始化//////// - // //detData* data = dManager.insertDetData("Camera1", "Thread1", workThread->snDatas.readSnFromQByteArray(byte, snPos, false, true, 0), 0); - // lastSn = "none" + to_string(clock()); - // detData* data = dManager.insertDetData("Camera1", "Thread1", lastSn, 0); - // //data->imgs.push_back(cv::imread("E://SSDBackup//1-12//18H//none419774//1.bmp",-1)); - // //data->imgs.push_back(cv::imread("E://SSDBackup//1-12//18H//none419774//2.bmp",-1)); - // //qDebug() << "[ Station 10 ] " << QString::fromUtf8("2.5D1第一次拍照开始 timeCode:") << data->timeCode; - - // /////////SN码读取操作/////// - // //if (!data->SNcode.compare(snErrorsnError))//查不到SN,送到snWaittingVec继续查询 - // // workThread->snDatas.snWaittingVec.push_back({ data->timeCode ,data->SNcode,snPos }); - // ////////拍照//////////////// - // data->imgs.push_back(cv::imread("E:/Download/none337686/none314221/Camera1-0_time17-04-29.bmp", -1)); - // data->imgs.push_back(cv::imread("E:/Download/none337686/none314221/Camera1-1_time17-04-29.bmp", -1)); - // //threadlist[0]->takeImg(data->timeCode, MyThread::normal, "", data, ""); - // workThread->addTask(data);//添加任务 - // emit SendStationLabel(1);//播放动画 - //} - //if (checkTrigger(850, 10, byte) == true)//正面结束信号 - //{ - // bridge.back.sendFinsMsg("write_short_851_100");//触发信号清零 - //} - //if (checkTrigger(850, 2, byte) == true)//反面拍照信号 - //{ - // //int snPos = 9300; - // bridge.back.sendFinsMsg("write_short_850_0");//触发信号清零 - // bridge.back.sendFinsMsg("write_short_851_20");//开始检测信号 - // //bridge.back.sendFinsMsg("write_short_851_200");//开始检测信号 - // /////////数据初始化//////// - // //detData* data = dManager.insertDetData("Camera1", "Thread1", workThread->snDatas.readSnFromQByteArray(byte, snPos, false, true, 0), 0); - // if(lastSn =="") - // lastSn = "none" + to_string(clock()); - // detData* data = dManager.insertDetData("Camera1", "Thread2", lastSn, 0); - // lastSn == ""; - // //data->imgs.push_back(cv::imread("I://1-12//18H//none419774//1.bmp", -1)); - // //data->imgs.push_back(cv::imread("I://1-12//18H//none419774//2.bmp", -1)); - // //qDebug() << "[ Station 10 ] " << QString::fromUtf8("2.5D1第一次拍照开始 timeCode:") << data->timeCode; - - // /////////SN码读取操作/////// - // //if (!data->SNcode.compare(snErrorsnError))//查不到SN,送到snWaittingVec继续查询 - // // workThread->snDatas.snWaittingVec.push_back({ data->timeCode ,data->SNcode,snPos }); - // ////////拍照//////////////// - // threadlist[0]->takeImg(data->timeCode, MyThread::normal, "", data, ""); - // workThread->addTask(data);//添加任务 - // emit SendStationLabel(1);//播放动画 - //} - //if (checkTrigger(850, 20, byte) == true)//反面结束信号 - //{ - // bridge.back.sendFinsMsg("write_short_851_200");//触发信号清零 - //} - //if (checkTrigger(9400, 1, byte) == true)//汇总1 - //{ - // bridge.back.sendFinsMsg("write_DM9400_0"); - // ///////////将数据请求发往算法线程///////////// - // string SN=workThread->snDatas.readSnFromQByteArray(byte, 9500, -1, false, true, 0);//读SN码 - // /////////发送////////////// - // qDebug() << "汇总请求1 SN:" << QString::fromStdString(SN); - // cout << "summarry1 SN:" << SN <sql->selectAllData(SN);//请求数据库 - bool isOK = true; - //应该只有一个SN数据 - if (sqlData.rowDatas.size() == 0) - { - for (auto data : bridge.back.json.summaryData.datas) - { - QString messageBase = QString::fromStdString("writeInt_DM" + to_string(data.second.toInt() + offset) + "_"); - bridge.back.sendFinsMsg(messageBase + "-99"); // "空" - } - return; - } - for (auto data : sqlData.rowDatas[0]) { - auto it = bridge.back.json.summaryData.datas.find(QString::fromStdString(data.key)); - if (it != bridge.back.json.summaryData.datas.end()) - { - QThread::msleep(1); - int dmPos = it->second.toInt(); - std::string sqlValue = data.value; - - if (offset > 0)//执行偏移量操作 - dmPos += offset; - - if (!sqlValue.compare("NULL") || sqlValue.empty()) { - - QString finsSend("write_DM" + QString::number(dmPos) + "_-1"); - bridge.back.sendFinsMsg(finsSend); // "空" - //std::cout << " empty" << "SN" << SN << endl;// - } - else { - int value = stoi(sqlValue); - - if (value < 0) - value = -value; - if (value < 10) - { - QString finsSend("write_DM" + QString::number(dmPos) + "_" + QString::number(value)); - bridge.back.sendFinsMsg(finsSend); - } - else - { - QString finsSend("writeInt_DM" + QString::number(dmPos) + "_" + QString::number(value)); - bridge.back.sendFinsMsg(finsSend); - } - if (stoi(sqlValue) == 2) - isOK = false; - - } - } - } - writeToDataSheetCSV(isOK); -} -// 防重入 -void MyIoThread::checkReentrySign(QVector vec_value) -{ - for( int i = 0; i < vector_camera_signal_pack_ptr.size(); i++) - { - QJsonArray trigger_camera_startpos = vector_camera_signal_pack_ptr.at(i)->trigger_camera_startpos; - for ( int val = 0; val < trigger_camera_startpos.size(); val++ ) - { - QString trigger_startpos = trigger_camera_startpos.at(val).toString(); - QString m_startpos = trigger_startpos.split("_")[0]; - QString m_value = trigger_startpos.split("_")[1]; - int trigger_index = m_startpos.mid(3,m_startpos.length()-3).toInt(); - if(trigger_index < 0) - { - qCritical() << "[Error] " << " value is error! m_startpos:" << m_startpos; - } - else if( vec_value.size() > trigger_index ) - { - if ( vec_value.at(trigger_index) == 0 ) - { - // qDebug() << __FUNCTION__ << " line:" << " 00000 camera_reentry_sign:" << vector_camera_signal_pack_ptr.at(i)->camera_reentry_sign; - vector_camera_signal_pack_ptr.at(i)->camera_reentry_sign = 0; // 赋值为0 - // qDebug() << __FUNCTION__ << " line:" << " 11111 camera_reentry_sign:" << vector_camera_signal_pack_ptr.at(i)->camera_reentry_sign; - } - } - } - } -} - -void MyIoThread::checkTriggerCamera(QVector vec_value) -{ - for( int i = 0; i < vector_camera_signal_pack_ptr.size(); i++) - { - QString camera_key = vector_camera_signal_pack_ptr.at(i)->trigger_camera_name; - QJsonArray trigger_camera_startpos = vector_camera_signal_pack_ptr.at(i)->trigger_camera_startpos; - QJsonArray plc_feedback_msg = vector_camera_signal_pack_ptr.at(i)->plc_feedback_msg; // 反馈信号包 - for ( int val = 0; val < trigger_camera_startpos.size(); val++ ) - { - QString trigger_startpos = trigger_camera_startpos.at(val).toString(); - QString m_startpos = trigger_startpos.split("_")[0]; - QString m_value = trigger_startpos.split("_")[1]; - int trigger_index = m_startpos.mid(3,m_startpos.length()-3).toInt(); - if(trigger_index < 0) - { - qCritical() << "[Error] " << " value is error! m_startpos:" << m_startpos; - } - else if ( vec_value.size() > trigger_index ) - { - if ( vec_value.at(trigger_index) == m_value.toInt() && vector_camera_signal_pack_ptr.at(i)->camera_reentry_sign == 0 ) - { - vector_camera_signal_pack_ptr.at(i)->camera_reentry_sign = 1; // 放重入 赋值为1 - if(vector_camera_signal_pack_ptr.at(i)->clear_camera_startpos_flag == "true") - { - // 写清除当前信号 修改 - if ( checkCameraTriggerLastPos(camera_key,trigger_startpos) ) - { - QString clear_signal = trigger_startpos.split("_")[0]; - clear_signal = "write_" + clear_signal + "_0"; - QByteArray m_byte = clear_signal.toUtf8(); - if ( !bridge.back.sendFinsMsg(m_byte) ) - { - qCritical() << "[Error] " << " finstcp_ptr reciveData error! "; - return; - } - - // 写入反馈信号 - QString trigger_startpos_signal = trigger_startpos.split("_")[0]; - for ( auto iii = 0; iii < plc_feedback_msg.size(); iii++ ) - { - QStringList plc_feedback_msg_list = plc_feedback_msg.at(iii).toString().split("_"); - if(plc_feedback_msg_list.size() != 4) - { - qWarning() << "[Error] " << " plc_feedback_msg_list num is error! plc_feedback_msg_list num:" << plc_feedback_msg_list.length(); - } - else - { - if ( plc_feedback_msg_list.contains(trigger_startpos_signal) ) - { - // 发送反馈信号 - QString feedback_signal_type = plc_feedback_msg_list.at(1); - QString feedback_signal_pos = plc_feedback_msg_list.at(2); - QString feedback_signal_value = plc_feedback_msg_list.at(3); - QString send_msg = feedback_signal_type + "_" + feedback_signal_pos + "_" + feedback_signal_value; - QByteArray send_byte = send_msg.toUtf8(); - if ( !bridge.back.sendFinsMsg(send_byte) ) - { - qCritical() << "[Error] " << " finstcp_ptr reciveData error! "; - return; - } - } - } - } - } - } - else - { - // 写反馈信号 - QString clear_plc_data_msg = vector_camera_signal_pack_ptr.at(i)->clear_plc_data_msg; - QByteArray m_byte = clear_plc_data_msg.toUtf8(); - if ( !bridge.back.sendFinsMsg(m_byte) ) - { - qCritical() << "[Error] " << " finstcp_ptr reciveData error! "; - return; - } - } - - // 添加被触发的相机名称 - QString trigger_camera_name = vector_camera_signal_pack_ptr.at(i)->trigger_camera_name; - if ( !trigger_camera_name.isEmpty() ) - { - QByteArray camera_Byte = trigger_camera_name.toUtf8(); - IoCommondPack.append(camera_Byte); - } - } - } - } - } -} - -bool MyIoThread::checkCameraTriggerLastPos ( QString camera_key,QString camera_trigger_pos) -{ - // qDebug() << " ------------------------------- checkCameraTriggerLastPos camera_key:" << camera_key << " camera_trigger_pos:" << camera_trigger_pos; - int camera_index = 0; - for ( int i = 0; i < m_cameralist.size(); i++ ) - { - QJsonObject m_obj = m_cameralist.at(i).toObject(); - QString camera_key = m_obj.value("key").toString(); - QJsonArray trigger_camera_startpos = m_obj.value("trigger_camera_startpos").toArray(); - for ( int val = 0; val < trigger_camera_startpos.size(); val++ ) - { - QString trigger_pos = trigger_camera_startpos.at(val).toString(); - if ( camera_trigger_pos == trigger_pos ) - { - camera_index = i; - // qDebug() << " ------------- camera_index:" << camera_index ; - break; - } - } - } - QJsonObject m_obj = m_cameralist.at(camera_index).toObject(); - QString m_key = m_obj.value("key").toString(); - // qDebug() << " ------------- camera_key:" << camera_key << " ----------- m_key:" << m_key; - if( camera_key == m_key ) - { - return true; - } - return false;; -} - -void MyIoThread::setReadAndWritePlcCmd( QJsonObject readArray, QJsonObject writeArray) -{ - readPlcCmd = readArray; - writePlcCmd = writeArray; -} - -void MyIoThread::setCameraIndexMap( QMap cameraIndexMap) -{ - m_StationCameraIndexMap = cameraIndexMap; - m_StationCameraIndexMap.detach(); -} - -void MyIoThread::clearPlcData(QVector vec_value ) -{ - for ( int i = 0; i < vector_camera_signal_pack_ptr.size(); i++ ) - { - QString read_clear_plc_startpos = vector_camera_signal_pack_ptr.at(i)->read_clear_plc_startpos; - QString read_clear_plc_value = vector_camera_signal_pack_ptr.at(i)->read_clear_plc_value; - QString clear_plc_data_msg = vector_camera_signal_pack_ptr.at(i)->clear_plc_data_msg; - int trigger_index = read_clear_plc_startpos.mid(3,read_clear_plc_startpos.length()-3).toInt(); - if ( trigger_index < 0 ) - { - qCritical() << "[Error] " << " value is error! read_clear_plc_startpos:" << read_clear_plc_startpos; - } - else if( vec_value.size() > trigger_index ) - { - if ( vec_value.at(trigger_index) == read_clear_plc_value.toInt() ) - { - // 所有位归零 - if(!clear_plc_data_msg.isEmpty()) - { - QByteArray mm_byte = clear_plc_data_msg.toUtf8(); // 0-9 - if ( !bridge.back.sendFinsMsg(mm_byte) ) - { - qCritical() << "[Error] " << " finstcp_ptr reciveData error!"; - } - } - } - } - } -} - -/*************************读取io包******************************/ -ReadPackThread::~ReadPackThread() -{ - runflag = false; - exit(); - wait(1); - qDebug() << "[INFO] " << "ReadPackThread delete success! " ; -} - -void ReadPackThread::run() -{ - while (true) - { - if(runflag) - { - return; - } - - while (!IoCommondPack.isEmpty()) - { - QMutexLocker locker ( m_mutex ); - QByteArray byte = IoCommondPack.dequeue(); - QString cameraName = QString(byte); - } - QThread::msleep(1); - } -} - -bool ReadPackThread::runModule(QString cameraName) -{ - // qDebug() << __FUNCTION__ << " line:" << __LINE__ << " cameraName:" << cameraName << " threadlist size:" << threadlist.size(); - try - { - for ( int i = 0; i < threadlist.size();i++ ) - { - QString name = threadlist.at(i)->getName(); - if ( name == cameraName ) - { - threadlist.at(i)->start(); - break; - } - } - } - catch ( QString ev ) - { - qCritical() << "[Error] " << " ev:" << ev; - } - return true; -} -///////////////////DEBUG//////////////////////////////// \ No newline at end of file diff --git a/HanddleAI/HandleAiUi-new/back/myiothread.h b/HanddleAI/HandleAiUi-new/back/myiothread.h deleted file mode 100644 index 86ae3c57..00000000 --- a/HanddleAI/HandleAiUi-new/back/myiothread.h +++ /dev/null @@ -1,150 +0,0 @@ -#ifndef MYIOTHREAD_H -#define MYIOTHREAD_H -#include -#include -#include "camera_thread.h" -#pragma execution_character_set("utf-8") -#include -#include -#include -#include -#include - -////////////此线程用于处理plc信号,连接plc与算法///////// -extern QList threadlist; -static QQueue IoCommondPack; // 读取 -// 触发相机 -typedef struct { - QString trigger_camera_name; // 被触发的相机名称 - QJsonArray trigger_camera_startpos; // 触发相机的起始位置 - QJsonArray plc_feedback_msg; // 拍照到位给plc反馈信息 - QString read_clear_plc_startpos; // 读取plc清理任务的起始位置 - QString read_clear_plc_value; // 读取plc清理任务的值 - QString clear_plc_data_msg; // 清理plc数据的数据 - QString clear_camera_startpos_flag; // 是否是清除当前点位的信号 - int camera_reentry_sign = 0; // 相机拍照放重入标识符 -}trigger_camera_pack; -//防止重复触发 -class triggerLocker -{ -public: - triggerLocker() - { - - } - ~triggerLocker() - { - lockerList.clear(); - } - bool checkLocker(int input) - { - for (int i = 0; i < lockerList.size(); i++) - { - if (input == lockerList[i]) - { - return false; - } - } - return true; - } - void reFreshLocker(QByteArray byte) - { - for (int i = 0; i < lockerList.size(); i++) - { - if (byte.at(lockerList[i]) == 0) - { - lockerList.removeAt(i); - } - - } - } - void adddLocker(int input) - { - lockerList.push_back(input); - } - QListlockerList; -private: - -}; -// IO线程 -class MyIoThread : public QThread -{ - Q_OBJECT -public: - explicit MyIoThread(QObject* parent = nullptr) :mm_obj(parent) {} - ~MyIoThread(); - void run(); -// imageReciveServer* _imageReciveServer; - //void setFinsTcpPtr(Base* finsPtr) { finstcp_ptr = finsPtr; } - void setRunStop() { io_runflag = false; } - void setIOMutex(QMutex* mutex); - void setReadAllCmd(QString cmd) { readAll_cmd = cmd; }; // 设置 从起始位开始都读取的指令,示例:readAll_DM100_50 - void setStationObject(QJsonObject camera_obj); - void checkReentrySign(QVector); // 防重入检查标识符 - void checkTriggerCamera(QVector); // 触发相机检查 - void clearPlcData(QVector); // 清理plc中的数据 - void reciveCommond(); - void writeCommond(); - void decodeCameraCMD(QByteArray byte); - bool checkCameraTriggerLastPos(QString camera_key, QString trigger_pos); // 检查当前触发的位置是否是最后一个相机 - // void decodeCameraCMDBak(QByteArray byte); // 备用 - void setTcpInitPara(QByteArray tcpInitPara) { m_tcpInitPara = tcpInitPara; }; - void setReadAndWritePlcCmd(QJsonObject readArray, QJsonObject writeArray); - void setCameraIndexMap(QMap cameraIndexMap); - void setStationKey(QString stationKey) { m_stationKey = stationKey; } - void setheartCmd(QString heartCmd) { m_heartCmd = heartCmd; } - void setType(QString io_type) { m_IoType = io_type; } - void writeSnFromString(string SN, int startPos, bool highLowConversion); - void requestSummary(std::string sn, int offset); - detDataManager dManager; - threadManager* workThread ; - bool barcodeScanLock = false; -private: - triggerLocker tLocker;//防止重复触发 - int getValue(int dmPos, QByteArray byte); - bool checkTrigger(int dmPos, int value, QByteArray byte); - bool io_runflag = true; - //Base* finstcp_ptr = nullptr; - QObject* mm_obj = nullptr; - QMutex* m_iomutex = nullptr; - QString readAll_cmd = "readAll_DM100_50"; - QJsonArray m_cameralist; - std::vector vec_mat; - QVector vector_camera_signal_pack_ptr; // 相机信号包 - QByteArray m_tcpInitPara; - QJsonObject readPlcCmd; - QJsonObject writePlcCmd; - QMap m_StationCameraIndexMap; - QMap writeCmdMap; - QString m_stationKey; - QString m_heartCmd; - int cameraSize = 0; - QString m_IoType = ""; - QString m_readAllCmd = ""; - QTimer* m_timer = nullptr; - bool snDeleteFlag = true; - - -signals: - void SendStationLabel(int label);//label =1,2,0 0表示暂停,1,2表示第一次第二次拍照 - void checkSn_signal(QString,int*); -}; - -// 读取IO线程的包 -class ReadPackThread : public QThread -{ - Q_OBJECT -public: - explicit ReadPackThread(QObject* parent = nullptr) :read_obj(parent) {} - ~ReadPackThread(); - void run(); - void setMutex(QMutex* mutex) { m_mutex = mutex; }; - bool runModule(QString cameraName); -private: - bool runflag = false; - QObject* read_obj; - QMutex* m_mutex; -}; - - -#endif // MYIOTHREAD_H diff --git a/HanddleAI/HandleAiUi-new/back/processtask.cpp b/HanddleAI/HandleAiUi-new/back/processtask.cpp deleted file mode 100644 index 196a5651..00000000 --- a/HanddleAI/HandleAiUi-new/back/processtask.cpp +++ /dev/null @@ -1,1347 +0,0 @@ -#include "processtask.h" -#include "hpromptwidget.h" -#include "FrontendBackendBridge.h" -#include "fileManager.h" -QList threadlist; -QList myIoThreadList; -QMap station_list; -ResultSnData* resultSnData = nullptr; - -ProcessTask::ProcessTask(QObject* parent) : QObject(parent) -{ - m_mutex = new QMutex; - - resultSnData = new ResultSnData(); - //初始化IO线程 - m_iomutex = new QMutex; - - //初始化io读取包的线程 - m_readThread = new ReadPackThread(this); - m_readThread->setMutex(m_mutex); - - deletePicTimer = new QTimer; - deletePicTimer->setInterval(200); - autoDeleteThread=new autoDelete(bridge.back.json.imgSavePath+"//yuantu",autoDelete::sizeOver, deletePicTimer); - deletePicTimer->start(); - -} - -ProcessTask::~ProcessTask() -{ - clearTask(); - - if (m_readThread) - { - m_readThread->deleteLater(); - m_readThread = nullptr; - } - - if (m_mutex) - { - delete m_mutex; - m_mutex = nullptr; - } - if (m_iomutex) - { - delete m_iomutex; - m_iomutex = nullptr; - } - if (deletePicTimer) - { - delete deletePicTimer; - deletePicTimer = nullptr; - } - qDebug() <<"[INFO] " << " ~ProcessTask success"; -} - -void ProcessTask::setJsonObject(QJsonObject obj) -{ - if (obj.isEmpty()) - { - qCritical() << "[Error] " << " obj is null! "; - return; - } - cameraObj = obj; -} - -// 任务初始化 -int ProcessTask::initTask() -{ - try - { - //tcplist_array = cameraObj.value("tcplist").toArray(); - //stationlist_array = cameraObj.value("stationlist").toArray(); - //if (stationlist_array.isEmpty() || tcplist_array.isEmpty()) - //{ - // qCritical() << "[Error] " << QString::fromUtf8("配置文件属性缺失tcplist,stationlist!"); - // //return -1; - //} - // 加载所有模块 - int res = loadAllModule(); - if (res ==OK) - { - qDebug() << "[INFO] " << QString::fromUtf8("所有模块加载成功!"); - setLoadFlag(1); - } - else - { - qCritical() << "[Error] " << QString::fromUtf8(" 模块加载失败!"); - setLoadFlag(0); - return res; - } - res = initAllModule(); - if (res == OK) - { - qDebug() << "[INFO] " << QString::fromUtf8("所有模块初始化成功!"); - setInitFlag(1); - } - else - { - qCritical() << "[Error] " << QString::fromUtf8("模块初始化失败!"); - setInitFlag(0); - return res; - } - // 创建线程 - res = createModuleThread(); - if (res == OK) - { - qDebug() << "[INFO] " << QString::fromUtf8("模块线程创建成功!"); - setCreateThread(1); - } - else - { - qCritical() << "[Error] " << QString::fromUtf8("模块线程创建失败!"); - setCreateThread(0); - return res; - } - } - catch (QString ev) - { - qCritical() << "[Error] " << " ev:" << ev; - return -1; - } - qDebug() << "[INFO] " << QString::fromUtf8("软件初始化成功!"); - return 0; -} - -QList ProcessTask::getModuleList(int thread_index,QString stationKey) -{ - QList m_module_list; - for (int i = 0; i < module_list.size(); i++) - { - QString task_thread_index = module_list.at(i).task_thread_index; - QString m_stationKey = module_list.at(i).m_stationKy; - if (task_thread_index.toInt() == thread_index && m_stationKey == stationKey) - m_module_list.append(module_list.at(i)); - } - return m_module_list; -} - -QJsonArray ProcessTask::getTaskAlgorithmObject(int thread_index, QJsonArray m_array) -{ - QJsonArray array; - for (int i = 0; i < m_array.size(); i++) - { - QJsonObject obj = m_array.at(i).toObject(); - QString task_thread_index = obj.value("task_thread_index").toString(); - if (task_thread_index.toInt() == thread_index) - array.append(obj); - } - return array; -} - -void ProcessTask::clearData() -{ - QStringList keys = station_list.keys(); - for (int i = 0; i < keys.size(); i++) - { - station_list.value(keys[i])->clearData(); - } -} - -QJsonObject ProcessTask::getFinsTcpObject(QJsonArray array) -{ - QJsonObject m_obj; - for (int i = 0; i < array.size(); i++) - { - QJsonObject obj = array.at(i).toObject(); - QString key = obj.value("key").toString(); - if (key == "finstcp") - { - return obj; - } - } - return m_obj; -} - -int ProcessTask::createModuleThread() -{ - try - { - if (modulethread_flag == 1) - { - qDebug() << "[INFO] " << " all module thread start ! "; - return OK; - } - - /////////////////////////////////////////////////////////// - bridge.back.setFins(finstcp_ptr); - //SETTING.json - ////////////////////相机初始化/////////////////////////// - for (auto val = 0; val < bridge.back.json.camera.cameraList.size(); val++) - { - QString connectionName = bridge.back.json.camera.cameraList[val].connectionName; - QString serialNum = bridge.back.json.camera.cameraList[val].serialNum; - QString triggermode = bridge.back.json.camera.cameraList[val].triggermode; - if (connectionName.isEmpty() || triggermode.isEmpty()) - { - qCritical() << "[Error] " << " key or type is null"; - return THREAD_CAMERA_FAILURE; - } - // 设置 MyModule - MyModule camera_Module = getModule(connectionName); // 获取加载好的module - - // 创建相机线程 - MyThread* m_thread = new MyThread(this); - //m_thread->setSaveImage(saveImage); - m_thread->setModule("", connectionName, triggermode, camera_Module); - m_thread->setMutex(m_mutex); // 设置锁 - m_thread->showIndex = val; - threadlist.append(m_thread); - connect(m_thread, &MyThread::mvDisconnect, [=]() { - emit mvDisconnect(connectionName);//0106 相机断连弹窗 - }); - } -#if 1 - MyIoThread* m_IoThread = new MyIoThread(); - m_IoThread->setIOMutex(m_iomutex); - //m_IoThread->_imageReciveServer = &_imageReciveServer; - connect(m_IoThread, &MyIoThread::SendStationLabel, this, &ProcessTask::SendStationLabel); - myIoThreadList.append(m_IoThread); - - MyIoThread* m_IoThreadHeart = new MyIoThread(); - //m_IoThread->setIOMutex(m_iomutex); - //m_IoThread->setheartCmd(m_heartCmd); - m_IoThreadHeart->setType("Heart"); - myIoThreadList.append(m_IoThreadHeart); -#endif -#if 0 - //CMAERA_CFG - /////////////////////////////////////////////////////////////////// - for (int i = 0; i < stationlist_array.size(); i++) - { - - QJsonObject station_obj = stationlist_array.at(i).toObject(); - QString station_name = station_obj.value("key").toString(); -#if 0 - // 设置相机 - QJsonArray cameramodulelist = station_obj.value("cameramodulelist").toArray(); - for (auto val = 0; val < cameramodulelist.size(); val++) - { - QJsonObject camera_obj = cameramodulelist.at(val).toObject(); - QString key = camera_obj.value("key").toString(); - QString type = camera_obj.value("type").toString(); - if (key.isEmpty() || type.isEmpty()) - { - qCritical() << "[Error] " << " key or type is null"; - return false; - } - // 设置 MyModule - MyModule camera_Module = getModule(key); // 获取加载好的module - - // 创建相机线程 - MyThread* m_thread = new MyThread(this); - m_thread->setSaveImage(saveImage); - //m_thread->setModule(station_name, key, type, camera_Module, camera_obj); - m_thread->setMutex(m_mutex); // 设置锁 - m_thread->showIndex = val; - //m_thread->setSerialPorts(QSerialPorts); - threadlist.append(m_thread); - connect(m_thread, &MyThread::mvDisconnect, [=]() { - emit mvDisconnect(station_name+key);//0106 相机断连弹窗 - }); - } -#endif - // 创建黑匣子线程 - -#if 0 - QJsonArray algorithmlist = station_obj.value("algorithmlist").toArray(); - for (auto val = 0; val < algorithmlist.size(); val++) - { - QJsonObject algorithm_obj = algorithmlist.at(val).toObject(); - QString key = algorithm_obj.value("key").toString(); - QJsonArray trigger_conditions = algorithm_obj.value("trigger_conditions").toArray(); - for (int m = 0; m < trigger_conditions.size(); m++) - { - QJsonObject trigger_condition = trigger_conditions.at(m).toObject(); - QJsonArray triggerCondition = trigger_condition.value("trigger_condition").toArray(); - HDataIntegration* dataIntegrationThread = new HDataIntegration(); - dataIntegrationThread->setSavePath(m_savePath); - dataIntegrationThread->setStationKey(station_name); - dataIntegrationThread->setAlgorithmKey(key); - dataIntegrationThread->setTriggerCondition(triggerCondition); - dataIntegrationThread->init(station_obj); - dataIntegrationThread_list.append(dataIntegrationThread); - } - - } - - // 创建任务线程 - int task_thread_num = station_obj.value("task_thread_num").toString().toInt(); - for (int val = 0; val < task_thread_num; val++) - { - QJsonArray m_array = getTaskAlgorithmObject(val, algorithmlist); - QList m_mymodule = getModuleList(val, station_name); - - taskThread* m_task = new taskThread(this); - m_task->setFinsTcpPtr(finstcp_ptr); - m_task->initTaskThread(val, station_name, m_array, m_mymodule); - m_task->setMutex(m_mutex); - - task_thread_list.append(m_task); - } -#endif - ///创建IO线程 - if (station_obj.contains("plcread_area")) - { - MyIoThread* m_IoThread = new MyIoThread(); - m_IoThread->setIOMutex(m_iomutex); - m_IoThread->setStationKey(station_name); - m_IoThread->setStationObject(cameraObj); - //m_IoThread->setFinsTcpPtr(finstcp_ptr); - connect(m_IoThread, &MyIoThread::SendStationLabel, this, &ProcessTask::SendStationLabel); - myIoThreadList.append(m_IoThread); - } - } - - //心跳线程 - MyIoThread* m_IoThread = new MyIoThread(); - m_IoThread->setIOMutex(m_iomutex); - m_IoThread->setStationObject(cameraObj); - //m_IoThread->setFinsTcpPtr(finstcp_ptr); - m_IoThread->setheartCmd(m_heartCmd); - m_IoThread->setType("Heart"); - myIoThreadList.append(m_IoThread); - - // 设置IOThread的读取指令 - //QJsonObject finstcp_obj = tcplist_array.first().toObject(); - //QString readAll_cmd = finstcp_obj.value("finstcp_readAllCmd").toString(); - //// QVector trigger_camera_vector = getCameraTriggerCmdArray(cameraObj); - //if (!readAll_cmd.isEmpty()) - //{ - // //m_IoThread->setReadAllCmd(readAll_cmd); - // //m_IoThread->setTriggerCmd(cameraObj); //设置所有相机的指令 - //} -#endif - } - catch (QString ev) { - qCritical() << "[Error] " << " ev:" << ev; - return ERROR_createModuleThread; - } - - qDebug() << "[INFO] " << " threadlist size:" << threadlist.size(); - return OK; -} - -// 获取 相处对应的 任务模块名称 -MyModule ProcessTask::getModule(QString keyIN) -{ - MyModule m_mod; - for (int i = 0; i < module_list.size(); i++) - { - QString key = module_list.at(i).key; - QString moduleName = module_list.at(i).moduleName; - if (!key.compare(keyIN)) - return module_list.at(i); - } - return m_mod; -} - -bool ProcessTask::startTask() -{ - if (isStartThread) - return false; - qDebug() << "[INFO] " << " start all thread!"; - - //io线程 - //m_IoThread->start(); - //m_readThread->start(); - //开启IO线程 - foreach(MyIoThread * m_thread, myIoThreadList) - { - qDebug() << "[INFO] " << " start io thread!"; - m_thread->start(); - } - - Sleep(2000); - clearData(); - - // 开启所有线程 - foreach(MyThread * m_thread, threadlist) - { - if (m_thread->getType().contains("algorithm")) - { - qDebug() << "[INFO] " << "-- threadname:" << m_thread->getName(); - m_thread->start(); // 运行所有线程 - } - else if (m_thread->getType().contains("camera") && !m_thread->getTriggerModel().contains("software")) - { - m_thread->start(); - } - } - - Sleep(2000); - clearData(); - - // 开启任务线程 - foreach(taskThread* m_thread, task_thread_list) - { - m_thread->start(); - } - - // 开启黑匣子线程 - //foreach(HDataIntegration * m_thread, dataIntegrationThread_list) - //{ - // m_thread->start(); - //} - - isStartThread = true; - - return true; -} - -int ProcessTask::initAllModule() -{ - qDebug() << "[INFO] " << " initAllModule start!"; - try - { - if (init_flag == 1) - { - qDebug() << "[Error] " << " all module inited!"; - return OK; - } - - std::vector vec_mat; - QJsonObject finstcp_obj = tcplist_array.first().toObject(); - //QString ip_port = finstcp_obj.value("finstcp_init").toString(); - //m_heartCmd = finstcp_obj.value("heartCmd").toString(); - QString ip_port = bridge.back.json.tcp.finstcp_init; - m_heartCmd = bridge.back.json.tcp.heartCmd; - if (ip_port.isEmpty()) - { - qCritical() << "[TCP] " << " ip_port is null ! "; - return INIT_FINS_FAILURE; - } - QByteArray mm_byte = ip_port.toUtf8(); - if (!finstcp_ptr->reciveData(vec_mat, mm_byte)) - { - qCritical() << "[TCP] " << " finstcp reciveData error!"; - return INIT_FINS_FAILURE; - } - - QByteArray init_byte; - //QString finstcp_sleeptime = finstcp_obj.value("finstcp_sleeptime").toString(); - //QString finstcp_readnum = finstcp_obj.value("finstcp_readAllCmd").toString(); //读取包的数量 - //QString finstcp_writeType = finstcp_obj.value("writetype").toString(); // 写入类型 ushort 还是 short - QString finstcp_sleeptime = bridge.back.json.tcp.finstcp_sleeptime; - QString finstcp_readnum = bridge.back.json.tcp.finstcp_readAllCmd; //读取包的数量 - QString finstcp_writeType = bridge.back.json.tcp.writetype; // 写入类型 ushort 还是 short - if (finstcp_sleeptime.isEmpty() || finstcp_readnum.isEmpty()) - { - qCritical() << "[TCP] " << " finstcp_sleeptime or finstcp_readnum is null!"; - return INIT_FINS_FAILURE; - } - else - { - QStringList list = finstcp_readnum.split("_"); - if (list.size() < 3) - { - qCritical() << "[Error] " << " list size is error! size :" << list.size(); - return INIT_FINS_FAILURE; - } - else - { - qDebug() << "[INFO] " << " list:" << list; - QString initdata = "sleeptime_" + finstcp_sleeptime + "_readnum_" + list.last() + "_writetype_" + finstcp_writeType; - init_byte = initdata.toUtf8(); - //m_IoThread->setTcpInitPara(init_byte); - if (finstcp_ptr->initParas(init_byte)) - { - qDebug() << "[TCP] " << " finstcp initParas success!"; - //isInitTcp = false; - } - else - { - qCritical() << "[TCP] " << " finstcp initParas failed!"; - return INIT_FINS_FAILURE; - //Sleep(500); - //continue; - } - - } - } - - - // 初始化所有模块 - QByteArray mvDevices("m_stDevList"); - for (auto i = 0; i < module_list.size(); i++) - { - MyModule m_module = module_list.at(i); - QString moduleName = m_module.moduleName; - QString key = m_module.key; - //传递初始化参数 - QByteArray initByte = m_module.m_initByte; - std::vector vec_moduleMat; - QByteArray m_keyByte = key.toUtf8(); - //遍历是否有相同key的相机,如果有直接复制指针 - auto startTime = std::chrono::high_resolution_clock::now(); - for(int count=0;count(endTime - startTime); - std::cout << moduleName.toStdString() << " time: " << duration.count() << " ms model has copyed" << std::endl; - //return true; - } - } - - if (moduleName.contains("Camera")) - { - m_module.module_ptr->reciveData(vec_moduleMat, m_keyByte); //初始化相机 - if(mvDevices!="m_stDevList"&&moduleName.contains("MvCamera")) - m_module.module_ptr->reciveData(vec_moduleMat, mvDevices); - } - if (m_module.module_ptr->initParas(initByte)) - { - qDebug() << "[INFO] " << " initParas success!"; - } - else - { - qCritical() << "[Error] " << " moduleName:" << m_module.moduleName << " initParas failed!"; - return INIT_CAMERA_ALGO_FAILURE; - } - if (mvDevices == "m_stDevList" && moduleName.contains("MvCamera")) - m_module.module_ptr->sendData(vec_moduleMat, mvDevices); - auto endTime = std::chrono::high_resolution_clock::now(); - auto duration = std::chrono::duration_cast(endTime - startTime); - std::cout << moduleName.toStdString() <<" time: " << duration.count() << " ms" << std::endl; - } - - } - catch (QString ev) - { - qDebug() << "[Error] " << " ev:" << ev; - return ERROR_initAllModule; - } - qDebug() << "[INFO] " << " initAllModule success! "; - return OK; -} - -void ProcessTask::setLoadFlag(int index) -{ - load_flag = index; -} - -void ProcessTask::setInitFlag(int index) -{ - init_flag = index; -} - -void ProcessTask::setRunFlag(int index) -{ - run_flag = index; -} - -bool ProcessTask::clearTask() -{ - qDebug() << "[INFO] " << " clearTask--start"; - try - { - //if (m_IoThread) - //{ - // m_IoThread->setRunStop(); // 设置停止运行; - // m_IoThread->wait(); - // m_IoThread->quit(); - // delete m_IoThread; - // m_IoThread = nullptr; - //} - //qDebug() << __FUNCTION__ << "line:" << __LINE__ << " clear m_IoThread success! "; - // 清理 finstcp - - for (int i = 0; i < myIoThreadList.size(); i++) - { - myIoThreadList.at(i)->setRunStop(); // 设置停止运行; - myIoThreadList.at(i)->wait(); - myIoThreadList.at(i)->quit(); - myIoThreadList[i]->deleteLater(); - myIoThreadList[i] = nullptr; - } - myIoThreadList.clear(); - qDebug() << "[INFO] " << " clear IOthreadlist success ! "; - - // 清理线程 - for (int i = 0; i < threadlist.size(); i++) - { - delete threadlist[i]; - threadlist[i] = nullptr; - } - threadlist.clear(); - qDebug() << "[INFO] " << " clear threadlist success ! "; - - // 模块清理指针 - for (int i = 0; i < module_list.size(); i++) - { - //QString modelName = module_list.at(i).moduleName; - Base* base_ptr = const_cast(module_list.at(i).module_ptr); - module_list.at(i).destory_ptr(base_ptr); - //delete module_list.at(i).module_ptr; - } - module_list.clear(); - qDebug() << "[INFO] " << " clear module_list success ! "; - - if (finstcp_ptr) - { - destory_finstcp(finstcp_ptr); - } - qDebug() << "[INFO] " << " clear finstcp_ptr success! "; - - //// 清理 dataIntegrationThread_list - //for (auto val = 0; val < dataIntegrationThread_list.size(); val++) - //{ - // if (dataIntegrationThread_list.at(val)) - // { - // delete dataIntegrationThread_list.at(val); - // } - //} - //dataIntegrationThread_list.clear(); - //qDebug() << "[INFO] " << " clear dataIntegrationThread_list success ! "; - - // 清理任务线程 - for (auto val = 0; val < task_thread_list.size(); val++) - { - if (task_thread_list.at(val)) - { - delete task_thread_list.at(val); - } - } - task_thread_list.clear(); - qDebug() << "[INFO] " << " clear task_thread_list success ! "; - - // 清理 station_list - while (!station_list.isEmpty()) - { - QString m_key = station_list.firstKey(); - delete station_list.first(); - station_list.remove(m_key); - } - qDebug() << "[INFO] " << " clear station_list success ! "; - } - catch (QString ev) - { - qCritical() << "[Error] " << " ev:" << ev; - return false; - } - qDebug() << "[INFO] " << " clearTask success! "; - return true; -} - -int ProcessTask::loadAllModule() -{ - if (load_flag == 1) - { - qDebug() << "[INFO] " << " all module loaded! "; - return OK; - } - - qDebug() << "[INFO] " << " loadAllModule start! "; - auto time1 = std::chrono::high_resolution_clock::now();//delete - // 加载通信模块,通信模块不开线程 - //if (!loadModule_cameraCfg("finstcp", finstcpObj, "","")) - if (!loadModule_setting("finstcp", bridge.back.json.tcp.moduleName,"")) - { - qCritical() << "[TCP] " << " load finstcp module failed!"; - return LOAD_FINS_FAILURE; - } - auto time2 = std::chrono::high_resolution_clock::now();//delete - auto duration = std::chrono::duration_cast(time2 - time1);//delete - std::cout << "fins module loaded in: " << duration.count() << " ms" << std::endl;//delete - // 加载所有的相机模块和算法模块 - if (!loadCameraAndAlgorithmModule_setting()) - { - qCritical() << "[Error] " << " loadCameraAndAlgorithmModule is failed!"; - return LOAD_CAMERA_ALGO_FAILURE; - } - time1 = std::chrono::high_resolution_clock::now();//delete - duration = std::chrono::duration_cast(time1 - time2);//delete - std::cout << "loadCameraAndAlgorithmModule module loaded in: " << duration.count() << " ms" << std::endl;//delete - qDebug() << "[INFO] " << " loadAllModule success!"; - return OK; -} -#if 1 -bool ProcessTask::loadCameraAndAlgorithmModule_cameracfg(QJsonArray stationlist_array) -{ - for (int i = 0; i < stationlist_array.size(); i++) - { - QJsonObject station_obj = stationlist_array.at(i).toObject(); - QString station_key = station_obj.value("key").toString(); - - QJsonObject plcread_areaObject = station_obj.value("plcread_area").toObject(); - QJsonObject plcwrite_areaObject = station_obj.value("plcwrite_area").toObject(); - - HStationData* stationPtr = new HStationData; - stationPtr->setStationKey(station_key); - - HSnData* snData = new HSnData(); - - QMap camreaPicNumMap; - QMap> cameraProductSurfaceMap; - QJsonArray cameramodulelist = station_obj.value("cameramodulelist").toArray(); - for (auto val = 0; val < cameramodulelist.size(); val++) - { - - QJsonObject camera_obj = cameramodulelist.at(val).toObject(); - QString camera_key = camera_obj.value("key").toString(); - QString moduleName = camera_obj.value("moduleName").toString(); // 相机模块名 - QString image_queue_num = camera_obj.value("image_queue_num").toString(); - QJsonArray camera_productSurface = camera_obj.value("productSurface").toArray(); - // 根据相机编号单独处理工位五 - QString cameraName = camera_obj.value("eName").toString(); - //if (cameraName == "Camera1") - // snData->setCamera1Key(camera_key); - //if (cameraName == "Camera3") - // snData->setCamera3Key(camera_key); - //if (cameraName == "Camera7") - // snData->setCamera7Key(camera_key); - - QVector surfaceVec; - for (int i = 0; i < camera_productSurface.size(); i++) - surfaceVec.push_back(camera_productSurface[i].toString()); - - camreaPicNumMap.insert(camera_key, image_queue_num.toInt()); - cameraProductSurfaceMap.insert(camera_key, surfaceVec); - QByteArray init_Byte; - // 加载相机模块 - if (!loadModule_cameraCfg(camera_key, camera_obj, init_Byte, station_key)) - { - qCritical() << "[Error] " << " moduleName:" << moduleName << " load camera module failed! "; - return false; - } - - // 此处创建保存图片数据的容器 - HCameraData* cameraPtr = new HCameraData; - if (!cameraPtr->initCameraVectorQueue(image_queue_num.toInt())) - { - qCritical() << "[Error] " << " initCameraVectorQueue is error!"; - if (cameraPtr) - { - delete cameraPtr; - cameraPtr = nullptr; - } - return false; - } - cameraPtr->setCameraKey(camera_key); - stationPtr->addCameraData(cameraPtr); - } - - snData->setcamreaPicNumMap(camreaPicNumMap); - snData->setcameraProductSurface(cameraProductSurfaceMap); - stationPtr->setsnInfoData(snData); -#if 0 - QJsonArray algorithmlist = station_obj.value("algorithmlist").toArray(); - for (auto val = 0; val < algorithmlist.size(); val++) - { - QJsonObject algorithm_obj = algorithmlist.at(val).toObject(); // 算法模块obj - QString algorithm_key = algorithm_obj.value("key").toString(); // 算法名称 - QString moduleName = algorithm_obj.value("moduleName").toString(); // 算法模块名 - QString algorithm_config = algorithm_obj.value("algorithm_config").toString(); // 算法所需要的配置文件路径 - QJsonArray algorithm_init_array = algorithm_obj.value("algorithm_init").toArray(); // 基准坐标 - QJsonArray delete_result_index_array = algorithm_obj.value("delete_result_index").toArray(); // 删除算法结果数据 - if (algorithm_key.isEmpty() || moduleName.isEmpty()) - { - qCritical() << "[Error] " << " algorithm_key or moduleName is null! "; - return false; - } - - // 加载算法模块 - QByteArray init_Byte = encodeAlgorithmData(algorithm_init_array, algorithm_config); - if (!loadModule(algorithm_key, algorithm_obj, init_Byte, station_key)) - { - qCritical() << "[Error] " << " camerakey load module fail! "; - return false; - } - - // 此处创建保存算法结果数据的容器 - HAlgorithmData* algorithmPtr = new HAlgorithmData; - if (!delete_result_index_array.isEmpty()) - { - QMap mm_map; - for (int kkkk = 0; kkkk < delete_result_index_array.size(); kkkk++) - { - QJsonObject delete_obj = delete_result_index_array.at(kkkk).toObject(); - - QString delete_key = delete_obj.value("key").toString(); - QJsonArray index_array = delete_obj.value("index").toArray(); - QString delete_num = delete_obj.value("delete_num").toString(); - if (!index_array.isEmpty()) - { - for (int yyyyy = 0; yyyyy < index_array.size(); yyyyy++) - { - QString index_key = index_array.at(yyyyy).toString(); - QString map_camera_key = delete_key + "_" + index_key; - - Algorithm_Result_Data_index index_pack; - index_pack.delete_Result_index = delete_num.toInt(); - mm_map.insert(map_camera_key, index_pack); - } - } - } - algorithmPtr->setDeleteResultMap(mm_map); - } - algorithmPtr->setAlgorithmKey(algorithm_key); - - // 此处创建保存算法执行数据的容器 - HAlgorithmExecData* algorithmExecPtr = new HAlgorithmExecData(); - algorithmExecPtr->setAlgorithmName(algorithm_key); - - stationPtr->addAlgorithmData(algorithmPtr); - stationPtr->addAlgorithmExecData(algorithmExecPtr); - } - // 添加站中算法数据 - station_list.insert(station_key, stationPtr); -#endif - } - - return true; -} -bool ProcessTask::loadModule_cameraCfg(QString name, QJsonObject module_obj, QByteArray initByte, QString stationKey) -{ - QString moduleName = module_obj.value("moduleName").toString(); - QString task_thread_index = module_obj.value("task_thread_index").toString(); - //qDebug() << "[INFO] " << " name:" << name << " moduleName:" << moduleName; - try - { - //QString module_path = JsonPath + "/plugin/"+moduleName; // 暂时做修改 - QString module_path = JsonPath + "/" + moduleName; - qDebug() << "[INFO] " << " module_path:" << module_path; - - /////// 自动拷贝重用dll - if (QString(module_path.at(module_path.size() - 1)).toInt() > 0) { - //命名格式: 模块名+1/2/3... - QString path_model = module_path.mid(0, module_path.size() - 1); - if (QFile::exists(path_model + ".dll")) { - QFile::remove(module_path + ".dll"); - QFile::copy(path_model + ".dll", module_path + ".dll"); - - qDebug() << "[INFO] " << "copy dll " << module_path; - } - - } - /// 动态加载dll - - QLibrary* m_lib = new QLibrary(module_path); - lib_list.append(m_lib); - bool flag = m_lib->load(); - if (!m_lib->isLoaded()) - { - - qDebug() << "[Error] " << " Loaded error:" << m_lib->errorString(); - return false; - } - - if (name == "finstcp") - { - if (flag) - { - CreateFunction createFun = (CreateFunction)m_lib->resolve("create"); - ReleaseFunction releaseFun = (ReleaseFunction)m_lib->resolve("destory"); - if (createFun && releaseFun) - { - finstcp_ptr = createFun(); - destory_finstcp = releaseFun; - } - else - { - delete m_lib; - m_lib = nullptr; - return false; - } - } - } - else - { - if (flag) - { - - CreateFunction createFun = (CreateFunction)m_lib->resolve("create"); - ReleaseFunction releaseFun = (ReleaseFunction)m_lib->resolve("destory"); - if (createFun && releaseFun) - { - MyModule m_module; - m_module.m_stationKy = stationKey; - m_module.key = name; - m_module.m_initByte = initByte; - m_module.moduleName = moduleName; - m_module.module_ptr = createFun(); - m_module.destory_ptr = releaseFun; - - if (!task_thread_index.isEmpty()) - m_module.task_thread_index = task_thread_index; - - module_list.append(m_module); - } - else - { - delete m_lib; - m_lib = nullptr; - return false; - } - } - } - } - catch (QString event) - { - qCritical() << "[Error] " << " event:" << event; - return false; - } - return true; -} -#endif -bool ProcessTask::loadCameraAndAlgorithmModule_setting() -{ - HSnData* snData = new HSnData(); - - QMap camreaPicNumMap; - //QList cameraList; - QMap> cameraProductSurfaceMap; - for (auto val = 0; val < bridge.back.json.camera.cameraList.size(); val++) - { - QString camera_key = bridge.back.json.camera.cameraList[val].connectionName; - QString moduleName = bridge.back.json.camera.cameraList[val].moduleName; // 相机模块名 - QVector surfaceVec; - //for (int i = 0; i < camera_productSurface.size(); i++) - //surfaceVec.push_back(camera_productSurface[i].toString()); - - camreaPicNumMap.insert(camera_key, 0); - cameraProductSurfaceMap.insert(camera_key, surfaceVec); - QByteArray init_Byte; - // 加载相机模块 - if (!loadModule_setting(camera_key,moduleName, init_Byte)) - { - qCritical() << "[Error] " << " moduleName:" << moduleName << " load camera module failed! "; - return false; - } - - // 此处创建保存图片数据的容器 - HCameraData* cameraPtr = new HCameraData; - cameraPtr->setCameraKey(camera_key); - } - - snData->setcamreaPicNumMap(camreaPicNumMap); - snData->setcameraProductSurface(cameraProductSurfaceMap); - - return true; -} -QByteArray ProcessTask::encodeAlgorithmData(QJsonArray array, QString algorithm_config) -{ - QByteArray byte; - if (array.isEmpty()) - { - qCritical() << "[Error] " << " array is null! "; - // return byte; - } - - if (algorithm_config.isEmpty()) - { - // 当前参数未使用 - //qCritical() << "[Error] " << " algorithm_config is null! "; - } - - std::string sendMsg; - - // 添加参数个数 - int type = 3; // int - std::string m_type; - m_type.insert(0, 4, '1'); - memcpy((void*)m_type.c_str(), (void*)&type, 4); - sendMsg.append(m_type); - - // len - int len = 4; - std::string m_len; - m_len.insert(0, 4, '1'); - memcpy((void*)m_len.c_str(), (void*)&len, 4); - sendMsg.append(m_len); - - // num - int num; - if (algorithm_config.isEmpty()) - num = array.size(); - else - num = array.size() + 1; // 添加配置文件的信息 - - //qDebug() << __FUNCTION__ << " line:" << __LINE__ << " ------------------ num: " << num; - - std::string m_num; - m_num.insert(0, 4, '1'); - memcpy((void*)m_num.c_str(), (void*)&num, 4); - sendMsg.append(m_num); - - //添加数据 - for (int i = 0; i < array.size(); i++) - { - QJsonObject m_obj = array.at(i).toObject(); - QString value = m_obj.value("value").toString(); - if (value.isEmpty()) - { - qCritical() << "[Error] " << "algorithm_init value is null!"; - return ""; - } - - int type = 3; //int - std::string _type; - _type.insert(0, 4, '1'); - memcpy((void*)_type.c_str(), (void*)&type, 4); - sendMsg.append(_type); - - //len - int data_len = value.length(); - std::string _len; - _len.insert(0, 4, '1'); - memcpy((void*)_len.c_str(), (void*)&data_len, 4); - sendMsg.append(_len); - - //data - sendMsg.append(value.toStdString()); - } - - // 添加配置文件的信息 - if (!algorithm_config.isEmpty()) - { - int type = 3; //int - std::string _type; - _type.insert(0, 4, '1'); - memcpy((void*)_type.c_str(), (void*)&type, 4); - sendMsg.append(_type); - - //len - int data_len = algorithm_config.length(); - std::string _len; - _len.insert(0, 4, '1'); - memcpy((void*)_len.c_str(), (void*)&data_len, 4); - sendMsg.append(_len); - - //data - sendMsg.append(algorithm_config.toStdString()); - } - QByteArray byteArray(sendMsg.c_str(), sendMsg.length()); - return byteArray; -} - - -bool ProcessTask::loadModule_setting(QString keyName, QString moduleName ,QByteArray initByte) -{ - QString task_thread_index = 0; - try - { - QString module_path = JsonPath + "/" + moduleName; - qDebug() << "[INFO] " << " module_path:" << module_path; - - /////// 自动拷贝重用dll - if (QString(module_path.at(module_path.size() - 1)).toInt() > 0) { - //命名格式: 模块名+1/2/3... - QString path_model = module_path.mid(0, module_path.size() - 1); - if (QFile::exists(path_model + ".dll")) { - QFile::remove(module_path + ".dll"); - QFile::copy(path_model + ".dll", module_path + ".dll"); - - qDebug() << "[INFO] " << "copy dll " << module_path; - } - - } - /// 动态加载dll - - QLibrary* m_lib = new QLibrary(module_path); - lib_list.append(m_lib); - bool flag = m_lib->load(); - if (!m_lib->isLoaded()) - { - - qDebug() << "[Error] " << " Loaded error:" << m_lib->errorString(); - return false; - } - - if (keyName == "finstcp") - { - if (flag) - { - CreateFunction createFun = (CreateFunction)m_lib->resolve("create"); - ReleaseFunction releaseFun = (ReleaseFunction)m_lib->resolve("destory"); - if (createFun && releaseFun) - { - finstcp_ptr = createFun(); - destory_finstcp = releaseFun; - } - else - { - delete m_lib; - m_lib = nullptr; - return false; - } - } - } - else - { - if (flag) - { - - CreateFunction createFun = (CreateFunction)m_lib->resolve("create"); - ReleaseFunction releaseFun = (ReleaseFunction)m_lib->resolve("destory"); - if (createFun && releaseFun) - { - MyModule m_module; - m_module.key = keyName; - m_module.m_initByte = initByte; - m_module.moduleName = moduleName; - m_module.module_ptr = createFun(); - m_module.destory_ptr = releaseFun; - - if (!task_thread_index.isEmpty()) - m_module.task_thread_index = task_thread_index; - - module_list.append(m_module); - } - else - { - delete m_lib; - m_lib = nullptr; - return false; - } - } - } - } - catch (QString event) - { - qCritical() << "[Error] " << " event:" << event; - return false; - } - return true; -} - -bool ProcessTask::stopTask() -{ - qDebug() << "[INFO] " << " stopTask"; - return true; -} - -void ProcessTask::reciveImageData() -{ - try { - QMutexLocker locker(m_mutex); - if (ImageDataPack.isEmpty()) - { - qCritical() << "[Error] " << " ImageDataPack is null!"; - return; - } - - dataPack m_data = ImageDataPack.dequeue(); - cv::Mat m_mat = m_data.mat; - QString name = m_data.name; - QByteArray m_byte = m_data.byte; - QString retFlag = m_data.retFlag; - int showIndex = m_data.showIndex; - - //传递图片 - if (retFlag == "camera") - decodePackage(name, m_mat, showIndex); - else if (retFlag == "algorithm") - { - if (!m_mat.empty()) - decodePackage(name, m_mat, showIndex); - - emit sendData(name, m_byte); - } - } - catch (QString err) - { - qCritical() << "[Error] " << "show image reeor!"; - } - ; - -} - -bool ProcessTask::decodePackage(QString name, cv::Mat mtx,int showindex) -{ - //qDebug() << __FUNCTION__ << "line:" << __LINE__ << " start name:" << name; - try - { - if (!mtx.empty()) - { - cv::Mat rgb; - QImage* itemImage = nullptr; - if (mtx.type() == CV_8UC1) - { - mtx.copyTo(rgb); - itemImage = new QImage(QSize(rgb.cols, rgb.rows), QImage::Format_Grayscale8); - QImage qim((const unsigned char*)rgb.data, rgb.cols, rgb.rows, rgb.step, QImage::Format_Grayscale8); - *itemImage = qim.copy(); - } - else if (mtx.type() == CV_16U) // 双通道转单通道显示 - { - cv::normalize(mtx, mtx, 0, 255, cv::NORM_MINMAX); - cv::convertScaleAbs(mtx, rgb); - itemImage = new QImage(QSize(rgb.cols, rgb.rows), QImage::Format_Grayscale8); - QImage qim((const unsigned char*)rgb.data, rgb.cols, rgb.rows, rgb.step, QImage::Format_Grayscale8); - *itemImage = qim.copy(); - } - else if (mtx.type() == CV_8UC3) - { - cv::cvtColor(mtx, rgb, cv::COLOR_BGR2RGB); - itemImage = new QImage(QSize(rgb.cols, rgb.rows), QImage::Format_RGB888); - QImage qim((const unsigned char*)rgb.data, rgb.cols, rgb.rows, rgb.step, QImage::Format_RGB888); - *itemImage = qim.copy(); - } - else if (mtx.type() == CV_8UC4) - { - cv::cvtColor(mtx, rgb, cv::COLOR_BGRA2RGBA); - itemImage = new QImage(QSize(rgb.cols, rgb.rows), QImage::Format_ARGB32); - QImage qim((const unsigned char*)rgb.data, rgb.cols, rgb.rows, rgb.step, QImage::Format_ARGB32); - *itemImage = qim.copy(); - } - emit sendImage(name, itemImage,showindex); - } - } - catch (QString ev) - { - qCritical() << "[Error] " << " ev:" << ev; - return false; - } - - return true; -} - -void ProcessTask::deletePicFolders() -{ - QJsonObject json = loadCameraCfg(); - QString Imagepath = json.value("imgSavePath").toString(); - std::string saveImageDays_str = (json.value("save_imageDays").toString()).toStdString(); - int saveImageDays=stoi(saveImageDays_str); - - //std::stringstream str2Int; - //str2Int << saveImageDays_str; - //str2Int >> saveImageDays; - - QDir dir(Imagepath); - QDateTime current_date_time = QDateTime::currentDateTime(); - QFileInfoList dirList = dir.entryInfoList(); - for (int i = 2; i < dirList.size(); i++) - { - QString ddd = dirList[i].fileName(); - QFileInfoList dateDirList = QDir(Imagepath + '/' + dirList[i].fileName()).entryInfoList(); - for (int j = 2; j < dateDirList.size(); j++) - { - QString folder = (Imagepath + '/' + dirList[i].fileName() + '/' + dateDirList[j].fileName()); - QDateTime dt = dateDirList[j].created(); - int days = dt.daysTo(current_date_time); - if (days > saveImageDays) - { - QDir dateDir(folder); - if (dateDir.exists()) - { - dateDir.removeRecursively(); - } - /*QFile file(folder); - file.remove(); - if (!file.remove()) - { - qDebug() << "remove error:" << file.errorString(); - }*/ - } - } - } -} - -void ProcessTask::getDiskSpace(QString strDisk, double& dTotalBytes, double& dFreeBytes) -{ - LPCWSTR lpcwstrDriver = (LPCWSTR)strDisk.utf16(); - ULARGE_INTEGER lFreeBytesAvailable, lTotalBytesTemp, lTotalFreeBytes; - if (!GetDiskFreeSpaceExW(lpcwstrDriver, &lFreeBytesAvailable, &lTotalBytesTemp, &lTotalFreeBytes)) { - dTotalBytes = -1; - dFreeBytes = -1; - return; - } - dTotalBytes = lTotalBytesTemp.QuadPart / 1024.0 / 1024 / 1024; - dFreeBytes = lTotalFreeBytes.QuadPart / 1024.0 / 1024 / 1024; -} - -void ProcessTask::autoCheckDisk() -{ - QJsonObject json = loadCameraCfg(); - QString Imagepath = json.value("imgSavePath").toString(); - QString diskPath = QString::fromStdString(Imagepath.toStdString().substr(0, Imagepath.toStdString().find_first_of("/") + 1)); - double dTotalBytes, dFreeBytes; - getDiskSpace(diskPath, dTotalBytes, dFreeBytes); - if (dFreeBytes < 100 && dFreeBytes>0) - { - QDir dir(Imagepath); - QFileInfoList dirList = dir.entryInfoList(); - for (int i = 0; i < dirList.size(); i++) - { - QString ddd = dirList[dirList.size()-1].fileName(); - QDir dateDir(ddd); - dateDir.removeRecursively(); - } - } -} - -QJsonObject ProcessTask::loadCameraCfg() -{ - QJsonObject json_object; - try - { - QJsonParseError jsonError; - QString json_cfg = "./config/setting.json"; - if (json_cfg.isEmpty()) - { - qCritical() << __FUNCTION__ << " line:" << __LINE__ << " JsonPath is null!"; - return json_object; - } - - QFile JsonFile; - JsonFile.setFileName(json_cfg); - JsonFile.open(QIODevice::ReadOnly); - - QByteArray m_Byte = JsonFile.readAll(); - if (m_Byte.isEmpty()) - { - qDebug() << __FUNCTION__ << " line:" << __LINE__ << json_cfg + " Content is empty"; - JsonFile.close(); - return json_object; - } - - QJsonDocument jsonDocument(QJsonDocument::fromJson(m_Byte, &jsonError)); - - if (!jsonDocument.isNull() && jsonError.error == QJsonParseError::NoError) - { - if (jsonDocument.isObject()) - { - json_object = jsonDocument.object(); - return json_object; - } - } - else - { - qCritical() << __FUNCTION__ << " line:" << __LINE__ << json_cfg + " is error!"; - } - - JsonFile.close(); - - } - catch (QString ev) - { - qCritical() << __FUNCTION__ << " line:" << __LINE__ << " ev:" << ev; - } - return json_object; -} - diff --git a/HanddleAI/HandleAiUi-new/back/processtask.h b/HanddleAI/HandleAiUi-new/back/processtask.h deleted file mode 100644 index 72978c22..00000000 --- a/HanddleAI/HandleAiUi-new/back/processtask.h +++ /dev/null @@ -1,98 +0,0 @@ -#ifndef PROCESSTASK_H -#define PROCESSTASK_H - -#include -#include "myiothread.h" -#include "taskthread.h" - -#pragma execution_character_set("utf-8") - -static QList module_list; - -class ProcessTask : public QObject -{ - Q_OBJECT -public: - enum errorCode - { - OK, - DEFAULT_FAILURE, - LOAD_FINS_FAILURE, - LOAD_CAMERA_ALGO_FAILURE, - INIT_FINS_FAILURE, - INIT_CAMERA_ALGO_FAILURE, - THREAD_CAMERA_FAILURE, - ERROR_initAllModule, - ERROR_createModuleThread, - ERROR_tcpConnectionFailure - }; - explicit ProcessTask(QObject *parent = nullptr); -// imageReciveServer _imageReciveServer; - ~ProcessTask(); - void setLoadFlag(int index); - void setInitFlag(int index); - void setCreateThread(int index){ modulethread_flag = index;} - void setRunFlag(int index); - void setJsonObject(QJsonObject obj); - void setJsonPath(QString path){ JsonPath = path;} - bool startTask(); - int initAllModule(); - bool stopTask(); - bool clearTask(); - int loadAllModule(); - int createModuleThread(); - bool loadCameraAndAlgorithmModule_cameracfg(QJsonArray stationlist_array); - bool loadCameraAndAlgorithmModule_setting(); - bool decodePackage(QString name,cv::Mat mtx,int); - bool loadModule_cameraCfg(QString cameraName, QJsonObject module_obj, QByteArray initByte, QString stationKey); - bool loadModule_setting(QString keyName, QString moduleName, QByteArray initByte); - QByteArray encodeAlgorithmData(QJsonArray array,QString calConfig); // 算法cal配置文件路径 -// QVector getCameraTriggerCmdArray(QJsonObject obj); - /******************************thread****/ - int initTask(); - QJsonObject getFinsTcpObject(QJsonArray array); - MyModule getModule(QString); - QList getModuleList(int thread_index, QString stationKey); - QJsonArray getTaskAlgorithmObject(int thread_index,QJsonArray array); - void clearData(); - void deletePicFolders(); - QJsonObject loadCameraCfg(); - void getDiskSpace(QString strDisk, double& dTotalBytes, double& dFreeBytes); - void autoCheckDisk(); - -public: - Q_INVOKABLE void reciveImageData(); //接收数据 -private: - int init_flag = 0; // 0:代表未初始化 1:代表已初始化 - int load_flag = 0; // 0:代表未加载 1:代表已加载 - int modulethread_flag = 0; // 0:代表未创建 1:代表已创建 - int run_flag = 0; // 0:代表未运行 1:代表已运行 - cv::Mat ai_mat; - QString m_AiName; - QString JsonPath = nullptr; - QString m_savePath = nullptr; - QString m_heartCmd = ""; - QJsonObject cameraObj; - QJsonArray tcplist_array; - QJsonArray stationlist_array; - ReleaseFunction destory_finstcp; //释放 - QList lib_list; - QList task_thread_list; - //QList dataIntegrationThread_list; - /****************************thread***/ - QMutex *m_mutex; - QMutex * m_iomutex; - Base * finstcp_ptr = nullptr; - ReadPackThread *m_readThread = nullptr; - QMap> camera_algorithm_map; // 存储相机对应的算法 - bool isStartThread = false; - QTimer* deletePicTimer; - autoDelete* autoDeleteThread; -signals: - void sendImage(QString,QImage*,int); // 传递拍到的图片 - void sendData(QString,QByteArray); // 传递结果数据 - void SendStationLabel(int label);//第几次拍照 - void mvDisconnect(QString msg);//0106 相机断连弹窗 -}; - -#endif // PROCESSTASK_H diff --git a/HanddleAI/HandleAiUi-new/back/taskthread.cpp b/HanddleAI/HandleAiUi-new/back/taskthread.cpp deleted file mode 100644 index 75630dbd..00000000 --- a/HanddleAI/HandleAiUi-new/back/taskthread.cpp +++ /dev/null @@ -1,565 +0,0 @@ -#include "taskthread.h" - -taskThread::taskThread(QObject *parent) :m_obj(parent) -{ - -} - -taskThread::~taskThread() -{ - m_stoprun = false; - wait(100); - exit(); - qDebug() << "[INFO] " << " m_name:" << m_name << " delete thread success! "; -} - -bool taskThread::initTaskThread(int index,QString stationName,QJsonArray array,QList list) -{ - try - { - m_thread_index = index; - m_stationName = stationName; - for ( int val = 0 ; val < array.size();val++ ) - { - QJsonObject m_obj = array.at(val).toObject(); - QString task_thread_index = m_obj.value("task_thread_index").toString(); - if(task_thread_index.isEmpty()) - { - qCritical() << "[Error] " << " get task_thread_index is null!"; - return false; - } - - if ( task_thread_index.toInt() == m_thread_index ) - { - appendPlcCmd(m_obj); - module_jsonobject_list.append(m_obj); - } - } - m_module_list = list; - } catch (QString ev) { - qCritical() << "[Error] " << " ev:" << ev; - return false; - } - - return true; -} - -bool taskThread::appendPlcCmd(QJsonObject m_moduleobj) -{ - QVector plc_commond_vector; - QString m_key = m_moduleobj.value("key").toString(); // 算法名称 - QString algorithm_complete_plcpos = m_moduleobj.value("algorithm_complete_plcpos").toString(); - QJsonArray algorithm_result_array = m_moduleobj.value("algorithm_result").toArray(); - if ( algorithm_result_array.isEmpty() || algorithm_complete_plcpos.isEmpty() ) - { - qWarning() << "[Error] " << " algorithm_result_array or algorithm_complete_plcpos or trigger_cond_list is null ! "; - // return false; - } - plc_commond_vector.push_back(algorithm_complete_plcpos); // 添加 结果拍照完成信号 - // 添加结果数据信息 - for ( int i = 0; i < algorithm_result_array.size();i++ ) - { - QString write_plcpos = algorithm_result_array.at(i).toObject().value("write_plcpos").toString(); - if(!write_plcpos.isEmpty()) - plc_commond_vector.push_back(write_plcpos); - else - qWarning() << "[Error] " << " warning write_plcpos is null!"; - } - - // 添加结果正负值信息 - for ( int i = 0; i < algorithm_result_array.size();i++ ) - { - QString write_plcpos = algorithm_result_array.at(i).toObject().value("negative_plcpos").toString(); - if(!write_plcpos.isEmpty()) - plc_commond_vector.push_back(write_plcpos); - else - qWarning() << "[Error] " << " warning negative_plcpos is null!"; - } - - // 添加到map中 - plc_commond_vector_map.insert(m_key,plc_commond_vector); - qDebug() << "[INFO] " << " m_name:" << m_name << " plc_commond_vector:" << plc_commond_vector ; - return true; -} - -void taskThread::run() -{ - try - { - processTask(); - } catch ( QString ev ) { - qCritical() << "[Error] " << " ev:" << ev; - return; - } -} - -bool taskThread::processTask() -{ - while ( true ) - { - if ( !m_stoprun ) - { - return true; - } - processExecData(); - _sleep(5); - } -} - - -bool taskThread::processExecData() -{ - HStationData *station_ptr = station_list.value(m_stationName); - if ( station_ptr ) - { - for ( int val = 0; val < m_module_list.size(); val++ ) - { - testData m_data; - QString m_key = m_module_list.at(val).key; - HAlgorithmExecData *m_ptr = station_ptr->getAlgorithmExecData(m_key); - if ( m_ptr->getDetectData( m_data ) ) - { - // 任务下标--- - queue_exec_cameraName.append(m_data); - m_exec_module = m_module_list.at(val); - AlgorithmModuleProcessData (m_key,m_data.dstImageMat,m_data.byte ); - m_ptr->deleteDetectData(); - } - } - } - return true; -} - -bool taskThread::AlgorithmModuleProcessData(QString key,std::vector vector_mat,QByteArray send_byte) -{ - // qDebug() << "[INFO] " << " m_name:" << m_name << " key:" << key << " vector_mat len:" << vector_mat.size() << " send_byte len:" << send_byte.length(); - - std::vector ai_mat; - QByteArray ai_byte; - - // 查找对应的模块名,和对应模块的object - //m_exec_module = getExecModule(key); - if( m_exec_module.key.contains("error")) - { - qCritical() << "[Error] " << " getExecModule is error!"; - return false; - } - - m_exec_object = getModuleObject(key); - if ( m_exec_object.isEmpty() ) - { - qCritical() << "[Error] " << " m_exec_object is null!"; - return false; - } - - m_name = m_exec_object.value("key").toString(); - m_type = m_exec_object.value("type").toString(); - save_data_flag = m_exec_object.value("save_data_flag").toString(); - if ( m_type.isEmpty() || m_name.isEmpty() || save_data_flag.isEmpty() ) - { - qCritical() << "[Error] " << " m_type or m_name is null!"; - } - QString dataStr = send_byte; - //qDebug() << "[INFO] " << " dataStr:" << dataStr; - QByteArrayList datalist = send_byte.split(','); - int proIndex = datalist.at(2).toInt(); - m_exec_module.module_ptr->reciveData(vector_mat,send_byte); // 接受图片和数据 - - if ( m_exec_module.module_ptr->run()) - { - if ( !m_exec_module.module_ptr->sendData ( ai_mat,ai_byte ) ) - { - qCritical() << "[Error] " << " check ai module result is error! "; - vector_mat.clear(); - ai_mat.clear(); - return false; - } - } - else - { - qCritical() << "[Error] " << " m_AiModule run result is null! "; - vector_mat.clear(); - ai_mat.clear(); - cv::Mat null_mat; - sendDataCommond(m_type,null_mat,"null"); // 发送异常信息到界面显示 - // 发送异常指令 - sendCatchCommond(); - return false; - } - - // 发送AI数据 和 图 - if ( !ai_byte.isEmpty() ) - { - // qDebug() << "[INFO] " << " m_name:" << m_name << " send ai byte :" << ai_byte.length(); - cv::Mat null_mat; - if ( !ai_mat.empty() ) - null_mat = ai_mat.at(0); - - sendDataCommond(key,null_mat,ai_byte, proIndex); - vector_mat.clear(); - ai_mat.clear(); - } - else - { - qCritical() << "[Error] " <<" m_name:" << m_name << " ai_byte len:" << ai_byte.length() << " error check data is null! "; - cv::Mat null_mat; - sendDataCommond(m_type,null_mat,"null"); // 发送异常信息到界面显示 - } - return true; -} - -MyModule taskThread::getExecModule(QString key) -{ - MyModule m_module; - m_module.key = "error"; - for ( int i = 0 ; i < m_module_list.size(); i++ ) - { - if ( m_module_list.at(i).key == key ) - { - return m_module_list.at(i); - } - } - return m_module; -} - -QJsonObject taskThread::getModuleObject ( QString key ) -{ - QJsonObject obj; - for ( int i = 0 ; i < module_jsonobject_list.size(); i++ ) - { - QJsonObject m_obj = module_jsonobject_list.at(i); - QString m_key = m_obj.value("key").toString(); - if ( m_key == key ) - { - return m_obj; - } - } - return obj; -} - -bool taskThread::saveAlgorithmData(testData m_testdata,QByteArray byte) -{ - QString camera_name = m_testdata.cameraName; - QString task_index = m_testdata.task_index; - - Algorithm_Result_Data result_data; - result_data.byte = byte; - - HAlgorithmData *algorithmPtr = station_list.value(m_stationName)->getAlgorithmData(m_name); - if ( algorithmPtr ) - { - QString cameraName_and_index = camera_name + "_" + task_index; - algorithmPtr->addAlgorithmData(cameraName_and_index,result_data); - } - else - { - qCritical() << "[Error] " << " cameraPtr is null!"; - return false; - } - return true; -} - -// 发送拍照异常 指令 -bool taskThread::sendCatchCommond() -{ - // QMutexLocker locker(m_mutex); // 加锁 - std::vector vec_mat; - QByteArray send_byte; - // 写入 - if ( m_name == "camera1" ) - { - send_byte = "write_DM105_1"; - } - else if ( m_name == "camera2" ) - { - send_byte = "write_DM115_1"; - } - else if ( m_name == "camera3" ) - { - send_byte = "write_DM138_1"; - } - else if ( m_name == "camera4" ) - { - send_byte = "write_DM139_1"; - } - - // 写入异常信息 - writeCommondPack.append(send_byte); - - qDebug() << "[INFO] " << " catch success! "; - return true; -} - - -bool taskThread::decodeAiValue(QByteArray byte,QVector &vec_ret) -{ - if(byte.isEmpty()) - { - qCritical() << "[Error] " << " byte is null!"; - return false; - } - - while (!byte.isEmpty()) - { - int type = 0; - QByteArray m_type = byte.mid(0,4); - memcpy((void*)&type,(void*)m_type.data(), 4); - if(type != 3) - { - qCritical() << "[Error] " << " type is error" << type; - return false; - } - //qDebug() << __FUNCTION__ << " line:" << __LINE__ << " type:" << type; - byte.remove(0,4); - - int len = 0; - QByteArray m_len = byte.mid(0,4); - memcpy((void*)&len,(void*)m_len.data(), 4); - //qDebug() << __FUNCTION__ << " line:" << __LINE__ << " len:" << len; - byte.remove(0,4); - - QByteArray mm_data = byte.mid(0,len); - vec_ret.append(mm_data); - byte.remove(0,len); - } - - return true; -} - -QVector taskThread::getWriteVector(QString &startPos,QMap &map) -{ - QVector vector_value; - if ( map.isEmpty() ) - { - qWarning() << "[Error] " << " map is null!"; - return vector_value; - } - - startPos = map.firstKey(); // 第一个key 取出的为 DM101 - int check_pos = 0; - while(!map.isEmpty()) - { - QString m_key = map.firstKey(); - QString m_value = map.value(m_key); - - QString lastpos = m_key.right(1); - if ( check_pos == 0 ) - { - check_pos = lastpos.toInt(); // 截取最后一位的值 - vector_value.push_back(m_value); // 添加值 - map.remove(m_key); - } - else - { - int m_lastpos = lastpos.toInt(); - if ( m_lastpos == check_pos ) - { - // 先判断是否连续,不连续则退出,连续则添加 - vector_value.push_back(m_value); // 添加值 - map.remove(m_key); - } - else - { - break; - } - } - check_pos++; // 移动位置 - } - return vector_value; -} - -// 算法结果 写入plc -bool taskThread::writeAiCommond(QString cameraName,QByteArray byte) -{ - qDebug() << "[INFO] " << " writeAiCommond:" << " m_name:" << m_name; - QVector vec_ret; // 存储结果的 - if ( !decodeAiValue(byte,vec_ret) ) - { - qCritical() << "[Error] " << " decodeAiValue error!"; - return false; - } - - if ( vec_ret.isEmpty() ) - { - qDebug() << "[Error] " << " vec_ret is null!"; - return false; - } - - QJsonArray algorithm_result = m_exec_object.value("algorithm_result").toArray(); - if ( algorithm_result.size() != vec_ret.length() ) - { - qCritical() << "[Error] " << " algorithm_result != vec_ret failed!"; - vec_ret.clear(); - return false; - } - - QMap key_value; - - QString key_complete_pos = m_exec_object.value("algorithm_complete_plcpos").toString(); - if (key_complete_pos.isEmpty()) - { - qWarning() << "[Error] " << " algorithm_complete_plcpos is null! "; - // vec_ret.clear(); - // return false; - } - else - { - // 首先添加 algorithm_complete_plcpos - key_value.insert(key_complete_pos,"1"); - } - - for(int i = 0; i < algorithm_result.size(); i++) - { - QString key_dmpos = algorithm_result.at(i).toObject().value("write_plcpos").toString(); - double m_value = vec_ret.at(i).toDouble(); - - // 添加值 - key_value.insert ( key_dmpos,QString::number( abs((int)m_value)) ); - QString negative_plcpos = algorithm_result.at(i).toObject().value("negative_plcpos").toString(); - if ( !negative_plcpos.isEmpty() ) - { - // 添加正负值 - - QString negative_value; - if( m_value > 0) - negative_value = "1"; - else - negative_value = "-1"; - - // 添加值 - key_value.insert(negative_plcpos,negative_value); - } - } - - if ( !writeTcpData(key_value) ) - { - qCritical() << "[Error] " << " writeTcpData failed!"; - return false; - } - - qDebug() << "[INFO] " << " cameraName:" << cameraName << " writeAiCommond success!"; - return true; -} - -bool taskThread::writeAiCommond(QString cameraName, QByteArray byte, int index) -{ - QString resultStr = byte; - //qDebug() << __FUNCTION__ << " line:" << __LINE__ << " resultStr:" << resultStr; - if (byte == "null") - return false; - QStringList resultStrList = resultStr.split(","); - int pIndex = resultStr.indexOf(","); - QString cmd1 = resultStr.mid(0, pIndex); - QString cmd2 = resultStr.mid(pIndex + 1, resultStr.size() -pIndex - 1); - - QJsonArray algorithm_result = m_exec_object.value("algorithm_result").toArray(); - QJsonArray write_plcpos = algorithm_result.at(0).toObject().value("write_plcpos").toArray(); - QJsonArray write_plcposes = algorithm_result.at(0).toObject().value("write_plcposes").toArray(); - for (int i = 0; i < 2; i++) - { - QString cmd; - if(i == 1) - cmd = write_plcpos.at(index - 1).toString() + cmd1; - else - cmd = write_plcposes.at(index - 1).toString() + cmd2; - //qDebug() << __FUNCTION__ << " line:" << __LINE__ << " cmd:" << cmd; - std::vector vec_mat; - if (!finstcp_ptr->reciveData(vec_mat, cmd.toUtf8())) - { - qCritical() << "[Error] " << " finstcp_ptr reciveData error! "; - return false; - } - - } - - qDebug() << "[INFO] " << " cameraName:" << cameraName << " writeAiCommond success!"; - return true; -} - - -bool taskThread::writeTcpData(QMap key_value) -{ - qDebug() << "[INFO] " << "-- key_value:" << key_value; - try - { - std::vector vec_mat; - while ( !key_value.isEmpty() ) - { - QString dm_startPos; // 起始位 - QVector vector_value = getWriteVector(dm_startPos,key_value); - qDebug() << "[INFO] " << " dm_startPos:" << dm_startPos << " vector_value:" << vector_value; - - QByteArray write_byte = writeFormat(dm_startPos,vector_value); - - // 写入 - writeCommondPack.append(write_byte); - } - } catch (QString ev) { - qCritical() << "[Error] " << " writeTcpData is failed! ev:" << ev; - return false; - } - return true; -} - -QByteArray taskThread::writeFormat(QString startPos, QVector vector_value) -{ - QByteArray byte; - // 格式 示例: writeResult_DM101_5_ writeShort_DM3000_NUM_ - - std::string write_format; - - write_format = "writeResult_"+startPos.toStdString()+"_"+QString::number(vector_value.size()).toStdString() + "_"; - - // 其他格式 按照 长度+数据写入 进行编码 - std::string sendData; - for(int i = 0 ; i < vector_value.size();i++) - { - int len = vector_value.at(i).length(); - std::string m_len; - m_len.insert(0,4,'1'); - memcpy ( (void*)m_len.c_str(),(void*)&len,4 ); - // 添加长度 - sendData.append(m_len); - - // 添加数据 - sendData.append(vector_value.at(i).toStdString()); - // m_value += str_len + str_value; - } - write_format += sendData; - byte = QByteArray::fromStdString(write_format); - return byte; -} - -bool taskThread::sendDataCommond( QString m_type,cv::Mat mat,QByteArray byte ,int index) -{ - // QMutexLocker locker(m_mutex); // 加锁 - - dataPack m_pack; - m_pack.mat = mat; - m_pack.byte = byte; - m_pack.retFlag = m_exec_object.value("type").toString(); - - - testData m_exec_testData; // 当前执行算法的输出结果信息 - if ( !queue_exec_cameraName.isEmpty() ) - { - m_exec_testData = queue_exec_cameraName.dequeue(); - m_pack.name = m_exec_testData.cameraName; - } - - qDebug() << "[INFO] " << " m_name:" << m_name << " save_data_flag:" << save_data_flag; - // 发送数据还是保存数据 - if ( save_data_flag == "true" ) - { - saveAlgorithmData(m_exec_testData,byte); - } - else if ( !writeAiCommond(m_type,byte,index)) - { - qCritical() << "[Error] " << " writeAiCommond is failed!"; - } - // 界面显示包 - /* ImageDataPack.append(m_pack); - QMetaObject::invokeMethod(m_obj,"reciveImageData");*/ - - return true; -} diff --git a/HanddleAI/HandleAiUi-new/back/taskthread.h b/HanddleAI/HandleAiUi-new/back/taskthread.h deleted file mode 100644 index 6f32a0ce..00000000 --- a/HanddleAI/HandleAiUi-new/back/taskthread.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef TASKTHREAD_H -#define TASKTHREAD_H - -#include -#include -#include -#include -#include -#include -#include "camera_thread.h" - -#pragma execution_character_set("utf-8") - -class taskThread : public QThread -{ - Q_OBJECT -public: - explicit taskThread(QObject *parent = nullptr); - ~taskThread(); - void run(); - void setFinsTcpPtr(Base* finsPtr) { finstcp_ptr = finsPtr; } - void setMutex( QMutex *mutex){ m_mutex = mutex; } - bool initTaskThread(int index,QString stationName,QJsonArray array,QList list); - bool processTask(); - bool appendPlcCmd(QJsonObject); - bool sendCatchCommond(); - bool sendDataCommond( QString m_type,cv::Mat mat,QByteArray byte, int index = 0); - bool saveAlgorithmData ( testData m_testdata,QByteArray byte); - bool writeAiCommond(QString cameraName,QByteArray byte); - bool writeAiCommond(QString cameraName, QByteArray byte,int index); - bool writeTcpData(QMap map); - bool decodeAiValue(QByteArray byte,QVector &vec_ret); - bool AlgorithmModuleProcessData(QString key,std::vector camera_mat,QByteArray byte); // 处理数据 - QVector getWriteVector(QString &startPos,QMap &map); - QByteArray writeFormat(QString startPos,QVector vector_value); // 写入的起始位置,写入的内容+长度 - MyModule getExecModule(QString key); - QJsonObject getModuleObject(QString key); - - // 处理黑匣子中的可执行数据 - bool processExecData(); -private: - Base* finstcp_ptr = nullptr; - QObject *m_obj; - QMutex *m_mutex; - QString m_name; // 算法名称 - QString m_type; // 类型 - bool m_stoprun = true; - int m_thread_index = -1; // 当前线程的下标 - QString m_stationName = nullptr; // 当前站名 - QString save_data_flag = "false"; // 是否保存数据 - MyModule m_exec_module; // 当前执行的模块 - QJsonObject m_exec_object; // 当前执行的模块配置文件 - QList m_module_list; // 存储算法模块的模块列表 - QList module_jsonobject_list; // 存储所有算法模块的模块列表 - QMap> plc_commond_vector_map; // 算法模块使用的变量 - QQueue queue_exec_cameraName; // 执行当前算法的相机名称队列 -signals: - -}; - -#endif // TASKTHREAD_H diff --git a/HanddleAI/HandleAiUi-new/back/threadPoolManager.cpp b/HanddleAI/HandleAiUi-new/back/threadPoolManager.cpp index 723e62af..f0f6bb11 100644 --- a/HanddleAI/HandleAiUi-new/back/threadPoolManager.cpp +++ b/HanddleAI/HandleAiUi-new/back/threadPoolManager.cpp @@ -1,12 +1,11 @@ #include -#include "camera_thread.h" -#include "myiothread.h" #include - +#include /// /// ¼ì²éĿ±êÎļþ¼ÐÊǷñ´æÔڣ¬²»´æÔÚÔ򴴽¨ /// /// +using namespace std; void createDirectoryIfNotExists_2(const std::string& path) { // ¼ì²é·¾¶ÊǷñ´æÔÚ if (!std::filesystem::exists(path)) { @@ -59,48 +58,9 @@ threadManager::threadManager(QObject* parent) : QThread(parent) void threadManager::run() { - return; - while (1) - { - while (insertQueue.size() > 0) - { - insertQueueMutex.lock(); - while (insertQueue.size() > 0) - { - imgWaitList.push_back(insertQueue.dequeue()); - } - insertQueueMutex.unlock(); - } - if (imgWaitList.size() > 0) - { - for (int i = 0; i < imgWaitList.size(); i++) - { - int imgSize = imgWaitList[i]->imgs.size(); - int imgAmountMin = imgWaitList[i]->imgAmountMin; - if (imgSize >= imgAmountMin) - { - int threadId = imgWaitList[i]->algoThreadIndex; - if (threadId == -1) - { - cout << "threadId return -1 ,algoName " << imgWaitList[i]->algoThreadName.toStdString() << endl; - imgWaitList.removeAt(i); - return; - } - algoThreadList[threadId]->addDetTask(imgWaitList[i]); - cout << "Size " << imgWaitList.size() << " delete " << i << endl; - imgWaitList.erase(imgWaitList.begin() + i); - for (auto& data : imgWaitList) - { - cout << "remain " << data->cameraKeyName.toStdString() << " " << data->algoThreadName.toStdString() << " " << data->cameraNameStr << endl; - } - break; - } - } - } - QThread::msleep(10); - } + } -void threadManager::addTask(detData* data) +void threadManager::addTask(std::shared_ptr data) { //cout << __LINE__ << "insert Data " << data ->timeCode<< endl; { @@ -125,29 +85,7 @@ void threadManager::addTask(detData* data) insertQueueMutex.unlock(); //this->start(); } -bool threadManager::getFreeThread() -{ -#if 0 - int index = 0; - for (index = 0; index < threadPoolList.size(); index++) - { - if (threadPoolList[index]->isRunning() == false) - { - return true; - } - } - for (index = 0; index < threadPoolList.size(); index++) - { - if (threadPoolList[index]->nextObj.isEmpty() == true) - { - return true; - } - } -#endif - return false; - -} -bool threadManager::addTaskFreeThread(detData* data) +bool threadManager::addTaskFreeThread(std::shared_ptr data) { #if 0 int index = 0; @@ -177,13 +115,14 @@ threadManager::~threadManager() for (auto thread : algoThreadList) { thread->m_runFlag = false; - while (thread->isRunning() == false); + thread->terminate(); + while (thread->isRunning() == true); } for (auto thread : algoThreadList) { delete thread; } -} +} ////////////////DET//DATA////////////////// sncodeCls::sncodeCls() { @@ -221,6 +160,8 @@ void sncodeCls::checkSnFromWaittingVec(QByteArray byte) } } } + +//FINSEDIT string sncodeCls::readSnFromQByteArray(QByteArray byte, int dmPos, bool highLowConversion, bool clearAfterRead, long long timeCode, int Size) { @@ -251,10 +192,10 @@ string sncodeCls::readSnFromQByteArray(QByteArray byte, int dmPos, } if (str.size() < Size && Size != -1) return snErrorsnError; - if (clearAfterRead == true) - //for(int i=0;i< snCount;i++) - bridge.back.sendFinsMsg( - QString::fromStdString("writeALL_DM" + to_string(dmPos) + "_" + to_string(snCount) + "_0")); + //if (clearAfterRead == true) + // //for(int i=0;i< snCount;i++) + // bridge.back.sendFinsMsg( + //QString::fromStdString("writeALL_DM" + to_string(dmPos) + "_" + to_string(snCount) + "_0")); return str.toStdString(); } QString sncodeCls::snHex(QString sn) diff --git a/HanddleAI/HandleAiUi-new/back/threadPoolManager.h b/HanddleAI/HandleAiUi-new/back/threadPoolManager.h index 59dd065c..4c42b88f 100644 --- a/HanddleAI/HandleAiUi-new/back/threadPoolManager.h +++ b/HanddleAI/HandleAiUi-new/back/threadPoolManager.h @@ -16,6 +16,7 @@ #include #include #include +#include class threadManager; class algoThread; class subThread; @@ -32,55 +33,6 @@ struct MatchResult { double confidence; }; -class cameraImages -{ -public: - struct imgData - { - size_t timCode; - std::vectorimgs; - }; - QList< imgData*> imgList; - imgData* getData(size_t timeCode) - { - for (int i = 0; i < imgList.size(); i++) - { - if (imgList[i]->timCode == timeCode) - { - imgData* ptr = imgList[i]; - imgList.removeAt(i); - return ptr; - } - } - return nullptr; - } - imgData* waitForImg(size_t timeCode,int timeOut=10000) - { - imgData* ptr=nullptr; - int cnt = 0; - while (cnt < timeOut) - { - ptr = getData(timeCode); - if (ptr!=nullptr) - { - std::cout <<"cost Time"<< cnt << endl; - return ptr; - } - cnt += 10; - QThread::msleep(10); - } - qDebug() << "timeCode:" << timeCode << "no img,return nullptr"; - return nullptr; - } - void insertImg(size_t timeCode, std::vector*mats) - { - std::vectorimgs; - imgs.swap(*mats); - imgData* _strcut = new imgData({ timeCode, imgs }); - imgList.push_back(_strcut); - } - -}; class detData { public: @@ -133,10 +85,10 @@ public: //algoThreadIndex = _struct.threadIndex; //resShowIndex = _struct.showIndex; } - static detData* CreateDetData(QString IN_cameraKeyName, QString IN_algoThreadName, + static std::shared_ptr CreateDetData(QString IN_cameraKeyName, QString IN_algoThreadName, std::string IN_SN, int IN_oriShowIndex) { - detData* data = new detData(IN_cameraKeyName, IN_algoThreadName, IN_SN, IN_oriShowIndex); + std::shared_ptr data(new detData(IN_cameraKeyName, IN_algoThreadName, IN_SN, IN_oriShowIndex)); return data; } @@ -180,30 +132,44 @@ public: class detDataManager { public: - std::unordered_mapmap; + std::unordered_map>map; //QLinkedList detDatas; QMutex dataMutex; - detData* insertDetData(QString IN_cameraKeyName, QString IN_algoThreadName, + //std::shared_ptr insertDetData(QString IN_cameraKeyName, QString IN_algoThreadName, + // std::string IN_SN, int IN_oriShowIndex) + //{ + // dataMutex.lock(); + // std::shared_ptr data = new detData(IN_cameraKeyName, IN_algoThreadName, IN_SN, IN_oriShowIndex); + // data->dManager = this; + // //detDatas.push_back(data); + // map.insert({ data->timeCode,data }); + // dataMutex.unlock(); + // std::shared_ptr dataPtr = getDetData(data->timeCode); + // + // if (dataPtr == nullptr) + // qDebug() << "´´½¨ÐÂÈÝÆ÷ʧ°Ü"; + // return dataPtr; + //} + std::shared_ptr insertDetData(QString IN_cameraKeyName, QString IN_algoThreadName, std::string IN_SN, int IN_oriShowIndex) { dataMutex.lock(); - detData* data = new detData(IN_cameraKeyName, IN_algoThreadName, IN_SN, IN_oriShowIndex); + std::shared_ptr data(new detData(IN_cameraKeyName, IN_algoThreadName, IN_SN, IN_oriShowIndex)); data->dManager = this; //detDatas.push_back(data); map.insert({ data->timeCode,data }); dataMutex.unlock(); - detData* dataPtr = getDetData(data->timeCode); - + std::shared_ptr dataPtr = getDetData(data->timeCode); + if (dataPtr == nullptr) qDebug() << "´´½¨ÐÂÈÝÆ÷ʧ°Ü"; return dataPtr; } - detData* getDetData(unsigned long long timeCode) + std::shared_ptr getDetData(unsigned long long timeCode) { dataMutex.lock(); - std::unordered_map::iterator - it = map.find(timeCode); + auto it = map.find(timeCode); if (it != map.end()) { dataMutex.unlock(); @@ -215,11 +181,11 @@ public: bool deleteDetData(unsigned long long timeCode) { dataMutex.lock(); - std::unordered_map::iterator it = map.find(timeCode); + auto it = map.find(timeCode); if (it != map.end()) { it->second->imgMutex.lock(); - delete it->second; + //delete it->second; map.erase(it); dataMutex.unlock(); return true; @@ -262,23 +228,29 @@ class threadManager : public QThread public: explicit threadManager(QObject* parent = nullptr); QMutex queueMutex; - cameraImages cameraImgs; - QQueue detDataQueue; + QQueue> detDataQueue; sqlManager* sql; handleAiModel models;//³õʼ»¯ģÐÍ autoDelete* autoDeleteThread; QMutex insertQueueMutex; - QQueueinsertQueue; + QQueue>insertQueue; std::vectoralgoThreadList; void run(); - void addTask(detData*); - bool getFreeThread(); - bool addTaskFreeThread(detData*); + void stop() + { + runFlag = false; + this->terminate(); + } + + void addTask(std::shared_ptr ); + bool addTaskFreeThread(std::shared_ptr ); sncodeCls snDatas; ~threadManager(); private: - QListimgWaitList; + bool runFlag = true; + QList>imgWaitList; + std::vector>deleteVec; }; #pragma once diff --git a/HanddleAI/HandleAiUi-new/back/triggerManager.cpp b/HanddleAI/HandleAiUi-new/back/triggerManager.cpp index c5219482..96d7d522 100644 --- a/HanddleAI/HandleAiUi-new/back/triggerManager.cpp +++ b/HanddleAI/HandleAiUi-new/back/triggerManager.cpp @@ -7,24 +7,27 @@ static correctionStruct* correctionData; void triggerManager::decodeCameraCMD(QByteArray byte) { -#if 1 + //if (checkTrigger(1, 2, byte) == true) { - detData* data = dManager->insertDetData("Camera1", "Thread3", "TEST", 0); + std::shared_ptr data = dManager->insertDetData("Camera1", "Thread3", "TEST", 0); data->correctionData = correctionData; _threadManager->addTask(data);//Ìí¼ÓÈÎÎñ auto camera = _cameraManager->cameras.find("123"); - camera->second->Process(data); + if(camera != _cameraManager->cameras.end()) + camera->second->Process(data); } //if (checkTrigger(2, 2, byte) == true) { - detData* data = dManager->insertDetData("Camera1", "Thread2", "TEST", 0); + std::shared_ptr data = dManager->insertDetData("Camera1", "Thread2", "TEST", 0); data->correctionData = correctionData; _threadManager->addTask(data);//Ìí¼ÓÈÎÎñ - auto camera = _cameraManager->cameras.find("Vir-CA013-20GC"); - camera->second->Process(data); + auto camera = _cameraManager->cameras.find("456"); + if (camera != _cameraManager->cameras.end()) + camera->second->Process(data); } return; +#if 0 if (byte.isEmpty()) return; double cameraData = 0; @@ -45,14 +48,14 @@ void triggerManager::decodeCameraCMD(QByteArray byte) correctionData->in_Y_Y0Z = { -1147.29,-1147.28,-940.82 }; correctionData->in_Z_Y0Z = { 118.15,-228.19,-256.5 }; correctionData->in_X_Y0Z_Value = { -36.652200,-36.7302,41.0436 }; - detData* data = dManager->insertDetData("Camera1", "correctionDataThread", "TEST", 0); + std::shared_ptr data = dManager->insertDetData("Camera1", "correctionDataThread", "TEST", 0); data->correctionData = correctionData; _threadManager->addTask(data);//Ìí¼ÓÈÎÎñ correctionData = nullptr; } if (checkTrigger(1, 2, byte) == true) { - detData* data = dManager->insertDetData("Camera1", "Thread3", "TEST", 0); + std::shared_ptr data = dManager->insertDetData("Camera1", "Thread3", "TEST", 0); data->correctionData = correctionData; _threadManager->addTask(data);//Ìí¼ÓÈÎÎñ auto camera = _cameraManager->cameras.find("123"); @@ -60,7 +63,7 @@ void triggerManager::decodeCameraCMD(QByteArray byte) } if (checkTrigger(2, 2, byte) == true) { - detData* data = dManager->insertDetData("Camera1", "Thread3", "TEST", 0); + std::shared_ptr data = dManager->insertDetData("Camera1", "Thread3", "TEST", 0); data->correctionData = correctionData; _threadManager->addTask(data);//Ìí¼ÓÈÎÎñ auto camera = _cameraManager->cameras.find("456"); @@ -135,7 +138,7 @@ void triggerManager::decodeCameraCMD(QByteArray byte) //ÉÏλ»úУÕýÍê³ɣ¬½«¼ĴæÆ÷274ÖÃΪ1£¬²¢½«½á¹û°´Õն¨ÒåXYZ¹æÔò·ÅÈë310~336ÖÐ if (armPos == 9) { - detData* data = dManager->insertDetData("Camera1", "correctionDataThread", "TEST", 0); + std::shared_ptr data = dManager->insertDetData("Camera1", "correctionDataThread", "TEST", 0); data->correctionData = correctionData; _threadManager->addTask(data);//Ìí¼ÓÈÎÎñ correctionData = nullptr; diff --git a/HanddleAI/HandleAiUi-new/back/triggerManager.h b/HanddleAI/HandleAiUi-new/back/triggerManager.h index 3f0cd71a..1eafdf85 100644 --- a/HanddleAI/HandleAiUi-new/back/triggerManager.h +++ b/HanddleAI/HandleAiUi-new/back/triggerManager.h @@ -69,9 +69,7 @@ public: ~triggerManager() { runFlag = false; - QThread::msleep(100); delete trigger; - QThread::msleep(1000); } void init(backEndManager* input); void run() @@ -83,6 +81,11 @@ public: QThread::msleep(1000); } } + void stop() + { + runFlag = false; + this->terminate(); + } void reciveCommond() { @@ -101,7 +104,6 @@ public: decodeCameraCMD(readByte); //workThread->snDatas.checkSnFromWaittingVec(readByte); } - //·¢ËÍÊý¾ݵ½ bool sendFinsMsg(QString cmdx) { diff --git a/HanddleAI/HandleAiUi-new/front/pages/logPageWidget.h b/HanddleAI/HandleAiUi-new/front/pages/logPageWidget.h index 58ce282b..d0c9740a 100644 --- a/HanddleAI/HandleAiUi-new/front/pages/logPageWidget.h +++ b/HanddleAI/HandleAiUi-new/front/pages/logPageWidget.h @@ -216,11 +216,11 @@ public: globalQtTextEdit = textWidget; //globalQtTextEdit->setUpdatesEnabled(false); - qInstallMessageHandler(MessageHandler); + /* qInstallMessageHandler(MessageHandler); qInfo() << "This is a Qt Info message."; qWarning() << "This is a Qt Warning message."; qDebug() << "This is a Qt Debug message."; - qCritical() << "This is a Qt Critical message."; + qCritical() << "This is a Qt Critical message.";*/ //qFatal("This is a Qt Fatal message."); } } diff --git a/HanddleAI/HandleAiUi-new/globalStruct.h b/HanddleAI/HandleAiUi-new/globalStruct.h index d94dadcc..f23dde42 100644 --- a/HanddleAI/HandleAiUi-new/globalStruct.h +++ b/HanddleAI/HandleAiUi-new/globalStruct.h @@ -2,6 +2,7 @@ #include #include #include +#pragma execution_character_set("utf-8") #define sColor_blue "51, 56, 69" #define sColor_blueWithWhite "64, 68, 81" #define sColor_blueWithBlack "46, 50, 52" diff --git a/HanddleAI/HandleAiUi-new/icon.qrc b/HanddleAI/HandleAiUi-new/icon.qrc index 857e6a97..d337b9a2 100644 --- a/HanddleAI/HandleAiUi-new/icon.qrc +++ b/HanddleAI/HandleAiUi-new/icon.qrc @@ -30,5 +30,7 @@ icon/setting.png icon/switch.png icon/waitting.png + icon/loading.gif + icon/sql.png diff --git a/HanddleAI/HandleAiUi-new/icon/loading.gif b/HanddleAI/HandleAiUi-new/icon/loading.gif new file mode 100644 index 00000000..89ef8d0b Binary files /dev/null and b/HanddleAI/HandleAiUi-new/icon/loading.gif differ diff --git a/HanddleAI/HandleAiUi-new/icon/sql.png b/HanddleAI/HandleAiUi-new/icon/sql.png new file mode 100644 index 00000000..af012423 Binary files /dev/null and b/HanddleAI/HandleAiUi-new/icon/sql.png differ diff --git a/HanddleAI/HandleAiUi-new/main.cpp b/HanddleAI/HandleAiUi-new/main.cpp index a4174cf2..73d4e0c0 100644 --- a/HanddleAI/HandleAiUi-new/main.cpp +++ b/HanddleAI/HandleAiUi-new/main.cpp @@ -12,14 +12,16 @@ #include #include #include +#include void connectSignalAndSlots(MainWindow* front, backEndManager* back) { QObject::connect(back, &backEndManager::sendPixmapImageWidget, front, &MainWindow::recvPixmapImageWidget); + QObject::connect(back, &backEndManager::sendInitFinished, front, &MainWindow::recvInitFinished); } int main(int argc, char* argv[]) { QApplication a(argc, argv); - + LogMsg::Create(LogMsg::LogMsgType::DebugMsg); //检测是否已运行 QSystemSemaphore sema("monkey", 1, QSystemSemaphore::Open); sema.acquire(); @@ -35,10 +37,12 @@ int main(int argc, char* argv[]) ////////// qRegisterMetaType("imgWidgetShowType"); qRegisterMetaType("showImgPack"); - backEndManager _backEnd; + MainWindow w; - connectSignalAndSlots(&w,&_backEnd); w.show(); + backEndManager _backEnd; + connectSignalAndSlots(&w,&_backEnd); + _backEnd.init(); return a.exec(); diff --git a/HanddleAI/HandleAiUi-new/mainwindow.cpp b/HanddleAI/HandleAiUi-new/mainwindow.cpp index ce0fe348..be6a8157 100644 --- a/HanddleAI/HandleAiUi-new/mainwindow.cpp +++ b/HanddleAI/HandleAiUi-new/mainwindow.cpp @@ -3,7 +3,6 @@ #include "titlebar.h" #include "mywidget.h" #include "cfgwindow.h" -#include "processtask.h" #include "hpromptwidget.h" #include "HMessageBox.h" #include @@ -133,7 +132,10 @@ void MainWindow::topBarInit() "border: 0px solid red;" // ÏÔʽÉèÖñ߿ò "border-radius: 0px;" // ÉèÖñ߿ò°뾶Ϊ0£¬ȷ±£ûÓÐԲ½Ç "}" - "QPushButton:hover { background-color: rgb(223, 185, 146); }").arg(sColor_Gold)); // ÉèÖÃ͸Ã÷±³¾°ºÍÐüͣʱµı³¾°ɫ + "QPushButton:focus {" + " outline: none;" + "}" + "QPushButton:hover { background-color: rgb(%1); }").arg(sColor_Gold)); // ÉèÖÃ͸Ã÷±³¾°ºÍÐüͣʱµı³¾°ɫ minimizeButton->setFixedHeight(topBarHeight); minimizeButton->setFixedWidth(buttonWidth); QObject::connect(minimizeButton, &QPushButton::clicked, this, &MainWindow::minimizeWindow); // µã»÷×îС»¯°´ť @@ -146,6 +148,9 @@ void MainWindow::topBarInit() "border: 0px solid red;" // ÏÔʽÉèÖñ߿ò "border-radius: 0px;" // ÉèÖñ߿ò°뾶Ϊ0£¬ȷ±£ûÓÐԲ½Ç "}" + "QPushButton:focus {" + " outline: none;" + "}" "QPushButton:hover { background-color: rgb(%1); }").arg(sColor_Gold)); // ÉèÖÃ͸Ã÷±³¾°ºÍÐüͣʱµı³¾°ɫ maximizeRestoreButton->setFixedHeight(topBarHeight); maximizeRestoreButton->setFixedWidth(buttonWidth); @@ -161,6 +166,9 @@ void MainWindow::topBarInit() "border: 0px solid red;" // ÏÔʽÉèÖñ߿ò "border-radius: 0px;" // ÉèÖñ߿ò°뾶Ϊ0£¬ȷ±£ûÓÐԲ½Ç "}" + "QPushButton:focus {" + " outline: none;" + "}" "QPushButton:hover { background-color: rgb(%1); }").arg(sColor_Red)); // ÉèÖÃ͸Ã÷±³¾°ºÍÐüͣʱµı³¾°ɫ exitButton->setFixedHeight(topBarHeight); exitButton->setFixedWidth(buttonWidth); diff --git a/HanddleAI/HandleAiUi-new/mainwindow.h b/HanddleAI/HandleAiUi-new/mainwindow.h index 5ebd55b8..bd444230 100644 --- a/HanddleAI/HandleAiUi-new/mainwindow.h +++ b/HanddleAI/HandleAiUi-new/mainwindow.h @@ -94,7 +94,7 @@ public slots: blurEffectAnimation->setStartValue(0); blurEffectAnimation->setEndValue(20); blurEffectAnimation->start(); - stackedWidgets.setCurrentIndex(2); + stackedWidgets.setCurrentIndex(1); blurEffectAnimation->setStartValue(20); blurEffectAnimation->setEndValue(0); blurEffectAnimation->start(); @@ -119,12 +119,15 @@ public slots: else if (input == false)stackedWidgets.setCurrentIndex(2); } - //带数据的 void recvPixmapImageWidget(showImgPack* pack) { _displayWidget->_ImageWidgetManager.showImg(pack->img, pack->type, pack->index); delete pack; } + void recvInitFinished(bool input) + { + + } signals: protected: @@ -136,7 +139,6 @@ protected: } QMainWindow::mousePressEvent(event); } - void mouseMoveEvent(QMouseEvent* event) override { if (event->buttons() == Qt::LeftButton && isMoving) { QPoint delta = event->globalPos() - startPos; @@ -144,7 +146,6 @@ protected: } QMainWindow::mouseMoveEvent(event); } - void mouseReleaseEvent(QMouseEvent* event) override { if (event->button() == Qt::LeftButton) { isMoving = false; diff --git a/HanddleAI/HandleAiUi-new/uiModule/uiModule_dumpToExcel.h b/HanddleAI/HandleAiUi-new/uiModule/uiModule_dumpToExcel.h index 2a22b4dc..e98108c4 100644 --- a/HanddleAI/HandleAiUi-new/uiModule/uiModule_dumpToExcel.h +++ b/HanddleAI/HandleAiUi-new/uiModule/uiModule_dumpToExcel.h @@ -12,6 +12,9 @@ #include #include #include +#include +#include +#include #define cacheSqlFileName "sqlite-database-copy.db" //#include "xlsxdocument.h" class TimeRangeSelectorWidget : public QWidget { @@ -25,7 +28,7 @@ public: { int time1 = startTimeEdit->time().hour() * 60 + startTimeEdit->time().minute(); int time2 = endTimeEdit->time().hour() * 60 + startTimeEdit->time().minute(); - return { min(time1,time2),max(time1,time2) }; + return { std::min(time1,time2),std::max(time1,time2) }; } QTime getStartTime() const { diff --git a/HanddleAI/HandleAiUi-new/uiModule/uiModule_imageView.h b/HanddleAI/HandleAiUi-new/uiModule/uiModule_imageView.h index cf9f99e7..749514f4 100644 --- a/HanddleAI/HandleAiUi-new/uiModule/uiModule_imageView.h +++ b/HanddleAI/HandleAiUi-new/uiModule/uiModule_imageView.h @@ -45,7 +45,6 @@ public: "background-image: url(:/topBar/icon/waitting.png);" "background-repeat: no-repeat;" "background-position: center center;" - "background-size: contain;" "}"); mutex.unlock(); } diff --git a/HanddleAI/back.zip b/HanddleAI/back.zip new file mode 100644 index 00000000..0c6e3433 Binary files /dev/null and b/HanddleAI/back.zip differ diff --git a/lib/Hd_3DCameraLMI_module_PointLazer.exp b/lib/Hd_3DCameraLMI_module_PointLazer.exp index b0d66668..c128f721 100644 Binary files a/lib/Hd_3DCameraLMI_module_PointLazer.exp and b/lib/Hd_3DCameraLMI_module_PointLazer.exp differ diff --git a/lib/Hd_3DCameraLMI_module_PointLazer.lib b/lib/Hd_3DCameraLMI_module_PointLazer.lib index b04150d6..b506c2ad 100644 Binary files a/lib/Hd_3DCameraLMI_module_PointLazer.lib and b/lib/Hd_3DCameraLMI_module_PointLazer.lib differ diff --git a/lib/Hd_DalsaCamera_module.exp b/lib/Hd_DalsaCamera_module.exp index 9d36f208..d51dd347 100644 Binary files a/lib/Hd_DalsaCamera_module.exp and b/lib/Hd_DalsaCamera_module.exp differ diff --git a/lib/Hd_DalsaCamera_module.lib b/lib/Hd_DalsaCamera_module.lib index 9c451b2e..c271a24e 100644 Binary files a/lib/Hd_DalsaCamera_module.lib and b/lib/Hd_DalsaCamera_module.lib differ diff --git a/lib/Hd_FinsTcp_module.exp b/lib/Hd_FinsTcp_module.exp index 53c3f41b..63243947 100644 Binary files a/lib/Hd_FinsTcp_module.exp and b/lib/Hd_FinsTcp_module.exp differ diff --git a/lib/Hd_FinsTcp_module.lib b/lib/Hd_FinsTcp_module.lib index f679fdae..e7784b3e 100644 Binary files a/lib/Hd_FinsTcp_module.lib and b/lib/Hd_FinsTcp_module.lib differ diff --git a/lib/Hd_MvCamera_module_GENTL.exp b/lib/Hd_MvCamera_module_GENTL.exp index 588ebc79..f0a89b55 100644 Binary files a/lib/Hd_MvCamera_module_GENTL.exp and b/lib/Hd_MvCamera_module_GENTL.exp differ diff --git a/lib/Hd_MvCamera_module_GENTL.lib b/lib/Hd_MvCamera_module_GENTL.lib index 578b535e..4010f0a3 100644 Binary files a/lib/Hd_MvCamera_module_GENTL.lib and b/lib/Hd_MvCamera_module_GENTL.lib differ diff --git a/lib/Hd_MvCamera_module_GIGE.exp b/lib/Hd_MvCamera_module_GIGE.exp index 0c571208..baf010b9 100644 Binary files a/lib/Hd_MvCamera_module_GIGE.exp and b/lib/Hd_MvCamera_module_GIGE.exp differ diff --git a/lib/Hd_MvCamera_module_GIGE.lib b/lib/Hd_MvCamera_module_GIGE.lib index f5ba12df..110ae8d7 100644 Binary files a/lib/Hd_MvCamera_module_GIGE.lib and b/lib/Hd_MvCamera_module_GIGE.lib differ diff --git a/lib/Hd_ResultsSummary_module.exp b/lib/Hd_ResultsSummary_module.exp index 59f77271..72272a70 100644 Binary files a/lib/Hd_ResultsSummary_module.exp and b/lib/Hd_ResultsSummary_module.exp differ diff --git a/lib/Hd_ResultsSummary_module.lib b/lib/Hd_ResultsSummary_module.lib index ff33633f..8baafc1c 100644 Binary files a/lib/Hd_ResultsSummary_module.lib and b/lib/Hd_ResultsSummary_module.lib differ diff --git a/lib/Hd_SocketModule_ModbusTcp.exp b/lib/Hd_SocketModule_ModbusTcp.exp index b96d9533..25890329 100644 Binary files a/lib/Hd_SocketModule_ModbusTcp.exp and b/lib/Hd_SocketModule_ModbusTcp.exp differ diff --git a/lib/Hd_SocketModule_ModbusTcp.lib b/lib/Hd_SocketModule_ModbusTcp.lib index 7d987e79..b3ff8f19 100644 Binary files a/lib/Hd_SocketModule_ModbusTcp.lib and b/lib/Hd_SocketModule_ModbusTcp.lib differ diff --git a/lib/Hd_VirtualCamera_ReadFile.exp b/lib/Hd_VirtualCamera_ReadFile.exp index 2ab8a327..97564e7e 100644 Binary files a/lib/Hd_VirtualCamera_ReadFile.exp and b/lib/Hd_VirtualCamera_ReadFile.exp differ diff --git a/lib/Hd_VirtualCamera_ReadFile.lib b/lib/Hd_VirtualCamera_ReadFile.lib index 758ab845..6ea40c15 100644 Binary files a/lib/Hd_VirtualCamera_ReadFile.lib and b/lib/Hd_VirtualCamera_ReadFile.lib differ