From d1c95336e190d5a2eaa077460854b8fed8d64df2 Mon Sep 17 00:00:00 2001 From: yuntang <123@qq.com> Date: Thu, 13 Mar 2025 17:27:31 +0800 Subject: [PATCH] 2025-03-13T17:27:30 --- src/global.cpp | 13 +++++- src/global.h | 19 ++++++++- src/images.qrc | 3 ++ src/images/connect.png | Bin 0 -> 10550 bytes src/images/new.png | Bin 0 -> 3557 bytes src/images/real_time_widget.png | Bin 0 -> 4133 bytes src/images/stop.png | Bin 5410 -> 7584 bytes src/mainwindow.cpp | 63 +++++++++++++++++++++++++--- src/mainwindow.h | 11 ++++- src/mainwindow.ui | 69 +++++++++++++++++++++++++------ src/serialport/serialport.cpp | 32 ++++++++++---- src/serialport/serialport.h | 2 +- src/ui/centralwidget.cpp | 4 +- src/ui/experimentsettingform.cpp | 15 +++---- src/ui/experimentsettingform.h | 3 ++ 15 files changed, 194 insertions(+), 40 deletions(-) create mode 100644 src/images/connect.png create mode 100644 src/images/new.png create mode 100644 src/images/real_time_widget.png diff --git a/src/global.cpp b/src/global.cpp index 4a71af9..df38175 100644 --- a/src/global.cpp +++ b/src/global.cpp @@ -2,7 +2,8 @@ Global::Global() { - _mode = Global::Mode::ANALYZE; + _mode = Global::Mode::Analysis; + _deviceConnectStatus = Global::DeviceConnectionStatus::Disconnected; } Global *Global::instance() @@ -18,3 +19,13 @@ void Global::setMode(const Global::Mode mode) emit sigModeModify(mode); } } + +#if 0 +void Global::setDeviceConnectionStatus(const Global::DeviceConnectionStatus status) +{ + if(status != _deviceConnectStatus){ + _deviceConnectStatus = status; + emit sigDeviceConnnectionStatusModify(status); + } +} +#endif diff --git a/src/global.h b/src/global.h index 266cda4..0742396 100644 --- a/src/global.h +++ b/src/global.h @@ -11,16 +11,31 @@ public: static Global* instance(); enum Mode{ - EXPERIMENT, - ANALYZE + Analysis, + ConnectedToDev, + ExperimentStart }; + void setMode(const Mode); + Mode getMode(){return _mode;} + + enum DeviceConnectionStatus{ + Disconnected, + Connected + }; + +#if 0 + void setDeviceConnectionStatus(const DeviceConnectionStatus); + DeviceConnectionStatus getDeviceConnectionStatus(){return _deviceConnectStatus;} +#endif signals: void sigModeModify(const Mode); + void sigDeviceConnnectionStatusModify(const DeviceConnectionStatus); public slots: private: Mode _mode; + DeviceConnectionStatus _deviceConnectStatus; }; #endif // GLOBAL_H diff --git a/src/images.qrc b/src/images.qrc index a413b45..f739f40 100644 --- a/src/images.qrc +++ b/src/images.qrc @@ -2,5 +2,8 @@ images/start.png images/stop.png + images/connect.png + images/new.png + images/real_time_widget.png diff --git a/src/images/connect.png b/src/images/connect.png new file mode 100644 index 0000000000000000000000000000000000000000..bc64b1902b3994e2cf58130544f2d64e9866460d GIT binary patch literal 10550 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 Tl~(hWhXlw;DMP9xjD!9M{}x{% literal 0 HcmV?d00001 diff --git a/src/images/new.png b/src/images/new.png new file mode 100644 index 0000000000000000000000000000000000000000..24a432e5205f45df1103db391bf5cd73822c7c2b GIT binary patch literal 3557 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 literal 5410 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 diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 99172f4..a63d0df 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1,7 +1,10 @@ +#include + #include "mainwindow.h" #include "ui_mainwindow.h" #include "global.h" #include "serialport.h" +#include "dataparser.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) @@ -9,9 +12,12 @@ MainWindow::MainWindow(QWidget *parent) , _centralWidget(new CentralWidget) ,_leftWidget(new LeftWidget) ,_expertmentSettingForm(new ExperimentSettingForm) + ,_realTimeDataForm(new RealTimeDataForm) { ui->setupUi(this); + setActionEnable(false); + this->setToolTip("....."); // resize(2222,1111); @@ -29,9 +35,6 @@ MainWindow::~MainWindow() void MainWindow::connections() { //ui -// connect(ui->actionshitu,&QAction::triggered, -// [&]{_expertmentSettingForm->show();}); - connect(_expertmentSettingForm,&ExperimentSettingForm::sigConnectToDevice, SerialPort::instance(),&SerialPort::slotConnectToDevice); //dynamic data @@ -42,8 +45,56 @@ void MainWindow::connections() _centralWidget,&CentralWidget::slotModeModify); } - -void MainWindow::on_actionstart_triggered() +void MainWindow::setActionEnable(const bool flag) { - + if(flag){ + ui->actionNew->setEnabled(true); + ui->actionStart->setEnabled(true); + ui->actionStop->setEnabled(true); + ui->actionRealTimeWidget->setEnabled(true); + }else{ + ui->actionNew->setEnabled(false); + ui->actionStart->setEnabled(false); + ui->actionStop->setEnabled(false); + ui->actionRealTimeWidget->setEnabled(false); + } +} + +void MainWindow::on_actionStop_triggered() +{ + QByteArray ba = DataParser::setDeviceStartStop(DeviceStartMode::Stop); + SerialPort::instance()->slotSendData(ba); + SerialPort::instance()->slotCloseSp(); +} + +void MainWindow::on_actionNew_triggered() +{ + _expertmentSettingForm->show(); +} + +void MainWindow::on_actionStart_triggered() +{ + QByteArray ba = DataParser::setDeviceStartStop(DeviceStartMode::Start); + SerialPort::instance()->slotSendData(ba); +} + +void MainWindow::on_actionReadOnly_triggered() +{ + Global::instance()->setMode(Global::Mode::ExperimentStart); + SerialPort::instance()->openSp(); +} + +void MainWindow::on_actionRealTimeWidget_triggered() +{ + _realTimeDataForm->show(); +} + +void MainWindow::on_actionConnectToDev_triggered() +{ + if(SerialPort::instance()->openSp()){ + setActionEnable(true); + Global::instance()->setMode(Global::Mode::ConnectedToDev); + }else{ + QMessageBox::warning(this, "warnning", "Serial Port open failed."); + } } diff --git a/src/mainwindow.h b/src/mainwindow.h index a3705f5..b704a15 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -6,6 +6,7 @@ #include "centralwidget.h" #include "leftwidget.h" #include "experimentsettingform.h" +#include "realtimedataform.h" QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } @@ -19,14 +20,20 @@ public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: - void on_actionstart_triggered(); - + void on_actionConnectToDev_triggered(); + void on_actionNew_triggered(); + void on_actionStart_triggered(); + void on_actionStop_triggered(); + void on_actionReadOnly_triggered(); + void on_actionRealTimeWidget_triggered(); private: void connections(); + void setActionEnable(const bool); private: Ui::MainWindow *ui; CentralWidget *_centralWidget; LeftWidget*_leftWidget; ExperimentSettingForm *_expertmentSettingForm; + RealTimeDataForm* _realTimeDataForm; }; #endif // MAINWINDOW_H diff --git a/src/mainwindow.ui b/src/mainwindow.ui index 259c828..ab0fb22 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -27,13 +27,13 @@ 文件 - - + 视图 + @@ -73,8 +73,14 @@ toolBar + + + 22 + 22 + + - Qt::ToolButtonIconOnly + Qt::ToolButtonTextUnderIcon TopToolBarArea @@ -82,25 +88,64 @@ false - + + + + + + - + + + + :/images/new.png:/images/new.png + 新建 - - - 22 - - - + :/images/start.png:/images/start.png - start + 开始 + + + true + + + + + 只读数据 + + + + + + :/images/stop.png:/images/stop.png + + + 停止 + + + + + + :/images/real_time_widget.png:/images/real_time_widget.png + + + 实时窗口 + + + + + + :/images/connect.png:/images/connect.png + + + 连接设备 diff --git a/src/serialport/serialport.cpp b/src/serialport/serialport.cpp index 03f4f6f..bfaf193 100644 --- a/src/serialport/serialport.cpp +++ b/src/serialport/serialport.cpp @@ -9,6 +9,7 @@ #include "protocol.h" #include "defines.h" #include "dataparser.h" +#include "global.h" using namespace std; @@ -94,7 +95,7 @@ void SerialPort::slotReadData() { QByteArray ba = _sp->readAll(); -#if 1 +#if 0 // 将 QByteArray 转换为十六进制字符串 QString hexData = ba.toHex(' '); // ' ' 作为分隔符,可选参数 qDebug() << "receive info (hex):" << hexData; @@ -120,7 +121,9 @@ void SerialPort::slotReadData() QString formattedColdTemp = QString::number(cd.cold_temp, 'f', 3); qDebug() << "cold temp:" << formattedColdTemp; - emit sigSendCommonData(cd); + if(Global::Mode::ExperimentStart == Global::instance()->getMode()){ + emit sigSendCommonData(cd); + } #if 0 CommonData *serialPortData = @@ -137,8 +140,12 @@ void SerialPort::slotReadData() #endif } -void SerialPort::openSp() +bool SerialPort::openSp() { + if(_sp != nullptr && _sp->isOpen()){ + return true; + } + foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) { u16 pid = info.productIdentifier(); @@ -154,7 +161,7 @@ void SerialPort::openSp() if (_sp == nullptr) { qDebug() << "Device not found."; - return; + return false; } // 设置波特率和读写方向 @@ -173,7 +180,7 @@ void SerialPort::openSp() if (!_sp->open(QIODevice::ReadWrite)) { qDebug() << "open failed." << _sp->error(); - exit(0); + return false; } else { @@ -181,8 +188,10 @@ void SerialPort::openSp() // 设置 DTR 信号为就绪状态(true 表示低电平) _sp->setDataTerminalReady(true); } + return true; } + void SerialPort::sendCmd(const SerialPort::E_CMD_TYPE e) { #if 1 @@ -335,7 +344,14 @@ void SerialPort::slotSendData(const QByteArray &ba) { qDebug() << "slotSendData:" << ba.size(); - _sp->write(ba); + if(_sp != nullptr && _sp->isOpen()){ + _sp->write(ba); + }else{ + qDebug()<<"sp not open."; + // qErrnoWarning("sp not open."); + return; + } + #if 0 // 将 QByteArray 转换为十六进制字符串 QString hexData = ba.toHex(' '); // ' ' 作为分隔符,可选参数 @@ -362,5 +378,7 @@ void SerialPort::slotSendData(const QByteArray &ba) void SerialPort::slotCloseSp() { - _sp->close(); + if(_sp != nullptr && _sp->isOpen()){ + _sp->close(); + } } diff --git a/src/serialport/serialport.h b/src/serialport/serialport.h index 0f8434e..f864775 100644 --- a/src/serialport/serialport.h +++ b/src/serialport/serialport.h @@ -22,6 +22,7 @@ public: void sendCmd(const E_CMD_TYPE e); static void parserTest(); + bool openSp(); public slots: void slotConnectToDevice(const QByteArray&); void slotSendData(const QByteArray&); @@ -34,7 +35,6 @@ protected: private slots: void slotReadData(); private: - void openSp(); void to_hex(char* in_char, int char_length, char* out_char); void displayPortInfo(); private: diff --git a/src/ui/centralwidget.cpp b/src/ui/centralwidget.cpp index 21aaa00..5a3d3a7 100644 --- a/src/ui/centralwidget.cpp +++ b/src/ui/centralwidget.cpp @@ -36,7 +36,7 @@ CentralWidget::CentralWidget(QWidget *parent) void CentralWidget::slotModeModify(const Global::Mode mode) { - if (Global::Mode::EXPERIMENT == mode) + if (Global::Mode::ExperimentStart == mode) { // 创建画布,设置画布上的点数据 _customPlot->addGraph(); @@ -48,7 +48,7 @@ void CentralWidget::slotModeModify(const Global::Mode mode) _customPlot->xAxis->setRange(0, 400); _customPlot->yAxis->setRange(-20, 20); } - else if (Global::Mode::ANALYZE == mode) + else if (Global::Mode::Analysis == mode) { } } diff --git a/src/ui/experimentsettingform.cpp b/src/ui/experimentsettingform.cpp index ffdab01..064df31 100644 --- a/src/ui/experimentsettingform.cpp +++ b/src/ui/experimentsettingform.cpp @@ -21,12 +21,10 @@ ExperimentSettingForm::ExperimentSettingForm(QWidget *parent) : connect(ui->checkBox_phase_4,&QCheckBox::clicked, this,&ExperimentSettingForm::slotPhase4StateChanged); - connect(ui->pushButton_connect_to_device,&QPushButton::clicked, - this,&ExperimentSettingForm::slotConnectToDevice); +// connect(ui->pushButton_connect_to_device,&QPushButton::clicked, +// this,&ExperimentSettingForm::slotConnectToDevice); connect(ui->pushButton_cancel,&QPushButton::clicked, this,&ExperimentSettingForm::slotCancel); - - } ExperimentSettingForm::~ExperimentSettingForm() @@ -170,7 +168,7 @@ void ExperimentSettingForm::slotConnectToDevice() qDebug()<<"ba size:"<setMode(Global::Mode::EXPERIMENT); + Global::instance()->setMode(Global::Mode::ConnectedToDev); #if 0 QByteArray startBa = DataParser::setDeviceStartStop(DeviceStartMode::Start); @@ -182,7 +180,7 @@ void ExperimentSettingForm::slotConnectToDevice() void ExperimentSettingForm::slotCancel() { - + hide(); } void ExperimentSettingForm::slotPhaseCheck() { @@ -225,4 +223,7 @@ void ExperimentSettingForm::slotPhaseCheck() } } - +void ExperimentSettingForm::on_pushButton_connect_to_device_clicked() +{ + slotConnectToDevice(); +} diff --git a/src/ui/experimentsettingform.h b/src/ui/experimentsettingform.h index 6ee654b..34d2c8b 100644 --- a/src/ui/experimentsettingform.h +++ b/src/ui/experimentsettingform.h @@ -17,6 +17,9 @@ public: signals: void sigConnectToDevice(const QByteArray&); +private slots: + void on_pushButton_connect_to_device_clicked(); + private: void uiReset(); //slot