采集高光谱扫描时,支持反向运动
This commit is contained in:
tangchao0503
2026-09-16 17:50:23 +08:00
parent 08dee5bbec
commit b8febdf8ff
5 changed files with 279 additions and 198 deletions

View File

@ -175,6 +175,16 @@ void AppSettings::setReturnSpeed(double value)
m_settings.setValue("OneMotorControl/ReturnSpeed", value);
}
double AppSettings::manualMovementSpeed() const
{
return m_settings.value("OneMotorControl/ManualMovementSpeed", 1).toDouble();
}
void AppSettings::setManualMovementSpeed(double value)
{
m_settings.setValue("OneMotorControl/ManualMovementSpeed", value);
}
int AppSettings::gonggaShanRecordPort() const
{
return m_settings.value("GonggaShanRecordCtl/Port", kDefaultGonggaShanRecordPort).toInt();

View File

@ -56,6 +56,10 @@ public:
double returnSpeed() const;
void setReturnSpeed(double value);
// 手动移动速度
double manualMovementSpeed() const;
void setManualMovementSpeed(double value);
// 贡嘎山记录端口
int gonggaShanRecordPort() const;
void setGonggaShanRecordPort(int value);

View File

@ -17,18 +17,18 @@ OneMotorControl::OneMotorControl(QWidget* parent) : QDialog(parent)
connect(this->ui.rangeMeasurement_btn, SIGNAL(pressed()), this, SLOT(onx_rangeMeasurement()));
// 从 AppSettings 读取速度参数
AppSettings& settings = AppSettings::instance();
ui.speed_lineEdit->setText(QString::number(settings.scanSpeed()));
ui.return_speed_lineEdit->setText(QString::number(settings.returnSpeed()));
// 连接信号,当控件数值变化时保存到 AppSettings
connect(ui.speed_lineEdit, &QLineEdit::editingFinished, [this]() {
AppSettings::instance().setScanSpeed(ui.speed_lineEdit->text().toDouble());
connect(ui.scanSpeed_lineEdit, &QLineEdit::editingFinished, [this]() {
AppSettings::instance().setScanSpeed(ui.scanSpeed_lineEdit->text().toDouble());
});
connect(ui.return_speed_lineEdit, &QLineEdit::editingFinished, [this]() {
AppSettings::instance().setReturnSpeed(ui.return_speed_lineEdit->text().toDouble());
});
connect(ui.manualMovementSpeed_lineEdit, &QLineEdit::editingFinished, [this]() {
AppSettings::instance().setManualMovementSpeed(ui.manualMovementSpeed_lineEdit->text().toDouble());
});
loadSettings();
}
OneMotorControl::~OneMotorControl()
@ -37,6 +37,13 @@ OneMotorControl::~OneMotorControl()
m_motorThread.wait();
}
void OneMotorControl::loadSettings()
{
ui.scanSpeed_lineEdit->setText(QString::number(AppSettings::instance().scanSpeed()));
ui.return_speed_lineEdit->setText(QString::number(AppSettings::instance().returnSpeed()));
ui.manualMovementSpeed_lineEdit->setText(QString::number(AppSettings::instance().manualMovementSpeed()));
}
void OneMotorControl::onConnectMotor()
{
connectMotor(true);
@ -44,7 +51,7 @@ void OneMotorControl::onConnectMotor()
void OneMotorControl::setScanSpeed(double speed)
{
ui.speed_lineEdit->setText(QString::number(speed));
ui.scanSpeed_lineEdit->setText(QString::number(speed));
}
void OneMotorControl::connectMotor(bool isNotification)
@ -116,7 +123,7 @@ void OneMotorControl::connectMotor(bool isNotification)
void OneMotorControl::display_x_loc(std::vector<double> loc)
{
double tmp = round(loc[0] * 100) / 100;
this->ui.realTimeLoc_lineEdit->setText(QString::number(tmp));
this->ui.realTimeLoc_label->setText(QString::number(tmp));
emit broadcastLocationSignal(loc);
}
@ -166,13 +173,13 @@ void OneMotorControl::zeroStart()
void OneMotorControl::onx_rangeMeasurement()
{
double s0 = ui.speed_lineEdit->text().toDouble();
double s0 = ui.manualMovementSpeed_lineEdit->text().toDouble();
emit rangeMeasurement(0, s0, 1000);
}
void OneMotorControl::onxMove2Loc()
{
double s = ui.speed_lineEdit->text().toDouble();
double s = ui.manualMovementSpeed_lineEdit->text().toDouble();
double l = ui.move2loc_lineEdit->text().toDouble();
emit move2LocSignal(0, l, s, 1000);
@ -180,14 +187,14 @@ void OneMotorControl::onxMove2Loc()
void OneMotorControl::onxMotorRight()
{
double s = ui.speed_lineEdit->text().toDouble();
double s = ui.manualMovementSpeed_lineEdit->text().toDouble();
emit moveSignal(0, abs(s), 1000);
}
void OneMotorControl::onxMotorLeft()
{
double s = ui.speed_lineEdit->text().toDouble();
double s = ui.manualMovementSpeed_lineEdit->text().toDouble();
emit moveSignal(0, abs(s)*-1, 1000);
}
@ -204,7 +211,7 @@ void OneMotorControl::setImager(ImagerOperationBase* imager)
void OneMotorControl::record_dark()
{
double s = ui.speed_lineEdit->text().toDouble();
double s = ui.scanSpeed_lineEdit->text().toDouble();
if (m_darkCaptureCoordinator == nullptr)
{
@ -216,7 +223,7 @@ void OneMotorControl::record_dark()
void OneMotorControl::record_white()
{
double s = ui.speed_lineEdit->text().toDouble();
double s = ui.scanSpeed_lineEdit->text().toDouble();
if (m_whiteCaptureCoordinator == nullptr)
{
@ -246,7 +253,7 @@ void OneMotorControl::run()
this, &OneMotorControl::onSequenceComplete_motorBack2Origin);
OneMotionCapturePathLine tmp;
tmp.speedRecord = ui.speed_lineEdit->text().toDouble();
tmp.speedRecord = ui.scanSpeed_lineEdit->text().toDouble();
tmp.speedBack = ui.return_speed_lineEdit->text().toDouble();
emit start(tmp);
@ -275,7 +282,7 @@ void OneMotorControl::multiPosHyperAutoExposure()
connect(m_coordinator_gonggashan_autoexpose, &OneMotorMultiPosCoordinator::sequenceComplete, this, &OneMotorControl::onSequenceComplete_gonggashan_autoexpose);
connect(m_coordinator_gonggashan_autoexpose, &OneMotorMultiPosCoordinator::hyperAutoExposureDoneSignal, this, &OneMotorControl::hyperAutoExposureDoneSignal_gonggashan);
m_coordinator_gonggashan_autoexpose->startStepMotion(ui.speed_lineEdit->text().toDouble(), locations);
m_coordinator_gonggashan_autoexpose->startStepMotion(ui.manualMovementSpeed_lineEdit->text().toDouble(), locations);
}
void OneMotorControl::onSequenceComplete_gonggashan_autoexpose(int state)
@ -365,18 +372,18 @@ OneMotorControl_LiftingPlatform::OneMotorControl_LiftingPlatform(QWidget* parent
connect(this->ui.rangeMeasurement_btn, SIGNAL(pressed()), this, SLOT(onx_rangeMeasurement()));
// 从 AppSettings 读取速度参数
AppSettings& settings = AppSettings::instance();
ui.speed_lineEdit->setText(QString::number(settings.scanSpeed()));
ui.return_speed_lineEdit->setText(QString::number(settings.returnSpeed()));
// 连接信号,当控件数值变化时保存到 AppSettings
connect(ui.speed_lineEdit, &QLineEdit::editingFinished, [this]() {
AppSettings::instance().setScanSpeed(ui.speed_lineEdit->text().toDouble());
connect(ui.scanSpeed_lineEdit, &QLineEdit::editingFinished, [this]() {
AppSettings::instance().setScanSpeed(ui.scanSpeed_lineEdit->text().toDouble());
});
connect(ui.return_speed_lineEdit, &QLineEdit::editingFinished, [this]() {
AppSettings::instance().setReturnSpeed(ui.return_speed_lineEdit->text().toDouble());
});
connect(ui.manualMovementSpeed_lineEdit, &QLineEdit::editingFinished, [this]() {
AppSettings::instance().setManualMovementSpeed(ui.manualMovementSpeed_lineEdit->text().toDouble());
});
loadSettings();
}
OneMotorControl_LiftingPlatform::~OneMotorControl_LiftingPlatform()
@ -385,6 +392,13 @@ OneMotorControl_LiftingPlatform::~OneMotorControl_LiftingPlatform()
m_motorThread.wait();
}
void OneMotorControl_LiftingPlatform::loadSettings()
{
ui.scanSpeed_lineEdit->setText(QString::number(AppSettings::instance().scanSpeed()));
ui.return_speed_lineEdit->setText(QString::number(AppSettings::instance().returnSpeed()));
ui.manualMovementSpeed_lineEdit->setText(QString::number(AppSettings::instance().manualMovementSpeed()));
}
void OneMotorControl_LiftingPlatform::onConnectMotor()
{
connectMotor(true);
@ -459,7 +473,7 @@ void OneMotorControl_LiftingPlatform::connectMotor(bool isNotification)
void OneMotorControl_LiftingPlatform::display_x_loc(std::vector<double> loc)
{
double tmp = round(loc[0] * 100) / 100;
this->ui.realTimeLoc_lineEdit->setText(QString::number(tmp));
this->ui.realTimeLoc_label->setText(QString::number(tmp));
emit broadcastLocationSignal(loc);
}
@ -509,13 +523,13 @@ void OneMotorControl_LiftingPlatform::zeroStart()
void OneMotorControl_LiftingPlatform::onx_rangeMeasurement()
{
double s0 = ui.speed_lineEdit->text().toDouble();
double s0 = ui.manualMovementSpeed_lineEdit->text().toDouble();
emit rangeMeasurement(0, s0, 1000);
}
void OneMotorControl_LiftingPlatform::onxMove2Loc()
{
double s = ui.speed_lineEdit->text().toDouble();
double s = ui.manualMovementSpeed_lineEdit->text().toDouble();
double l = ui.move2loc_lineEdit->text().toDouble();
emit move2LocSignal(0, l, s, 1000);
@ -523,14 +537,14 @@ void OneMotorControl_LiftingPlatform::onxMove2Loc()
void OneMotorControl_LiftingPlatform::onxMotorRight()
{
double s = ui.speed_lineEdit->text().toDouble();
double s = ui.manualMovementSpeed_lineEdit->text().toDouble();
emit moveSignal(0, abs(s), 1000);
}
void OneMotorControl_LiftingPlatform::onxMotorLeft()
{
double s = ui.speed_lineEdit->text().toDouble();
double s = ui.manualMovementSpeed_lineEdit->text().toDouble();
emit moveSignal(0, abs(s)*-1, 1000);
}
@ -555,7 +569,7 @@ void OneMotorControl_LiftingPlatform::run()
return;
}
m_coordinator->moveToTarget(targetDepth, ui.speed_lineEdit->text().toDouble());
m_coordinator->moveToTarget(targetDepth, ui.manualMovementSpeed_lineEdit->text().toDouble());
}
void OneMotorControl_LiftingPlatform::stop()

View File

@ -92,6 +92,8 @@ private:
bool m_xMotorConnectionStatus = false;
QPointer<OneMotorMultiPosCoordinator> m_coordinator_gonggashan_autoexpose;
void loadSettings();
};
class OneMotorControl_LiftingPlatform : public QDialog, public MotorWindowBase
@ -152,4 +154,5 @@ private:
QPointer<OneMotionCoordinator> m_coordinator;
bool m_xMotorConnectionStatus = false;
void loadSettings();
};

View File

@ -56,7 +56,11 @@ QLabel
color: #ACCDFF;
background-color: transparent;
}
QRadioButton
{
color: #ACCDFF;
background-color: transparent;
}
@ -80,7 +84,7 @@ QLineEdit:focus {
background-color: #23345c;
}</string>
</property>
<layout class="QGridLayout" name="gridLayout_2" rowstretch="1,3,1" columnstretch="1,3,1">
<layout class="QGridLayout" name="gridLayout_4">
<item row="0" column="1">
<spacer name="verticalSpacer">
<property name="orientation">
@ -112,75 +116,8 @@ QLineEdit:focus {
<property name="spacing">
<number>10</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>实时位置</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLineEdit" name="realTimeLoc_lineEdit">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>88</width>
<height>30</height>
</size>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QPushButton" name="connect_btn">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>连接</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_6">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>运行速度</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="speed_lineEdit">
<widget class="QLineEdit" name="scanSpeed_lineEdit">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
@ -210,7 +147,33 @@ QLineEdit:focus {
</property>
</widget>
</item>
<item row="1" column="2">
<item row="4" column="2">
<widget class="QPushButton" name="move2loc_pushButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>移动至</string>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QPushButton" name="rangeMeasurement_btn">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>量程测量</string>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QPushButton" name="zero_start_btn">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
@ -223,8 +186,56 @@ QLineEdit:focus {
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<item row="5" column="1">
<widget class="QPushButton" name="left_btn">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>←0</string>
</property>
</widget>
</item>
<item row="5" column="2">
<widget class="QPushButton" name="right_btn">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>→</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLineEdit" name="move2loc_lineEdit">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>88</width>
<height>30</height>
</size>
</property>
<property name="text">
<string>0</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_7">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Expanding">
<horstretch>0</horstretch>
@ -232,7 +243,99 @@ QLineEdit:focus {
</sizepolicy>
</property>
<property name="text">
<string>返回速度</string>
<string>扫描速度</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QPushButton" name="connect_btn">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>连接</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QWidget" name="widget" native="true">
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<widget class="QLabel" name="label_4">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>实时位置:</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="realTimeLoc_label">
<property name="text">
<string>null</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="manualMovementSpeed_lineEdit">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>88</width>
<height>30</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>0.1</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_6">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>手动速度</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
@ -261,113 +364,60 @@ QLineEdit:focus {
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QPushButton" name="rangeMeasurement_btn">
<item row="2" column="0">
<widget class="QLabel" name="label_3">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<sizepolicy hsizetype="Fixed" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>量程测量</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="move2loc_lineEdit">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>88</width>
<height>30</height>
</size>
</property>
<property name="text">
<string>0</string>
<string>返回速度</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="3" column="2">
<widget class="QPushButton" name="move2loc_pushButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>移动至</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QPushButton" name="left_btn">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>←0</string>
</property>
</widget>
</item>
<item row="4" column="2">
<widget class="QPushButton" name="right_btn">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>→</string>
</property>
</widget>
</item>
<item row="5" column="2">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>状态</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="motor_state_label">
<property name="maximumSize">
<size>
<width>8</width>
<height>8</height>
</size>
</property>
<property name="sizeIncrement">
<size>
<width>8</width>
<height>8</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: red;
<item row="6" column="2">
<widget class="QWidget" name="widget_2" native="true">
<layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0">
<widget class="QRadioButton" name="reverseMove_radioButton">
<property name="styleSheet">
<string notr="true"/>
</property>
<property name="text">
<string>反转</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="motor_state_label">
<property name="maximumSize">
<size>
<width>8</width>
<height>8</height>
</size>
</property>
<property name="sizeIncrement">
<size>
<width>8</width>
<height>8</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">background-color: red;
border-radius: 4px;</string>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</item>