2025-09-28T17:19:30

This commit is contained in:
yuntang 2025-09-28 17:19:31 +08:00
parent f22e46dba4
commit e1e7bc984f
66 changed files with 714 additions and 725 deletions

View File

@ -147,7 +147,7 @@ void XlsxHandler::readPhaseData(QXlsx::Worksheet *workSheet, int &startLineIndex
} }
void XlsxHandler::writeExperimentFile(const QString filePath) { void XlsxHandler::writeExperimentFile(const QString filePath) {
logde << "write file..."; logde << "writeExperimentFile...";
#if 0 #if 0
if(Global::_curveExperimentDataVtr.empty()){ if(Global::_curveExperimentDataVtr.empty()){
@ -293,9 +293,12 @@ void XlsxHandler::writeExperimentFile(const QString filePath) {
// logde<<"edVtr size:"<<edVtr.size(); // logde<<"edVtr size:"<<edVtr.size();
for (int index = 0; index < edVtr.size(); index++) { for (int index = 0; index < edVtr.size(); index++) {
// logde<<"index :"<<index;
const Global::ExperimentData &ed = edVtr.at(index); const Global::ExperimentData &ed = edVtr.at(index);
// 跳过运行时间为0 的数据
if(ed.runTime == 0){
continue;
}
//
xlsx.write(row, 1, index); xlsx.write(row, 1, index);
xlsx.write(row, 2, ed.runTime); xlsx.write(row, 2, ed.runTime);
xlsx.write(row, 3, ed.sampleTemp); xlsx.write(row, 3, ed.sampleTemp);
@ -667,6 +670,8 @@ void XlsxHandler::writeSmoothnessFile(const QString filePath) {
} }
void XlsxHandler::writeXlsxFile(const QString filePath) { void XlsxHandler::writeXlsxFile(const QString filePath) {
logde<<"write xlsx file...";
if (Global::_curveFileDataVtr.empty()) { if (Global::_curveFileDataVtr.empty()) {
logde << "curve file data vtr empty..."; logde << "curve file data vtr empty...";
return; return;

View File

@ -418,11 +418,13 @@ void MainWindow::startExperiment() {
_centralWidget->startExperiment(); _centralWidget->startExperiment();
} }
void MainWindow::startExperimentByDeviceInfo() void MainWindow::startExperimentByDeviceInfo() {
{
Global::_mode = Global::Mode::Experiment; Global::_mode = Global::Mode::Experiment;
_manuallyStopTheExperimentFlag = false; _manuallyStopTheExperimentFlag = false;
_centralWidget->startExperiment(); _centralWidget->startExperiment();
// 实验开始,清除上一个实验所有数据。
Global::clearExperimentData();
} }
void MainWindow::on_actionStop_triggered() { void MainWindow::on_actionStop_triggered() {
@ -468,7 +470,7 @@ void MainWindow::on_actionNew_triggered() {
void MainWindow::on_actionStart_triggered() { void MainWindow::on_actionStart_triggered() {
logde << "start experiment,set soft into experiment mode."; logde << "start experiment,set soft into experiment mode.";
logde<<"```````````````````````````````"; logde << "```````````````````````````````";
if (!SerialPort::instance()->isOpen()) { if (!SerialPort::instance()->isOpen()) {
showMesgBox("设备未连接,请先连接设备。"); showMesgBox("设备未连接,请先连接设备。");
@ -500,7 +502,10 @@ void MainWindow::slotSaveExperimentalDataMsgBox() {
// auto save file. // auto save file.
logde << "slotSaveExperimentalDataMsgBox saveFile ..."; logde << "slotSaveExperimentalDataMsgBox saveFile ...";
QString finalFileName; QString finalFileName;
if (saveFile(Global::_experimentInfo.sampleName, Global::Mode::Experiment, finalFileName, true)) { if (saveFile(Global::_experimentInfo.sampleName,
Global::Mode::Experiment,
finalFileName,
true)) {
_leftWidget->reloadFileName(); _leftWidget->reloadFileName();
QString str = QString("%1 文件保存成功。").arg(finalFileName); QString str = QString("%1 文件保存成功。").arg(finalFileName);
@ -526,6 +531,8 @@ void MainWindow::on_actionConnectToDev_triggered() {
logde << "connect to device..."; logde << "connect to device...";
if (SerialPort::instance()->isOpen()) { if (SerialPort::instance()->isOpen()) {
logde << "close device.";
SerialPort::instance()->closeSp(); SerialPort::instance()->closeSp();
ui->actionConnectToDev->setIcon(QIcon(":/images/connect.png")); ui->actionConnectToDev->setIcon(QIcon(":/images/connect.png"));
@ -537,29 +544,25 @@ void MainWindow::on_actionConnectToDev_triggered() {
slotUpdateStatusbarMsg(str); slotUpdateStatusbarMsg(str);
showMesgBox(str); showMesgBox(str);
} else { } else {
logde << "open device.";
if (SerialPort::instance()->openSp()) { if (SerialPort::instance()->openSp()) {
logde << "open serial port success. 1";
setActionEnable(true); setActionEnable(true);
// Global::instance()->setMode(Global::Mode::ConnectedToDev); // Global::instance()->setMode(Global::Mode::ConnectedToDev);
Global::_mode = Global::Mode::ConnectedToDev; Global::_mode = Global::Mode::ConnectedToDev;
logde << "open serial port success. 2";
QByteArray ba = DataParser::inquirePhaseInfo(); QByteArray ba = DataParser::inquirePhaseInfo();
SerialPort::instance()->sendData(ba); SerialPort::instance()->sendData(ba);
ui->actionConnectToDev->setIcon(QIcon(":/images/disconnect.png")); ui->actionConnectToDev->setIcon(QIcon(":/images/disconnect.png"));
ui->actionConnectToDev->setText("断开连接"); ui->actionConnectToDev->setText("断开连接");
logde << "open serial port.";
// //
logde << "open serial port success. 3";
QString str("设备已连接。"); QString str("设备已连接。");
slotUpdateStatusbarMsg(str); slotUpdateStatusbarMsg(str);
showMesgBox(str); showMesgBox(str);
logde << "open serial port success. ";
} else { } else {
// QMessageBox::warning(this, "warnning", "Serial Port open failed."); // QMessageBox::warning(this, "warnning", "Serial Port open failed.");
showMesgBox("设备打开失败。"); showMesgBox("设备打开失败。");
@ -568,7 +571,7 @@ void MainWindow::on_actionConnectToDev_triggered() {
} }
void MainWindow::on_actionStartPoint_triggered() { void MainWindow::on_actionStartPoint_triggered() {
logde<<"start experiment..."; logde << "start experiment...";
_rightWidget->show(); _rightWidget->show();
_centralWidget->setAnalysisMode(CentralWidget::AnalysisMode::StartPoint); _centralWidget->setAnalysisMode(CentralWidget::AnalysisMode::StartPoint);
@ -590,6 +593,11 @@ void MainWindow::on_actionPeakSynthesisAnalysis_triggered() {
} }
void MainWindow::on_actionClearAllData_triggered() { void MainWindow::on_actionClearAllData_triggered() {
// 实验过程中,不允许清除数据。
if(Global::_mode == Global::Mode::Experiment) {
return;
}
slotUpdateStatusbarMsg(""); slotUpdateStatusbarMsg("");
_rightWidget->hide(); _rightWidget->hide();

View File

@ -77,33 +77,28 @@ SerialPort *SerialPort::instance() {
} }
SerialPort::~SerialPort() { SerialPort::~SerialPort() {
logde<<"serialport destructor."; logde << "serialport destructor.";
closeSp();
if (_sp && _sp->isOpen()) {
_sp->clear();
_sp->close();
}
delete _sp; delete _sp;
_sp = nullptr; _sp = nullptr;
} }
void SerialPort::timerEvent(QTimerEvent *event) {
}
void SerialPort::slotReadData() { void SerialPort::slotReadData() {
QByteArray ba = _sp->readAll(); QByteArray ba = _sp->readAll();
if (ba.size() == 0) { if (ba.size() == 0) {
return; return;
} }
#if 0 #if 1
QString hexData = ba.toHex(' '); // ' ' 作为分隔符,可选参数 QString hexData = ba.toHex(' '); // ' ' 作为分隔符,可选参数
logde << "receive info (hex):" << hexData.toStdString(); logde << "receive info (hex):" << hexData.toStdString();
#endif #endif
SerialPortProtocol *spp = (SerialPortProtocol *)ba.data(); SerialPortProtocol *spp = (SerialPortProtocol *)ba.data();
if (FRANE_HEAD != spp->head) { if (FRANE_HEAD != spp->head) {
qDebug() << "Data header error."; logde << "Data header error.";
return; return;
} }
@ -162,6 +157,26 @@ void SerialPort::updateStatus(const CommonData &cd) {
break; break;
} }
// 判断是否根据下位机数据,切换软件实验模式。
static Global::Mode preMode = Global::Mode::Analysis;
bool sendSaveSignalFlag = false;
if (Global::_mode != preMode) {
if (preMode == Global::Mode::Experiment
&& Global::_mode == Global::Mode::Analysis) {
sendSaveSignalFlag = true;
} else if (preMode == Global::Mode::Analysis
&& Global::_mode == Global::Mode::Experiment) {
// 根据下位机数据,软件进入实验模式,开始实验。
logde << "start experiment, accord to device data...";
logde << "---------------------";
emit sigStartExperiment();
}
preMode = Global::_mode;
}
// If phase update, add new phase data to the global param. // If phase update, add new phase data to the global param.
if (Global::_mode == Global::Mode::Experiment) { if (Global::_mode == Global::Mode::Experiment) {
if (Global::_currentPhase != (int)cd.current_phase) { if (Global::_currentPhase != (int)cd.current_phase) {
@ -174,6 +189,7 @@ void SerialPort::updateStatus(const CommonData &cd) {
ced.phaseIndex = cd.current_phase; ced.phaseIndex = cd.current_phase;
Global::_curveExperimentDataVtr.push_back(ced); Global::_curveExperimentDataVtr.push_back(ced);
Global::_currentCurveExperimentDataPtr = Global::_currentCurveExperimentDataPtr =
&Global::_curveExperimentDataVtr.last(); &Global::_curveExperimentDataVtr.last();
@ -219,7 +235,7 @@ void SerialPort::updateStatus(const CommonData &cd) {
emit sigUpdateStatusbarMsg(msg); emit sigUpdateStatusbarMsg(msg);
#if 1 #if 0
// If save experiment data. // If save experiment data.
static Global::Mode preMode = Global::Mode::Analysis; static Global::Mode preMode = Global::Mode::Analysis;
bool sendSaveSignalFlag = false; bool sendSaveSignalFlag = false;
@ -229,18 +245,22 @@ void SerialPort::updateStatus(const CommonData &cd) {
sendSaveSignalFlag = true; sendSaveSignalFlag = true;
} else if (preMode == Global::Mode::Analysis } else if (preMode == Global::Mode::Analysis
&& Global::_mode == Global::Mode::Experiment) { && Global::_mode == Global::Mode::Experiment) {
logde<<"update status accord to device data...";
logde<<"--------------------------------------"; // 根据下位机数据,软件进入实验模式,开始实验。
logde << "start experiment, accord to device data...";
logde << "---------------------";
emit sigStartExperiment(); emit sigStartExperiment();
} }
preMode = Global::_mode; preMode = Global::_mode;
} }
#endif
// 弹出保存数据对话框。
if (sendSaveSignalFlag && !Global::_OITAutoAnalysisModeFlag) { if (sendSaveSignalFlag && !Global::_OITAutoAnalysisModeFlag) {
emit sigSaveExperimentalDataMsgBox(); emit sigSaveExperimentalDataMsgBox();
} }
#endif
} }
void SerialPort::commonDataParser(const int dataLength, const u16 addr, void SerialPort::commonDataParser(const int dataLength, const u16 addr,
@ -338,9 +358,15 @@ void SerialPort::commonDataParser(const int dataLength, const u16 addr,
bool SerialPort::openSp() { bool SerialPort::openSp() {
logde << "openSp 1"; logde << "openSp 1";
closeSp();
QThread::msleep(100);
#if 0
if (_sp != nullptr && _sp->isOpen()) { if (_sp != nullptr && _sp->isOpen()) {
return true; return true;
} }
#endif
logde << "openSp 2"; logde << "openSp 2";
foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) { foreach (const QSerialPortInfo &info, QSerialPortInfo::availablePorts()) {
u16 pid = info.productIdentifier(); u16 pid = info.productIdentifier();
@ -376,7 +402,7 @@ bool SerialPort::openSp() {
return false; return false;
} else { } else {
// qDebug() << "open succ."; // qDebug() << "open succ.";
logde<<"openSp 5."; logde << "openSp 5.";
// 设置 DTR 信号为就绪状态true 表示低电平) // 设置 DTR 信号为就绪状态true 表示低电平)
_sp->setDataTerminalReady(true); _sp->setDataTerminalReady(true);
} }

View File

@ -28,8 +28,6 @@ public:
bool openSp(); bool openSp();
bool isOpen(){return _sp->isOpen();} bool isOpen(){return _sp->isOpen();}
bool closeSp(); bool closeSp();
protected:
void timerEvent(QTimerEvent *event);
signals: signals:
void sigSendCommonData(const CommonData &); void sigSendCommonData(const CommonData &);
void sigSendCommonDataToRealDataForm(const CommonData &); void sigSendCommonDataToRealDataForm(const CommonData &);

File diff suppressed because it is too large Load Diff

View File

@ -661,9 +661,9 @@ void ExperimentSettingForm::slotPhaseCheck() {
} }
void ExperimentSettingForm::slotRecvPhaseInfo(const QByteArray &ba) { void ExperimentSettingForm::slotRecvPhaseInfo(const QByteArray &ba) {
logde << "----------------------- recv"; logde << "recv phase info ----------------------- ";
#if 0 #if 1
QString hexData = ba.toHex(' '); // ' ' 作为分隔符,可选参数 QString hexData = ba.toHex(' '); // ' ' 作为分隔符,可选参数
qDebug() << "slotRecvPhaseInfo hex:" << hexData; qDebug() << "slotRecvPhaseInfo hex:" << hexData;
#endif #endif