完成新的二轴采集:二轴采集逻辑控制器

This commit is contained in:
tangchao0503
2025-09-12 16:21:42 +08:00
parent ac241f45cc
commit 496f61c0e1
11 changed files with 2469 additions and 30 deletions

107
HPPA/CaptureCoordinator.h Normal file
View File

@ -0,0 +1,107 @@
#pragma once
#include <QDateTime>
#include <QObject>
#include <QMutex>
#include <QMetaType>
#include "ImagerOperationBase.h"
#include "IrisMultiMotorController.h"
struct PathLine
{
double targetYPosition;
double actualYPosition;
double speedTargetYPosition;
double targetXMinPosition;
double actualXMinPosition;
double speedTargetXMinPosition;
double targetXMaxPosition;
double actualXMaxPosition;
double speedTargetXMaxPosition;
QDateTime timestamp1;//开始航线
QDateTime timestamp2;//开始采集高光谱
QDateTime timestamp3;//结束采集高光谱
PathLine(double targetYPosition_=0, double targetXMinPosition_ = 0, double targetXMaxPosition_ = 0)
: targetYPosition(targetYPosition_), actualYPosition(0), speedTargetYPosition(0),
targetXMinPosition(targetXMinPosition_), actualXMinPosition(0), speedTargetXMinPosition(0),
targetXMaxPosition(targetXMaxPosition_), actualXMaxPosition(0), speedTargetXMaxPosition(0),
timestamp1(QDateTime::currentDateTime()), timestamp2(QDateTime::currentDateTime()), timestamp3(QDateTime::currentDateTime()) {}
};
Q_DECLARE_METATYPE(PathLine);
//Q_DECLARE_METATYPE(QVector<PathLine>);
class TwoMotionCaptureCoordinator : public QObject
{
Q_OBJECT
public:
TwoMotionCaptureCoordinator(IrisMultiMotorController* motorCtrl,
ImagerOperationBase* cameraCtrl,
QObject* parent = nullptr);
TwoMotionCaptureCoordinator(IrisMultiMotorController* motorCtrl,
QObject* parent = nullptr);
~TwoMotionCaptureCoordinator();
QVector<PathLine> pathLines() const;
signals:
void sequenceComplete(int);//0所有采集线正常运行完成1用户主动取消采集
void startRecordLineNumSignal(int lineNum);
void finishRecordLineNumSignal(int lineNum);
void startRecordHSISignal(int lineNum);
void stopRecordHSISignal(int lineNum);
void errorOccurred(const QString& error);
void moveTo(int, double, double, int);
void moveTo(const std::vector<double>, const std::vector<double>, int);
void stopMotorSignal(int axis);
void recordState(bool state);
private slots:
void start(QVector<PathLine> pathLines);
void stop();
void getRecordState();
void handlePositionReached(int motorID, double pos);
void handleCaptureCompleteWhenFrameNumberMeet();
void handleError(const QString& error);
void move2LocBeforeStart();
private:
void processNextPathLine();
void startRecordHsi();
void getLocBeforeStart();
double getThre(double targetLoc, double actualLoc);
double getTimeDiffMinutes(QDateTime startTime, QDateTime endTime);
bool savePathLinesToCsv(QString filename= QString());
IrisMultiMotorController* m_motorCtrl;
ImagerOperationBase* m_cameraCtrl=nullptr;
QVector<PathLine> m_pathLines;
mutable QMutex m_dataMutex;
bool m_isRunning;
bool m_isMoving2YTargeLoc;
bool m_isMoving2XMin;
bool m_isMoving2XMax;
int m_retryLimit = 3;
int m_retryTimesMoving2YTargeLoc;
int m_retryTimesMoving2XMin;
int m_retryTimesMoving2XMax;
bool m_isImagerFrameNumberMeet;//光谱仪帧数限制到了,主动停止采集
std::vector<double> m_locBeforeStart;
bool m_isMoving2XStartLoc;
bool m_isMoving2YStartLoc;
int m_numCurrentPathLine;
};