Merge remote-tracking branch 'origin/zhangzhuo'

This commit is contained in:
2021-12-16 15:52:25 +08:00
17 changed files with 404 additions and 52 deletions

View File

@ -21,6 +21,7 @@ include_directories("source/Settings")
include_directories("source/Thread") include_directories("source/Thread")
include_directories("source/LinearShutter") include_directories("source/LinearShutter")
include_directories("source/OSIF/include") include_directories("source/OSIF/include")
include_directories("source/Misc_Detector")
link_directories("source/OSIF/DLib") link_directories("source/OSIF/DLib")
link_directories("/home/pi/SeaBrease/lib") link_directories("/home/pi/SeaBrease/lib")

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,31 +1,31 @@
[DEVICE INFO] [DEVICE INFO]
TotalSpectrometer=1 TotalSpectrometer=2
[FS1] [FS1]
Model=OSIFAlpha Model=OSIFAlpha
Port=-1 Port=-1
UID=QEP02975
AEMax=0.85
AEMin=0.75
Depth=230000
[FS2]
Model=OSIFBeta
Port=-1
UID=FLMS15815 UID=FLMS15815
AEMax=0.85 AEMax=0.85
AEMin=0.75 AEMin=0.75
Depth=65535 Depth=65535
[FS2]
Model=OSIFBeta
Port=-1
UID=QEP02975
AEMax=0.85
AEMin=0.75
Depth=230000
[FS3] [FS3]
Model=Null Model=Null
[LINEAR SHUTTER] [LINEAR SHUTTER]
Port=COM8 Port=COM8
Type=1 Type=1
DCID=1 DCID=1
TotalPosition=2 TotalPosition=6
Position0=2000 Position0=2000
Position1=110000 Position1=110000
Position2=220000 Position2=220000
Position3=330000 Position3=330000
Position4=440000 Position4=440000
Position5=550000 Position5=550000
[HUMITURE]
Port=COM11

View File

@ -1 +1 @@
{"BeginTime":"16:43","IntervalTime":"10","EndTime":"16:45","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":"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"}

112
main.cpp
View File

@ -5,46 +5,98 @@
#include "MainDataGrabber.h" #include "MainDataGrabber.h"
#include "DataFileProcessor.h" #include "DataFileProcessor.h"
#include "Scheduler.h" #include "Scheduler.h"
#include "GY39Controller.h"
using namespace std; using namespace std;
#pragma once #pragma once
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
using namespace ZZ_MISCDEF::ZZ_RUNPARAMS;
using namespace ZZ_MISCDEF::MISC_DETECTOR;
QCoreApplication a(argc, argv); QCoreApplication a(argc, argv);
//////////////////////////////////////////////////////////////////////////
////
GY39Controller m_ctrlHumitureDetector;
DataFileProcessor m_dfpSaver;
ZZ_SysConfigger m_scConfiggerLoader;
Scheduler m_sTimer;
CMainDataGrabber m_mdgGrabber;
////
bool bRes;
float m_fChassisTemp, m_fChassisHum;
RunTimeGrabberParams m_struRuntimeParams;
EContext m_struEC;
MEContext m_struMEC;
HumitureDeviceInfo m_struHumitureDI;
//////////////////////////////////////////////////////////////////////////logger //////////////////////////////////////////////////////////////////////////logger
//QT_LOG::ZZ_InitLogger(QCoreApplication::applicationDirPath() + "/Log/"); //QT_LOG::ZZ_InitLogger(QCoreApplication::applicationDirPath() + "/Log/");
//////////////////////////////////////////////////////////////////////////configger //m_test123;
DataFileProcessor testdp; //m_test123.Initialize("COM11");
ZZ_SysConfigger test; //m_test123.GetHumiture(fTemp, fHum);
Scheduler testS; //////////////////////////////////////////////////////////////////////////config
bRes = m_scConfiggerLoader.Initialize();
if (bRes)
{
return -1;
}
RunTimeGrabberParams testp; m_scConfiggerLoader.GetParams(m_struRuntimeParams, m_struEC, m_struMEC, m_struHumitureDI);
EContext testEC;
MEContext testMEC;
test.Initialize();
test.LoadSettingsFromFile_System();
test.LoadSettingsFromFile_MISC();
test.GetGrabberRunParams(testp);
test.GetECParams(testEC);
test.GetMECParams(testMEC);
testS.SetAcqTimeParams(testp.atsParams); m_sTimer.SetAcqTimeParams(m_struRuntimeParams.atsParams);
m_dfpSaver.SetEnvironmentContex(m_struEC);
m_dfpSaver.SetManmadeEnviromentalContext(m_struMEC);
m_ctrlHumitureDetector.Initialize(m_struHumitureDI.qstrInterfaceName.toStdString());
//////////////////////////////////////////////////////////////////////////prepare
m_sTimer.Preheating();
m_ctrlHumitureDetector.GetHumiture_retry(m_fChassisTemp, m_fChassisHum);
//////////////////////////////////////////////////////////////////////////
QThread* m_pqDataGrabberThreadHolder = new QThread();
QThread* m_pqTimerThreadHolder = new QThread();
testdp.SetEnvironmentContex(testEC); m_mdgGrabber.moveToThread(m_pqDataGrabberThreadHolder);
testdp.SetManmadeEnviromentalContext(testMEC); m_sTimer.moveToThread(m_pqTimerThreadHolder);
m_mdgGrabber.SetContext(m_struRuntimeParams, m_dfpSaver, m_sTimer);
m_mdgGrabber.Init_Normal();
m_pqDataGrabberThreadHolder->start();
m_pqTimerThreadHolder->start();
m_mdgGrabber.Init_Self();
m_sTimer.SelfStart();
//////////////////////////////////////////////////////////////////////////test
// DataFileProcessor testdp;
// ZZ_SysConfigger test;
// Scheduler testS;
//
// RunTimeGrabberParams testp;
// EContext testEC;
// MEContext testMEC;
// test.Initialize();
// test.LoadSettingsFromFile_System();
// test.LoadSettingsFromFile_MISC();
// test.GetGrabberRunParams(testp);
// test.GetECParams(testEC);
// test.GetMECParams(testMEC);
//
// testS.SetAcqTimeParams(testp.atsParams);
// testdp.SetEnvironmentContex(testEC);
// testdp.SetManmadeEnviromentalContext(testMEC);
//testdp.WriteDataFile(); //testdp.WriteDataFile();
//////////////////////////////////////////////////////////////////////////test //////////////////////////////////////////////////////////////////////////test
using namespace ZZ_MISCDEF::ZZ_RUNPARAMS; //CMainDataGrabber testDG;
CMainDataGrabber testDG; //QThread* m_pqDataGrabberThreadHolder = new QThread();
QThread* m_pqDataGrabberThreadHolder = new QThread(); //testDG.moveToThread(m_pqDataGrabberThreadHolder);
testDG.moveToThread(m_pqDataGrabberThreadHolder); //testDG.SetContext(testp, testdp, testS);
testDG.SetContext(testp, testdp, testS); //testDG.Init_Normal();
testDG.Init_Normal();
//testDG.SetGrabberFileProcessor(testdp); //testDG.SetGrabberFileProcessor(testdp);
//testDG.SetGrabberParams(testp); //testDG.SetGrabberParams(testp);
//testDG.SetTimer(testS); //testDG.SetTimer(testS);
@ -52,23 +104,19 @@ int main(int argc, char *argv[])
//testDG.InitializeWorkers(); //testDG.InitializeWorkers();
//testDG.SetupMsgPipelines(); //testDG.SetupMsgPipelines();
//testDG.StartWorkers(); //testDG.StartWorkers();
m_pqDataGrabberThreadHolder->start(); //m_pqDataGrabberThreadHolder->start();
testDG.Init_Self(); //testDG.Init_Self();
//testDG.InitThreadStatus(); //testDG.InitThreadStatus();
//testDG.InitializeWorkers(); //testDG.InitializeWorkers();
//testDG.InitLS(); //testDG.InitLS();
//testDG.SetupMsgPipelines(); //testDG.SetupMsgPipelines();
//testDG.StartWorkers(); //testDG.StartWorkers();
//testDG.StartGrab(); //testDG.StartGrab();
QThread* m_pqTimerThreadHolder = new QThread(); //QThread* m_pqTimerThreadHolder = new QThread();
testS.moveToThread(m_pqTimerThreadHolder); //testS.moveToThread(m_pqTimerThreadHolder);
m_pqTimerThreadHolder->start(); //m_pqTimerThreadHolder->start();
testS.SelfStart(); //testS.SelfStart();
//QString qstrTest = "This is a test message 2"; //QString qstrTest = "This is a test message 2";
//qDebug() << qstrTest; //qDebug() << qstrTest;

View File

@ -311,4 +311,12 @@ namespace ZZ_MISCDEF
}ATPDataHeader; }ATPDataHeader;
} }
//misc detector
namespace MISC_DETECTOR
{
typedef struct tagHumitureDeviceInfo
{
QString qstrInterfaceName;
}HumitureDeviceInfo;
}
}; };

View File

@ -0,0 +1,159 @@
#include "GY39Controller.h"
#include "ZZ_Types.h"
using namespace ZZ_MISCDEF;
GY39Controller::GY39Controller(QObject* parent /*= nullptr*/)
{
m_pSerialPort = new QSerialPort;
m_iBaudRate = 9600;
}
GY39Controller::~GY39Controller()
{
if (m_pSerialPort != NULL)
{
delete m_pSerialPort;
}
}
int GY39Controller::SendCommand(QByteArray qbCommand)
{
qint64 qi64Write = m_pSerialPort->write(qbCommand);
if (qi64Write != qbCommand.size())
{
qDebug() << "Err:write Failed.Exit Code:1" << qi64Write;
return 1;
}
return 0;
}
int GY39Controller::RecvHumitureData(QByteArray &qbData)
{
qbData.clear();
qbData = m_pSerialPort->readAll();
int iCounter = 0;
while (qbData.size() < 15)
{
m_pSerialPort->waitForReadyRead(50);
QByteArray qbTemp = m_pSerialPort->readAll();
qbData.append(qbTemp);
if (iCounter > 10)
{
qDebug() << "Err:RecvHumitureData Failed,Not Enough Data.Exit Code:1" << qbData.size();
return 1;
}
iCounter++;
}
return 0;
}
int GY39Controller::ParseHumitureData(QByteArray &qbData)
{
ZZ_U8 cTempH8, cTempL8, cHumH8, cHumL8;
cTempH8 = qbData[4];
cTempL8 = qbData[5];
cHumH8 = qbData[10];
cHumL8 = qbData[11];
float fTemp = (cTempH8 << 8) | cTempL8;
fTemp = fTemp / 100;
float fHum = (cHumH8 << 8) | cHumL8;
fHum = fHum / 100;
m_fTemperature = fTemp;
m_fHumidity = fHum;
return 0;
}
int GY39Controller::Initialize(std::string ucPortName, bool bAuto15/*=false*/, bool bAuto45/*=false*/)
{
QString qstrPortName = QString::fromStdString(ucPortName);
m_pSerialPort->setPortName(qstrPortName);
m_pSerialPort->setReadBufferSize(512);
bool bRes = m_pSerialPort->setBaudRate(m_iBaudRate);
if (!bRes)
{
qDebug() << "Err:setBaudRate Failed.Exit Code:1";
//std::cout << "Err.setBaudRate Failed" << std::endl;
return 1;
}
bRes = m_pSerialPort->open(QIODevice::ReadWrite);
if (!bRes)
{
qDebug() << "Err:open Failed.Exit Code:2";
//std::cout << "Err.open Failed" << std::endl;
return 2;
}
QByteArray qbSend;
if (bAuto15==false && bAuto45==false)
{
qbSend.resize(3);
qbSend[0] = (ZZ_U8)0xA5;
qbSend[1] = (ZZ_U8)0x00;
qbSend[2] = (ZZ_U8)0xA5;
}
if (bAuto15 == true && bAuto45 == true)
{
qbSend.resize(3);
qbSend[0] = (ZZ_U8)0xA5;
qbSend[1] = (ZZ_U8)0x03;
qbSend[2] = (ZZ_U8)0xA8;
}
SendCommand(qbSend);
return 0;
}
int GY39Controller::GetHumiture(float &fTemp, float &fHum)
{
QByteArray qbSend,qbRecv;
qbSend.resize(3);
qbSend[0] = (ZZ_U8)0xA5;
qbSend[1] = (ZZ_U8)0x52;
qbSend[2] = (ZZ_U8)0xF7;
int iRes = SendCommand(qbSend);
if (iRes)
{
return iRes;
}
iRes = RecvHumitureData(qbRecv);
if (iRes)
{
return iRes;
}
ParseHumitureData(qbRecv);
fTemp = m_fTemperature;
fHum = m_fHumidity;
return 0;
}
int GY39Controller::GetHumiture_retry(float &fTemp, float &fHum)
{
int iCount = 0;
while (iCount<3)
{
if (GetHumiture(fTemp, fHum) == 0)
{
return 0;
}
else
{
iCount++;
}
}
return 1;
}

View File

@ -0,0 +1,24 @@
#pragma once
#include "pch.h"
class GY39Controller :public QObject
{
Q_OBJECT
public:
GY39Controller(QObject* parent = nullptr);
~GY39Controller();
private:
int SendCommand(QByteArray qbCommand);
int RecvHumitureData(QByteArray &qbData);
int ParseHumitureData(QByteArray &qbData);
public:
int Initialize(std::string ucPortName,bool bAuto15 = false,bool bAuto45 = false);
int GetHumiture(float &fTemp, float &fHum);
int GetHumiture_retry(float &fTemp, float &fHum);
public slots:
signals:
private:
int m_iBaudRate;
QSerialPort *m_pSerialPort;
float m_fTemperature, m_fHumidity;
};

View File

@ -33,6 +33,7 @@
delete m_qsDeviceConfig; delete m_qsDeviceConfig;
} }
m_qsDeviceConfig = new QSettings(m_qstrDeviceConfigFilePath, QSettings::IniFormat); m_qsDeviceConfig = new QSettings(m_qstrDeviceConfigFilePath, QSettings::IniFormat);
////FS
m_struFSContext.ucDeviceNumber = m_qsDeviceConfig->value(QString("DEVICE INFO/TotalSpectrometer"),-1).toInt(); m_struFSContext.ucDeviceNumber = m_qsDeviceConfig->value(QString("DEVICE INFO/TotalSpectrometer"),-1).toInt();
if (m_struFSContext.ucDeviceNumber == -1) if (m_struFSContext.ucDeviceNumber == -1)
{ {
@ -60,6 +61,7 @@
m_struFSContext.lDepth[i] = lDepth; m_struFSContext.lDepth[i] = lDepth;
} }
////LS
m_struAcqPosition.iTotalPosition = m_qsDeviceConfig->value(QString("LINEAR SHUTTER/TotalPosition"), -1).toInt(); m_struAcqPosition.iTotalPosition = m_qsDeviceConfig->value(QString("LINEAR SHUTTER/TotalPosition"), -1).toInt();
if (m_struAcqPosition.iTotalPosition == -1) if (m_struAcqPosition.iTotalPosition == -1)
{ {
@ -77,6 +79,9 @@
m_struLSContext.ucCmdID = m_qsDeviceConfig->value(QString("LINEAR SHUTTER/DCID")).toInt(); m_struLSContext.ucCmdID = 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();
//////////////////////////////////////////////////////////////////////////humiture
m_struHumitureDeviceInfo.qstrInterfaceName = m_qsDeviceConfig->value(QString("HUMITURE/Port")).toString();
//////////////////////////////////////////////////////////////////////////load json settings //////////////////////////////////////////////////////////////////////////load json settings
qfJConfig.setFileName(m_qstrJSONConfigFilePath); qfJConfig.setFileName(m_qstrJSONConfigFilePath);
bool bRes = qfJConfig.open(QIODevice::ReadOnly); bool bRes = qfJConfig.open(QIODevice::ReadOnly);
@ -94,6 +99,21 @@
return 2; return 2;
} }
m_qjoJObj = m_qjdJDoc.object(); m_qjoJObj = m_qjdJDoc.object();
int iRes = LoadSettingsFromFile_System();
if (iRes)
{
qDebug() << " SysConfigger Initialize Err...LoadSettingsFromFile_System";
return iRes;
}
iRes = LoadSettingsFromFile_MISC();
if (iRes)
{
qDebug() << " SysConfigger Initialize Err...LoadSettingsFromFile_MISC";
return iRes;
}
return 0; return 0;
} }
@ -118,6 +138,21 @@
return 0; return 0;
} }
int ZZ_SysConfigger::GetMiscParams(HumitureDeviceInfo &struHDI)
{
struHDI = m_struHumitureDeviceInfo;
return 0;
}
int ZZ_SysConfigger::GetParams(RunTimeGrabberParams &struGrabberRTParams, EContext &struEC, MEContext &struMEC, HumitureDeviceInfo &struHDI)
{
GetGrabberRunParams(struGrabberRTParams);
GetECParams(struEC);
GetMECParams(struMEC);
GetMiscParams(struHDI);
return 0;
}
int ZZ_SysConfigger::LoadSettingsFromFile_IS1() int ZZ_SysConfigger::LoadSettingsFromFile_IS1()
{ {
m_struIS1Info.qstrCalFile_U0 = m_qjoJObj.value("IS1UpCalFile").toString(); m_struIS1Info.qstrCalFile_U0 = m_qjoJObj.value("IS1UpCalFile").toString();

View File

@ -3,7 +3,7 @@
#include "ZZ_Types.h" #include "ZZ_Types.h"
using namespace ZZ_MISCDEF::ZZ_RUNPARAMS; using namespace ZZ_MISCDEF::ZZ_RUNPARAMS;
using namespace ZZ_MISCDEF::ZZ_DATAFILE; using namespace ZZ_MISCDEF::ZZ_DATAFILE;
using namespace ZZ_MISCDEF::MISC_DETECTOR;
class ZZ_SysConfigger :public QObject class ZZ_SysConfigger :public QObject
{ {
Q_OBJECT Q_OBJECT
@ -16,6 +16,8 @@ public:
int GetGrabberRunParams(RunTimeGrabberParams &struGrabberRTParams); int GetGrabberRunParams(RunTimeGrabberParams &struGrabberRTParams);
int GetECParams(EContext &struEC); int GetECParams(EContext &struEC);
int GetMECParams(MEContext &struMEC); int GetMECParams(MEContext &struMEC);
int GetMiscParams(HumitureDeviceInfo &struHDI);
int GetParams(RunTimeGrabberParams &struGrabberRTParams, EContext &struEC, MEContext &struMEC, HumitureDeviceInfo &struHDI);
int LoadSettingsFromFile_IS1(); int LoadSettingsFromFile_IS1();
int LoadSettingsFromFile_iSIF(); int LoadSettingsFromFile_iSIF();
@ -38,6 +40,7 @@ public:
LSContext m_struLSContext; LSContext m_struLSContext;
FSContext m_struFSContext; FSContext m_struFSContext;
AcqPosSettings m_struAcqPosition; AcqPosSettings m_struAcqPosition;
HumitureDeviceInfo m_struHumitureDeviceInfo;
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
EContext m_struEC; EContext m_struEC;
MEContext m_struMEC; MEContext m_struMEC;

View File

@ -381,7 +381,7 @@ int CMainDataGrabber::GrabOnceFinished()
for (int i=0;i< m_struAcqPosSetting.iTotalPosition-1;i++) for (int i=0;i< m_struAcqPosSetting.iTotalPosition-1;i++)
{ {
////move to ////move to
m_ctrlLS.ILMES_MoveToPos(i+1); // m_ctrlLS.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();
@ -392,7 +392,7 @@ int CMainDataGrabber::GrabOnceFinished()
////move to ////move to
m_ctrlLS.ILMES_MoveToPos(0); // m_ctrlLS.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();

View File

@ -44,13 +44,12 @@ void Scheduler::StartAsPlanned()
while (!bStopWait) while (!bStopWait)
{ {
QThread::msleep(100); QThread::msleep(100);
if (m_struAcqTime.qtStartTime >= qtTime && qtTime < m_struAcqTime.qtStopTime) if (m_struAcqTime.qtStartTime <= qtTime && qtTime < m_struAcqTime.qtStopTime)
{ {
bStopWait = true; bStopWait = true;
} }
} }
int iIntervalInMS = m_struAcqTime.qtInterval.hour() * 3600 * 1000 + m_struAcqTime.qtInterval.minute() * 60 * 1000 + m_struAcqTime.qtInterval.second() * 1000; int iIntervalInMS = m_struAcqTime.qtInterval.hour() * 3600 * 1000 + m_struAcqTime.qtInterval.minute() * 60 * 1000 + m_struAcqTime.qtInterval.second() * 1000;
m_GrabTimer->start(iIntervalInMS); m_GrabTimer->start(iIntervalInMS);
@ -58,6 +57,14 @@ void Scheduler::StartAsPlanned()
int Scheduler::OnTimeCounter() int Scheduler::OnTimeCounter()
{ {
QTime qtTime = QTime::currentTime();
if (m_struAcqTime.qtStartTime <= qtTime && qtTime < m_struAcqTime.qtStopTime)
{
return 1;
qDebug() << "Non working time. Idling......";
}
emit SignalGrabOnce(); emit SignalGrabOnce();
return 0; return 0;
} }