触发器与相机联动成功
This commit is contained in:
@@ -512,7 +512,17 @@ void algoThread::run()
|
||||
detData* data = detQueue.dequeue();//取出数据
|
||||
detQueueMutex.unlock();
|
||||
int threadId = data->algoThreadIndex;//获取线程id
|
||||
|
||||
if (waitForImg(data) == false)
|
||||
{
|
||||
qDebug() << "取图失败";
|
||||
cout << "get img err" << endl;
|
||||
detDataManager* dManager = data->dManager;
|
||||
data->dManager->deleteDetData(data->timeCode);
|
||||
break;
|
||||
}
|
||||
detDataManager* dManager = data->dManager;
|
||||
data->dManager->deleteDetData(data->timeCode);
|
||||
continue;
|
||||
if (threadId == 0)
|
||||
{
|
||||
int timeOut = 0;
|
||||
|
||||
@@ -714,7 +714,7 @@ public:
|
||||
|
||||
handleAiModel* modelPtr;
|
||||
sqlManager* sql;
|
||||
threadConroller* tManager;
|
||||
threadManager* tManager;
|
||||
sncodeCls* snDatas;
|
||||
|
||||
QMutex detQueueMutex;
|
||||
@@ -729,11 +729,11 @@ public:
|
||||
void run();
|
||||
bool waitForImg(detData* data,int);
|
||||
void getAllFiles(std::string path, std::vector<std::string>& files, std::string format);
|
||||
void Init(threadConroller* threadConroller) {
|
||||
tManager = threadConroller;
|
||||
modelPtr = &threadConroller->models;
|
||||
sql = threadConroller->sql;
|
||||
snDatas = &threadConroller->snDatas;
|
||||
void Init(threadManager* threadManager) {
|
||||
tManager = threadManager;
|
||||
modelPtr = &threadManager->models;
|
||||
sql = threadManager->sql;
|
||||
snDatas = &threadManager->snDatas;
|
||||
}
|
||||
bool addDetTask(detData*);//添加任务
|
||||
|
||||
|
||||
@@ -8,7 +8,8 @@ backEndManager::backEndManager()
|
||||
_jsonConfiguration = new jsonConfiguration();
|
||||
_triggerManager = new triggerManager();
|
||||
_cameraManager = new cameraManager();
|
||||
_threadConroller = new threadConroller();
|
||||
_threadManager = new threadManager();
|
||||
_detDataManager = new detDataManager();
|
||||
std::vector<std::future<void>> 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));
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
class triggerManager;
|
||||
class cameraManager;
|
||||
class jsonConfiguration;
|
||||
class threadConroller;
|
||||
class threadManager;
|
||||
class detDataManager;
|
||||
class backEndManager :public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
@@ -15,7 +16,8 @@ public:
|
||||
|
||||
triggerManager* _triggerManager;//´¥·¢Æ÷
|
||||
cameraManager* _cameraManager;
|
||||
threadConroller* _threadConroller;
|
||||
threadManager* _threadManager;
|
||||
detDataManager* _detDataManager;
|
||||
backEndManager();
|
||||
~backEndManager();
|
||||
signals:
|
||||
|
||||
@@ -43,57 +43,79 @@ void camera::run()
|
||||
std::vector<cv::Mat>camera_mat;
|
||||
while (runFlag)
|
||||
{
|
||||
getCameraImg(camera_mat);
|
||||
while(camera_mat.size()>0)
|
||||
{
|
||||
int size = imgQueue.size();
|
||||
for (auto img : camera_mat)
|
||||
{
|
||||
imgQueue.enqueue(img);
|
||||
if (lastUpdateTime.elapsed() > 200)//显示在界面
|
||||
{
|
||||
lastUpdateTime.start(); // 记录本次更新时间
|
||||
QPixmap pixmap;
|
||||
cvMatToQPixMap(img, pixmap);
|
||||
showImgPack* pack = new showImgPack();
|
||||
pack->img = pixmap;
|
||||
pack->type = imgWidgetOri;
|
||||
pack->index = index;
|
||||
emit S1(pack);
|
||||
}
|
||||
else
|
||||
{
|
||||
showLost++;
|
||||
qDebug() << cameraModulePtr.moduleName << "Lost show";
|
||||
}
|
||||
camera_mat.clear();
|
||||
}
|
||||
//getCameraImg(camera_mat);
|
||||
//while(camera_mat.size()>0)
|
||||
//{
|
||||
// int size = imgQueue.size();
|
||||
// for (auto img : camera_mat)
|
||||
// {
|
||||
// imgQueue.enqueue(img);
|
||||
// if (lastUpdateTime.elapsed() > 200)//显示在界面
|
||||
// {
|
||||
// lastUpdateTime.start(); // 记录本次更新时间
|
||||
// QPixmap pixmap;
|
||||
// cvMatToQPixMap(img, pixmap);
|
||||
// showImgPack* pack = new showImgPack();
|
||||
// pack->img = pixmap;
|
||||
// pack->type = imgWidgetOri;
|
||||
// pack->index = index;
|
||||
// emit S1(pack);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// showLost++;
|
||||
// qDebug() << cameraModulePtr.moduleName << "Lost show";
|
||||
// }
|
||||
// camera_mat.clear();
|
||||
// }
|
||||
|
||||
//防止过大
|
||||
while (imgQueue.size() > 5)
|
||||
{
|
||||
imgQueue.dequeue();
|
||||
imgLost++;
|
||||
qDebug() << cameraModulePtr.moduleName << "Lost img";
|
||||
}
|
||||
|
||||
getCameraImg(camera_mat);
|
||||
}
|
||||
if (data != nullptr)
|
||||
// //防止过大
|
||||
// while (imgQueue.size() > 5)
|
||||
// {
|
||||
// imgQueue.dequeue();
|
||||
// imgLost++;
|
||||
// qDebug() << cameraModulePtr.moduleName << "Lost img";
|
||||
// }
|
||||
//
|
||||
// getCameraImg(camera_mat);
|
||||
//}
|
||||
int queueSize = requestQueue.size() ;
|
||||
if (queueSize >0)
|
||||
{
|
||||
data->imgMutex->lock();
|
||||
mutex.lock();
|
||||
detData *data = requestQueue.dequeue();
|
||||
trigger();
|
||||
data->imgMutex.lock();
|
||||
const unsigned long long timeCode = data->timeCode;
|
||||
while(1)
|
||||
{
|
||||
getCameraImg(data->imgs);
|
||||
if (data->imgs.size() > data->imgAmountMin)
|
||||
if (data->imgs.size() >= data->imgAmountMin)
|
||||
{
|
||||
qDebug() << data->timeCode << " Min:" << data->imgAmountMin << " Get:" << data->imgs.size();
|
||||
data->imgMutex->unlock();
|
||||
data = nullptr;
|
||||
if (lastUpdateTime.elapsed() > 200)//显示在界面
|
||||
{
|
||||
lastUpdateTime.start(); // 记录本次更新时间
|
||||
QPixmap pixmap;
|
||||
cvMatToQPixMap(data->imgs[0], pixmap);
|
||||
showImgPack* pack = new showImgPack();
|
||||
pack->img = pixmap;
|
||||
pack->type = imgWidgetOri;
|
||||
pack->index = index;
|
||||
emit S1(pack);
|
||||
}
|
||||
else
|
||||
{
|
||||
showLost++;
|
||||
qDebug() << cameraModulePtr.moduleName << "Lost show";
|
||||
}
|
||||
data->imgMutex.unlock();
|
||||
mutex.unlock();
|
||||
break;
|
||||
}
|
||||
QThread::msleep(1);
|
||||
}
|
||||
data->imgMutex->unlock();
|
||||
|
||||
}
|
||||
QThread::msleep(100);
|
||||
}
|
||||
@@ -164,7 +186,7 @@ void cameraManager::init(backEndManager* input)
|
||||
{
|
||||
camera* _camera = new camera(m_module,_backEndManager, cameras.size());
|
||||
QObject::connect(_camera, &camera::S1, this, &cameraManager::R1);
|
||||
cameras.insert(std::make_pair(m_module.key, _camera));
|
||||
cameras.insert(std::make_pair(m_module.key.toStdString(), _camera));
|
||||
qDebug() << "[INFO] " << " initParas success!";
|
||||
}
|
||||
else
|
||||
|
||||
@@ -31,7 +31,7 @@ public:
|
||||
|
||||
void Process(detData* dataIn)
|
||||
{
|
||||
data = dataIn;
|
||||
requestQueue.enqueue(dataIn);
|
||||
}
|
||||
|
||||
//相机操作
|
||||
@@ -44,6 +44,16 @@ public:
|
||||
}
|
||||
return true;
|
||||
}
|
||||
double getCameraValue()//点激光相机专用
|
||||
{
|
||||
double value = 0;
|
||||
std::vector<cv::Mat> camera_mat;
|
||||
QByteArray task_name;
|
||||
if (!cameraModulePtr.module_ptr->sendData(camera_mat, task_name))
|
||||
qCritical() << "[Error] " << " camera_mat is error! ";
|
||||
value = task_name.toDouble();
|
||||
return value;
|
||||
}
|
||||
void getCameraImg(std::vector<cv::Mat>& mats)
|
||||
{
|
||||
QByteArray task_name;
|
||||
@@ -66,7 +76,7 @@ public:
|
||||
signals:
|
||||
void S1(showImgPack*);
|
||||
private:
|
||||
detData* data = nullptr;
|
||||
//detData* data = nullptr;
|
||||
void sendData(std::string str)
|
||||
{
|
||||
QByteArray task_name(QByteArray::fromStdString(str));
|
||||
@@ -77,8 +87,10 @@ private:
|
||||
|
||||
int index = 0;
|
||||
int timeout = 5000;
|
||||
QMutex mutex;
|
||||
cameraModule cameraModulePtr;
|
||||
QQueue<cv::Mat>imgQueue;
|
||||
QQueue<detData*>requestQueue;
|
||||
backEndManager* _backEndManager;
|
||||
bool runFlag = true;
|
||||
|
||||
@@ -91,7 +103,7 @@ class cameraManager : public QThread
|
||||
public:
|
||||
void init(backEndManager*);
|
||||
~cameraManager();
|
||||
std::unordered_map<QString, camera*>cameras;//key 相机名
|
||||
std::unordered_map<std::string, camera*>cameras;//key 相机名
|
||||
void run()
|
||||
{
|
||||
//while (1)
|
||||
@@ -112,7 +124,7 @@ private:
|
||||
QList<QLibrary*> lib_list;
|
||||
public slots:
|
||||
void R1(showImgPack*);
|
||||
void cameraTrigger(QString Name)
|
||||
void cameraTrigger(std::string Name)
|
||||
{
|
||||
auto camera=cameras.find(Name);
|
||||
if (camera != cameras.end())
|
||||
|
||||
@@ -61,7 +61,7 @@ void MyIoThread::run()
|
||||
bridge.back.sendFinsMsg(
|
||||
QString::fromStdString("write_DM" + to_string(bridge.back.json.tcp.startPos + i) + "_0"));*/
|
||||
|
||||
workThread = new threadConroller();
|
||||
workThread = new threadManager();
|
||||
|
||||
for (auto thread : threadlist)
|
||||
thread->cameraImgsPtr = &workThread->cameraImgs;
|
||||
|
||||
@@ -97,7 +97,7 @@ public:
|
||||
void writeSnFromString(string SN, int startPos, bool highLowConversion);
|
||||
void requestSummary(std::string sn, int offset);
|
||||
detDataManager dManager;
|
||||
threadConroller* workThread ;
|
||||
threadManager* workThread ;
|
||||
bool barcodeScanLock = false;
|
||||
private:
|
||||
triggerLocker tLocker;//防止重复触发
|
||||
|
||||
@@ -35,7 +35,7 @@ int threadAmount = 0;
|
||||
int maxThread = 16;
|
||||
|
||||
////////////THREAD//Manager////////////////////////
|
||||
threadConroller::threadConroller(QObject* parent) : QThread(parent)
|
||||
threadManager::threadManager(QObject* parent) : QThread(parent)
|
||||
{
|
||||
//sql初始化
|
||||
sql = new sqlManager;
|
||||
@@ -57,7 +57,7 @@ threadConroller::threadConroller(QObject* parent) : QThread(parent)
|
||||
}
|
||||
}
|
||||
|
||||
void threadConroller::run()
|
||||
void threadManager::run()
|
||||
{
|
||||
return;
|
||||
while (1)
|
||||
@@ -100,9 +100,9 @@ void threadConroller::run()
|
||||
QThread::msleep(10);
|
||||
}
|
||||
}
|
||||
void threadConroller::addTask(detData* data)
|
||||
void threadManager::addTask(detData* data)
|
||||
{
|
||||
cout << __LINE__ << "insert Data " << data ->timeCode<< endl;
|
||||
//cout << __LINE__ << "insert Data " << data ->timeCode<< endl;
|
||||
{
|
||||
algoThreadCls::datastruct _struct = bridge.back.json.algoThreads.getData(data->algoThreadName);
|
||||
data->algoThreadIndex = _struct.threadIndex;
|
||||
@@ -125,7 +125,7 @@ void threadConroller::addTask(detData* data)
|
||||
insertQueueMutex.unlock();
|
||||
//this->start();
|
||||
}
|
||||
bool threadConroller::getFreeThread()
|
||||
bool threadManager::getFreeThread()
|
||||
{
|
||||
#if 0
|
||||
int index = 0;
|
||||
@@ -147,7 +147,7 @@ bool threadConroller::getFreeThread()
|
||||
return false;
|
||||
|
||||
}
|
||||
bool threadConroller::addTaskFreeThread(detData* data)
|
||||
bool threadManager::addTaskFreeThread(detData* data)
|
||||
{
|
||||
#if 0
|
||||
int index = 0;
|
||||
@@ -172,7 +172,7 @@ bool threadConroller::addTaskFreeThread(detData* data)
|
||||
return false;
|
||||
|
||||
}
|
||||
threadConroller::~threadConroller()
|
||||
threadManager::~threadManager()
|
||||
{
|
||||
for (auto thread : algoThreadList)
|
||||
{
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
#include <qtcpsocket.h>
|
||||
#include <mutex>
|
||||
#include <backStruct.h>
|
||||
class threadConroller;
|
||||
class threadManager;
|
||||
class algoThread;
|
||||
class subThread;
|
||||
class detDataManager;
|
||||
@@ -85,7 +85,7 @@ class detData
|
||||
{
|
||||
public:
|
||||
const unsigned long long timeCode = getTimeCode();//根据时间和随机数生成的值,唯一
|
||||
QMutex* imgMutex;
|
||||
QMutex imgMutex;
|
||||
std::string SNcode;
|
||||
|
||||
QString cameraKeyName;
|
||||
@@ -147,7 +147,7 @@ public:
|
||||
algoThreadName = IN_algoThreadName;
|
||||
oriShowIndex = IN_oriShowIndex;
|
||||
SNcode = IN_SN;
|
||||
imgMutex = new QMutex();
|
||||
//imgMutex = new QMutex();
|
||||
}
|
||||
~detData()
|
||||
{
|
||||
@@ -155,7 +155,6 @@ public:
|
||||
img.release();
|
||||
for (auto img : resultImgs)
|
||||
img.release();
|
||||
delete imgMutex;
|
||||
//delete cameraImgPtr;
|
||||
}
|
||||
|
||||
@@ -183,18 +182,18 @@ class detDataManager
|
||||
public:
|
||||
std::unordered_map<unsigned long long, detData*>map;
|
||||
|
||||
QLinkedList<detData> detDatas;
|
||||
//QLinkedList<detData> detDatas;
|
||||
QMutex dataMutex;
|
||||
detData* insertDetData(QString IN_cameraKeyName, QString IN_algoThreadName,
|
||||
std::string IN_SN, int IN_oriShowIndex)
|
||||
{
|
||||
dataMutex.lock();
|
||||
detData data(IN_cameraKeyName, IN_algoThreadName, IN_SN, IN_oriShowIndex);
|
||||
data.dManager = this;
|
||||
detDatas.push_back(data);
|
||||
map.insert({ data.timeCode,&detDatas.back() });
|
||||
detData* 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);
|
||||
detData* dataPtr = getDetData(data->timeCode);
|
||||
|
||||
if (dataPtr == nullptr)
|
||||
qDebug() << "创建新容器失败";
|
||||
@@ -219,17 +218,11 @@ public:
|
||||
std::unordered_map<unsigned long long, detData*>::iterator it = map.find(timeCode);
|
||||
if (it != map.end())
|
||||
{
|
||||
it->second->imgMutex.lock();
|
||||
delete it->second;
|
||||
map.erase(it);
|
||||
QLinkedList<detData>::iterator linkedListIt;
|
||||
for (linkedListIt = detDatas.begin(); linkedListIt != detDatas.end(); ++linkedListIt)
|
||||
{
|
||||
if (linkedListIt->timeCode == timeCode)
|
||||
{
|
||||
detDatas.erase(linkedListIt);
|
||||
dataMutex.unlock();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
dataMutex.unlock();
|
||||
return true;
|
||||
}
|
||||
dataMutex.unlock();
|
||||
return false;
|
||||
@@ -262,12 +255,12 @@ public:
|
||||
/// <summary>
|
||||
/// 线程池管理
|
||||
/// </summary>
|
||||
class threadConroller : public QThread
|
||||
class threadManager : public QThread
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit threadConroller(QObject* parent = nullptr);
|
||||
explicit threadManager(QObject* parent = nullptr);
|
||||
QMutex queueMutex;
|
||||
cameraImages cameraImgs;
|
||||
QQueue<detData*> detDataQueue;
|
||||
@@ -283,7 +276,7 @@ public:
|
||||
bool getFreeThread();
|
||||
bool addTaskFreeThread(detData*);
|
||||
sncodeCls snDatas;
|
||||
~threadConroller();
|
||||
~threadManager();
|
||||
private:
|
||||
QList<detData*>imgWaitList;
|
||||
};
|
||||
|
||||
@@ -1,9 +1,30 @@
|
||||
#include <triggerManager.h>
|
||||
#include <backEndManager.h>
|
||||
#include <threadPoolManager.h>
|
||||
#include <backStruct.h>
|
||||
#include <cameraManager.h>
|
||||
#include <jsonParsing.h>
|
||||
static correctionStruct* correctionData;
|
||||
void triggerManager::decodeCameraCMD(QByteArray byte)
|
||||
{
|
||||
#if 0
|
||||
#if 1
|
||||
//if (checkTrigger(1, 2, byte) == true)
|
||||
{
|
||||
detData* data = dManager->insertDetData("Camera1", "Thread3", "TEST", 0);
|
||||
data->correctionData = correctionData;
|
||||
_threadManager->addTask(data);//添加任务
|
||||
auto camera = _cameraManager->cameras.find("123");
|
||||
camera->second->Process(data);
|
||||
}
|
||||
//if (checkTrigger(2, 2, byte) == true)
|
||||
{
|
||||
detData* 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);
|
||||
}
|
||||
return;
|
||||
if (byte.isEmpty())
|
||||
return;
|
||||
double cameraData = 0;
|
||||
@@ -24,12 +45,27 @@ 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);
|
||||
detData* data = dManager->insertDetData("Camera1", "correctionDataThread", "TEST", 0);
|
||||
data->correctionData = correctionData;
|
||||
workThread->addTask(data);//添加任务
|
||||
_threadManager->addTask(data);//添加任务
|
||||
correctionData = nullptr;
|
||||
}
|
||||
|
||||
if (checkTrigger(1, 2, byte) == true)
|
||||
{
|
||||
detData* data = dManager->insertDetData("Camera1", "Thread3", "TEST", 0);
|
||||
data->correctionData = correctionData;
|
||||
_threadManager->addTask(data);//添加任务
|
||||
auto camera = _cameraManager->cameras.find("123");
|
||||
camera->second -> Process(data);
|
||||
}
|
||||
if (checkTrigger(2, 2, byte) == true)
|
||||
{
|
||||
detData* data = dManager->insertDetData("Camera1", "Thread3", "TEST", 0);
|
||||
data->correctionData = correctionData;
|
||||
_threadManager->addTask(data);//添加任务
|
||||
auto camera = _cameraManager->cameras.find("456");
|
||||
camera->second->Process(data);
|
||||
}
|
||||
//总流程开始,机器人发送1至寄存器259
|
||||
|
||||
//上位机确认OK之后,清零寄存器259,并发送1至寄存器260
|
||||
@@ -37,8 +73,8 @@ void triggerManager::decodeCameraCMD(QByteArray byte)
|
||||
//之后机器人确认之后需发送测量点位总数具体值至寄存器258
|
||||
if (checkTrigger(259, 1, byte) == true)
|
||||
{
|
||||
bridge.back.sendFinsMsg("write_short_259_0");//触发信号清零
|
||||
bridge.back.sendFinsMsg("write_short_260_1");//开始检测信号
|
||||
sendFinsMsg("write_short_259_0");//触发信号清零
|
||||
sendFinsMsg("write_short_260_1");//开始检测信号
|
||||
}
|
||||
|
||||
//机器人激光当前点位 264 1...9
|
||||
@@ -64,7 +100,7 @@ void triggerManager::decodeCameraCMD(QByteArray 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();
|
||||
double rangeData = _cameraManager->cameras.find("相机的名字")->second->getCameraValue();
|
||||
|
||||
if (armPos == 1)//第一次
|
||||
correctionData = new correctionStruct();
|
||||
@@ -92,16 +128,16 @@ void triggerManager::decodeCameraCMD(QByteArray byte)
|
||||
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");
|
||||
sendFinsMsg("write_short_261_0");//清零
|
||||
sendFinsMsg("write_short_262_1");
|
||||
sendFinsMsg("write_short_263_1");
|
||||
|
||||
//上位机校正完成,将寄存器274置为1,并将结果按照定义XYZ规则放入310~336中
|
||||
if (armPos == 9)
|
||||
{
|
||||
detData* data = dManager.insertDetData("Camera1", "correctionDataThread", "TEST", 0);
|
||||
detData* data = dManager->insertDetData("Camera1", "correctionDataThread", "TEST", 0);
|
||||
data->correctionData = correctionData;
|
||||
workThread->addTask(data);//添加任务
|
||||
_threadManager->addTask(data);//添加任务
|
||||
correctionData = nullptr;
|
||||
}
|
||||
}
|
||||
@@ -110,8 +146,8 @@ void triggerManager::decodeCameraCMD(QByteArray byte)
|
||||
|
||||
if (checkTrigger(300, 1, byte) == true)
|
||||
{
|
||||
bridge.back.sendFinsMsg("write_short_300_0");//触发信号清零
|
||||
bridge.back.sendFinsMsg("write_short_301_1");//开始检测信号
|
||||
sendFinsMsg("write_short_300_0");//触发信号清零
|
||||
sendFinsMsg("write_short_301_1");//开始检测信号
|
||||
int Pos = getValue(303, byte);
|
||||
}
|
||||
|
||||
@@ -122,6 +158,9 @@ void triggerManager::decodeCameraCMD(QByteArray byte)
|
||||
void triggerManager::init(backEndManager* input)
|
||||
{
|
||||
_backEndManager = input;
|
||||
dManager = _backEndManager->_detDataManager;
|
||||
_cameraManager = _backEndManager->_cameraManager;
|
||||
_threadManager = _backEndManager->_threadManager;
|
||||
QLibrary* m_lib = new QLibrary(triggerFileName);
|
||||
bool flag = m_lib->load();
|
||||
if (!m_lib->isLoaded())
|
||||
@@ -152,4 +191,14 @@ void triggerManager::init(backEndManager* input)
|
||||
}
|
||||
}
|
||||
this->start();
|
||||
}
|
||||
|
||||
int triggerManager::getValue(int dmPos, QByteArray byte)
|
||||
{
|
||||
int triggerPos = (dmPos - _backEndManager->_jsonConfiguration->tcp.startPos) * 2;
|
||||
if (byte.size() / 2 < triggerPos)
|
||||
return false;
|
||||
int val1 = byte.at(triggerPos) * 256;
|
||||
int val2 = static_cast<unsigned char>(byte.at(triggerPos + 1));
|
||||
return val1 + val2;
|
||||
}
|
||||
@@ -6,7 +6,14 @@
|
||||
#include <qlibrary.h>
|
||||
#include <globalStruct.h>
|
||||
#include <backStruct.h>
|
||||
|
||||
using namespace std;
|
||||
class backEndManager;
|
||||
class cameraManager;
|
||||
class jsonConfiguration;
|
||||
class threadManager;
|
||||
class detDataManager;
|
||||
|
||||
//防止重复触发
|
||||
class triggerLockerT
|
||||
{
|
||||
@@ -69,10 +76,11 @@ public:
|
||||
void init(backEndManager* input);
|
||||
void run()
|
||||
{
|
||||
QThread::msleep(5000);
|
||||
while (runFlag)
|
||||
{
|
||||
reciveCommond();
|
||||
QThread::msleep(interval);
|
||||
QThread::msleep(1000);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -124,8 +132,13 @@ public:
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
int getValue(int dmPos, QByteArray byte);
|
||||
private:
|
||||
threadManager* _threadManager;
|
||||
detDataManager* dManager;
|
||||
backEndManager* _backEndManager;
|
||||
cameraManager* _cameraManager;
|
||||
triggerLockerT tLocker;//防止重复触发,每次收到数据时检查数据是否与上次相同,如果相同checkTrigger会返回false
|
||||
/// <summary>
|
||||
/// 检测QByteArray中某位置的值是否和输入一样,使用了绝对位置
|
||||
|
||||
@@ -34,41 +34,36 @@ public:
|
||||
setDragMode(QGraphicsView::DragMode::NoDrag);
|
||||
setInteractive(false);
|
||||
setEnabled(false);
|
||||
this->setStyleSheet("QGraphicsView {"
|
||||
"background: transparent;"
|
||||
"background-image: url(:/topBar/icon/waitting.png);"
|
||||
"background-repeat: no-repeat;"
|
||||
"background-position: center center;"
|
||||
"background-size: contain;"
|
||||
"}");
|
||||
//initShow();
|
||||
scene = new QGraphicsScene(this);
|
||||
scene = new QGraphicsScene();
|
||||
this->setScene(scene);
|
||||
//this->fitInView(pixmapItem, Qt::KeepAspectRatio);
|
||||
this->setBackgroundBrush(QBrush(QColor(0, 0, 0)));
|
||||
setEnabled(true);
|
||||
setMouseTracking(true);
|
||||
imgLabel = new QLabel();
|
||||
scene->clear();
|
||||
scene->addWidget(imgLabel);
|
||||
imgLabel->setMaximumSize(9999, 9999);
|
||||
this->setStyleSheet("QGraphicsView {"
|
||||
"background: transparent;"
|
||||
"background-image: url(:/topBar/icon/waitting.png);"
|
||||
"background-repeat: no-repeat;"
|
||||
"background-position: center center;"
|
||||
"background-size: contain;"
|
||||
"}");
|
||||
mutex.unlock();
|
||||
}
|
||||
void setImg(QImage& image)
|
||||
{
|
||||
if (image.isNull())
|
||||
return;
|
||||
showimg(QPixmap::fromImage(image));
|
||||
showImg(QPixmap::fromImage(image));
|
||||
}
|
||||
void setImg(cv::Mat& src)
|
||||
{
|
||||
if (src.empty())
|
||||
return;
|
||||
showimg(QPixmap::fromImage(cvMatToQImage(src)));
|
||||
showImg(QPixmap::fromImage(cvMatToQImage(src)));
|
||||
}
|
||||
void setImg(QPixmap& pixmap)
|
||||
{
|
||||
showimg(pixmap);
|
||||
showImg(pixmap);
|
||||
}
|
||||
void resetImage()
|
||||
{
|
||||
@@ -167,19 +162,17 @@ protected:
|
||||
vBar->setValue(vBar->value() - delta.y());
|
||||
}
|
||||
private:
|
||||
void showimg(QPixmap& img)
|
||||
void showImg(QPixmap& img)
|
||||
{
|
||||
mutex.lock();
|
||||
//scene->clear();
|
||||
//scene->addPixmap(img);
|
||||
imgLabel->setPixmap(img);
|
||||
|
||||
setEnabled(true);
|
||||
setMouseTracking(true);
|
||||
QRect rect = img.rect();
|
||||
imageWidth = rect.width();
|
||||
imageHeight = rect.height();
|
||||
imgLabel->setFixedSize(imageWidth, imageHeight);
|
||||
setSceneRect(rect);
|
||||
fitInView(scene->itemsBoundingRect(), Qt::KeepAspectRatio);
|
||||
this->fitInView(scene->itemsBoundingRect(), Qt::KeepAspectRatio);
|
||||
mutex.unlock();
|
||||
}
|
||||
bool m_isPan;
|
||||
@@ -265,7 +258,7 @@ public:
|
||||
}
|
||||
oriImg= oriImgInput;
|
||||
if (MatType == false)
|
||||
showImg(pixOriImg);
|
||||
showImgOnGraphicsView(pixOriImg);
|
||||
}
|
||||
//set不一定显示,要根据当前显示的类型决定
|
||||
void setResImg(cv::Mat& resImgInput)
|
||||
@@ -279,7 +272,7 @@ public:
|
||||
}
|
||||
resImg = resImgInput;
|
||||
if (MatType == true)
|
||||
showImg(pixResImg);
|
||||
showImgOnGraphicsView(pixResImg);
|
||||
}
|
||||
//set不一定显示,要根据当前显示的类型决定
|
||||
void setOriImg(QPixmap& oriImgInput)
|
||||
@@ -289,7 +282,7 @@ public:
|
||||
return;
|
||||
}
|
||||
if (MatType == false)
|
||||
showImg(pixOriImg);
|
||||
showImgOnGraphicsView(pixOriImg);
|
||||
}
|
||||
//set不一定显示,要根据当前显示的类型决定
|
||||
void setResImg(QPixmap& resImgInput)
|
||||
@@ -299,10 +292,10 @@ public:
|
||||
return;
|
||||
}
|
||||
if (MatType == true)
|
||||
showImg(pixResImg);
|
||||
showImgOnGraphicsView(pixResImg);
|
||||
}
|
||||
//无视当前类型直接显示
|
||||
void showImg(cv::Mat& imageMat) {
|
||||
void showImgOnGraphicsView(cv::Mat& imageMat) {
|
||||
if (imageMat.empty()) {
|
||||
return;
|
||||
}
|
||||
@@ -318,7 +311,7 @@ public:
|
||||
}
|
||||
view->setImg(pixmap);
|
||||
}
|
||||
void showImg(QPixmap& imageMat) {
|
||||
void showImgOnGraphicsView(QPixmap& imageMat) {
|
||||
view->setImg(imageMat);
|
||||
}
|
||||
void switchOriAndRes()//切换原图和结果图
|
||||
@@ -326,17 +319,17 @@ public:
|
||||
if (MatType == false)
|
||||
{
|
||||
if(pixOriImg.isNull())
|
||||
showImg(resImg);
|
||||
showImgOnGraphicsView(resImg);
|
||||
else
|
||||
showImg(pixResImg);
|
||||
showImgOnGraphicsView(pixResImg);
|
||||
label2->setText(u8"结果图");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (pixOriImg.isNull())
|
||||
showImg(oriImg);
|
||||
showImgOnGraphicsView(oriImg);
|
||||
else
|
||||
showImg(pixOriImg);
|
||||
showImgOnGraphicsView(pixOriImg);
|
||||
label2->setText(u8"原图");
|
||||
}
|
||||
MatType = !MatType;
|
||||
|
||||
Reference in New Issue
Block a user