V20260829-2.6.1

完成框架目录和模块重构;新增核心、单例、工具、加密及框架 SDK;统一任务、相机和 RPC 接口,并增加离线检测、相机标定、备份恢复、版本管理、崩溃守护和心跳监控功能。
This commit is contained in:
2026-09-20 16:01:09 +08:00
parent ee97a4ab2c
commit e3f7733316
464 changed files with 55154 additions and 47963 deletions
@@ -1,4 +1,4 @@
#include "Hd_CameraModule_HIK_PCIE.h"
#include "Hd_CameraModule_HIK_PCIE.h"
using namespace std;
#include <QTextCodec>
#include <thread>
@@ -118,7 +118,7 @@ bool connectDevice()
int cameraIndex = SearchDevice();
if (cameraIndex == -1) {
//未匹配到相机
qDebug() << "[Waring] " << "Hd_CameraModule_HIK not match --CameraName:" << QString::fromStdString(Username);
qDebug() << "Hd_CameraModule_HIK not match --CameraName:" << QString::fromStdString(Username);
lastError = "找不到相机" + QString::fromStdString(Username);
return false;
}
@@ -130,9 +130,14 @@ bool connectDevice()
//MV_CC_DestroyHandle(handle);
}
//打开相机
MV_CC_CreateHandleByGenTL(&handle, m_stDevList.pDeviceInfo[cameraIndex]);
int nRet = MV_CC_OpenDevice(handle);
int nRet = MV_CC_CreateHandleByGenTL(&handle, m_stDevList.pDeviceInfo[cameraIndex]);
if (MV_OK != nRet)
{
handle = NULL;
lastError = QString("MV_CC_CreateHandleByGenTL failed, nRet=0x%1").arg(QString::number(nRet, 16));
return false;
}
nRet = MV_CC_OpenDevice(handle);
// //加载用户集,相机设置应当UserSet1
nRet = MV_CC_SetEnumValueByString(handle, "UserSetSelector", "UserSet1");
if (MV_OK != nRet)
@@ -154,28 +159,28 @@ bool connectDevice()
}
void SetExposureTime(float exposureValue)
{
qDebug() << "[INFO] " << "exposureValue:" << exposureValue;
qDebug() << "exposureValue:" << exposureValue;
MV_CC_SetEnumValue(handle, "ExposureAuto", MV_EXPOSURE_AUTO_MODE_OFF);
MV_CC_SetFloatValue(handle, "ExposureTime", exposureValue);
}
void SetGain(float GainValue)
{
qDebug() << "[INFO] " << "GainValue:" << GainValue;
qDebug() << "GainValue:" << GainValue;
MV_CC_SetEnumValue(handle, "GainAuto", 0);
MV_CC_SetFloatValue(handle, "Gain", GainValue);
}
void __stdcall ReconnectDevice(unsigned int nMsgType, void* pUser) {
qDebug() << "[Error] " << " MV camera disconnects!";
qDebug() << " MV camera disconnects!";
if (nMsgType == MV_EXCEPTION_DEV_DISCONNECT && cameraStatus.load() == CONNECTED) {
// 防止重复启动重连线程
bool expected = false;
if (!reconnecting.compare_exchange_strong(expected, true)) {
qDebug() << "[Warning] Reconnect already in progress, skipping duplicate request";
qDebug() << "Reconnect already in progress, skipping duplicate request";
return;
}
@@ -203,7 +208,7 @@ void __stdcall ReconnectDevice(unsigned int nMsgType, void* pUser) {
}
// 如果runFlag为false,线程退出
qDebug() << "[Info] reconnect thread stopped (runFlag=false)";
qDebug() << "reconnect thread stopped (runFlag=false)";
cameraStatus.store(DISCONNECTED);
reconnecting.store(false);
}).detach();
@@ -252,7 +257,7 @@ void __stdcall ImageCallBackEx(unsigned char* pData0, MV_FRAME_OUT_INFO_EX* pFra
unsigned int nConvertDataSize = 0;
nConvertDataSize = pFrameInfo0->nWidth * pFrameInfo0->nHeight * 3;
// ch:像素格式转换 | en:Convert pixel format
// ch:像素格式转换 | en:Convert pixel format
MV_CC_PIXEL_CONVERT_PARAM stConvertParam = { 0 };
frameNum = pFrameInfo0->nFrameNum; //ch:帧号 | en:frame number
@@ -283,7 +288,7 @@ void __stdcall ImageCallBackEx(unsigned char* pData0, MV_FRAME_OUT_INFO_EX* pFra
queuepic.push_back(srcImage);
pData0 = { 0 };
double time_End = (double)clock();
qDebug() << "[INFO] " << __FUNCTION__ << " line:" << __LINE__ << " checkImg getImg,Time:" << (time_End - time_Start) << "ms"
qDebug() << __FUNCTION__ << " line:" << __LINE__ << " checkImg getImg,Time:" << (time_End - time_Start) << "ms"
<< "--CameraName:" << QString::fromStdString(Username) << " imgIndex:" << imgIndex << "nFrameNum : " << frameNum;
}
@@ -315,7 +320,7 @@ Hd_CameraModule_HIK_hard_PCIE::~Hd_CameraModule_HIK_hard_PCIE()
n_mutex = nullptr;
}
qDebug() << "[INFO] " << " delete success!";
qDebug() << " delete success!";
}
//从类中读数据到实例对象
bool Hd_CameraModule_HIK_hard_PCIE::readData(std::vector<cv::Mat>& mat, QByteArray& data)
@@ -337,7 +342,7 @@ bool Hd_CameraModule_HIK_hard_PCIE::readData(std::vector<cv::Mat>& mat, QByteArr
cv::Mat img = queuepic.dequeue();
mat.push_back(img);
qDebug() << "[INFO] " << __FUNCTION__ << " line:" << __LINE__ << " checkImg readData--CameraName:" << QString::fromStdString(Username) << "--imgIndex : " << imgIndex;
qDebug() << __FUNCTION__ << " line:" << __LINE__ << " checkImg readData--CameraName:" << QString::fromStdString(Username) << "--imgIndex : " << imgIndex;
return true;
}
@@ -368,7 +373,7 @@ bool Hd_CameraModule_HIK_hard_PCIE::initParas(QByteArray& initData)
{
QByteArrayList valueList = initData.split('#');
if (valueList.size() < 3) {
qDebug() << "[Error] " << " Hd_CameraModule_HIK initParas fail--params error!参数数量不满足";
qDebug() << " Hd_CameraModule_HIK initParas fail--params error!参数数量不满足";
lastError = "参数数量不满足";
return false;
}
@@ -382,7 +387,7 @@ bool Hd_CameraModule_HIK_hard_PCIE::initParas(QByteArray& initData)
else if (triggerModeStr == "EMPTY")
triggerMode = EMPTY;
else {
qDebug() << "[Error] " << " Hd_CameraModule_HIK initParas fail--params error!触发模式参数错误";
qDebug() << " Hd_CameraModule_HIK initParas fail--params error!触发模式参数错误";
lastError = "触发模式参数错误";
return false;
}
@@ -395,7 +400,7 @@ bool Hd_CameraModule_HIK_hard_PCIE::initParas(QByteArray& initData)
bool Hd_CameraModule_HIK_hard_PCIE::run()
{
qDebug() << "[INFO] " << " run start" << QString::fromStdString(Username);
qDebug() << " run start" << QString::fromStdString(Username);
if (triggerMode == SOFTWARE)
MV_CC_SetCommandValue(handle, "TriggerSoftware");
try
@@ -417,7 +422,7 @@ bool Hd_CameraModule_HIK_hard_PCIE::run()
}
catch (QString ev)
{
qDebug() << "[Error] " << " ev:" << ev;
qDebug() << " ev:" << ev;
}
return true;
}
@@ -432,7 +437,7 @@ bool Hd_CameraModule_HIK_hard_PCIE::checkStatus()
Hd_CameraModule_HIK_hard_PCIE* create()
{
qDebug() << "[INFO] " << "Hd_CameraModule_HIK create success!";
qDebug() << "Hd_CameraModule_HIK create success!";
return new Hd_CameraModule_HIK_hard_PCIE;
}
@@ -443,5 +448,5 @@ void destory(Hd_CameraModule_HIK_hard_PCIE* ptr)
delete ptr;
ptr = nullptr;
}
qDebug() << "[INFO] " << "Hd_CameraModule_HIK destory success!";
}
qDebug() << "Hd_CameraModule_HIK destory success!";
}