1.修改了海阳光学光谱仪派生类,以支持暗像素信息的获取。
2.针对FLAME设备添加了新的实时暗背景扣除函数。 3.修改了部分系统执行逻辑,以支持FLAME的正确运行。
This commit is contained in:
@ -110,16 +110,121 @@ void DataFileProcessor::LoadSingleDataFile(QString qstrFileName)
|
||||
printf("LoadWaveLengthFile open Failed.");
|
||||
return;
|
||||
}
|
||||
|
||||
int iExpoTime=0;
|
||||
std::vector<int> vecExpotime;
|
||||
std::vector<double> vecDTime;
|
||||
long long int llCount = (qfDataFile.size()) / (sizeof(DataFrame));
|
||||
for (int i=0;i<llCount;i++)
|
||||
{
|
||||
QByteArray qbDataFrame = qfDataFile.read(sizeof(DataFrame));
|
||||
memcpy(&dfTemp, qbDataFrame, sizeof(DataFrame));
|
||||
vecExpotime.push_back(dfTemp.usExposureTimeInMS);
|
||||
vecDTime.push_back(dfTemp.dTimes);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void DataFileProcessor::RecoverBackground(QString qstrDataFileName, QString qstrBackgroundFileName)
|
||||
{
|
||||
int iExpoTime = 0;
|
||||
std::vector<int> vecExpotime;
|
||||
std::vector<double> vecDTime;
|
||||
DataFrame dfDataTemp;
|
||||
DataFrame m_dfBackground;
|
||||
|
||||
QString qstrFullFileName(qstrDataFileName+"recv");
|
||||
QFile qfDataRec(qstrFullFileName);
|
||||
bool bRes = qfDataRec.open(QFile::WriteOnly | QIODevice::Append);
|
||||
if (!bRes)
|
||||
{
|
||||
printf("WriteData QFile open Failed");
|
||||
return;
|
||||
}
|
||||
|
||||
QFile qfDataFile(qstrDataFileName);
|
||||
bRes = qfDataFile.open(QFile::ReadOnly);
|
||||
if (!bRes)
|
||||
{
|
||||
printf("qstrDataFileName open Failed.");
|
||||
return;
|
||||
}
|
||||
///
|
||||
std::vector<DataFrame> m_vecDataFrame;
|
||||
m_vecDataFrame.clear();
|
||||
DataFrame dfDarkTemp;
|
||||
|
||||
QFile qfData(qstrBackgroundFileName);
|
||||
bRes = qfData.open(QFile::ReadOnly);
|
||||
if (!bRes)
|
||||
{
|
||||
//qDebug() << "LoadTable open Failed.";
|
||||
printf("LoadTable open Failed.");
|
||||
return;
|
||||
}
|
||||
QString qstrTemp;
|
||||
QStringList qsList;
|
||||
while (!qfData.atEnd())
|
||||
{
|
||||
QString data;
|
||||
data = qfData.readLine();
|
||||
qsList = data.split(',');
|
||||
|
||||
dfDarkTemp.usExposureTimeInMS = qsList[0].toInt();
|
||||
for (int i = 0; i < qsList.size() - 1; i++)
|
||||
{
|
||||
dfDarkTemp.lData[i] = qsList[i + 1].toInt();
|
||||
qDebug() << qsList[i] << ";";
|
||||
}
|
||||
m_vecDataFrame.push_back(dfDarkTemp);
|
||||
qDebug() << qsList.size() << endl;
|
||||
}
|
||||
///
|
||||
|
||||
|
||||
long long int llCount = (qfDataFile.size()) / (sizeof(DataFrame));
|
||||
for (int i = 0; i < llCount; i++)
|
||||
{
|
||||
QByteArray qbDataFrame = qfDataFile.read(sizeof(DataFrame));
|
||||
memcpy(&dfDataTemp, qbDataFrame, sizeof(DataFrame));
|
||||
vecExpotime.push_back(dfDataTemp.usExposureTimeInMS);
|
||||
vecDTime.push_back(dfDataTemp.dTimes);
|
||||
|
||||
int iB = dfDataTemp.usExposureTimeInMS % 10;
|
||||
|
||||
m_dfBackground = m_vecDataFrame[iB];
|
||||
|
||||
for (int i = 0; i < 2048 ; i++)
|
||||
{
|
||||
dfDataTemp.lData[i] = dfDataTemp.lData[i] + m_dfBackground.lData[i];
|
||||
}
|
||||
|
||||
double dBackground = 0;
|
||||
int iCountBg = 0;
|
||||
for (int i=6;i<21;i++)
|
||||
{
|
||||
dBackground = dBackground +dfDataTemp.lData[i];
|
||||
iCountBg++;
|
||||
}
|
||||
|
||||
dBackground = dBackground / iCountBg;
|
||||
|
||||
for (int i = 0; i < 2048; i++)
|
||||
{
|
||||
dfDataTemp.lData[i] = dfDataTemp.lData[i] - dBackground;
|
||||
}
|
||||
|
||||
qfDataRec.write((char*)&dfDataTemp, sizeof(DataFrame));
|
||||
qfDataRec.flush();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void DataFileProcessor::GenerateFilePath()
|
||||
{
|
||||
m_qdtTime = QDateTime::currentDateTime();
|
||||
|
@ -18,6 +18,7 @@ public:
|
||||
|
||||
void LoadWaveLengthFile(QString qstrFileName);
|
||||
void LoadSingleDataFile(QString qstrFileName);
|
||||
void RecoverBackground(QString qstrDataFileName, QString qstrBackgroundFileName);
|
||||
//void SetEnvironmentContex(EContext struEC);
|
||||
//void SetManmadeEnviromentalContext(MEContext struMEC);
|
||||
//void SetDeviceInfo(FSContext struDeviceContext);
|
||||
|
@ -69,6 +69,9 @@ int IS11_Ctrl_Qt::SingleShot(DataFrame& dfData)
|
||||
{
|
||||
SendData_CMD03((char*)GET_ALL_DN, sizeof(GET_ALL_DN));
|
||||
RecvData_CMD03(dfData);
|
||||
|
||||
GetExposureTime(m_iExposureTime);
|
||||
dfData.usExposureTimeInMS = (unsigned short)m_iExposureTime;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -93,7 +96,7 @@ int IS11_Ctrl_Qt::GetExposureTime(int & iExposureTimeInMS)
|
||||
SendData_CMD03((char *)GET_INTEGRAL_TIME, sizeof(GET_INTEGRAL_TIME));
|
||||
int iRes = RecvData_CMD03(qbaRecv);
|
||||
|
||||
iExposureTimeInMS = qbaRecv[0]*256+ qbaRecv[1];
|
||||
iExposureTimeInMS = ((unsigned char)(qbaRecv[0]))*256+ (unsigned char)(qbaRecv[1]);
|
||||
return iRes;
|
||||
}
|
||||
|
||||
@ -262,11 +265,11 @@ int IS11_Ctrl_Qt::RecvData_CMD03(QByteArray &qbaRecv)
|
||||
iRetryCount = 0;
|
||||
while (qbaOriRecv.size()< qbaOriRecv[2]+5)
|
||||
{
|
||||
m_pSerialPort->waitForReadyRead(100);
|
||||
m_pSerialPort->waitForReadyRead(1000);
|
||||
Read_IS11(qbaTemp);
|
||||
qbaOriRecv.append(qbaTemp);
|
||||
iRetryCount++;
|
||||
if (iRetryCount > 20)
|
||||
if (iRetryCount > 66)
|
||||
{
|
||||
qDebug() << "Recv Data Err.out of retry time";
|
||||
return 2;
|
||||
@ -318,11 +321,11 @@ int IS11_Ctrl_Qt::RecvData_CMD03(DataFrame& dfData)
|
||||
qbaOriRecv.append(qbaTemp);
|
||||
while (qbaOriRecv.size() < 4 || ParseHdr(qbaOriRecv, 3) == 1)
|
||||
{
|
||||
m_pSerialPort->waitForReadyRead(100);
|
||||
m_pSerialPort->waitForReadyRead(1000);
|
||||
Read_IS11(qbaTemp);
|
||||
qbaOriRecv.append(qbaTemp);
|
||||
iRetryCount++;
|
||||
if (iRetryCount > 20)
|
||||
if (iRetryCount > 66)
|
||||
{
|
||||
qDebug() << "Recv Hdr Err.out of retry time";
|
||||
return 1;
|
||||
@ -333,11 +336,11 @@ int IS11_Ctrl_Qt::RecvData_CMD03(DataFrame& dfData)
|
||||
iRetryCount = 0;
|
||||
while (qbaOriRecv.size() < length + 4)
|
||||
{
|
||||
m_pSerialPort->waitForReadyRead(100);
|
||||
m_pSerialPort->waitForReadyRead(1000);
|
||||
Read_IS11(qbaTemp);
|
||||
qbaOriRecv.append(qbaTemp);
|
||||
iRetryCount++;
|
||||
if (iRetryCount > 20)
|
||||
if (iRetryCount > 66)
|
||||
{
|
||||
qDebug() << "Recv Data Err.out of retry time";
|
||||
return 2;
|
||||
@ -500,11 +503,11 @@ int IS11_Ctrl_Qt::RecvData_CMD06(QByteArray &qbaRecv)
|
||||
iRetryCount = 0;
|
||||
while (qbaOriRecv.size() < 8)
|
||||
{
|
||||
m_pSerialPort->waitForReadyRead(100);
|
||||
m_pSerialPort->waitForReadyRead(1000);
|
||||
Read_IS11(qbaTemp);
|
||||
qbaOriRecv.append(qbaTemp);
|
||||
iRetryCount++;
|
||||
if (iRetryCount > 20)
|
||||
if (iRetryCount > 66)
|
||||
{
|
||||
qDebug() << "Recv Data Err.out of retry time";
|
||||
return 2;
|
||||
|
@ -1,3 +1,4 @@
|
||||
#include "pch.h"
|
||||
#include "OControl_USB.h"
|
||||
#include <iostream>
|
||||
#include <cstring>
|
||||
@ -86,6 +87,27 @@ int OceanOptics_lib::Initialize(bool bIsUSBMode, std::string ucPortNumber, std::
|
||||
|
||||
SetExposureTime(minimum_time / 1000);
|
||||
|
||||
m_vecDarkPixels.clear();
|
||||
int* piIndex = new int[64];
|
||||
int iCount = seabreeze_get_electric_dark_pixel_indices(m_iSpectralmeterHandle, &error, piIndex, 64);
|
||||
for (int i = 0; i < iCount; i++)
|
||||
{
|
||||
m_vecDarkPixels.push_back(piIndex[i]);
|
||||
}
|
||||
delete[] piIndex;
|
||||
|
||||
qDebug() << "from lib" << iCount;
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
/*CString cstrTemp, cstrTemp1;
|
||||
for (int i=0;i< m_vecDarkPixels.size();i++)
|
||||
{
|
||||
cstrTemp1.Format(_T("%d"), m_vecDarkPixels[i]);
|
||||
cstrTemp = cstrTemp+L"-"+cstrTemp1;
|
||||
}
|
||||
|
||||
AfxMessageBox(cstrTemp);*/
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -146,6 +168,27 @@ int OceanOptics_lib::Initialize()
|
||||
|
||||
SetExposureTime(minimum_time / 1000);
|
||||
|
||||
m_vecDarkPixels.clear();
|
||||
int *piIndex=new int[64];
|
||||
int iCount = seabreeze_get_electric_dark_pixel_indices(m_iSpectralmeterHandle,&error, piIndex,64);
|
||||
for (int i=0;i< iCount;i++)
|
||||
{
|
||||
m_vecDarkPixels.push_back(piIndex[i]);
|
||||
}
|
||||
delete[] piIndex;
|
||||
|
||||
qDebug() << "from lib" << iCount;
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
/*CString cstrTemp, cstrTemp1;
|
||||
for (int i=0;i< m_vecDarkPixels.size();i++)
|
||||
{
|
||||
cstrTemp1.Format(_T("%d"), m_vecDarkPixels[i]);
|
||||
cstrTemp = cstrTemp+L"-"+cstrTemp1;
|
||||
}
|
||||
|
||||
AfxMessageBox(cstrTemp);*/
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -286,7 +329,7 @@ int OceanOptics_lib::SingleShot(DataFrame &dfData)
|
||||
|
||||
for (int tmp = 0; tmp < spec_length; tmp++)
|
||||
{
|
||||
dfData.lData[tmp] = spectrum[tmp];
|
||||
dfData.lData[tmp] = (unsigned int)spectrum[tmp];
|
||||
}
|
||||
|
||||
int exposureTimeInMS;
|
||||
@ -416,7 +459,7 @@ int OceanOptics_lib::GetDeviceTemperature(float &fTemperature)
|
||||
return 1;
|
||||
}
|
||||
|
||||
fTemperature = temp;
|
||||
fTemperature = (float)temp;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -484,7 +527,7 @@ int OceanOptics_lib::GetDeviceAttribute(DeviceAttribute &Attr)
|
||||
|
||||
for (int tmp = 0; tmp < spec_length; tmp++)
|
||||
{
|
||||
Attr.fWaveLengthInNM[tmp] = wls[tmp];
|
||||
Attr.fWaveLengthInNM[tmp] = (float)wls[tmp];
|
||||
}
|
||||
|
||||
free(wls);
|
||||
|
@ -2,6 +2,7 @@
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
#include <ctime>
|
||||
#include <vector>
|
||||
#include "api/SeaBreezeWrapper.h"
|
||||
#include "IrisFiberSpectrometerBase.h"
|
||||
|
||||
@ -51,7 +52,8 @@ private:
|
||||
int m_iExposureTime;
|
||||
|
||||
bool isSuccess(char* resultStr);
|
||||
|
||||
string GetDeviceType(int index);
|
||||
string GetSerialNumber(int index);
|
||||
public:
|
||||
std::vector<int> m_vecDarkPixels;
|
||||
};
|
||||
|
Reference in New Issue
Block a user