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);}");
+
+ //应该先控制马达运动,当马达运动后,再开始光谱仪采集(发射开始采集信号)
+ 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();//先获取image整个rect
@@ -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)使用机械臂采集时,会在停止采集后的瞬间开始采集,会导致上次采集最后发射的此信号调用的槽函数报错,为了兼容,注释掉
+ emit PlotSignal(-1);//(1)采集完成后进行一次画图,以防采集帧数不是帧率的倍数时,画图不全(2)使用机械臂采集时,会在停止采集后的瞬间开始采集,会导致上次采集最后发射的此信号调用的槽函数报错,为了兼容,注释掉
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
+
+
+
+
+
+
+
+
+