2025-03-21 18:25:54 +08:00
|
|
|
#include <qthread.h>
|
2025-03-27 18:36:54 +08:00
|
|
|
#include <detData.h>
|
2025-03-28 18:33:43 +08:00
|
|
|
#include <imgSaveThreadManager.h>
|
|
|
|
|
|
2025-03-27 18:36:54 +08:00
|
|
|
//#include <appCore.hpp>
|
|
|
|
|
//#include <appConfig.h>
|
|
|
|
|
//#include <lightSource.hpp>
|
|
|
|
|
//#include <cameraManager.h>
|
|
|
|
|
//#include <manualDetThread.h>
|
|
|
|
|
//#include <triggerManager.h>
|
|
|
|
|
|
|
|
|
|
//#include <simpleSiemensTcp.hpp>
|
|
|
|
|
//#include <summaryData.hpp>
|
|
|
|
|
//#include <pluginManager.h>
|
|
|
|
|
//#include <sql/qSqlBase.hpp>
|
|
|
|
|
//#include <mission/952-11.hpp>
|
|
|
|
|
//#include <mission/952-15-H.h>
|
2025-03-21 18:25:54 +08:00
|
|
|
class detProcess : public QThread
|
|
|
|
|
{
|
|
|
|
|
public:
|
2025-03-28 18:33:43 +08:00
|
|
|
detDataManager _detDataManager;//检测中的数据 不需要初始化
|
|
|
|
|
imgSaveThreadManager _imgSaveThreadManager;//存图线程 不需要初始化
|
|
|
|
|
triggerManager _triggerManager;//触发器
|
|
|
|
|
handleAiModelManager _handleAiModelManager;//模型
|
2025-03-21 18:25:54 +08:00
|
|
|
detProcess()
|
|
|
|
|
{
|
2025-03-27 18:36:54 +08:00
|
|
|
//_threadManager.initialization(this);
|
|
|
|
|
//_manualDetThread.initialization(this);
|
|
|
|
|
//_cameraManager.initialization();
|
|
|
|
|
//_triggerManager.initialization(this);
|
2025-03-21 18:25:54 +08:00
|
|
|
|
|
|
|
|
}
|
2025-03-28 18:33:43 +08:00
|
|
|
bool waitrForInitResult(serviceModule* ptr)
|
|
|
|
|
{
|
|
|
|
|
int overTimeMs = 300000;
|
|
|
|
|
int timecnt = 0;
|
|
|
|
|
while (timecnt <= overTimeMs)
|
|
|
|
|
{
|
|
|
|
|
if (ptr->status != NotInit)
|
|
|
|
|
break;
|
|
|
|
|
QThread::msleep(100);
|
|
|
|
|
timecnt+=100;
|
|
|
|
|
}
|
|
|
|
|
if (timecnt > overTimeMs)
|
|
|
|
|
return false;
|
2025-06-01 16:36:42 +08:00
|
|
|
|
2025-03-28 18:33:43 +08:00
|
|
|
if (ptr->status == InitFailure)
|
|
|
|
|
return false;
|
|
|
|
|
return true;
|
|
|
|
|
}
|
2025-03-27 18:36:54 +08:00
|
|
|
//cameraManager _cameraManager;//相机
|
|
|
|
|
////lightSourceManager _lightSourceManager;//光源
|
2025-03-21 18:25:54 +08:00
|
|
|
|
2025-03-27 18:36:54 +08:00
|
|
|
// summaryData* _summaryData;// 汇总数据
|
|
|
|
|
// autoDelete* autoDeleteThread;
|
|
|
|
|
// SQLiteDB* dataBase;
|
|
|
|
|
// //hardwareMonitor _hardwareMonitor;//硬件监控 CPU 内存
|
|
|
|
|
// //相机
|
|
|
|
|
// camera* _2dCamera = nullptr, *_3dCamera = nullptr;
|
|
|
|
|
// M952_15_H currentMission;
|
|
|
|
|
//初始化
|
2025-03-21 18:25:54 +08:00
|
|
|
void run()
|
|
|
|
|
{
|
2025-03-27 18:36:54 +08:00
|
|
|
#if 0
|
2025-03-21 18:25:54 +08:00
|
|
|
dataBase;// = new SQLiteDB("generalDatabase");
|
|
|
|
|
_cameraManager.start();
|
|
|
|
|
_handleAiModelManager.start();
|
|
|
|
|
//_lightSourceManager.start();
|
|
|
|
|
_triggerManager.start();
|
|
|
|
|
QThread::msleep(1000);
|
|
|
|
|
// _heartbeatThread = new heartbeatThread(&_triggerManager, _core._appConfig._triggerStruct.heartCmd);
|
|
|
|
|
autoDeleteThread =
|
|
|
|
|
new autoDelete({ _core._appConfig.oriImgSavePath,_core._appConfig .resImgSavePath},
|
|
|
|
|
autoDelete::sizeOverOrDayBefore, 3600);
|
|
|
|
|
_summaryData = new summaryData(&_triggerManager);
|
|
|
|
|
bool res1 = waitrForInitResult(&_cameraManager);
|
|
|
|
|
bool res2 = waitrForInitResult(&_handleAiModelManager);
|
|
|
|
|
bool res3 = waitrForInitResult(&_triggerManager);
|
|
|
|
|
std::cout << "_cameraManager-initReuslt-->" << std::to_string(res1) << "\n"
|
|
|
|
|
<< "_handleAiModelManager-initReuslt-->" << std::to_string(res2) << "\n"
|
|
|
|
|
<< "_triggerManager-initReuslt-->" << std::to_string(res3) << "\n" << std::endl;
|
|
|
|
|
if (res1 == true && res2 == true && res3 == true)
|
|
|
|
|
{
|
|
|
|
|
currentMission.init(&_cameraManager,
|
|
|
|
|
&_triggerManager,
|
|
|
|
|
&_detDataManager,
|
|
|
|
|
&_threadManager,
|
|
|
|
|
_summaryData,
|
|
|
|
|
dataBase);
|
|
|
|
|
_threadManager.registerResultHandleCallback([this](std::shared_ptr<detData>data) {detectionResultHandle(data); });
|
|
|
|
|
_threadManager.registerProcessAlgoCallback
|
|
|
|
|
([this](std::shared_ptr<detData>data, handleAiModelManager* _handleAiModelManager) {return currentMission.processAlgo(data, _handleAiModelManager);});
|
|
|
|
|
emit _core._qtFunc.sendInitFinished(InitOK);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
emit _core._qtFunc.sendInitFinished(InitFailure);
|
2025-03-27 18:36:54 +08:00
|
|
|
#endif
|
2025-03-21 18:25:54 +08:00
|
|
|
}
|
2025-03-27 18:36:54 +08:00
|
|
|
//通用的结果处理
|
2025-03-21 18:25:54 +08:00
|
|
|
void detectionResultHandle(std::shared_ptr<detData>data)
|
|
|
|
|
{
|
2025-03-27 18:36:54 +08:00
|
|
|
#if 0
|
|
|
|
|
//ct计算以及发送到界面
|
2025-03-21 18:25:54 +08:00
|
|
|
auto totalCt = std::chrono::duration_cast<std::chrono::milliseconds>(data->algoEndTime - data->algoStartTime);
|
|
|
|
|
qDebug() << QString::fromStdString(data->cameraKeyName) << "CT<<<" << totalCt.count() << "MS";
|
|
|
|
|
data->sqlVec.push_back({ "SN",data->SNcode });
|
|
|
|
|
|
|
|
|
|
data->sqlVec.push_back({ "totalCt",std::to_string(totalCt.count())+"ms"});
|
|
|
|
|
emit _core._qtFunc.addCtData(data->algoThreadIndex, totalCt.count());
|
|
|
|
|
//SQL
|
|
|
|
|
//std::vector<sqlData> sqlDatas;
|
|
|
|
|
//for (auto sqlData : data->sqlVec)
|
|
|
|
|
// sqlDatas.push_back({ sqlData.first, sqlData.second });
|
|
|
|
|
// _core._appConfig._sqlManager.addData(data->SNcode, sqlDatas);
|
|
|
|
|
|
2025-03-27 18:36:54 +08:00
|
|
|
//写入plc
|
2025-03-21 18:25:54 +08:00
|
|
|
for (auto writeBackStr : data->writeBackData)
|
|
|
|
|
_triggerManager.sendFinsMsg(writeBackStr);
|
|
|
|
|
|
2025-03-27 18:36:54 +08:00
|
|
|
//储存结果图
|
2025-03-21 18:25:54 +08:00
|
|
|
std::async(std::launch::async, &imgSaveThreadManager::saveRes, &_imgSaveThreadManager, data);
|
|
|
|
|
|
2025-03-27 18:36:54 +08:00
|
|
|
//删除 不再持有
|
2025-03-21 18:25:54 +08:00
|
|
|
detDataManager* dManager = data->dManager;
|
|
|
|
|
data->dManager->deleteDetData(data->timeCode);
|
2025-03-27 18:36:54 +08:00
|
|
|
#endif
|
2025-03-21 18:25:54 +08:00
|
|
|
}
|
2025-03-28 18:33:43 +08:00
|
|
|
private:
|
2025-03-21 18:25:54 +08:00
|
|
|
|
|
|
|
|
public slots:
|
|
|
|
|
};
|
|
|
|
|
#pragma once
|