调试上传用

This commit is contained in:
2022-01-04 17:32:19 +08:00
parent a811677952
commit 23451f69b0
40 changed files with 590 additions and 32 deletions

View File

@ -90,6 +90,12 @@ int CAbstractFSController::InitializeFSControl()
return 4;
}
iRes = m_pFSCtrl->SetDeviceTemperature(0);
if (iRes != 0)
{
qDebug() << "SetDeviceTemperature Failed" << iRes;
return 5;
}
return 0;
}
@ -310,7 +316,7 @@ int CAbstractFSController::StartAcquisitionSignal()
PerformAutoExposure();
//PerformAutoExposure();
TakeSignalFrame();
qDebug() << "Stop acq Signal" << " Thread ID:" << m_iThreadID;

View File

@ -10,6 +10,9 @@ CMainDataGrabber::CMainDataGrabber(QObject* parent /*= nullptr*/)
m_iFlagIsCapturing = false;
m_iFlagIsCapturing_Signal = false;
m_iFlagIsCapturing_Dark = false;
//qRegisterMetaType<DataFrame>("DataFrame");
//qRegisterMetaType<vector<vector<DataFrame>>>();
}
CMainDataGrabber::~CMainDataGrabber()
@ -64,6 +67,15 @@ int CMainDataGrabber::SetContext(RunTimeGrabberParams struGrabberRTParams, DataF
return 0;
}
int CMainDataGrabber::SetContext(RunTimeGrabberParams struGrabberRTParams, DataFileProcessor &dfpSaver, Scheduler &sScheduler, CMainDataUploader &mduUploader)
{
SetGrabberParams(struGrabberRTParams);
SetGrabberFileProcessor(dfpSaver);
SetTimer(sScheduler);
SetUploader(mduUploader/*, struGrabberRTParams*/);
return 0;
}
void CMainDataGrabber::Init_Normal()
{
InitThreadStatus();
@ -80,6 +92,8 @@ int CMainDataGrabber::SetGrabberParams(RunTimeGrabberParams struGrabberRTParams)
m_struLinearShutterContext = struGrabberRTParams.lscParam;
m_iTotalThreads = m_struDeviceContext.ucDeviceNumber;
m_struRTGP = struGrabberRTParams;
return 0;
}
@ -95,6 +109,12 @@ int CMainDataGrabber::SetTimer(Scheduler &sScheduler)
return 0;
}
int CMainDataGrabber::SetUploader(CMainDataUploader &mduUploader/*, RunTimeGrabberParams struGrabberRTParams*/)
{
m_pmduUploader = &mduUploader;
return 0;
}
int CMainDataGrabber::InitLS()
{
PortInfo piTemp;
@ -159,10 +179,11 @@ int CMainDataGrabber::InitializeWorkers()
{
m_struDeviceContext.fWavelength[i][j] = daAttrTemp.fWaveLengthInNM[j];
}
m_pControlThread.push_back(m_pWorkThread);
}
m_struRTGP.fscParams = m_struDeviceContext;
m_pdfpSaver->SetDeviceInfo(m_struDeviceContext);
m_pmduUploader->SetRTGP(m_struRTGP);
return 0;
}
@ -201,6 +222,8 @@ int CMainDataGrabber::SetupMsgPipelines()
connect(this, &CMainDataGrabber::SignalGrabOnceFinished_Signal, this, &CMainDataGrabber::GrabOnceFinished_Signal);
connect(this, &CMainDataGrabber::SignalGrabOnceFinished_Dark, this, &CMainDataGrabber::GrabOnceFinished_Dark);
connect(this, &CMainDataGrabber::SignalPushOneDataFrame, m_pmduUploader,&CMainDataUploader::SlotPushOneDataFrame);
qDebug()<<connect(this,&CMainDataGrabber::SignalLSInit,this,&CMainDataGrabber::InitLS);
return 0;
@ -214,7 +237,7 @@ int CMainDataGrabber::StartGrab()
void CMainDataGrabber::Init_Self()
{
emit SignalLSInit();
//emit SignalLSInit();
return;
}
@ -376,7 +399,7 @@ int CMainDataGrabber::GrabOnceFinished()
{
////move to
qDebug()<<"Start ILMES_MoveToPos:"<<i+1;
m_ctrlLS.ILMES_MoveToPos(i+1);
//m_ctrlLS.ILMES_MoveToPos(i+1);
qDebug() << "Stop ILMES_MoveToPos:" << i + 1;
m_struAcqPosSetting.iPosition[i + 1];
m_iFlagIsCapturing_Signal = 1;
@ -389,7 +412,7 @@ int CMainDataGrabber::GrabOnceFinished()
////move to
qDebug() << "Start ILMES_MoveToPos:" << 0;
m_ctrlLS.ILMES_MoveToPos(0);
//m_ctrlLS.ILMES_MoveToPos(0);
qDebug() << "Stop ILMES_MoveToPos:" << 0;
m_struAcqPosSetting.iPosition[0];
m_iFlagIsCapturing_Dark = 1;
@ -413,6 +436,10 @@ int CMainDataGrabber::GrabOnceFinished()
}
vecData.push_back(vecSignal);
}
//emit SignalPushOneDataFrame(vecData);
m_pmduUploader->SetData(vecData);
emit SignalPushOneDataFrame();
m_pdfpSaver->SetData(vecData);
m_pdfpSaver->WriteDataFile();
m_iFlagIsCapturing = 0;

View File

@ -5,10 +5,13 @@
#include "DataFileProcessor.h"
#include "Scheduler.h"
#include "VSMD12XControl.h"
#include "MainDataUploader.h"
using namespace std;
using namespace ZZ_MISCDEF::ZZ_RUNPARAMS;
//Q_DECLARE_METATYPE(vector<vector<DataFrame>>)
class CMainDataGrabber :public QObject
{
Q_OBJECT
@ -29,16 +32,17 @@ private:
int m_iFlagIsCapturing_Signal;
int m_iFlagIsCapturing_Dark;
DataFileProcessor* m_pdfpSaver;
Scheduler * m_psScheduler;
DataFileProcessor * m_pdfpSaver;
Scheduler * m_psScheduler;
CMainDataUploader * m_pmduUploader;
CVSMD12XControl m_ctrlLS;
FSContext m_struDeviceContext;
LSContext m_struLinearShutterContext;
AcqPosSettings m_struAcqPosSetting;
AcqTimeSettings m_struAcqTime;
FSContext m_struDeviceContext;
LSContext m_struLinearShutterContext;
AcqPosSettings m_struAcqPosSetting;
AcqTimeSettings m_struAcqTime;
RunTimeGrabberParams m_struRTGP;
//QTimer *m_GrabTimer;
private:
@ -49,6 +53,7 @@ private:
int SetGrabberParams(RunTimeGrabberParams struGrabberRTParams);
int SetGrabberFileProcessor(DataFileProcessor &dfpSaver);
int SetTimer(Scheduler &sScheduler);
int SetUploader(CMainDataUploader &mduUploader/*, RunTimeGrabberParams struGrabberRTParams*/);
int InitThreadStatus();
int InitializeWorkers();
@ -59,6 +64,7 @@ private:
public:
int SetContext(RunTimeGrabberParams struGrabberRTParams, DataFileProcessor &dfpSaver, Scheduler &sScheduler);
int SetContext(RunTimeGrabberParams struGrabberRTParams, DataFileProcessor &dfpSaver, Scheduler &sScheduler,CMainDataUploader &mduUploader);
void Init_Normal();
void Init_Self();
@ -88,4 +94,6 @@ signals:
void SignalStartGrab();
void SignalLSInit();
void SignalPushOneDataFrame();
//void SignalPushOneDataFrame(std::vector<std::vector<DataFrame>> vecData);
};

View File

@ -1,6 +1,6 @@
#include "DataFileProcessor.h"
DataFileProcessor::DataFileProcessor()
DataFileProcessor::DataFileProcessor(QObject* parent /*= nullptr*/)
{
#ifdef _DEBUG
m_qstrFilePath = "E:/WorkSpace/TowerOptoSifAndSpectral/Data";
@ -153,6 +153,10 @@ void DataFileProcessor::WriteDeviceInfo()
qfData.write("TotalSpectrometer,");
qstrTemp = QString::number(m_struDeviceContext.ucDeviceNumber);
qfData.write(qstrTemp.toLatin1());
qfData.write(",");
qfData.write("TotalScanPoints,");
qstrTemp = QString::number(m_vecData[0].size());
qfData.write(qstrTemp.toLatin1());
qfData.write("\n");
for (int i=0;i< m_struDeviceContext.ucDeviceNumber;i++)
@ -181,6 +185,10 @@ void DataFileProcessor::WriteDeviceInfo()
qstrTemp = QString::number(m_struDeviceContext.lDepth[i]);
qfData.write(qstrTemp.toLatin1());
qfData.write("TEC Temperature,");
qstrTemp = QString::number(m_vecData[i][0].fTemperature);
qfData.write(qstrTemp.toLatin1());
qfData.write("\n");
qfData.write("Wavelength,");
@ -222,7 +230,15 @@ bool DataFileProcessor::WriteData()
qstrTemp = QString("_P%1").arg(j + 1);
qfData.write(qstrTemp.toLatin1());
qfData.write(",");
qfData.write("valid");
if ((m_vecData[i][j].fTemperature < 5) && (m_vecData[i][j].fTemperature> -5))
{
qfData.write("valid");
}
else
{
qfData.write("invalid");
}
qfData.write(",");
qstrTemp = QString::number(m_vecData[i][j].usExposureTimeInMS);
qfData.write(qstrTemp.toLatin1());

View File

@ -4,10 +4,11 @@
using namespace ZZ_MISCDEF::ZZ_DATAFILE;
using namespace ZZ_MISCDEF::ZZ_RUNPARAMS;
using namespace ZZ_MISCDEF::IRIS::FS;
class DataFileProcessor
class DataFileProcessor :public QObject
{
Q_OBJECT
public:
DataFileProcessor();
DataFileProcessor(QObject* parent = nullptr);
virtual ~DataFileProcessor();
public:
public:

View File

@ -394,6 +394,8 @@ int OceanOptics_lib::SetDeviceTemperature(float fTemperature)
//<2F><>ȡ<EFBFBD><EFBFBD><C2B6><EFBFBD><EFBFBD><EFBFBD>
int OceanOptics_lib::GetDeviceTemperature(float &fTemperature)
{
fTemperature = 0;
if (m_iSpectralmeterHandle == -100)
{
printf("\nNo!!!!!!!!!!!!\n");

View File

@ -25,7 +25,7 @@ namespace ZZ_MISCDEF
{
ZZ_U16 usExposureTimeInMS;
ZZ_S32 lData[4096];
float fTemperature = -1000;
float fTemperature = 0;
double dTimes = 0;
}DataFrame;
@ -309,6 +309,24 @@ namespace ZZ_MISCDEF
}ATPDataHeader;
typedef struct tagCalibrationFrame
{
int iExposureTimeInMS;
float fTemperature;
int iPixels;
float fWaveLength[4096] = { 0 };
double dCal_Gain[4096] = { 0 };
double dCal_Offset[4096] = { 0 };
}CalFrame;
typedef struct tagCalDataFrame
{
ZZ_U16 usExposureTimeInMS;
float fTemperature = 0;
int iPixels;
double dData[4096];
}CalDataFrame;
}
//misc detector

View File

@ -118,7 +118,7 @@ int CZZ_SeiralPort_QT::Write(const std::string strSend)
{
QByteArray qbaTest(strSend.c_str(),(int)strSend.length());
qint64 qi64Write = m_pSerialPort->write(qbaTest);
m_pSerialPort->waitForBytesWritten();
m_pSerialPort->waitForBytesWritten(5000);
if (qi64Write != qbaTest.size())
{
qDebug() << "Err:write Failed.Exit Code:1" << qi64Write;

View File

@ -19,6 +19,7 @@ GY39Controller::~GY39Controller()
int GY39Controller::SendCommand(QByteArray qbCommand)
{
qint64 qi64Write = m_pSerialPort->write(qbCommand);
m_pSerialPort->waitForBytesWritten(5000);
if (qi64Write != qbCommand.size())
{
qDebug() << "Err:write Failed.Exit Code:1" << qi64Write;
@ -36,7 +37,7 @@ int GY39Controller::RecvHumitureData(QByteArray &qbData)
int iCounter = 0;
while (qbData.size() < 15)
{
m_pSerialPort->waitForReadyRead(50);
m_pSerialPort->waitForReadyRead(5000);
QByteArray qbTemp = m_pSerialPort->readAll();
qbData.append(qbTemp);

View File

@ -1,3 +0,0 @@
#pragma once
#include "pch.h"
#include "ZZ_Types.h"

View File

@ -0,0 +1,96 @@
#include "DataFileTransfer.h"
ZZ_HttpTransfer::ZZ_HttpTransfer(QObject* parent /*= nullptr*/)
{
m_pNetworkManager = new QNetworkAccessManager();
connect(m_pNetworkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(SlotReplyFinished(QNetworkReply*)));
}
ZZ_HttpTransfer::~ZZ_HttpTransfer()
{
}
int ZZ_HttpTransfer::SendData()
{
QNetworkRequest qnRequest;
qnRequest.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));
qnRequest.setUrl(QUrl("http://172.16.0.234/fileup/Data_uper.php"));
return 0;
}
int ZZ_HttpTransfer::SendInfo()
{
QNetworkRequest qnRequest;
qnRequest.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));
qnRequest.setUrl(QUrl("http://172.16.0.234/fileup/Dev_info_uper.php"));
QString qstrSend;
QString qstrWaveLength;
for (int i = 0; i < m_struGrabberRTParams.fscParams.ucDeviceNumber; i++)
{
qstrSend = "Location:" + QString("%1").arg(m_struEC.qstrLocation) + "####";
qstrSend += "DEV_SN:" + QString("%1").arg(m_struEC.qstrDEV_SN) + "####";
qstrSend += "GPS_Longtitude:" + QString("%1").arg(m_struEC.qstrGPS_Longtitude) + "####";
qstrSend += "GPS_Latitude:" + QString("%1").arg(m_struEC.qstrGPS_Latitude) + "####";
qstrSend += "GPS_Altitude:" + QString("%1").arg(m_struEC.qstrGPS_Altitude) + "####";
qstrSend += "GPS_North:" + QString("%1").arg(m_struEC.qstrGPS_North) + "####";
qstrSend += "InstallationTime:" + QString("%1").arg(m_struMEC.qstrInstallationTime) + "####";
qstrSend += "NameOfMaintenanceStaff:" + QString("%1").arg(m_struMEC.qstrNameOfMaintenanceStaff) + "####";
qstrSend += "PhoneNumberOfMaintenanceStaff:" + QString("%1").arg(m_struMEC.qstrPhoneNumberOfMaintenanceStaff) + "####";
qstrSend += "Bands:" + QString("%1").arg(m_struGrabberRTParams.fscParams.usPixels[i]) + "####";
qstrSend += "WaveLength:";
for (int j=0;j< m_struGrabberRTParams.fscParams.usPixels[i];j++)
{
qstrWaveLength = QString("%1").arg(m_struGrabberRTParams.fscParams.fWavelength[i][j]);
qstrSend += qstrWaveLength;
if (j == m_struGrabberRTParams.fscParams.usPixels[i]-1)
{
qstrSend += "####";
}
else
{
qstrSend += ",";
}
}
}
qDebug() << qstrSend;
return 0;
}
int ZZ_HttpTransfer::SendErr()
{
QNetworkRequest qnRequest;
qnRequest.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("application/json"));
qnRequest.setUrl(QUrl("http://172.16.0.234/fileup/Warning.php"));
QByteArray abTest;
m_pNetworkManager->post(qnRequest, abTest);
return 0;
}
void ZZ_HttpTransfer::SetContext(EContext struEC, MEContext struMEC)
{
m_struEC = struEC;
m_struMEC = struMEC;
}
void ZZ_HttpTransfer::SetDeviceInfo(RunTimeGrabberParams struGrabberRTParams)
{
m_struGrabberRTParams = struGrabberRTParams;
}
void ZZ_HttpTransfer::SetCalData(vector<vector<CalDataFrame>> vecCalcedData)
{
m_vecCalcedData = vecCalcedData;
}
int ZZ_HttpTransfer::SlotReplyFinished(QNetworkReply* qnReply)
{
QString qstrURL = qnReply->url().toString();
QByteArray qbData = qnReply->readAll();
return 0;
}

View File

@ -0,0 +1,37 @@
#pragma once
#include "pch.h"
#include "ZZ_Types.h"
//http://172.16.0.234/fileup/Data_uper.php
//http://172.16.0.234/fileup/Dev_info_uper.php
//http://172.16.0.234/fileup/Warning.php
using namespace std;
using namespace ZZ_MISCDEF::ZZ_DATAFILE;
using namespace ZZ_MISCDEF::ZZ_RUNPARAMS;
using namespace ZZ_MISCDEF::IRIS::FS;
class ZZ_HttpTransfer :public QObject
{
Q_OBJECT
public:
ZZ_HttpTransfer(QObject* parent = nullptr);
~ZZ_HttpTransfer();
public:
public:
int SendData();
int SendInfo();
int SendErr();
void SetContext(EContext struEC, MEContext struMEC);
void SetDeviceInfo(RunTimeGrabberParams struGrabberRTParams);
void SetCalData(vector<vector<CalDataFrame>> vecCalcedData);
private:
QNetworkAccessManager *m_pNetworkManager;
EContext m_struEC;
MEContext m_struMEC;
RunTimeGrabberParams m_struGrabberRTParams;
vector<vector<CalDataFrame>> m_vecCalcedData;
private:
public slots:
int SlotReplyFinished(QNetworkReply* qnReply);
};

View File

@ -0,0 +1,78 @@
#include "MainDataUploader.h"
CMainDataUploader::CMainDataUploader(QObject* parent /*= nullptr*/)
{
m_pRadConverter = new RadConverter;
m_pTransfer = new ZZ_HttpTransfer;
}
CMainDataUploader::~CMainDataUploader()
{
if (m_pRadConverter)
{
delete m_pRadConverter;
}
if (m_pTransfer)
{
delete m_pTransfer;
}
}
void CMainDataUploader::SetData(vector<vector<DataFrame>> vecData)
{
m_vecData = vecData;
}
void CMainDataUploader::SetRTGP(RunTimeGrabberParams struGrabberRTParams)
{
m_struGrabberRTParams = struGrabberRTParams;
}
void CMainDataUploader::SetContext(EContext struEC, MEContext struMEC)
{
m_struEC = struEC;
m_struMEC = struMEC;
}
void CMainDataUploader::Calibration()
{
int iScanPoints = m_struGrabberRTParams.apsParams.iTotalPosition - 1;
int iDevices = m_struGrabberRTParams.fscParams.ucDeviceNumber;
for (int j = 0; j < iDevices; j++)
{
for (int i = 0; i < iScanPoints; i++)
{
for (int k=0;k< m_struGrabberRTParams.fscParams.usPixels[j];k++)
{
m_vecCalcedData[j][i].dData[k] = m_vecData[j][i].lData[k]* m_vecCalData[j][i].dCal_Gain[k];
}
}
}
}
int CMainDataUploader::Upload()
{
m_pTransfer->SendInfo();
return 0;
}
int CMainDataUploader::Initialize()
{
m_pRadConverter->LoadCalibrationFrames(m_struGrabberRTParams,m_vecCalData);
m_pTransfer->SetContext(m_struEC, m_struMEC);
m_pTransfer->SetDeviceInfo(m_struGrabberRTParams);
return 0;
}
// int CMainDataUploader::SlotPushOneDataFrame(vector<vector<DataFrame>> vecData)
// {
// return 0;
// }
int CMainDataUploader::SlotPushOneDataFrame()
{
m_vecData.clear();
return 0;
}

View File

@ -0,0 +1,47 @@
#pragma once
#include "pch.h"
#include <vector>
#include "ZZ_Types.h"
#include "DataFileTransfer.h"
#include "RadianceConverter.h"
using namespace std;
using namespace ZZ_MISCDEF::ZZ_DATAFILE;
using namespace ZZ_MISCDEF::ZZ_RUNPARAMS;
using namespace ZZ_MISCDEF::IRIS::FS;
class CMainDataUploader :public QObject
{
Q_OBJECT
public:
CMainDataUploader(QObject* parent = nullptr);
~CMainDataUploader();
public:
public:
//set attributes
void SetData(vector<vector<DataFrame>> vecData);
void SetRTGP(RunTimeGrabberParams struGrabberRTParams);
void SetContext(EContext struEC, MEContext struMEC);
//load calibration file after set attributes
int Initialize();
void Calibration();
int Upload();
private:
RadConverter *m_pRadConverter = NULL;
ZZ_HttpTransfer *m_pTransfer = NULL;
private:
EContext m_struEC;
MEContext m_struMEC;
RunTimeGrabberParams m_struGrabberRTParams;
vector<vector<DataFrame>> m_vecData;
vector<vector<CalFrame>> m_vecCalData;
vector<vector<CalDataFrame>> m_vecCalcedData;
public slots:
//int SlotPushOneDataFrame(vector<vector<DataFrame>> vecData);
int SlotPushOneDataFrame();
};

View File

@ -0,0 +1,71 @@
#include "RadianceConverter.h"
RadConverter::RadConverter(QObject* parent /*= nullptr*/)
{
#ifdef _DEBUG
m_qstrCalFilePath = "E:/WorkSpace/TowerOptoSifAndSpectral/Cal";
#else
m_qstrCalFilePath = "/home/data/Cal";
#endif // DEBUG
}
RadConverter::~RadConverter()
{
}
int RadConverter::LoadCalibrationFrames(RunTimeGrabberParams struGrabberRTParams, vector<vector<CalFrame>> &struAllCalFrame)
{
/////param
int iScanPoints = struGrabberRTParams.apsParams.iTotalPosition - 1;
int iDevices = struGrabberRTParams.fscParams.ucDeviceNumber;
/////check dir
QDir qdirPath(m_qstrCalFilePath);
if (!qdirPath.exists())
{
qDebug() << "Calibration File not exist";
return -1;
}
/////check quantities
QStringList qslFilter;
qslFilter << "*.dat";
qdirPath.setNameFilters(qslFilter);
QFileInfoList qfiInfo = qdirPath.entryInfoList(qslFilter);
if (qfiInfo.size()!= iScanPoints * iDevices)
{
qDebug() << "Calibration Files quantities not match";
return -2;
}
/////read file
QString qstrFilePath;
vector<CalFrame> vecOneDev;
CalFrame OneFile;
for (int j=0;j<iDevices;j++)
{
vecOneDev.clear();
for (int i = 0; i < iScanPoints; i++)
{
qstrFilePath = m_qstrCalFilePath+QString("/FS%1_").arg(j + 1)+ QString("P%1").arg(i + 1)+".dat";
QFile qfCalFile(qstrFilePath);
bool bRes = qfCalFile.open(QFile::ReadOnly);
qfCalFile.read((char *)&OneFile.iExposureTimeInMS,sizeof(int));
qfCalFile.read((char*)&OneFile.fTemperature, sizeof(float));
qfCalFile.read((char*)&OneFile.iPixels,sizeof(int));
qfCalFile.read((char*)OneFile.fWaveLength, sizeof(float)*OneFile.iPixels);
qfCalFile.read((char*)OneFile.dCal_Gain, sizeof(double)*OneFile.iPixels);
qfCalFile.read((char*)OneFile.dCal_Offset, sizeof(double)*OneFile.iPixels);
/////check attribute
// if ()
// {
// }
vecOneDev.push_back(OneFile);
}
struAllCalFrame.push_back(vecOneDev);
}
return 0;
}

View File

@ -0,0 +1,22 @@
#pragma once
#include "pch.h"
#include "ZZ_Types.h"
using namespace std;
using namespace ZZ_MISCDEF::ZZ_DATAFILE;
using namespace ZZ_MISCDEF::ZZ_RUNPARAMS;
using namespace ZZ_MISCDEF::IRIS::FS;
class RadConverter :public QObject
{
Q_OBJECT
public:
RadConverter(QObject* parent = nullptr);
~RadConverter();
public:
public:
int LoadCalibrationFrames(RunTimeGrabberParams struGrabberRTParams, vector<vector<CalFrame>> &struAllCalFrame);
private:
QString m_qstrCalFilePath;
private:
public slots:
};

View File

@ -9,6 +9,7 @@
#include <QDebug>
#include <QDir>
#include <QObject>
#include <QMetaType>
////////////////////////////Thread
#include <QThread>
#include <QMutex>
@ -25,4 +26,8 @@
#include <QTimer>
////////////////////////////Serial I/O
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include <QtSerialPort/QSerialPortInfo>
////////////////////////////NetWork
#include "QNetworkRequest"
#include "QNetworkAccessManager"
#include "QNetworkReply"