mirror of
http://172.16.0.230/r/SIF/TowerOptoSifAndSpectral.git
synced 2025-10-18 19:39:43 +08:00
重大更新
1.添加了对双通道光闸系统的支持。 2.针对QEPro系列硬件添加了非线性矫正 3.进行了完整的实际采集测试,通过。 4.优化统一了ATP基类内置自动曝光函数。
This commit is contained in:
@ -10,7 +10,7 @@
|
|||||||
"ctestCommandArgs": "",
|
"ctestCommandArgs": "",
|
||||||
"inheritEnvironments": [ "linux_arm" ],
|
"inheritEnvironments": [ "linux_arm" ],
|
||||||
"intelliSenseMode": "linux-gcc-x64",
|
"intelliSenseMode": "linux-gcc-x64",
|
||||||
"remoteMachineName": "948173717;172.16.0.232 (username=root, port=22, authentication=Password)",
|
"remoteMachineName": "243120617;172.16.0.232 (username=root, port=22, authentication=Password)",
|
||||||
"remoteCMakeListsRoot": "/home/pi/SIF0/src",
|
"remoteCMakeListsRoot": "/home/pi/SIF0/src",
|
||||||
"remoteBuildRoot": "/home/pi/SIF0/out/build_d/${name}",
|
"remoteBuildRoot": "/home/pi/SIF0/out/build_d/${name}",
|
||||||
"remoteInstallRoot": "/home/pi/SIF0/out/install/${name}",
|
"remoteInstallRoot": "/home/pi/SIF0/out/install/${name}",
|
||||||
@ -28,8 +28,7 @@
|
|||||||
"cmakeCommandArgs": "",
|
"cmakeCommandArgs": "",
|
||||||
"buildCommandArgs": "",
|
"buildCommandArgs": "",
|
||||||
"ctestCommandArgs": "",
|
"ctestCommandArgs": "",
|
||||||
"inheritEnvironments": [ "msvc_x64_x64" ],
|
"inheritEnvironments": [ "msvc_x64_x64" ]
|
||||||
"variables": []
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
@ -1 +1 @@
|
|||||||
{"BeginTime":"8:00","IntervalTime":"10","EndTime":"18:00","Location":"beijing","GPS_Longtitude":"117","GPS_Latitude":"118","GPS_Altitude":"50","GPS_North":"on","InstallationTime":"2021-11-18","ISIFCalibrationTime":"2021-11-26","IS1CalibrationTime":"2021-11-19","NameOfMaintenanceStaff":"renlixin","PhoneNumberOfMaintenanceStaff":"110110110","DownloadUserID":"newuser","DownlaodAddress":"http:\/\/www.iris-rs.cn","SIFUpCalFile":"dat1","SIFDownCalFile1":"dat2","SIFDownCalFile2":"dat2","SIFDownCalFile3":"dat3","IS1UpCalFile":"dat1","IS1DownCalFile1":"sdaf","IS1DownCalFile2":"dat2","IS1DownCalFile3":"asdf","HTTPServer":"192.168.2.1"}
|
{"BeginTime":"08:00","IntervalTime":"02","EndTime":"23:00","Dev_SN":"0000001","Location":"beijing","GPS_North":"on","GPS_Longtitude":"117","GPS_Latitude":"41","GPS_Altitude":"100","InstallationTime":"2021-12-24","ISIFCalibrationTime":"2021-12-24","IS1CalibrationTime":"2021-12-24","NameOfMaintenanceStaff":"renlixin","PhoneNumberOfMaintenanceStaff":"1110010010","DownloadUserID":"xin","DownlaodAddress":"http:\/\/www.iris-rs.cn","HTTPServer":"http:\/\/82.156.1.111","OSIFAlpha_CaliFileMainName":""}
|
33
main.cpp
33
main.cpp
@ -19,8 +19,8 @@ int main(int argc, char *argv[])
|
|||||||
QCoreApplication a(argc, argv);
|
QCoreApplication a(argc, argv);
|
||||||
|
|
||||||
|
|
||||||
system("gpio mode 1 output");//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ų<EFBFBD>ʼ<EFBFBD><CABC>
|
//system("gpio mode 1 output");//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ų<EFBFBD>ʼ<EFBFBD><CABC>
|
||||||
qDebug() << "gpio mode 1 output......" << endl;
|
//qDebug() << "gpio mode 1 output......" << endl;
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
////
|
////
|
||||||
GY39Controller m_ctrlHumitureDetector;
|
GY39Controller m_ctrlHumitureDetector;
|
||||||
@ -46,12 +46,33 @@ int main(int argc, char *argv[])
|
|||||||
HumitureDeviceInfo m_struHumitureDI;
|
HumitureDeviceInfo m_struHumitureDI;
|
||||||
//////////////////////////////////////////////////////////////////////////logger
|
//////////////////////////////////////////////////////////////////////////logger
|
||||||
///create main system logger
|
///create main system logger
|
||||||
QT_LOG::ZZ_InitLogger("/home/data/Log/");
|
//QT_LOG::ZZ_InitLogger("/home/data/Log/");
|
||||||
//////////////////////////////////////////////////////////////////////////config
|
//////////////////////////////////////////////////////////////////////////config
|
||||||
///turn on power supply
|
///turn on power supply
|
||||||
system("gpio mode 1 out");
|
|
||||||
|
//////add support to dual channel
|
||||||
|
system("gpio mode 1 out");
|
||||||
|
system("gpio mode 4 out");
|
||||||
|
system("gpio mode 5 out");
|
||||||
|
qDebug() << "gpio 1;4;5; ready" << endl;
|
||||||
|
|
||||||
system("gpio write 1 1");//<2F>豸<EFBFBD>ϵ<EFBFBD>
|
system("gpio write 1 1");//<2F>豸<EFBFBD>ϵ<EFBFBD>
|
||||||
qDebug() << "gpio write 1 1......" << endl;
|
qDebug() << "gpio write 1 1......" << endl;
|
||||||
|
|
||||||
|
// QString qstrCMD_A, qstrCMD_B, qstrCMD_Temp;
|
||||||
|
// qstrCMD_Temp = QString::fromStdString("4");
|
||||||
|
// qDebug() << qstrCMD_Temp << endl;
|
||||||
|
// qstrCMD_A = "gpio write " + qstrCMD_Temp + " 0";
|
||||||
|
//
|
||||||
|
// qstrCMD_Temp = QString::fromStdString("5");
|
||||||
|
// qDebug() << qstrCMD_Temp << endl;
|
||||||
|
// qstrCMD_B = "gpio write " + qstrCMD_Temp + " 0";
|
||||||
|
//
|
||||||
|
// qDebug() << qstrCMD_A << endl;
|
||||||
|
// qDebug() << qstrCMD_B << endl;
|
||||||
|
// system(qstrCMD_A.toLatin1());
|
||||||
|
// system(qstrCMD_B.toLatin1());
|
||||||
|
|
||||||
QThread::msleep(5000);
|
QThread::msleep(5000);
|
||||||
bRes = m_scConfiggerLoader.Initialize();
|
bRes = m_scConfiggerLoader.Initialize();
|
||||||
if (bRes)
|
if (bRes)
|
||||||
@ -66,10 +87,10 @@ int main(int argc, char *argv[])
|
|||||||
m_dfpSaver.SetManmadeEnviromentalContext(m_struMEC);
|
m_dfpSaver.SetManmadeEnviromentalContext(m_struMEC);
|
||||||
|
|
||||||
m_mduUploader.SetContext(m_struEC, m_struMEC);
|
m_mduUploader.SetContext(m_struEC, m_struMEC);
|
||||||
m_mduUploader.Initialize();
|
//m_mduUploader.Initialize();
|
||||||
//m_ctrlHumitureDetector.Initialize(m_struHumitureDI.qstrInterfaceName.toStdString());
|
//m_ctrlHumitureDetector.Initialize(m_struHumitureDI.qstrInterfaceName.toStdString());
|
||||||
//////////////////////////////////////////////////////////////////////////prepare
|
//////////////////////////////////////////////////////////////////////////prepare
|
||||||
m_sTimer.Preheating();
|
//m_sTimer.Preheating();
|
||||||
//m_ctrlHumitureDetector.GetHumiture_retry(m_fChassisTemp, m_fChassisHum);
|
//m_ctrlHumitureDetector.GetHumiture_retry(m_fChassisTemp, m_fChassisHum);
|
||||||
|
|
||||||
m_struEC.qstrCaseTemperature= QString("%1").arg(m_fChassisTemp);
|
m_struEC.qstrCaseTemperature= QString("%1").arg(m_fChassisTemp);
|
||||||
|
@ -179,7 +179,7 @@ namespace ZZ_MISCDEF
|
|||||||
{
|
{
|
||||||
ZZ_U8 ucPort;
|
ZZ_U8 ucPort;
|
||||||
ZZ_U8 ucProtocolType;
|
ZZ_U8 ucProtocolType;
|
||||||
ZZ_U8 ucCmdID;
|
ZZ_U16 usCmdID;
|
||||||
}LSContext;
|
}LSContext;
|
||||||
|
|
||||||
typedef struct tagAcquisitionTimeSettings
|
typedef struct tagAcquisitionTimeSettings
|
||||||
|
@ -1,12 +1,18 @@
|
|||||||
#include "AbstractFSController.h"
|
#include "AbstractFSController.h"
|
||||||
#include "ZZ_Math_HDRONLY.h"
|
#include "ZZ_Math_HDRONLY.h"
|
||||||
|
#include <math.h>
|
||||||
CAbstractFSController::CAbstractFSController(QObject* parent /*= nullptr*/)
|
CAbstractFSController::CAbstractFSController(QObject* parent /*= nullptr*/)
|
||||||
{
|
{
|
||||||
iFlagInit = 0;
|
iFlagInit = 0;
|
||||||
m_pFSCtrl = NULL;
|
m_pFSCtrl = NULL;
|
||||||
m_iThreadID = -1;
|
m_iThreadID = -1;
|
||||||
|
|
||||||
m_vecDataFrameDark.clear();
|
m_vecDataFrameDark.clear();
|
||||||
m_vecDataFrameSignal.clear();
|
m_vecDataFrameSignal.clear();
|
||||||
|
|
||||||
|
m_qstrCalFilePath = "/home/data/Cal";
|
||||||
|
|
||||||
|
m_vecNonLinearCalP.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
CAbstractFSController::~CAbstractFSController()
|
CAbstractFSController::~CAbstractFSController()
|
||||||
@ -30,6 +36,9 @@ int CAbstractFSController::SetRunParas(int iThreadID, FSInfo fsInfo)
|
|||||||
int CAbstractFSController::InitializeFSControl()
|
int CAbstractFSController::InitializeFSControl()
|
||||||
{
|
{
|
||||||
using namespace ZZ_MISCDEF::IRIS;
|
using namespace ZZ_MISCDEF::IRIS;
|
||||||
|
|
||||||
|
int iRes = 0;
|
||||||
|
|
||||||
if (m_iThreadID == -1/*|| m_iDeviceType == -1*/)
|
if (m_iThreadID == -1/*|| m_iDeviceType == -1*/)
|
||||||
{
|
{
|
||||||
qDebug() << "Params Err. Call SetRunParas first";
|
qDebug() << "Params Err. Call SetRunParas first";
|
||||||
@ -44,7 +53,12 @@ int CAbstractFSController::InitializeFSControl()
|
|||||||
qDebug() << "OSIFAlpha Not Opened";
|
qDebug() << "OSIFAlpha Not Opened";
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
iRes = LoadQEProLinearCalibrationFile();
|
||||||
|
if (iRes != 0)
|
||||||
|
{
|
||||||
|
qDebug() << "LoadQEProLinearCalibrationFile Failed" << iRes;
|
||||||
|
//return 5;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case DeviceModel::OSIFBeta:
|
case DeviceModel::OSIFBeta:
|
||||||
m_pFSCtrl = new OceanOptics_lib;
|
m_pFSCtrl = new OceanOptics_lib;
|
||||||
@ -53,6 +67,12 @@ int CAbstractFSController::InitializeFSControl()
|
|||||||
qDebug() << "OSIFBeta Not Opened";
|
qDebug() << "OSIFBeta Not Opened";
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
iRes = LoadQEProLinearCalibrationFile();
|
||||||
|
if (iRes != 0)
|
||||||
|
{
|
||||||
|
qDebug() << "LoadQEProLinearCalibrationFile Failed" << iRes;
|
||||||
|
//return 5;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case DeviceModel::ISIF:
|
case DeviceModel::ISIF:
|
||||||
m_pFSCtrl = new ZZ_ATPControl_Serial_Qt;
|
m_pFSCtrl = new ZZ_ATPControl_Serial_Qt;
|
||||||
@ -85,7 +105,7 @@ int CAbstractFSController::InitializeFSControl()
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
int iRes = m_pFSCtrl->GetDeviceAttribute(m_daDeviceAttr);
|
iRes = m_pFSCtrl->GetDeviceAttribute(m_daDeviceAttr);
|
||||||
if (iRes != 0)
|
if (iRes != 0)
|
||||||
{
|
{
|
||||||
qDebug() << "GetDeviceAttribute Failed" << iRes;
|
qDebug() << "GetDeviceAttribute Failed" << iRes;
|
||||||
@ -364,6 +384,28 @@ DataFrame CAbstractFSController::TakeOneFrame()
|
|||||||
qDebug() << "Err. SingleShot" << " Thread ID:" << m_iThreadID;
|
qDebug() << "Err. SingleShot" << " Thread ID:" << m_iThreadID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_fsInfo.ucDeviceModel == DeviceModel::OSIFAlpha|| m_fsInfo.ucDeviceModel == DeviceModel::OSIFBeta)
|
||||||
|
{
|
||||||
|
if (m_vecNonLinearCalP.size() != 8)
|
||||||
|
{
|
||||||
|
qDebug() << "Err.Non Linear calibration parameters not fit.Skip..." << " Thread ID:" << m_iThreadID;
|
||||||
|
return dfTemp;
|
||||||
|
}
|
||||||
|
for (int i=0;i<m_daDeviceAttr.iPixels;i++)
|
||||||
|
{
|
||||||
|
dfTemp.lData[i] = dfTemp.lData[i] / ( m_vecNonLinearCalP[0] +
|
||||||
|
m_vecNonLinearCalP[1] * dfTemp.lData[i] +
|
||||||
|
m_vecNonLinearCalP[2] * pow(dfTemp.lData[i], 2) +
|
||||||
|
m_vecNonLinearCalP[3] * pow(dfTemp.lData[i], 3) +
|
||||||
|
m_vecNonLinearCalP[4] * pow(dfTemp.lData[i], 4) +
|
||||||
|
m_vecNonLinearCalP[5] * pow(dfTemp.lData[i], 5) +
|
||||||
|
m_vecNonLinearCalP[6] * pow(dfTemp.lData[i], 6) +
|
||||||
|
m_vecNonLinearCalP[7] * pow(dfTemp.lData[i], 7)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return dfTemp;
|
return dfTemp;
|
||||||
// DataFrame dfTemp;
|
// DataFrame dfTemp;
|
||||||
// int iRes = m_pFSCtrl->SingleShot(dfTemp);
|
// int iRes = m_pFSCtrl->SingleShot(dfTemp);
|
||||||
@ -380,18 +422,55 @@ int CAbstractFSController::SaveDataFile()
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int CAbstractFSController::LoadQEProLinearCalibrationFile()
|
||||||
|
{
|
||||||
|
m_vecNonLinearCalP.clear();
|
||||||
|
|
||||||
|
QDir qdirPath(m_qstrCalFilePath);
|
||||||
|
if (!qdirPath.exists())
|
||||||
|
{
|
||||||
|
qDebug() << "Non-Linear Calibration Folder not exist" << " Thread ID:" << m_iThreadID;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
QString qstrFilePath;
|
||||||
|
|
||||||
|
qstrFilePath = m_qstrCalFilePath + QString("/")+QString::fromStdString(m_fsInfo.strSN)+ QString(".NLC");
|
||||||
|
|
||||||
|
QFile qfCalFile(qstrFilePath);
|
||||||
|
bool bRes = qfCalFile.open(QFile::ReadOnly);
|
||||||
|
if (!bRes)
|
||||||
|
{
|
||||||
|
qDebug() << "Non-Linear Calibration File open Failed" << " Thread ID:" << m_iThreadID;
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
while (!qfCalFile.atEnd())
|
||||||
|
{
|
||||||
|
QByteArray qbData = qfCalFile.readLine();
|
||||||
|
qbData.remove(qbData.size()-1, 1);
|
||||||
|
m_vecNonLinearCalP.push_back(qbData.toDouble());
|
||||||
|
//qDebug() << qbData;
|
||||||
|
}
|
||||||
|
qfCalFile.close();
|
||||||
|
|
||||||
|
qDebug() <<"Non-Linear Calibration Params:"<< m_vecNonLinearCalP.size() << " Thread ID:" << m_iThreadID;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int CAbstractFSController::StartAcquisitionSignal()
|
int CAbstractFSController::StartAcquisitionSignal()
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
qDebug() << "Starting acq Signal" << " Thread ID:" << m_iThreadID;
|
qDebug() << "Starting acq Signal" << " Thread ID:" << m_iThreadID;
|
||||||
|
|
||||||
// DataFrame struDF;
|
// DataFrame struDF;
|
||||||
// int iii;
|
// int iii;
|
||||||
// m_pFSCtrl->SetExposureTime(10000000);
|
// m_pFSCtrl->SetExposureTime(10000000);
|
||||||
// m_pFSCtrl->GetExposureTime(iii);
|
// m_pFSCtrl->GetExposureTime(iii);
|
||||||
// m_pFSCtrl->SingleShot(struDF);
|
// m_pFSCtrl->SingleShot(struDF);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PerformAutoExposure();
|
PerformAutoExposure();
|
||||||
TakeSignalFrame();
|
TakeSignalFrame();
|
||||||
|
|
||||||
|
@ -43,6 +43,10 @@ private:
|
|||||||
std::vector<DataFrame> m_vecDataFrameDark, m_vecDataFrameSignal;
|
std::vector<DataFrame> m_vecDataFrameDark, m_vecDataFrameSignal;
|
||||||
|
|
||||||
DeviceAttribute m_daDeviceAttr;
|
DeviceAttribute m_daDeviceAttr;
|
||||||
|
|
||||||
|
//QE NLC
|
||||||
|
QString m_qstrCalFilePath;
|
||||||
|
std::vector<double> m_vecNonLinearCalP;
|
||||||
private:
|
private:
|
||||||
int PerformAutoExposure();
|
int PerformAutoExposure();
|
||||||
int TakeDarkFrame();
|
int TakeDarkFrame();
|
||||||
@ -50,6 +54,8 @@ private:
|
|||||||
DataFrame TakeOneFrame();
|
DataFrame TakeOneFrame();
|
||||||
int SaveDataFile();
|
int SaveDataFile();
|
||||||
|
|
||||||
|
//QE NLC
|
||||||
|
int LoadQEProLinearCalibrationFile();
|
||||||
public slots:
|
public slots:
|
||||||
virtual int StartAcquisitionSignal();
|
virtual int StartAcquisitionSignal();
|
||||||
virtual int StartAcquisitionDark();
|
virtual int StartAcquisitionDark();
|
||||||
|
@ -122,14 +122,45 @@ int CMainDataGrabber::InitLS()
|
|||||||
//SetupMsgPipelines_RunTime();
|
//SetupMsgPipelines_RunTime();
|
||||||
//StartWorkers();
|
//StartWorkers();
|
||||||
|
|
||||||
|
if (m_struLinearShutterContext.strInterface=="GPIO")
|
||||||
|
{
|
||||||
|
qDebug() << "Debugging GPIO Init Started";
|
||||||
|
|
||||||
PortInfo piTemp;
|
m_vecDSS.clear();
|
||||||
piTemp.qstrFullPortName = QString::fromStdString(m_struLinearShutterContext.strInterface);
|
|
||||||
m_ctrlLS.ILMES_InitializeComm(piTemp, m_struLinearShutterContext.ucProtocolType, m_struLinearShutterContext.ucCmdID);
|
|
||||||
ControllerParams cpTemp;
|
|
||||||
bool res = m_ctrlLS.ILMES_InitializeParams(cpTemp);
|
|
||||||
|
|
||||||
m_ctrlLS.ILMES_SetPosition(m_struAcqPosSetting.iPosition, m_struAcqPosSetting.iTotalPosition);
|
if (m_struLinearShutterContext.ucProtocolType == 100)
|
||||||
|
{
|
||||||
|
DSStatus DSSOne;
|
||||||
|
|
||||||
|
QString qstrChannel = QString::number(m_struLinearShutterContext.usCmdID, 10);
|
||||||
|
if (qstrChannel.size() != 2)
|
||||||
|
{
|
||||||
|
qDebug() << "Dual Shutter Channel Parse Err.";
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DSSOne.strChannelA = qstrChannel.toStdString()[0];
|
||||||
|
DSSOne.strChannelB = qstrChannel.toStdString()[1];
|
||||||
|
DSSOne.iChannelA = 1;
|
||||||
|
DSSOne.iChannelB = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_vecDSS.push_back(DSSOne);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PortInfo piTemp;
|
||||||
|
piTemp.qstrFullPortName = QString::fromStdString(m_struLinearShutterContext.strInterface);
|
||||||
|
m_ctrlLS.ILMES_InitializeComm(piTemp, m_struLinearShutterContext.ucProtocolType, m_struLinearShutterContext.usCmdID);
|
||||||
|
ControllerParams cpTemp;
|
||||||
|
bool res = m_ctrlLS.ILMES_InitializeParams(cpTemp);
|
||||||
|
m_ctrlLS.ILMES_SetPosition(m_struAcqPosSetting.iPosition, m_struAcqPosSetting.iTotalPosition);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//m_ctrlLS.ILMES_MoveToPos(2);
|
//m_ctrlLS.ILMES_MoveToPos(2);
|
||||||
return 0;
|
return 0;
|
||||||
@ -428,6 +459,9 @@ int CMainDataGrabber::GrabOnceFinished()
|
|||||||
|
|
||||||
int CMainDataGrabber::OnTimeCounter()
|
int CMainDataGrabber::OnTimeCounter()
|
||||||
{
|
{
|
||||||
|
bool bRes;
|
||||||
|
QString qstrCMD_A,qstrCMD_B,qstrCMD_Temp;
|
||||||
|
|
||||||
if (m_iFlagIsCapturing)
|
if (m_iFlagIsCapturing)
|
||||||
{
|
{
|
||||||
qDebug() << "Fatal Warning.Last capture not finished.New acquisition will not start";
|
qDebug() << "Fatal Warning.Last capture not finished.New acquisition will not start";
|
||||||
@ -445,30 +479,84 @@ int CMainDataGrabber::GrabOnceFinished()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
////hold current
|
|
||||||
bool bRes = m_ctrlLS.SetHoldCurrent(0.4f);
|
if (m_struLinearShutterContext.strInterface == "GPIO")
|
||||||
if (!bRes)
|
|
||||||
{
|
{
|
||||||
qDebug() << "SetHoldCurrent 0.4 Failed";
|
|
||||||
}
|
}
|
||||||
Delay_MSec(1000);
|
else
|
||||||
////
|
{
|
||||||
|
////hold current
|
||||||
|
bRes = m_ctrlLS.SetHoldCurrent(0.4f);
|
||||||
|
if (!bRes)
|
||||||
|
{
|
||||||
|
qDebug() << "SetHoldCurrent 0.4 Failed";
|
||||||
|
}
|
||||||
|
Delay_MSec(1000);
|
||||||
|
////
|
||||||
|
}
|
||||||
|
|
||||||
for (int i=0;i< m_struAcqPosSetting.iTotalPosition-1;i++)
|
for (int i=0;i< m_struAcqPosSetting.iTotalPosition-1;i++)
|
||||||
{
|
{
|
||||||
ResetThreadStatus();
|
ResetThreadStatus();
|
||||||
////move to
|
|
||||||
qDebug()<<"Start ILMES_MoveToPos:"<<i+1;
|
////move to start
|
||||||
if (i==0)
|
if (m_struLinearShutterContext.strInterface == "GPIO")
|
||||||
{
|
{
|
||||||
m_ctrlLS.ILMES_MoveToPos(i + 1);
|
if (m_struLinearShutterContext.ucProtocolType == 100)
|
||||||
|
{
|
||||||
|
if (i==0)
|
||||||
|
{
|
||||||
|
qstrCMD_Temp = QString::fromStdString(m_vecDSS[0].strChannelA);
|
||||||
|
qstrCMD_A = "gpio write " + qstrCMD_Temp + " 1";
|
||||||
|
|
||||||
|
qstrCMD_Temp = QString::fromStdString(m_vecDSS[0].strChannelB);
|
||||||
|
qstrCMD_B = "gpio write " + qstrCMD_Temp + " 0";
|
||||||
|
|
||||||
|
system(qstrCMD_A.toLatin1());
|
||||||
|
system(qstrCMD_B.toLatin1());
|
||||||
|
|
||||||
|
qDebug() << qstrCMD_A;
|
||||||
|
qDebug() << qstrCMD_B;
|
||||||
|
|
||||||
|
Delay_MSec(500);
|
||||||
|
}
|
||||||
|
if (i==1)
|
||||||
|
{
|
||||||
|
qstrCMD_Temp = QString::fromStdString(m_vecDSS[0].strChannelA);
|
||||||
|
qstrCMD_A = "gpio write " + qstrCMD_Temp + " 0";
|
||||||
|
|
||||||
|
qstrCMD_Temp = QString::fromStdString(m_vecDSS[0].strChannelB);
|
||||||
|
qstrCMD_B = "gpio write " + qstrCMD_Temp + " 1";
|
||||||
|
|
||||||
|
system(qstrCMD_A.toLatin1());
|
||||||
|
system(qstrCMD_B.toLatin1());
|
||||||
|
|
||||||
|
qDebug() << qstrCMD_A;
|
||||||
|
qDebug() << qstrCMD_B;
|
||||||
|
|
||||||
|
Delay_MSec(500);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_ctrlLS.MoveTo(m_struAcqPosSetting.iPosition[1]);
|
qDebug() << "Start ILMES_MoveToPos:" << i + 1;
|
||||||
|
if (i == 0)
|
||||||
|
{
|
||||||
|
m_ctrlLS.ILMES_MoveToPos(i + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_ctrlLS.MoveTo(m_struAcqPosSetting.iPosition[1]);
|
||||||
|
}
|
||||||
|
m_ctrlLS.ILMES_MoveToPos(i + 1);
|
||||||
|
qDebug() << "Stop ILMES_MoveToPos:" << i + 1;
|
||||||
}
|
}
|
||||||
m_ctrlLS.ILMES_MoveToPos(i+1);
|
////move to end
|
||||||
////
|
|
||||||
qDebug() << "Stop ILMES_MoveToPos:" << i + 1;
|
|
||||||
// m_struAcqPosSetting.iPosition[i + 1];
|
// m_struAcqPosSetting.iPosition[i + 1];
|
||||||
m_iFlagIsCapturing_Signal = 1;
|
m_iFlagIsCapturing_Signal = 1;
|
||||||
emit SignalStartGrabOnce_Signal();
|
emit SignalStartGrabOnce_Signal();
|
||||||
@ -479,9 +567,30 @@ int CMainDataGrabber::GrabOnceFinished()
|
|||||||
|
|
||||||
|
|
||||||
////move to
|
////move to
|
||||||
qDebug() << "Start ILMES_MoveToPos:" << 0;
|
if (m_struLinearShutterContext.strInterface == "GPIO")
|
||||||
m_ctrlLS.ILMES_MoveToPos(0);
|
{
|
||||||
qDebug() << "Stop ILMES_MoveToPos:" << 0;
|
if (m_struLinearShutterContext.ucProtocolType == 100)
|
||||||
|
{
|
||||||
|
qstrCMD_Temp = QString::fromStdString(m_vecDSS[0].strChannelA);
|
||||||
|
qstrCMD_A = "gpio write " + qstrCMD_Temp + " 0";
|
||||||
|
|
||||||
|
qstrCMD_Temp = QString::fromStdString(m_vecDSS[0].strChannelB);
|
||||||
|
qstrCMD_B = "gpio write " + qstrCMD_Temp + " 0";
|
||||||
|
|
||||||
|
system(qstrCMD_A.toLatin1());
|
||||||
|
system(qstrCMD_B.toLatin1());
|
||||||
|
|
||||||
|
qDebug() << qstrCMD_A;
|
||||||
|
qDebug() << qstrCMD_B;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
qDebug() << "Start ILMES_MoveToPos:" << 0;
|
||||||
|
m_ctrlLS.ILMES_MoveToPos(0);
|
||||||
|
qDebug() << "Stop ILMES_MoveToPos:" << 0;
|
||||||
|
}
|
||||||
|
|
||||||
//m_struAcqPosSetting.iPosition[0];
|
//m_struAcqPosSetting.iPosition[0];
|
||||||
m_iFlagIsCapturing_Dark = 1;
|
m_iFlagIsCapturing_Dark = 1;
|
||||||
emit SignalStartGrabOnce_Dark();
|
emit SignalStartGrabOnce_Dark();
|
||||||
@ -490,14 +599,22 @@ int CMainDataGrabber::GrabOnceFinished()
|
|||||||
Delay_MSec(1000);
|
Delay_MSec(1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
////hold current
|
|
||||||
bRes = m_ctrlLS.SetHoldCurrent(0);
|
if (m_struLinearShutterContext.strInterface == "GPIO")
|
||||||
if (!bRes)
|
|
||||||
{
|
{
|
||||||
qDebug() << "SetHoldCurrent 0 Failed";
|
|
||||||
}
|
}
|
||||||
Delay_MSec(1000);
|
else
|
||||||
////
|
{
|
||||||
|
////hold current
|
||||||
|
bRes = m_ctrlLS.SetHoldCurrent(0);
|
||||||
|
if (!bRes)
|
||||||
|
{
|
||||||
|
qDebug() << "SetHoldCurrent 0 Failed";
|
||||||
|
}
|
||||||
|
Delay_MSec(1000);
|
||||||
|
////
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<std::vector<DataFrame>> vecData;
|
std::vector<std::vector<DataFrame>> vecData;
|
||||||
|
|
||||||
for (ZZ_U8 i = 0; i < m_struDeviceContext.ucDeviceNumber; i++)
|
for (ZZ_U8 i = 0; i < m_struDeviceContext.ucDeviceNumber; i++)
|
||||||
|
@ -43,6 +43,9 @@ private:
|
|||||||
AcqPosSettings m_struAcqPosSetting;
|
AcqPosSettings m_struAcqPosSetting;
|
||||||
AcqTimeSettings m_struAcqTime;
|
AcqTimeSettings m_struAcqTime;
|
||||||
RunTimeGrabberParams m_struRTGP;
|
RunTimeGrabberParams m_struRTGP;
|
||||||
|
|
||||||
|
//20220422 added for dual-shutter system
|
||||||
|
vector<DSStatus> m_vecDSS;
|
||||||
|
|
||||||
//QTimer *m_GrabTimer;
|
//QTimer *m_GrabTimer;
|
||||||
private:
|
private:
|
||||||
|
@ -512,7 +512,7 @@ int ZZ_ATPControl_Serial_Qt::PerformAutoExposure(float fMinScaleFactor, float fM
|
|||||||
double fLastExposureTime = 0.1;
|
double fLastExposureTime = 0.1;
|
||||||
int iRepeatCount = 0;
|
int iRepeatCount = 0;
|
||||||
|
|
||||||
int iRes = SetExposureTime(2000);//need change to load from files
|
int iRes = SetExposureTime(m_daDeviceAttr.iMinIntegrationTimeInMS);//need change to load from files
|
||||||
if (iRes != 0)
|
if (iRes != 0)
|
||||||
{
|
{
|
||||||
qDebug() << "Err:PerformAutoExposure Failed.Exit Code:1";
|
qDebug() << "Err:PerformAutoExposure Failed.Exit Code:1";
|
||||||
@ -527,10 +527,14 @@ int ZZ_ATPControl_Serial_Qt::PerformAutoExposure(float fMinScaleFactor, float fM
|
|||||||
{
|
{
|
||||||
bFlagIsAutoExposureFailed = true;
|
bFlagIsAutoExposureFailed = true;
|
||||||
bFlagIsOverTrying = true;
|
bFlagIsOverTrying = true;
|
||||||
|
qDebug() << "over 30 Times" << endl;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
fExposureTime = (float)m_daDeviceAttr.iMinIntegrationTimeInMS;
|
//fExposureTime = (float)m_daDeviceAttr.iMinIntegrationTimeInMS;
|
||||||
|
int fTemp;
|
||||||
|
GetExposureTime(fTemp);
|
||||||
|
fExposureTime = fTemp;
|
||||||
fTempExposureTime = fExposureTime;
|
fTempExposureTime = fExposureTime;
|
||||||
|
|
||||||
iRes = SingleShot(dfTemp);
|
iRes = SingleShot(dfTemp);
|
||||||
@ -592,11 +596,13 @@ int ZZ_ATPControl_Serial_Qt::PerformAutoExposure(float fMinScaleFactor, float fM
|
|||||||
dFactor = dTemp / (iDeviceDepth * fMaxScaleFactor);
|
dFactor = dTemp / (iDeviceDepth * fMaxScaleFactor);
|
||||||
fExposureTime = (float)(fExposureTime / dFactor);
|
fExposureTime = (float)(fExposureTime / dFactor);
|
||||||
}
|
}
|
||||||
if (/*fExposureTime > 100 || */fExposureTime < 10)
|
if (fExposureTime < m_daDeviceAttr.iMinIntegrationTimeInMS)
|
||||||
{
|
{
|
||||||
bFlagIsAutoExposureOK = false;
|
bFlagIsAutoExposureOK = false;
|
||||||
bFlagIsAutoExposureFailed = true;
|
bFlagIsAutoExposureFailed = true;
|
||||||
bFlagIsLowerMinExposureTime = true;
|
bFlagIsLowerMinExposureTime = true;
|
||||||
|
qDebug() << "lower than minimum" << endl;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bIsLastValueOverflow = bIsValueOverflow;
|
bIsLastValueOverflow = bIsValueOverflow;
|
||||||
@ -669,7 +675,7 @@ int ZZ_ATPControl_Serial_Qt::SetExposureTime(int iExposureTimeInMS)
|
|||||||
if ((ZZ_U8)qbRecv[0] != 0)
|
if ((ZZ_U8)qbRecv[0] != 0)
|
||||||
{
|
{
|
||||||
qDebug() << "Err:SetExposureTime Failed.Exit Code:1";
|
qDebug() << "Err:SetExposureTime Failed.Exit Code:1";
|
||||||
return 1;
|
//return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -200,11 +200,21 @@ namespace ZZ_MISCDEF
|
|||||||
float fWavelength[MAX_DEVICENUMBER_FS][4096];
|
float fWavelength[MAX_DEVICENUMBER_FS][4096];
|
||||||
}FSContext;
|
}FSContext;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct tagDualShutterStatus
|
||||||
|
{
|
||||||
|
std::string strChannelA;
|
||||||
|
std::string strChannelB;
|
||||||
|
int iChannelA = 0;
|
||||||
|
int iChannelB = 0;
|
||||||
|
}DSStatus;
|
||||||
|
|
||||||
|
|
||||||
typedef struct tagLinearShutterContext
|
typedef struct tagLinearShutterContext
|
||||||
{
|
{
|
||||||
std::string strInterface;
|
std::string strInterface;
|
||||||
ZZ_U8 ucProtocolType;
|
ZZ_U8 ucProtocolType;
|
||||||
ZZ_U8 ucCmdID;
|
ZZ_U16 usCmdID;
|
||||||
}LSContext;
|
}LSContext;
|
||||||
|
|
||||||
typedef struct tagAcquisitionTimeSettings
|
typedef struct tagAcquisitionTimeSettings
|
||||||
|
@ -78,7 +78,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
m_struLSContext.ucCmdID = m_qsDeviceConfig->value(QString("LINEAR SHUTTER/DCID")).toInt();
|
m_struLSContext.usCmdID = m_qsDeviceConfig->value(QString("LINEAR SHUTTER/DCID")).toInt();
|
||||||
m_struLSContext.ucProtocolType = m_qsDeviceConfig->value(QString("LINEAR SHUTTER/Type")).toInt();
|
m_struLSContext.ucProtocolType = m_qsDeviceConfig->value(QString("LINEAR SHUTTER/Type")).toInt();
|
||||||
m_struLSContext.strInterface = m_qsDeviceConfig->value(QString("LINEAR SHUTTER/Port")).toString().toStdString();
|
m_struLSContext.strInterface = m_qsDeviceConfig->value(QString("LINEAR SHUTTER/Port")).toString().toStdString();
|
||||||
|
|
||||||
|
@ -101,7 +101,7 @@ int ZZ_HttpTransfer::SendInfo()
|
|||||||
m_iFlagIsReplied = false;
|
m_iFlagIsReplied = false;
|
||||||
for (int i = 0; i < m_struGrabberRTParams.fscParams.ucDeviceNumber; i++)
|
for (int i = 0; i < m_struGrabberRTParams.fscParams.ucDeviceNumber; i++)
|
||||||
{
|
{
|
||||||
qstrSend = "Location:" + QString("%1").arg(m_struEC.qstrLocation) + "####";
|
qstrSend = "Location:" + QString("%1").arg(m_struEC.qstrLocation) + "####";
|
||||||
qstrSend += "DEV_SN:" + QString("%1").arg(m_struEC.qstrDEV_SN) + "####";
|
qstrSend += "DEV_SN:" + QString("%1").arg(m_struEC.qstrDEV_SN) + "####";
|
||||||
qstrSend += "FS_SN:" + QString::fromLocal8Bit(m_struGrabberRTParams.fscParams.strSN[i].c_str()) + "####";
|
qstrSend += "FS_SN:" + QString::fromLocal8Bit(m_struGrabberRTParams.fscParams.strSN[i].c_str()) + "####";
|
||||||
qstrSend += "GPS_Longtitude:" + QString("%1").arg(m_struEC.qstrGPS_Longtitude) + "####";
|
qstrSend += "GPS_Longtitude:" + QString("%1").arg(m_struEC.qstrGPS_Longtitude) + "####";
|
||||||
@ -114,6 +114,9 @@ int ZZ_HttpTransfer::SendInfo()
|
|||||||
qstrSend += "Bands:" + QString("%1").arg(m_struGrabberRTParams.fscParams.usPixels[i]) + "####";
|
qstrSend += "Bands:" + QString("%1").arg(m_struGrabberRTParams.fscParams.usPixels[i]) + "####";
|
||||||
qstrSend += "Positions:" + QString("%1").arg(m_struGrabberRTParams.apsParams.iTotalPosition-1) + "####";
|
qstrSend += "Positions:" + QString("%1").arg(m_struGrabberRTParams.apsParams.iTotalPosition-1) + "####";
|
||||||
qstrSend += "WaveLength:";
|
qstrSend += "WaveLength:";
|
||||||
|
|
||||||
|
qDebug() << m_struEC.qstrDEV_SN;
|
||||||
|
|
||||||
for (int j=0;j< m_struGrabberRTParams.fscParams.usPixels[i];j++)
|
for (int j=0;j< m_struGrabberRTParams.fscParams.usPixels[i];j++)
|
||||||
{
|
{
|
||||||
qstrWaveLength = QString("%1").arg(m_struGrabberRTParams.fscParams.fWavelength[i][j]);
|
qstrWaveLength = QString("%1").arg(m_struGrabberRTParams.fscParams.fWavelength[i][j]);
|
||||||
@ -253,8 +256,8 @@ void ZZ_HttpTransfer::Delay_MSec(ZZ_U16 usMS)
|
|||||||
int ZZ_HttpTransfer::SlotReplyFinished(QNetworkReply* qnReply)
|
int ZZ_HttpTransfer::SlotReplyFinished(QNetworkReply* qnReply)
|
||||||
{
|
{
|
||||||
|
|
||||||
QString qstrURL = qnReply->url().toString();
|
QString qstrURL = qnReply->url().toString();
|
||||||
QByteArray qbData = qnReply->readAll();
|
QByteArray qbData = qnReply->readAll();
|
||||||
if (qnReply->error()== QNetworkReply::NoError)
|
if (qnReply->error()== QNetworkReply::NoError)
|
||||||
{
|
{
|
||||||
qDebug() << "Reply NoError:" << "Server:" << qstrURL;
|
qDebug() << "Reply NoError:" << "Server:" << qstrURL;
|
||||||
|
@ -52,7 +52,6 @@ void CMainDataUploader::Calibration()
|
|||||||
{
|
{
|
||||||
int iScanPoints = m_struGrabberRTParams.apsParams.iTotalPosition - 1;
|
int iScanPoints = m_struGrabberRTParams.apsParams.iTotalPosition - 1;
|
||||||
int iDevices = m_struGrabberRTParams.fscParams.ucDeviceNumber;
|
int iDevices = m_struGrabberRTParams.fscParams.ucDeviceNumber;
|
||||||
|
|
||||||
m_vecCalcedData.clear();
|
m_vecCalcedData.clear();
|
||||||
m_vecCalcedData.resize(iDevices);
|
m_vecCalcedData.resize(iDevices);
|
||||||
for (int i=0;i< iDevices;i++)
|
for (int i=0;i< iDevices;i++)
|
||||||
@ -72,6 +71,7 @@ void CMainDataUploader::Calibration()
|
|||||||
{
|
{
|
||||||
m_vecCalcedData[j][i].fData[k] = (float)(m_vecData[j][i].lData[k]* m_vecCalData[j][i].dCal_Gain[k]* m_vecCalData[j][i].uiExposureTimeInMS/m_vecData[j][i].usExposureTimeInMS);
|
m_vecCalcedData[j][i].fData[k] = (float)(m_vecData[j][i].lData[k]* m_vecCalData[j][i].dCal_Gain[k]* m_vecCalData[j][i].uiExposureTimeInMS/m_vecData[j][i].usExposureTimeInMS);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -58,11 +58,6 @@ int RadConverter::LoadCalibrationFrames(RunTimeGrabberParams struGrabberRTParams
|
|||||||
qfCalFile.read((char*)OneFile.dCal_Gain, sizeof(double)*OneFile.iPixels);
|
qfCalFile.read((char*)OneFile.dCal_Gain, sizeof(double)*OneFile.iPixels);
|
||||||
qfCalFile.read((char*)OneFile.dCal_Offset, sizeof(double)*OneFile.iPixels);
|
qfCalFile.read((char*)OneFile.dCal_Offset, sizeof(double)*OneFile.iPixels);
|
||||||
|
|
||||||
/////check attribute
|
|
||||||
// if ()
|
|
||||||
// {
|
|
||||||
// }
|
|
||||||
|
|
||||||
vecOneDev.push_back(OneFile);
|
vecOneDev.push_back(OneFile);
|
||||||
}
|
}
|
||||||
struAllCalFrame.push_back(vecOneDev);
|
struAllCalFrame.push_back(vecOneDev);
|
||||||
@ -72,3 +67,9 @@ int RadConverter::LoadCalibrationFrames(RunTimeGrabberParams struGrabberRTParams
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// int RadConverter::LoadQEProLinearParams(RunTimeGrabberParams struGrabberRTParams, vector<vector<double>>& vecQEPLP)
|
||||||
|
// {
|
||||||
|
// int iQEPDevices = 0;
|
||||||
|
// return 0;
|
||||||
|
// }
|
||||||
|
@ -15,6 +15,7 @@ public:
|
|||||||
public:
|
public:
|
||||||
public:
|
public:
|
||||||
int LoadCalibrationFrames(RunTimeGrabberParams struGrabberRTParams, vector<vector<CalFrame>> &struAllCalFrame);
|
int LoadCalibrationFrames(RunTimeGrabberParams struGrabberRTParams, vector<vector<CalFrame>> &struAllCalFrame);
|
||||||
|
//int LoadQEProLinearParams(RunTimeGrabberParams struGrabberRTParams, vector<vector<double>>& vecQEPLP);
|
||||||
private:
|
private:
|
||||||
QString m_qstrCalFilePath;
|
QString m_qstrCalFilePath;
|
||||||
private:
|
private:
|
||||||
|
Reference in New Issue
Block a user