#include #include #include "QTextCodec" #include "SensorMannager.h" #include"SensorOptoSky.h" #include"SensorQExPRO.h" #include #include #include #include QTextStream cout1(stdout, QIODevice::WriteOnly); void logout(QString str){ cout1<"< FindFeng(vector point1ist, vector valuelist); vector DengJianJu(int position, int distanc, int times = 10); vector PingHua(vector value, int step = 2); int main(int argc, char* argv[]) { if (argc!=4) { logout("Some Thing error Please check the input"); logout( "The Correct Should Be application sensor numberofposition"); logout( "apllication Sensor positionneed shutter_time"); logout("Senor: OSIFAlpha QEPRO"); logout("Senor: OSIFBeta QE65"); logout("Senor: ISIF ATP6500"); logout("Senor: IS1 ATP1010"); logout("Senor: IS2 ATP5020"); return 0; } // cali; int bandsnumber=1024; QString SensorTypestr(argv[1]); QString PositionNumberstr(argv[2]); int shuttertime=QString(argv[3]).toInt(); int PositionNumber=PositionNumberstr.toInt(); QCoreApplication aaaaa(argc, argv); QString m_qstrDeviceConfigFilePath; #ifdef WIN32 m_qstrDeviceConfigFilePath = ("D:\\03MyGit\\linux\\movingliner\\DeviceSettings.ini"); #else m_qstrDeviceConfigFilePath = ("/home/data/Setting/DeviceSettings.ini"); #endif QSettings *m_qsDeviceConfig; m_qsDeviceConfig = new QSettings(m_qstrDeviceConfigFilePath, QSettings::IniFormat); int numberofsensor=m_qsDeviceConfig->value("DEVICE INFO/TotalSpectrometer").toInt(); logout("Welcom to use the Auto Locate Application"); string hdrPath = "/home/data/test.csv"; std::ofstream outfile(hdrPath.c_str()); string hdrPath1 = "/home/data/result.csv"; std::ofstream outfile1(hdrPath1.c_str()); logout("Sensor is "+SensorTypestr); SensorBase* aa= nullptr; if (SensorTypestr=="OSIFAlpha") { aa = new SensorQExPRO(QE65PRO_QE); } else if (SensorTypestr=="OSIFBeta") { aa = new SensorQExPRO(QE65PRO_QE); } if(aa== nullptr) { QString portname=""; for (int i = 0; i < numberofsensor; ++i) { QString key="FS"+QString::number(i+1)+"/Model"; qDebug()<value(key).toString()==SensorTypestr) { QString portstr=m_qsDeviceConfig->value("FS"+QString::number(i+1)+"/Port").toString(); QStringList strlist=portstr.split('/'); portname=strlist.at(strlist.length()-1); } } // qDebug()<Can not find the sensor"+SensorTypestr+"<\/b>"); return 1; } logout("Sensor Port is "+portname); aa=new SensorOptoSky(ATP6500,portname); } //SensorBase* aa = new SensorOptoSky(ATP6500,"ttyUSB0"); aa->initSensor(); STRSensorInfo info= aa->SensorInfo; int bandsshow=info.BandNum/2; logout("Sensor Bands to Show is "+QString::number(bandsshow)); STROnePlot oneplot; CVSMD12XControl Motercontrol; //Motercontrol.ILMES_InitializeComm("COM16"); if ( m_qsDeviceConfig->value("LINEAR SHUTTER/Port").toString()!="") { logout("Find the motor port:"+m_qsDeviceConfig->value("LINEAR SHUTTER/Port").toString()); Motercontrol.ILMES_InitializeComm( m_qsDeviceConfig->value("LINEAR SHUTTER/Port").toString()); } else { return 0; } logout("The max Postion is "+QString::number(550000/4*PositionNumber)); ControllerParams cpTest; bool res = Motercontrol.ILMES_InitializeParams(cpTest); aa->Settingshuttertime(shuttertime); aa->GetOnePlot(oneplot); logout("GO TO ZERO"); Motercontrol.StartBackZero(); Motercontrol.SetRunSpeed(10000); logout("GO TO ZERO OK"); logout("Start Moving to "+QString::number(550000/4*PositionNumber)); Motercontrol.MoveTo_NoSyn(550000/4*PositionNumber); aa->GetOnePlot(oneplot); MSInfo temp; Motercontrol.GetStatus(temp); vector point1ist; vector valuelist; int i = 0; Motercontrol.GetStatus(temp); //outfile <GetOnePlot(oneplot); //qDebug() << oneplot.BandNum; //std::cout << temp.iPosition << std::endl; Motercontrol.GetStatus(temp); i++; outfile << i << "," << oneplot.Plot[bandsshow] << "," << temp.iPosition << std::endl; point1ist.push_back(temp.iPosition); valuelist.push_back(oneplot.Plot[bandsshow]); } logout("FINISH Moving"); vector valuepinghua1 = PingHua(valuelist, 3); vectorloction1=FindFeng(point1ist, valuepinghua1); int lenth = loction1.size(); if (lenth!=PositionNumber) { logout("can not find all position please change the shutter time and try agin<\/b>"); } cout1<<"First find "<"< location1point = DengJianJu(loction1[i], 5000, 25); vector valuepoint; int lennow = location1point.size(); cout1<<"Detail find "<"<GetOnePlot(oneplot); valuepoint.push_back(oneplot.Plot[bandsshow]); //outfile << ii << "," << oneplot.Plot[1024] << "," << location1point[ii] << std::endl; } vector valuepinghua = PingHua(valuepoint,3); vectorloction2 = FindFeng(location1point, valuepinghua); if (loction2.size() == 1) { cout1<<"find "<"<
"< FindFeng(vector point1ist, vector valuelist) { vector ret; int lenth = point1ist.size(); if (lenth<10) { ret.push_back(0); return ret; } for (size_t i = 5; i < lenth-5; i++) { if (valuelist[i] > 5000&&valuelist[i]>valuelist[i-1]&& valuelist[i] > valuelist[i - 4]&& valuelist[i] >valuelist[i + 1]&& valuelist[i] > valuelist[i + 4] && valuelist[i-1] > 5000 && valuelist[i-4]&& valuelist[i +1] > 5000 && valuelist[i + 4]) { if (ret.size()!=0) { if (point1ist[i]-ret[ret.size()-1]<5000) { continue; } } ret.push_back(point1ist[i]); } } return ret; } vector DengJianJu(int position, int distanc, int times ) { int begin = position - distanc; vector ret; int eachstep = distanc / times; for (size_t i = 0; i < 2*times; i++) { ret.push_back(begin + i * eachstep); } return ret; } vector PingHua(vector value,int step) { vector ret; if (value.size()<2*step) { return value; } int len = value.size(); for (size_t i = 0; i < step; i++) { ret.push_back(value[i]); } for (size_t i = step; i