Files
eUi/src/Core/detProcess.hpp
T

144 lines
4.7 KiB
C++
Raw Normal View History

2025-06-05 11:30:12 +08:00
#include <qthread.h>
#include <detData.h>
2025-03-28 18:33:43 +08:00
#include <imgSaveThreadManager.h>
//#include <appCore.hpp>
//#include <appConfig.h>
//#include <lightSource.hpp>
2025-06-05 11:30:12 +08:00
#include <cameraManager.h>
//#include <manualDetThread.h>
2025-06-05 11:30:12 +08:00
#include <triggerManager.h>
#include <detThreadManager.h>
//#include <simpleSiemensTcp.hpp>
//#include <summaryData.hpp>
//#include <pluginManager.h>
2025-06-05 11:30:12 +08:00
#include <sql/qSqlBase.hpp>
//#include <mission/952-11.hpp>
2025-06-05 11:30:12 +08:00
#include <mission/952-15-H.h>
class detProcess : public QThread
{
public:
2025-06-05 11:30:12 +08:00
detDataManager _detDataManager; // 检测数据管理器 需要初始化
imgSaveThreadManager _imgSaveThreadManager;// 保存图像线程 需要初始化
triggerManager _triggerManager; // 触发管理器
handleAiModelManager _handleAiModelManager;// 模型管理器
detThreadManager _threadManager;
detProcess(){
//_threadManager.initialization(this);
//_manualDetThread.initialization(this);
//_cameraManager.initialization();
//_triggerManager.initialization(this);
}
void initConfig(nlohmann::json& json, qtFuncBridge* bridgeIn) {
bridge = bridgeIn;
_cameraManager.initConfig(json, bridgeIn);
_triggerManager.initConfig(this, bridgeIn, json["Triggers"]);
_threadManager.initConfig(this, bridgeIn);
}
bool waitrForInitResult(serviceModule* ptr, int overtimeS = 999999) {
int overTimeMs = overtimeS * 1000;
2025-03-28 18:33:43 +08:00
int timecnt = 0;
2025-06-05 11:30:12 +08:00
while (timecnt <= overTimeMs) {
2025-03-28 18:33:43 +08:00
if (ptr->status != NotInit)
break;
QThread::msleep(100);
2025-06-05 11:30:12 +08:00
timecnt += 100;
2025-03-28 18:33:43 +08:00
}
if (timecnt > overTimeMs)
return false;
if (ptr->status == InitFailure)
return false;
return true;
}
2025-06-05 11:30:12 +08:00
cameraManager _cameraManager; // 相机管理器
// lightSourceManager _lightSourceManager; // 光源管理器
// summaryData* _summaryData; // 总结数据模块
// autoDelete* autoDeleteThread;
SQLiteDB* dataBase;
// hardwareMonitor _hardwareMonitor; // 硬件监控,如CPU、内存
// camera* _2dCamera = nullptr, *_3dCamera = nullptr;
M952_15_H currentMission;
// 初始化并运行主流程
void run() {
#if 1
//dataBase = new SQLiteDB("generalDatabase");
_cameraManager.start();
_handleAiModelManager.start();
//_lightSourceManager.start();
_triggerManager.start();
2025-06-05 11:30:12 +08:00
/*
autoDeleteThread = new autoDelete(
{ _core._appConfig.oriImgSavePath, _core._appConfig.resImgSavePath },
autoDelete::sizeOverOrDayBefore, 3600);
_summaryData = new summaryData(&_triggerManager);
2025-06-05 11:30:12 +08:00
*/
bool res1 = waitrForInitResult(&_cameraManager);
2025-06-05 11:30:12 +08:00
//bool res2 = waitrForInitResult(&_handleAiModelManager);
bool res3 = waitrForInitResult(&_triggerManager);
2025-06-05 11:30:12 +08:00
if (res1 == true && res3 == true) {
currentMission.init(
&_cameraManager,
&_triggerManager,
&_detDataManager,
&_threadManager,
2025-06-05 11:30:12 +08:00
dataBase, bridge
);
_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);
});
bridge->loginResult(InitOK);
}
else {
bridge->loginResult(InitFailure);
}
#endif
}
2025-06-05 11:30:12 +08:00
// 通用的检测结果处理
void detectionResultHandle(std::shared_ptr<detData> data) {
// 计算处理总耗时(CT)
auto totalCt = std::chrono::duration_cast<std::chrono::milliseconds>(data->algoEndTime - data->algoStartTime);
qDebug() << QString::fromStdString(data->cameraKeyName) << "CT<<<" << totalCt.count() << "MS";
2025-06-05 11:30:12 +08:00
// 将耗时数据保存入数据库或日志(伪代码)
// data->sqlVec.push_back({ "SN", data->SNcode });
// data->sqlVec.push_back({ "totalCt", std::to_string(totalCt.count()) + "ms" });
2025-06-05 11:30:12 +08:00
// 发回PLC数据
for (auto writeBackStr : data->writeBackData)
_triggerManager.sendFinsMsg(writeBackStr);
2025-06-05 11:30:12 +08:00
// 异步保存检测图像
std::async(std::launch::async, &imgSaveThreadManager::saveRes, &_imgSaveThreadManager, data);
2025-06-05 11:30:12 +08:00
// 删除数据释放资源
detDataManager* dManager = data->dManager;
data->dManager->deleteDetData(data->timeCode);
}
2025-06-05 11:30:12 +08:00
private:
qtFuncBridge* bridge;
};
2025-06-05 11:30:12 +08:00
#pragma once