From a629115e91547cb510d269b442dec4d9ccc28be7 Mon Sep 17 00:00:00 2001 From: tangchao0503 <735056338@qq.com> Date: Tue, 13 May 2025 14:32:36 +0800 Subject: [PATCH] =?UTF-8?q?add=201=E3=80=81=E6=B7=BB=E5=8A=A0corning=20410?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=EF=BC=9B=202=E3=80=81=E9=80=9A=E8=BF=87=20Ir?= =?UTF-8?q?isMultiMotorController=20=E6=B7=BB=E5=8A=A0=E4=B8=80=E8=BD=B4?= =?UTF-8?q?=E9=A9=AC=E8=BE=BE=E6=8E=A7=E5=88=B6=EF=BC=8C=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E6=8E=A7=E5=88=B6=E9=A9=AC?= =?UTF-8?q?=E8=BE=BE=E4=B8=AA=E6=95=B0=E5=92=8C=E9=A9=AC=E8=BE=BE=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E5=8F=82=E6=95=B0=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix 1、修复点击显示光谱bug; 2、修复机械臂bug; --- HPPA.sln | 10 ++ HPPA/Corning410Imager.cpp | 4 +- HPPA/HPPA.cpp | 148 ++++++++++++++---- HPPA/HPPA.h | 6 +- HPPA/HPPA.ui | 10 ++ HPPA/HPPA.vcxproj | 17 ++- HPPA/HPPA.vcxproj.filters | 9 ++ HPPA/ImagerOperationBase.cpp | 8 +- HPPA/ImagerOperationBase.h | 2 +- HPPA/OneMotorControl.cpp | 133 ++++++++++++++++ HPPA/OneMotorControl.h | 53 +++++++ HPPA/ResononNirImager.cpp | 4 +- HPPA/about.ui | 2 +- HPPA/fileOperation.h | 2 +- HPPA/image2display.cpp | 2 +- HPPA/oneMotorControl.ui | 285 +++++++++++++++++++++++++++++++++++ 16 files changed, 646 insertions(+), 49 deletions(-) create mode 100644 HPPA/OneMotorControl.cpp create mode 100644 HPPA/OneMotorControl.h create mode 100644 HPPA/oneMotorControl.ui diff --git a/HPPA.sln b/HPPA.sln index 398ac97..7f6148e 100644 --- a/HPPA.sln +++ b/HPPA.sln @@ -10,6 +10,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "HPPA", "HPPA\HPPA.vcxproj", EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vincecontrol", "vincecontrol\vincecontrol.vcxproj", "{B12702AD-ABFB-343A-A199-8E24837244A3}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "IrisMultiMotorController", "IrisMultiMotorController\IrisMultiMotorController\IrisMultiMotorController.vcxproj", "{2E792AA6-1BCB-4CDA-BE01-4D455EC5C473}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 @@ -34,6 +36,14 @@ Global {B12702AD-ABFB-343A-A199-8E24837244A3}.Release|x64.Build.0 = Release|x64 {B12702AD-ABFB-343A-A199-8E24837244A3}.Release|x86.ActiveCfg = Release|Win32 {B12702AD-ABFB-343A-A199-8E24837244A3}.Release|x86.Build.0 = Release|Win32 + {2E792AA6-1BCB-4CDA-BE01-4D455EC5C473}.Debug|x64.ActiveCfg = Debug|x64 + {2E792AA6-1BCB-4CDA-BE01-4D455EC5C473}.Debug|x64.Build.0 = Debug|x64 + {2E792AA6-1BCB-4CDA-BE01-4D455EC5C473}.Debug|x86.ActiveCfg = Debug|x64 + {2E792AA6-1BCB-4CDA-BE01-4D455EC5C473}.Debug|x86.Build.0 = Debug|x64 + {2E792AA6-1BCB-4CDA-BE01-4D455EC5C473}.Release|x64.ActiveCfg = Release|x64 + {2E792AA6-1BCB-4CDA-BE01-4D455EC5C473}.Release|x64.Build.0 = Release|x64 + {2E792AA6-1BCB-4CDA-BE01-4D455EC5C473}.Release|x86.ActiveCfg = Release|x64 + {2E792AA6-1BCB-4CDA-BE01-4D455EC5C473}.Release|x86.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/HPPA/Corning410Imager.cpp b/HPPA/Corning410Imager.cpp index 9c50902..27adf4f 100644 --- a/HPPA/Corning410Imager.cpp +++ b/HPPA/Corning410Imager.cpp @@ -32,7 +32,7 @@ double Corning410Imager::getFramerate() double Corning410Imager::getIntegrationTime() { - return m_imager.get_integration_time(); + return m_imager.get_integration_time() / 1000; } double Corning410Imager::getGain() @@ -53,7 +53,7 @@ void Corning410Imager::setFramerate(const double frames_per_second) void Corning410Imager::setIntegrationTime(const double milliseconds) { - m_imager.set_integration_time(milliseconds); + m_imager.set_integration_time(milliseconds * 1000); } int Corning410Imager::getStartBand() diff --git a/HPPA/HPPA.cpp b/HPPA/HPPA.cpp index 016163a..90741aa 100644 --- a/HPPA/HPPA.cpp +++ b/HPPA/HPPA.cpp @@ -299,6 +299,17 @@ HPPA::HPPA(QWidget *parent) tabifyDockWidget(dock_adt, dock_rac); mPanelMenu->addAction(dock_rac->toggleViewAction()); + //һ + omc = new OneMotorControl(); + connect(omc, SIGNAL(startRecordLineSignal(int)), this, SLOT(recordHyperSpecImg(int))); + + QDockWidget* dock_omc = new QDockWidget(QString::fromLocal8Bit(""), this); + dock_omc->setObjectName("mDockOneMotorControl"); + dock_omc->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); + dock_omc->setWidget(omc); + tabifyDockWidget(dock_rac, dock_omc); + mPanelMenu->addAction(dock_omc->toggleViewAction()); + createActionGroups(); connect(mImagerGroup, &QActionGroup::triggered, this, &HPPA::selectingImager); @@ -317,6 +328,19 @@ HPPA::HPPA(QWidget *parent) } } +void HPPA::recordHyperSpecImg(int status) +{ + if (status == 1) + { + emit StartRecordSignal();//俪ʼɼź + } + else if (status == 0) + { + m_Imager->setRecordControlState(false);//ֹͣɼ + } +} + + void HPPA::recordFromRobotArm(int fileCounter) { //qDebug() << "recordFromRobotArm" << fileCounter; @@ -393,6 +417,7 @@ void HPPA::createMoveplatformActionGroup() moveplatformActionGroup->addAction(ui.mAction_is_no_motor); moveplatformActionGroup->addAction(ui.mAction_2AxisMotor); moveplatformActionGroup->addAction(ui.mAction_RobotArm); + moveplatformActionGroup->addAction(ui.mAction_1AxisMotor); // ȡϴѡĽ QSettings settings; @@ -411,6 +436,10 @@ void HPPA::createMoveplatformActionGroup() { ui.mAction_RobotArm->setChecked(true); } + else if (lastSelectedAction == "mAction_1AxisMotor") + { + ui.mAction_1AxisMotor->setChecked(true); + } } void HPPA::selectingMoveplatform(QAction* selectedAction) @@ -497,27 +526,35 @@ void HPPA::onStartRecordStep1() string directory = fileOperation->getDirectoryFromString(); //string imgPath = directory + "\\tmp_image"; string imgPath = directory + "\\" + m_FilenameLineEdit->text().toStdString(); - int x = _access(imgPath.c_str(), 0); - if (!x)//ļھִдifĴ + + m_RecordState += 1; + if (m_RecordState % 2 == 1) { - enum QMessageBox::StandardButton response = QMessageBox::question(this, QString::fromLocal8Bit("ʾ"), QString::fromLocal8Bit("ļڣǷ񸲸ǣ"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);; - if (response == QMessageBox::Yes)// + m_RecordState -= 1; + + string tmp = imgPath + "_" + std::to_string(1) + ".bil"; + int x = _access(tmp.c_str(), 0); + if (!x)//ļھִдifĴ { - //std::cout << "" << std::endl; - } - else - { - //std::cout << "" << std::endl; - //m_RecordState -= 1;//ǵĻҪԭֹͣɼ - return; + enum QMessageBox::StandardButton response = QMessageBox::question(this, QString::fromLocal8Bit("ʾ"), QString::fromLocal8Bit("ļڣǷ񸲸ǣ"), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);; + if (response == QMessageBox::Yes)// + { + //std::cout << "" << std::endl; + } + else + { + //std::cout << "" << std::endl; + //m_RecordState -= 1;//ǵĻҪԭֹͣɼ + return; + } } } - - m_Imager->setFrameNumber(this->frame_number->text().toInt()); - m_Imager->setFileName2Save(imgPath); + else + { + m_RecordState -= 1; + } QString checkedName = checked->objectName(); - if (checkedName == "mAction_is_no_motor") { m_RecordState += 1; @@ -528,7 +565,9 @@ void HPPA::onStartRecordStep1() onCreateTab(0); m_numberOfRecording = 0; - + + m_Imager->setFileName2Save(imgPath); + m_Imager->setFrameNumber(this->frame_number->text().toInt()); emit StartRecordSignal();//俪ʼɼź ui.action_start_recording->setText(QString::fromLocal8Bit("ֹͣɼ")); @@ -537,6 +576,36 @@ void HPPA::onStartRecordStep1() else { m_Imager->setRecordControlState(false);//ֹͣɼ + m_RecordState -= 1; + + ui.action_start_recording->setText(QString::fromLocal8Bit("ɼ")); + ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}"); + } + return; + } + else if (checkedName == "mAction_1AxisMotor") + { + m_RecordState += 1; + + if (m_RecordState % 2 == 1) + { + ui.ImageViewerTabWidget->clear(); + + onCreateTab(0); + m_numberOfRecording = 0; + + ui.action_start_recording->setText(QString::fromLocal8Bit("ֹͣɼ")); + ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(255,0,0);}"); + + //Ӧȿ˶˶ٿʼDzɼ俪ʼɼźţ + m_Imager->setFileName2Save(imgPath); + m_Imager->setFrameNumber(this->frame_number->text().toInt()); + omc->moveMotorAndRecordHyperSpecImg(500); + } + else + { + omc->moveMotor2StartPosAndStopRecord(); + m_RecordState -= 1; ui.action_start_recording->setText(QString::fromLocal8Bit("ɼ")); ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}"); @@ -586,6 +655,8 @@ void HPPA::onStartRecordStep1() string x_location = removeFileExtension(imgPath) + "x_location.pos"; m_hTimesFile = fopen(x_location.c_str(), "w+"); + m_Imager->setFileName2Save(imgPath); + //ʼѭ m_ForLoopControl->setLoopCount(m_pathPlan->getRecordLineTableWidget()->rowCount());//Ϊѭ߳ѭ emit StartLoopSignal(); @@ -618,6 +689,8 @@ void HPPA::onStartRecordStep1() else if (checkedName == "mAction_RobotArm") { //жǷѡִкRobotArmControl::executeTask޸ʾbug + m_Imager->setFileName2Save(imgPath); + m_Imager->setFrameNumber(this->frame_number->text().toInt()); rac->executeTaskWithHyperImager(); return; @@ -1796,7 +1869,7 @@ void HPPA::onconnect() m_Imager->connect_imager(frame_number->text().toInt()); m_Imager->setFileName2Save(m_FilenameLineEdit->text().toStdString()); - connect(m_Imager, SIGNAL(PlotSignal()), this, SLOT(onPlotHyperspectralImageRgbImage())); + connect(m_Imager, SIGNAL(PlotSignal(int)), this, SLOT(onPlotHyperspectralImageRgbImage(int))); connect(m_Imager, SIGNAL(RecordFinishedSignal_WhenFrameNumberMeet()), this, SLOT(onRecordFinishedSignal_WhenFrameNumberMeet())); connect(m_Imager, SIGNAL(RecordFinishedSignal_WhenFrameNumberNotMeet()), this, SLOT(onRecordFinishedSignal_WhenFrameNumberNotMeet())); connect(m_Imager, SIGNAL(SpectralSignal(int)), this, SLOT(PlotSpectral(int))); @@ -2035,8 +2108,16 @@ void HPPA::recordWhiteFinish() } } -void HPPA::onPlotHyperspectralImageRgbImage() +void HPPA::onPlotHyperspectralImageRgbImage(int number) { + //ʹûе۲ɼʱֹͣɼ˲ֿʼɼᵼϴβɼźŵô˲ۺ + QAction* checked = moveplatformActionGroup->checkedAction(); + QString checkedName = checked->objectName(); + if (number == -1 && checkedName == "mAction_RobotArm") + { + return; + } + //return; //ȡͼؼ QWidget* currentWidget = ui.ImageViewerTabWidget->widget(m_numberOfRecording); @@ -2054,10 +2135,12 @@ void HPPA::onPlotHyperspectralImageRgbImage() //20241225 //rgb - FileOperation* fileOperation = new FileOperation(); - string directory = fileOperation->getDirectoryOfExe(); - string rgbFilePathNoStrech = directory + "\\tmp_image_no_strech2.png";//ͼƬ - cv::imwrite(rgbFilePathNoStrech, rgbImageStretched); + //FileOperation* fileOperation = new FileOperation(); + //string directory = fileOperation->getDirectoryOfExe(); + //string rgbFilePathNoStrech = directory + "\\tmp_image_no_strech.png";//δͼƬ + //string rgbFilePathStrech = directory + "\\tmp_image_strech.png";//ͼƬ + //cv::imwrite(rgbFilePathNoStrech, rgbImage); + //cv::imwrite(rgbFilePathStrech, rgbImageStretched); //Ҫʾͼ--qt汾 //QRect CuttedRect = m_Imager->getRgbImage()->m_QRgbImage->rect();//Ȼȡimagerect @@ -2078,7 +2161,7 @@ void HPPA::PlotSpectral(int state) ImageProcessor imageProcessor; //cv::Mat grayImage(*m_Imager->getRgbImage()->m_matFocusGrayImage, cv::Range::all(), cv::Range::all());//2022.3.18ع - cv::Mat grayImage(*m_Imager->getMatFocusGrayImage(), cv::Range::all(), cv::Range::all()); + //cv::Mat grayImage(*m_Imager->getMatFocusGrayImage(), cv::Range::all(), cv::Range::all()); //currentImageViewer[0]->SetImage(&QPixmap::fromImage(imageProcessor.Mat2QImage(grayImage)));//ͼ currentImageViewer[0]->SetImage(&QPixmap::fromImage(m_Imager->getQImageFocusGrayImage()));//ͼ @@ -2091,7 +2174,8 @@ void HPPA::PlotSpectral(int state) { //mallocڴ÷1Ե //series->append(i, m_Imager->buffer[i + 5 * 900]); - series->append(i, m_Imager->buffer[900 * 150 + i]); + //series->append(i, m_Imager->buffer[900 * 150 + i]); + series->append(i, m_Imager->buffer[1368 * 150 + i]); } QChart *chart = new QChart(); @@ -2156,16 +2240,20 @@ void HPPA::onRecordFinishedSignal_WhenFrameNumberMeet() ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}"); m_RecordState++;//Զֹͣɼ + + QAction* checked = moveplatformActionGroup->checkedAction(); + QString checkedName = checked->objectName(); + if (checkedName == "mAction_1AxisMotor") + { + omc->moveMotor2StartPosAndStopRecord(); + } + } void HPPA::onRecordFinishedSignal_WhenFrameNumberNotMeet() { QAction* checked = moveplatformActionGroup->checkedAction(); - QString checkedName; - if (checked) - { - checkedName = checked->objectName(); - } + QString checkedName = checked->objectName(); if (checkedName == "mAction_RobotArm")//еۻֹͣɼ˲ֿʼɼui.action_start_recordingʾ쳣 { @@ -2177,6 +2265,8 @@ void HPPA::onRecordFinishedSignal_WhenFrameNumberNotMeet() ui.action_start_recording->setText(QString::fromLocal8Bit("ɼ")); ui.mainToolBar->widgetForAction(ui.action_start_recording)->setStyleSheet("QWidget{background-color:rgb(0,255,0);}"); + + m_RecordState++; } ForLoopControl::ForLoopControl() diff --git a/HPPA/HPPA.h b/HPPA/HPPA.h index 92b2715..8cfa613 100644 --- a/HPPA/HPPA.h +++ b/HPPA/HPPA.h @@ -34,6 +34,7 @@ #include "PowerControl.h" #include "PathPlan.h" #include "RobotArmControl.h" +#include "OneMotorControl.h" #include "hppaConfigFile.h" #include "path_tc.h" @@ -244,6 +245,8 @@ private: void createMoveplatformActionGroup(); void selectingMoveplatform(QAction* selectedAction); RobotArmControl* rac; + + OneMotorControl* omc; PathPlan* m_pathPlan; @@ -251,7 +254,7 @@ private: FILE* m_hTimesFile; public Q_SLOTS: - void onPlotHyperspectralImageRgbImage(); + void onPlotHyperspectralImageRgbImage(int number); void PlotSpectral(int state); void onRecordFinishedSignal_WhenFrameNumberMeet(); void onRecordFinishedSignal_WhenFrameNumberNotMeet(); @@ -341,6 +344,7 @@ public Q_SLOTS: void requestFinished(QNetworkReply* reply); void recordFromRobotArm(int fileCounter); + void recordHyperSpecImg(int status); signals: void StartFocusSignal(); diff --git a/HPPA/HPPA.ui b/HPPA/HPPA.ui index 9e1c128..7487b57 100644 --- a/HPPA/HPPA.ui +++ b/HPPA/HPPA.ui @@ -167,7 +167,9 @@ color:white; 扫描平台 + + @@ -1585,6 +1587,14 @@ QDockWidget::title { 机械臂 + + + true + + + 1 轴线性马达 + + diff --git a/HPPA/HPPA.vcxproj b/HPPA/HPPA.vcxproj index be8fbfd..dbf4e7e 100644 --- a/HPPA/HPPA.vcxproj +++ b/HPPA/HPPA.vcxproj @@ -55,16 +55,16 @@ - D:\cpp_library\gdal2.2.3_vs2017\include;C:\Program Files\ResononAPI\include;D:\cpp_library\opencv3.4.11\opencv\build\include;D:\cpp_library\opencv3.4.11\opencv\build\include\opencv;D:\cpp_library\opencv3.4.11\opencv\build\include\opencv2;D:\cpp_project_vs2022\AutoFocus_InspireLinearMotor_DLL\AutoFocus_InspireLinearMotor_DLL\SDKs\PCOMM\Include;D:\cpp_project_vs2022\AutoFocus_InspireLinearMotor_DLL\AutoFocus_InspireLinearMotor_DLL\SDKs\PortControl;D:\cpp_project_vs2022\AutoFocus_InspireLinearMotor_DLL\AutoFocus_InspireLinearMotor_DLL;D:\cpp_project_vs2022\HPPA\HPPA;D:\cpp_library\libconfig-1.7.3\lib;D:\cpp_project_vs2022\HPPA\vincecontrol;D:\cpp_library\vincecontrol_vs2017;C:\XIMEA\API\xiAPI;$(IncludePath) - D:\cpp_library\opencv3.4.11\opencv\build\x64\vc15\lib;D:\cpp_library\gdal2.2.3_vs2017\lib;C:\Program Files\ResononAPI\lib64;D:\cpp_project_vs2022\AutoFocus_InspireLinearMotor_DLL\x64\Debug;D:\cpp_library\libconfig-1.7.3\build\x64;D:\cpp_project_vs2022\HPPA\x64\Debug;C:\XIMEA\API\xiAPI;$(LibraryPath) + D:\cpp_library\gdal2.2.3_vs2017\include;C:\Program Files\ResononAPI\include;D:\cpp_library\opencv3.4.11\opencv\build\include;D:\cpp_library\opencv3.4.11\opencv\build\include\opencv;D:\cpp_library\opencv3.4.11\opencv\build\include\opencv2;D:\cpp_project_vs2022\AutoFocus_InspireLinearMotor_DLL\AutoFocus_InspireLinearMotor_DLL\SDKs\PCOMM\Include;D:\cpp_project_vs2022\AutoFocus_InspireLinearMotor_DLL\AutoFocus_InspireLinearMotor_DLL\SDKs\PortControl;D:\cpp_project_vs2022\AutoFocus_InspireLinearMotor_DLL\AutoFocus_InspireLinearMotor_DLL;D:\cpp_project_vs2022\HPPA\HPPA;D:\cpp_library\libconfig-1.7.3\lib;D:\cpp_project_vs2022\HPPA\vincecontrol;D:\cpp_library\vincecontrol_vs2017;C:\XIMEA\API\xiAPI;D:\cpp_project_vs2022\HPPA\IrisMultiMotorController\IrisMultiMotorController;$(IncludePath) + D:\cpp_library\opencv3.4.11\opencv\build\x64\vc15\lib;D:\cpp_library\gdal2.2.3_vs2017\lib;C:\Program Files\ResononAPI\lib64;D:\cpp_project_vs2022\AutoFocus_InspireLinearMotor_DLL\x64\Debug;D:\cpp_library\libconfig-1.7.3\build\x64;D:\cpp_project_vs2022\HPPA\x64\Debug;C:\XIMEA\API\xiAPI;D:\cpp_project_vs2022\HPPA\IrisMultiMotorController\x64\Debug;$(LibraryPath) - D:\cpp_library\gdal2.2.3_vs2017\include;C:\Program Files\ResononAPI\include;D:\cpp_library\opencv3.4.11\opencv\build\include;D:\cpp_library\opencv3.4.11\opencv\build\include\opencv;D:\cpp_library\opencv3.4.11\opencv\build\include\opencv2;D:\cpp_project_vs2022\AutoFocus_InspireLinearMotor_DLL\AutoFocus_InspireLinearMotor_DLL\SDKs\PCOMM\Include;D:\cpp_project_vs2022\AutoFocus_InspireLinearMotor_DLL\AutoFocus_InspireLinearMotor_DLL\SDKs\PortControl;D:\cpp_project_vs2022\AutoFocus_InspireLinearMotor_DLL\AutoFocus_InspireLinearMotor_DLL;D:\cpp_project_vs2022\HPPA\HPPA;D:\cpp_library\libconfig-1.7.3\lib;D:\cpp_project_vs2022\HPPA\vincecontrol;$(IncludePath) - D:\cpp_library\opencv3.4.11\opencv\build\x64\vc15\lib;D:\cpp_library\vincecontrol_vs2017_release;D:\cpp_library\gdal2.2.3_vs2017\lib;C:\Program Files\ResononAPI\lib64;D:\cpp_project_vs2022\AutoFocus_InspireLinearMotor_DLL\x64\Release;D:\cpp_library\libconfig-1.7.3\build\x64;$(LibraryPath) + D:\cpp_library\gdal2.2.3_vs2017\include;C:\Program Files\ResononAPI\include;D:\cpp_library\opencv3.4.11\opencv\build\include;D:\cpp_library\opencv3.4.11\opencv\build\include\opencv;D:\cpp_library\opencv3.4.11\opencv\build\include\opencv2;D:\cpp_project_vs2022\AutoFocus_InspireLinearMotor_DLL\AutoFocus_InspireLinearMotor_DLL\SDKs\PCOMM\Include;D:\cpp_project_vs2022\AutoFocus_InspireLinearMotor_DLL\AutoFocus_InspireLinearMotor_DLL\SDKs\PortControl;D:\cpp_project_vs2022\AutoFocus_InspireLinearMotor_DLL\AutoFocus_InspireLinearMotor_DLL;D:\cpp_project_vs2022\HPPA\HPPA;D:\cpp_library\libconfig-1.7.3\lib;D:\cpp_project_vs2022\HPPA\vincecontrol;C:\XIMEA\API\xiAPI;D:\cpp_project_vs2022\IrisMultiMotorController\IrisMultiMotorController;$(IncludePath) + D:\cpp_library\opencv3.4.11\opencv\build\x64\vc15\lib;D:\cpp_library\vincecontrol_vs2017_release;D:\cpp_library\gdal2.2.3_vs2017\lib;C:\Program Files\ResononAPI\lib64;D:\cpp_project_vs2022\AutoFocus_InspireLinearMotor_DLL\x64\Release;D:\cpp_library\libconfig-1.7.3\build\x64;D:\cpp_project_vs2022\IrisMultiMotorController\x64\Release;C:\XIMEA\API\xiAPI;$(LibraryPath) - opencv_world3411.lib;opencv_world3411d.lib;gdal_i.lib;resonon-basler.lib;AutoFocus_InspireLinearMotor_DLL.lib;libconfig++d.lib;vincecontrol.lib;resonon-allied.lib;xiapi64.lib;%(AdditionalDependencies) + opencv_world3411.lib;opencv_world3411d.lib;gdal_i.lib;resonon-basler.lib;AutoFocus_InspireLinearMotor_DLL.lib;libconfig++d.lib;vincecontrol.lib;resonon-allied.lib;xiapi64.lib;IrisMultiMotorController.lib;%(AdditionalDependencies) D:\cpp_project_vs2022\HPPA\x64\Debug;%(AdditionalLibraryDirectories) @@ -73,7 +73,7 @@ - opencv_world3411.lib;vincecontrol.lib;gdal_i.lib;resonon-basler.lib;resonon-allied.lib;AutoFocus_InspireLinearMotor_DLL.lib;libconfig++.lib;%(AdditionalDependencies) + opencv_world3411.lib;vincecontrol.lib;gdal_i.lib;resonon-basler.lib;resonon-allied.lib;AutoFocus_InspireLinearMotor_DLL.lib;libconfig++.lib;xiapi64.lib;IrisMultiMotorController.lib;%(AdditionalDependencies) D:\cpp_project_vs2022\HPPA\x64\Release;%(AdditionalLibraryDirectories) @@ -99,7 +99,7 @@ MultiThreadedDLL - Windows + Console false @@ -111,6 +111,7 @@ + @@ -141,6 +142,7 @@ + @@ -162,6 +164,7 @@ + diff --git a/HPPA/HPPA.vcxproj.filters b/HPPA/HPPA.vcxproj.filters index af89eb9..18c1524 100644 --- a/HPPA/HPPA.vcxproj.filters +++ b/HPPA/HPPA.vcxproj.filters @@ -124,6 +124,9 @@ Source Files + + Source Files + @@ -177,6 +180,9 @@ Header Files + + Header Files + @@ -229,6 +235,9 @@ Form Files + + Form Files + diff --git a/HPPA/ImagerOperationBase.cpp b/HPPA/ImagerOperationBase.cpp index f36ced7..2385968 100644 --- a/HPPA/ImagerOperationBase.cpp +++ b/HPPA/ImagerOperationBase.cpp @@ -54,9 +54,9 @@ double ImagerOperationBase::auto_exposure() while (true) { getFrame(buffer); - if (GetMaxValue(buffer, m_FrameSize) >= 4095) + if (GetMaxValue(buffer, m_FrameSize) >= 4094) { - setIntegrationTime(getIntegrationTime() * 0.8); + setIntegrationTime(getIntegrationTime() * 0.95); std::cout << "Զع-----------" << std::endl; } else @@ -270,7 +270,7 @@ void ImagerOperationBase::start_record() //ÿ1sһνͼλ if (m_iFrameCounter % (int)getFramerate() == 0) { - emit PlotSignal(); + emit PlotSignal(m_iFrameCounter); } if (m_iFrameCounter >= m_iFrameNumber) @@ -287,7 +287,7 @@ void ImagerOperationBase::start_record() //һλͼǰҪһ //m_RgbImage - //emit PlotSignal();//1ɼɺһλͼԷɼ֡֡ʵıʱͼȫ2ʹûе۲ɼʱֹͣɼ˲俪ʼɼᵼϴβɼĴźŵõIJۺΪ˼ݣע͵ + emit PlotSignal(-1);//1ɼɺһλͼԷɼ֡֡ʵıʱͼȫ2ʹûе۲ɼʱֹͣɼ˲俪ʼɼᵼϴβɼĴźŵõIJۺΪ˼ݣע͵ if (m_iFrameCounter >= m_iFrameNumber) { diff --git a/HPPA/ImagerOperationBase.h b/HPPA/ImagerOperationBase.h index b96fb46..30d57fb 100644 --- a/HPPA/ImagerOperationBase.h +++ b/HPPA/ImagerOperationBase.h @@ -94,7 +94,7 @@ public slots: virtual void record_dark(); virtual void record_white(); signals: - void PlotSignal();//Ӱź + void PlotSignal(int);//Ӱźţ-1˴βɼһλ void RecordFinishedSignal_WhenFrameNumberMeet();//ɼźţҪɼ֡m_iFrameNumberɼ void RecordFinishedSignal_WhenFrameNumberNotMeet();//ɼźţҪɼ֡m_iFrameNumberûвɼɣ;ֹͣɼ void SpectralSignal(int);//1ڵƹף0ʾɣ diff --git a/HPPA/OneMotorControl.cpp b/HPPA/OneMotorControl.cpp new file mode 100644 index 0000000..5923c55 --- /dev/null +++ b/HPPA/OneMotorControl.cpp @@ -0,0 +1,133 @@ +#include "OneMotorControl.h" + +OneMotorControl::OneMotorControl(QWidget* parent) : QDialog(parent) +{ + ui.setupUi(this); + + connect(this->ui.connect_btn, SIGNAL(pressed()), this, SLOT(onConnectMotor())); + +} + +OneMotorControl::~OneMotorControl() +{ + m_motorThread.quit(); + m_motorThread.wait(); +} + +void OneMotorControl::onConnectMotor() +{ + try + { + FileOperation* fileOperation = new FileOperation(); + string directory = fileOperation->getDirectoryOfExe(); + QString configFilePath = QString::fromStdString(directory) + "\\oneMotorConfigFile.cfg"; + + m_multiAxisController = new IrisMultiMotorController(configFilePath); + } + catch (std::exception const& e) + { + QMessageBox msgBox; + msgBox.setText(QString::fromLocal8Bit("")); + msgBox.exec(); + } + + m_multiAxisController->moveToThread(&m_motorThread); + m_motorThread.start(); + + connect(this->ui.right_btn, SIGNAL(pressed()), this, SLOT(onxMotorRight())); + connect(this->ui.right_btn, SIGNAL(released()), this, SLOT(onxMotorStop())); + connect(this->ui.left_btn, SIGNAL(pressed()), this, SLOT(onxMotorLeft())); + connect(this->ui.left_btn, SIGNAL(released()), this, SLOT(onxMotorStop())); + + connect(this->ui.move2loc_pushButton, SIGNAL(pressed()), this, SLOT(onxMove2Loc())); + + connect(m_multiAxisController, SIGNAL(broadcastLocationSignal(std::vector)), this, SLOT(display_x_loc(std::vector))); + + connect(this, SIGNAL(moveSignal(int, bool, double, int)), m_multiAxisController, SLOT(move(int, bool, double, int))); + connect(this, SIGNAL(move2LocSignal(int, double, double, int)), m_multiAxisController, SLOT(moveTo(int, double, double, int))); + connect(this, SIGNAL(stopSignal(int)), m_multiAxisController, SLOT(stop(int))); + + connect(this->ui.zero_start_btn, SIGNAL(released()), this, SLOT(zeroStart())); + connect(this, SIGNAL(zeroStartSignal(int)), m_multiAxisController, SLOT(zeroStart(int))); + + connect(this->ui.rangeMeasurement_btn, SIGNAL(pressed()), this, SLOT(onx_rangeMeasurement())); + connect(this, SIGNAL(rangeMeasurement(int, double, int)), m_multiAxisController, SLOT(rangeMeasurement(int, double, int))); + + connect(this, SIGNAL(recordHyperSpecImgOneMotorSignal(int, double, double)), m_multiAxisController, SLOT(recordHyperSpecImgOneMotor(int, double, double))); + + connect(m_multiAxisController, SIGNAL(startRecordLineSignal(int)), this, SIGNAL(startRecordLineSignal(int))); + + connect(this, SIGNAL(testConnectivitySignal(int, int)), m_multiAxisController, SLOT(testConnectivity(int, int))); + connect(m_multiAxisController, SIGNAL(broadcastConnectivity(std::vector)), this, SLOT(display_motors_connectivity(std::vector))); + emit testConnectivitySignal(0, 1000); +} + +void OneMotorControl::display_x_loc(std::vector loc) +{ + double tmp = round(loc[0] * 100) / 100; + this->ui.realTimeLoc_lineEdit->setText(QString::number(tmp)); +} + +void OneMotorControl::display_motors_connectivity(std::vector connectivity) +{ + //std::cout << "-----------------------------------"<ui.motor_state_label->setStyleSheet("QLabel{background-color:rgb(0,255,0);}"); + } + else + { + this->ui.motor_state_label->setStyleSheet("QLabel{background-color:rgb(255,0,0);}"); + } +} + +void OneMotorControl::zeroStart() +{ + zeroStartSignal(0); +} + +void OneMotorControl::onx_rangeMeasurement() +{ + double s0 = ui.speed_lineEdit->text().toDouble(); + emit rangeMeasurement(0, s0, 1000); +} + +void OneMotorControl::onxMove2Loc() +{ + double s = ui.speed_lineEdit->text().toDouble(); + double l = ui.move2loc_lineEdit->text().toDouble(); + + emit move2LocSignal(0, l, s, 1000); +} + +void OneMotorControl::onxMotorRight() +{ + double s = ui.speed_lineEdit->text().toDouble(); + + emit moveSignal(0, false, s, 1000); +} + +void OneMotorControl::onxMotorLeft() +{ + double s = ui.speed_lineEdit->text().toDouble(); + + emit moveSignal(0, true, s, 1000); +} + +void OneMotorControl::onxMotorStop() +{ + emit stopSignal(0); +} + +void OneMotorControl::moveMotorAndRecordHyperSpecImg(int updateIntervalMs) +{ + double runSpeed = ui.speed_lineEdit->text().toDouble(); + double returnSpeed = ui.return_speed_lineEdit->text().toDouble(); + + emit recordHyperSpecImgOneMotorSignal(updateIntervalMs, runSpeed, returnSpeed); +} + +void OneMotorControl::moveMotor2StartPosAndStopRecord() +{ + m_multiAxisController->cancelRecord(); +} diff --git a/HPPA/OneMotorControl.h b/HPPA/OneMotorControl.h new file mode 100644 index 0000000..c646e6a --- /dev/null +++ b/HPPA/OneMotorControl.h @@ -0,0 +1,53 @@ +#pragma once +#include +#include + +#include "ui_oneMotorControl.h" + +#include "IrisMultiMotorController.h" +#include "fileOperation.h" + +class OneMotorControl : public QDialog +{ + Q_OBJECT + +public: + OneMotorControl(QWidget* parent = nullptr); + ~OneMotorControl(); + + void moveMotorAndRecordHyperSpecImg(int updateIntervalMs); + void moveMotor2StartPosAndStopRecord(); + + +public Q_SLOTS: + void onConnectMotor(); + + void display_x_loc(std::vector loc); + void display_motors_connectivity(std::vector connectivity); + void onxMove2Loc(); + void zeroStart(); + void onx_rangeMeasurement(); + + void onxMotorRight(); + void onxMotorLeft(); + void onxMotorStop(); + +signals: + void moveSignal(int, bool, double, int); + void move2LocSignal(int, double, double, int); + void move2LocSignal(const std::vector, const std::vector, int); + void stopSignal(int); + + void rangeMeasurement(int, double, int); + void zeroStartSignal(int); + void testConnectivitySignal(int, int); + + void recordHyperSpecImgOneMotorSignal(int updateIntervalMs, double runSpeed, double returnSpeed); + + void startRecordLineSignal(int); +private: + Ui::OneMotorControl_UI ui; + + QThread m_motorThread; + IrisMultiMotorController* m_multiAxisController; +}; diff --git a/HPPA/ResononNirImager.cpp b/HPPA/ResononNirImager.cpp index a302f17..646ced1 100644 --- a/HPPA/ResononNirImager.cpp +++ b/HPPA/ResononNirImager.cpp @@ -353,7 +353,7 @@ void ResononNirImager::start_record() //ÿ1sһνͼλ if (m_iFrameCounter % (int)getFramerate() == 0) { - emit PlotSignal(); + emit PlotSignal(m_iFrameCounter); } if (m_iFrameCounter >= m_iFrameNumber) @@ -371,7 +371,7 @@ void ResononNirImager::start_record() //һλͼǰҪһ //m_RgbImage - emit PlotSignal();//ɼɺһλͼԷɼ֡֡ʵıʱͼȫ + emit PlotSignal(-1);//ɼɺһλͼԷɼ֡֡ʵıʱͼȫ if (m_iFrameCounter >= m_iFrameNumber) { diff --git a/HPPA/about.ui b/HPPA/about.ui index 2526256..0608e09 100644 --- a/HPPA/about.ui +++ b/HPPA/about.ui @@ -70,7 +70,7 @@ - 版本:1.8.8 + 版本:1.9.0 diff --git a/HPPA/fileOperation.h b/HPPA/fileOperation.h index 170524a..784d23d 100644 --- a/HPPA/fileOperation.h +++ b/HPPA/fileOperation.h @@ -17,7 +17,7 @@ public: ~FileOperation(); string getDirectoryOfExe();//getDirectoryOfExe - string getDirectoryFromString(string directory="C:/HPPA_image"); + string getDirectoryFromString(string directory="C:\\HPPA_image"); diff --git a/HPPA/image2display.cpp b/HPPA/image2display.cpp index cc94333..3c5cb0c 100644 --- a/HPPA/image2display.cpp +++ b/HPPA/image2display.cpp @@ -172,7 +172,7 @@ void CImage::FillFocusGrayQImage(unsigned short * datacube) } } - m_qimageFocusGrayImage->save("D:/delete/2222222222/test.bmp"); + //m_qimageFocusGrayImage->save("D:/delete/2222222222/test.bmp"); diff --git a/HPPA/oneMotorControl.ui b/HPPA/oneMotorControl.ui new file mode 100644 index 0000000..44e3fa0 --- /dev/null +++ b/HPPA/oneMotorControl.ui @@ -0,0 +1,285 @@ + + + OneMotorControl_UI + + + + 0 + 0 + 544 + 346 + + + + 一轴马达控制 + + + + + + + + + + 实时位置 + + + Qt::AlignCenter + + + + + + + 运行速度 + + + Qt::AlignCenter + + + + + + + 返回速度 + + + Qt::AlignCenter + + + + + + + + + + Qt::AlignCenter + + + + + + + + + + + 0 + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + background-color: rgb(255, 255, 255); + + + 0.1 + + + Qt::AlignCenter + + + + + + + + 0 + 0 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + background-color: rgb(255, 255, 255); + + + 2 + + + Qt::AlignCenter + + + + + + + 0 + + + Qt::AlignCenter + + + + + + + + + + + + 0 + 0 + + + + 连接 + + + + + + + + 0 + 0 + + + + 归零 + + + + + + + + 0 + 0 + + + + 量程测量 + + + + + + + 移动至 + + + + + + + + + + + Qt::Horizontal + + + + 161 + 20 + + + + + + + + + + + 0 + 0 + + + + ←0 + + + + + + + + 0 + 0 + + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + 马达状态 + + + + + + + + + Qt::Vertical + + + + 20 + 191 + + + + + + + + +