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 0000000..bc64b19 Binary files /dev/null and b/src/images/connect.png differ diff --git a/src/images/new.png b/src/images/new.png new file mode 100644 index 0000000..24a432e Binary files /dev/null and b/src/images/new.png differ diff --git a/src/images/real_time_widget.png b/src/images/real_time_widget.png new file mode 100644 index 0000000..ce7f7ca Binary files /dev/null and b/src/images/real_time_widget.png differ diff --git a/src/images/stop.png b/src/images/stop.png index eda97b1..178b4b0 100644 Binary files a/src/images/stop.png and b/src/images/stop.png differ 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