整理了测试的基本采集逻辑;掉入了快门控制;下周需要写完数据格式保存功能以及在MainDataGrabber层的自动曝光功能

This commit is contained in:
2021-11-26 17:32:50 +08:00
parent 8bbd435518
commit 95da780693
17 changed files with 1961 additions and 44 deletions

View File

@ -1,19 +1,22 @@
#include "AbstractFSController.h"
CAbstractFSController::CAbstractFSController(QObject* parent /*= nullptr*/)
{
m_pFSCtrl = NULL;
m_iThreadID = -1;
m_iDeviceType = -1;
}
CAbstractFSController::~CAbstractFSController()
{
if (m_pFSCtrl!= 0 )
{
delete m_pFSCtrl;
}
}
int CAbstractFSController::SetRunParas(int iThreadID, int iDeviceType)
int CAbstractFSController::SetRunParas(int iThreadID, FSInfo fsInfo)
{
m_iThreadID = iThreadID;
m_iDeviceType = iDeviceType;
m_fsInfo = fsInfo;
return 0;
}
@ -21,12 +24,13 @@ int CAbstractFSController::SetRunParas(int iThreadID, int iDeviceType)
int CAbstractFSController::InitializeFSControl()
{
if (m_iThreadID == -1|| m_iDeviceTyp == -1)
using namespace ZZ_MISCDEF::IRIS;
if (m_iThreadID == -1/*|| m_iDeviceType == -1*/)
{
qDebug() << "Params Err. Call SetRunParas first";
return 1;
}
switch (m_iDeviceType)
switch (m_fsInfo.ucDeviceModel)
{
case DeviceModel::OSIFAlpha:
@ -35,12 +39,15 @@ int CAbstractFSController::InitializeFSControl()
break;
case DeviceModel::ISIF:
m_pFSCtrl = new ZZ_ATPControl_Serial_Qt;
m_pFSCtrl->Initialize(false, m_fsInfo.iInterface, NULL);
break;
case DeviceModel::IS1:
m_pFSCtrl = new ZZ_ATPControl_Serial_Qt;
m_pFSCtrl->Initialize(false, m_fsInfo.iInterface, NULL);
break;
case DeviceModel::IS2:
m_pFSCtrl = new ZZ_ATPControl_Serial_Qt;
m_pFSCtrl->Initialize(false, m_fsInfo.iInterface, NULL);
break;
default:
break;
@ -50,11 +57,18 @@ int CAbstractFSController::InitializeFSControl()
int CAbstractFSController::StartAcquisition()
{
//
qDebug() << "Starting acq" << " Thread ID:" << m_iThreadID;
QThread::msleep(5000);
qDebug() << "Stop acq" << " Thread ID:" << m_iThreadID;
emit SignalAcqFinished(m_iThreadID, 1);
return 0;
}
int CAbstractFSController::StopAcquisition()
{
return 0;
}

View File

@ -3,6 +3,13 @@
#include "ATPControl_Serial_QT.h"
#include <atomic>
typedef struct tagFSInfo
{
ZZ_U8 ucDeviceModel;
int iInterface;
std::string strSN;
}FSInfo;
class CAbstractFSController :public QObject
{
Q_OBJECT
@ -10,21 +17,19 @@ public:
CAbstractFSController(QObject* parent = nullptr);
virtual ~CAbstractFSController();
public:
private:
CIrisFSBase *m_pFSCtrl;
int m_iThreadID;
int m_iDeviceType;
public slots:
//call first
virtual int SetRunParas(int iThreadID, int iDeviceType);
virtual int SetRunParas(int iThreadID, FSInfo fsInfo);
//create derived class from base class
virtual int InitializeFSControl();
virtual int StartAcquisition();
private:
CIrisFSBase *m_pFSCtrl;
int m_iThreadID;
FSInfo m_fsInfo;
public slots:
virtual int StartAcquisition();
virtual int StopAcquisition();
signals:

View File

@ -1,8 +1,46 @@
#include "MainDataGrabber.h"
CMainDataGrabber::CMainDataGrabber(QObject* parent /*= nullptr*/)
{
m_piFlagCaptureThreadStatus = NULL;
}
CMainDataGrabber::~CMainDataGrabber()
{
if (m_pControlThread.size() != 0)
{
for (int i=0;i< m_pControlThread.size();i++)
{
delete m_pControlThread[i];
}
}
m_pControlThread.clear();
if (m_piFlagCaptureThreadStatus!=NULL)
{
delete m_piFlagCaptureThreadStatus;
}
}
int CMainDataGrabber::SetGrabberParams(RunTimeGrabberParams struGrabberRTParams)
{
m_struAcqTime = struGrabberRTParams.atsParams;
m_struDeviceContext = struGrabberRTParams.dcParams;
m_struDeviceContext = struGrabberRTParams.fscParams;
m_iTotalThreads = m_struDeviceContext.ucDeviceNumber;
return 0;
}
int CMainDataGrabber::InitThreadStatus()
{
if (m_piFlagCaptureThreadStatus!=NULL)
{
delete m_piFlagCaptureThreadStatus;
}
m_piFlagCaptureThreadStatus = new int[m_iTotalThreads];
for (int i = 0; i < m_iTotalThreads; i++)
{
m_piFlagCaptureThreadStatus[i] = 0;
}
return 0;
}
@ -10,8 +48,93 @@ int CMainDataGrabber::InitializeWorkers()
{
for (ZZ_U8 i = 0; i < m_struDeviceContext.ucDeviceNumber; i++)
{
m_piFlagCaptureThreadStatus[i] = 0;
FSInfo fsInfo;
fsInfo.iInterface = m_struDeviceContext.iInterface[i];
fsInfo.ucDeviceModel = m_struDeviceContext.ucDeviceModel[i];
fsInfo.strSN = m_struDeviceContext.strSN[i];
CAbstractFSController* m_pWorkThread = new CAbstractFSController;
m_pWorkThread->SetRunParas(i, fsInfo);
//m_pWorkThread->InitializeFSControl();
m_pControlThread.push_back(m_pWorkThread);
}
return 0;
}
int CMainDataGrabber::StartWorkers()
{
for (ZZ_U8 i = 0; i < m_struDeviceContext.ucDeviceNumber; i++)
{
QThread *pWorkThreadHolder = new QThread();
m_pControlThread[i]->moveToThread(pWorkThreadHolder);
pWorkThreadHolder->start();
}
return 0;
}
int CMainDataGrabber::SetupMsgPipelines()
{
//connect(this, &CMainDataGrabber::SignalStartGrabOnce, this, &CMainDataGrabber::StartGrab);
for (ZZ_U8 i = 0; i < m_struDeviceContext.ucDeviceNumber; i++)
{
connect(this, &CMainDataGrabber::SignalStartGrabOnce, m_pControlThread[i], &CAbstractFSController::StartAcquisition);
connect(m_pControlThread[i], &CAbstractFSController::SignalAcqFinished, this, &CMainDataGrabber::HandleThreadEvent);
}
connect(this, &CMainDataGrabber::SignalGrabOnceFinished, this, &CMainDataGrabber::GrabFinished);
return 0;
}
int CMainDataGrabber::HandleThreadEvent(int iThreadID, int iFlagStatus)
{
m_piFlagCaptureThreadStatus[iThreadID] = iFlagStatus;
bool bFinished = true;
for (int i = 0; i < m_iTotalThreads; i++)
{
if (m_piFlagCaptureThreadStatus[i] != 1)
{
bFinished = false;
break;
}
}
if (bFinished)
{
emit SignalGrabOnceFinished();
}
return 0;
}
int CMainDataGrabber::StartGrab()
{
m_iFlagIsCapturing = true;
emit SignalStartGrabOnce();
while (m_iFlagIsCapturing)
{
QThread::msleep(1000);
}
m_iFlagIsCapturing = true;
InitThreadStatus();
emit SignalStartGrabOnce();
while (m_iFlagIsCapturing)
{
QThread::msleep(1000);
}
qDebug() << "Allgrab stopped" << " Thread ID:" <<2;
return 0;
}
int CMainDataGrabber::GrabFinished()
{
m_iFlagIsCapturing = false;
return 0;
}

View File

@ -17,19 +17,28 @@ private:
vector<CAbstractFSController *> m_pControlThread;
vector<QThread* > m_pqThreadHolder;
int *m_piFlagCaptureThreadStatus;
int m_iTotalThreads;
int m_iFlagIsCapturing;
AcqTimeSettings m_struAcqTime;
DeviceContext m_struDeviceContext;
FSContext m_struDeviceContext;
public:
//Call this first
int SetGrabberParams(RunTimeGrabberParams struGrabberRTParams);
int InitThreadStatus();
int InitializeWorkers();
int StartWorkers();
int SetupMsgPipelines();
public slots:
int HandleThreadEvent(int iThreadID, int iFlagStatus);
int StartGrab();
int GrabFinished();
signals:
void SignalStartGrabOnce();