diff --git a/HPPA/CaptureCoordinator.cpp b/HPPA/CaptureCoordinator.cpp index 9ba3778..f1d5510 100644 --- a/HPPA/CaptureCoordinator.cpp +++ b/HPPA/CaptureCoordinator.cpp @@ -467,7 +467,7 @@ OneMotionCaptureCoordinator::~OneMotionCaptureCoordinator() this, &OneMotionCaptureCoordinator::handleMotorStoped); } -void OneMotionCaptureCoordinator::startStepMotion(OneMotionCapturePathLine pathLine) +void OneMotionCaptureCoordinator::startStepMotion(OneMotionCapturePathLine pathLine)//这个函数为啥被调用了2次? { QMutexLocker locker(&m_dataMutex); @@ -498,13 +498,14 @@ void OneMotionCaptureCoordinator::stopStepMotion() m_cameraCtrl->stop_record(); } - //emit stopMotorSignal(0); - move2LocBeforeStart(); + emit stopMotorSignal(0); + m_isHypercamStopRecord = true; } void OneMotionCaptureCoordinator::handleCaptureCompleteWhenFrameNumberMeet() { emit stopMotorSignal(0); + m_isHypercamStopRecord = true; } void OneMotionCaptureCoordinator::getLocBeforeStart() @@ -568,25 +569,32 @@ bool OneMotionCaptureCoordinator::saveToCsv(const QString& filename) void OneMotionCaptureCoordinator::handleMotorStoped(int motorID, double pos) { - if (!m_isRunning) return; - QMutexLocker locker(&m_dataMutex); - // 记录位置信息 - m_pathLine.stopPosition = pos; - m_pathLine.timestamp2 = QDateTime::currentDateTime(); - - //光谱仪停止采集,马达回到初始位置 - emit stopRecordHSISignal(); - if (m_cameraCtrl != nullptr) + if (m_isHypercamStopRecord == true) { - m_cameraCtrl->stop_record(); - } - move2LocBeforeStart(); + m_isHypercamStopRecord = false; - // emit sequenceComplete last: the slot connected to it may delete this object, - // so no member access is allowed after this point. - emit sequenceComplete(0); + // 记录位置信息 + m_pathLine.stopPosition = pos; + m_pathLine.timestamp2 = QDateTime::currentDateTime(); + + //光谱仪停止采集,马达回到初始位置 + emit stopRecordHSISignal(); + if (m_cameraCtrl != nullptr) + { + m_cameraCtrl->stop_record(); + } + move2LocBeforeStart(); + + emit sequenceComplete_cam_stop_before_motorback(0); + } + else + { + // emit sequenceComplete last: the slot connected to it may delete this object, + // so no member access is allowed after this point. + emit sequenceComplete(0); + } } void OneMotionCaptureCoordinator::handleCaptureComplete(double index) diff --git a/HPPA/CaptureCoordinator.h b/HPPA/CaptureCoordinator.h index 6d056f3..faf3dae 100644 --- a/HPPA/CaptureCoordinator.h +++ b/HPPA/CaptureCoordinator.h @@ -144,6 +144,7 @@ public slots: void handleCaptureCompleteWhenFrameNumberMeet(); signals: + void sequenceComplete_cam_stop_before_motorback(int); void sequenceComplete(int); void errorOccurred(const QString& error); void moveTo(int, double, double, int); @@ -165,6 +166,7 @@ private: mutable QMutex m_dataMutex; bool m_isRunning; + bool m_isHypercamStopRecord = false; std::vector m_locBeforeStart; void getLocBeforeStart(); diff --git a/HPPA/HPPA.cpp b/HPPA/HPPA.cpp index b52b3fd..465fa6e 100644 --- a/HPPA/HPPA.cpp +++ b/HPPA/HPPA.cpp @@ -2396,7 +2396,7 @@ void HPPA::disconnectImagerAndCleanup() { m_RecordThread->quit(); m_RecordThread->wait(3000); - delete m_RecordThread; + m_RecordThread->deleteLater(); m_RecordThread = nullptr; } diff --git a/HPPA/ImagerOperationBase.cpp b/HPPA/ImagerOperationBase.cpp index 4d48df9..0de74b1 100644 --- a/HPPA/ImagerOperationBase.cpp +++ b/HPPA/ImagerOperationBase.cpp @@ -221,6 +221,16 @@ void ImagerOperationBase::record_white() void ImagerOperationBase::start_record() { + QObject* obj = sender(); + if (obj) + { + qDebug() << "ImagerOperationBase::start_record, sender name:" << obj->objectName(); + } + else + { + qDebug() << "ImagerOperationBase::start_record, sender is null"; + } + using namespace std; //std::cout << "------------------------------------------------------" << std::endl; diff --git a/HPPA/OneMotorControl.cpp b/HPPA/OneMotorControl.cpp index 7657cf8..fd21d24 100644 --- a/HPPA/OneMotorControl.cpp +++ b/HPPA/OneMotorControl.cpp @@ -223,8 +223,14 @@ void OneMotorControl::record_white() void OneMotorControl::run() { + if (m_coordinator)//当高光谱相机停止采集后,马达还未回到原点时,上次任务的m_coordinator还没有被销毁 + { + onSequenceComplete(0); + } + qRegisterMetaType("OneMotionCapturePathLine"); m_coordinator = new OneMotionCaptureCoordinator(m_multiAxisController, m_Imager); + m_coordinator->setObjectName("testOneMotionCaptureCoordinator"); connect(this, SIGNAL(start(OneMotionCapturePathLine)), m_coordinator, SLOT(startStepMotion(OneMotionCapturePathLine))); connect(this, SIGNAL(stopStepMotionSignal()), m_coordinator, SLOT(stopStepMotion())); diff --git a/HPPA/OneMotorControl.h b/HPPA/OneMotorControl.h index ff3a8ca..b0abc90 100644 --- a/HPPA/OneMotorControl.h +++ b/HPPA/OneMotorControl.h @@ -1,6 +1,7 @@ #pragma once #include #include +#include #include "ui_oneMotorControl.h" @@ -68,7 +69,7 @@ private: QThread m_motorThread; IrisMultiMotorController* m_multiAxisController = nullptr; - OneMotionCaptureCoordinator* m_coordinator = nullptr; + QPointer m_coordinator; ImagerOperationBase* m_Imager; DarkAndWhiteCaptureCoordinator* m_darkCaptureCoordinator = nullptr; diff --git a/HPPA/about.ui b/HPPA/about.ui index 94009e6..e56d2ec 100644 --- a/HPPA/about.ui +++ b/HPPA/about.ui @@ -288,7 +288,7 @@ QPushButton:pressed } - 版本:3.1.1 + 版本:3.1.2