From 746cdcf02d0beb8366a633c5817c21904f953f3b Mon Sep 17 00:00:00 2001 From: HwangKC Date: Wed, 26 Mar 2025 22:25:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=80=E4=BA=9B=E8=AF=BB?= =?UTF-8?q?=E5=8F=96=E5=9C=B0=E5=9D=80=E5=A4=B1=E8=B4=A5=E6=97=B6=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E7=9A=84=E9=97=AE=E9=A2=98=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E4=B8=B2=E5=8F=A3=E7=AA=97=E5=8F=A3=E6=89=93?= =?UTF-8?q?=E5=BC=80=E6=97=B6=E6=B2=A1=E6=9C=89=E8=AF=BB=E5=8F=96=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E7=9A=84=E9=97=AE=E9=A2=98=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E4=B8=8D=E5=AD=98=E5=9C=A8?= =?UTF-8?q?=E6=97=B6=E6=B2=A1=E6=9C=89=E5=88=9B=E5=BB=BA=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EmsShower/formserialportsettingdialog.cpp | 112 +++++++++++++++++- applications/EmsShower/mainwindow.cpp | 17 ++- 2 files changed, 125 insertions(+), 4 deletions(-) diff --git a/applications/EmsShower/formserialportsettingdialog.cpp b/applications/EmsShower/formserialportsettingdialog.cpp index b7bbb48..473abd6 100644 --- a/applications/EmsShower/formserialportsettingdialog.cpp +++ b/applications/EmsShower/formserialportsettingdialog.cpp @@ -13,6 +13,7 @@ #include #include #include +#include FormSerialPortSettingDialog::FormSerialPortSettingDialog(QWidget *parent) : QDialog(parent) @@ -101,7 +102,7 @@ void FormSerialPortSettingDialog::InitializeUi() ui->cb_serialport->addItem(str,parts[0].trimmed()); } - ui->interval->setText("10"); + ui->interval->setText("15"); ui->buttonBox->clear(); QPushButton *okButton = ui->buttonBox->addButton(QDialogButtonBox::Ok); @@ -114,6 +115,113 @@ void FormSerialPortSettingDialog::InitializeUi() connect(okButton, &QPushButton::clicked, this, &FormSerialPortSettingDialog::onOkClicked); connect(cancelButton, &QPushButton::clicked, this, &FormSerialPortSettingDialog::onCancelClicked); + //恢复原配置 + QString appDir = QCoreApplication::applicationDirPath(); + QString iniFilePath = appDir + QString::fromStdString("/emsshower.ini"); + + QFileInfo checkFile(iniFilePath); + + // 文件已存在且是普通文件 + if (checkFile.exists() && checkFile.isFile()) + { + QSettings* pSettings = new QSettings(iniFilePath, QSettings::IniFormat,this); + + int baund = pSettings->value("modbus/baund",9600).toInt(); + QString tmp = QString("%1").arg(baund); + + int targetIndex = ui->cb_baund->findText(tmp); // 精确匹配 + if (targetIndex != -1) + { + ui->cb_baund->setCurrentIndex(targetIndex); // 自动触发滚动定位[3](@ref) + // 强制更新视图(适用于隐藏后重新显示) + //ui->cb_baund->showPopup(); + //ui->cb_baund->hidePopup(); + } + + QString com = pSettings->value("modbus/com","COM1").toString(); + for(int i=0; icb_serialport->count(); ++i) + { + if(ui->cb_serialport->itemText(i).contains(com+" -")) + { + ui->cb_serialport->setCurrentIndex(i); + } + } + + int data = pSettings->value("modbus/data",8).toInt(); + tmp = QString("%1").arg(data); + + targetIndex = ui->cb_data->findText(tmp); // 精确匹配 + if (targetIndex != -1) + { + ui->cb_data->setCurrentIndex(targetIndex); // 自动触发滚动定位[3](@ref) + // 强制更新视图(适用于隐藏后重新显示) + // ui->cb_data->showPopup(); + //ui->cb_data->hidePopup(); + } + + int parity = pSettings->value("modbus/parity",0).toInt(); + + if (parity == 0) + tmp = "NoParity"; + else if(parity == 2) + tmp = "Even"; + else if(parity == 3) + tmp = "Odd"; + else + tmp = "NoParity"; + + targetIndex = ui->cb_parity->findText(tmp); // 精确匹配 + if (targetIndex != -1) + { + ui->cb_parity->setCurrentIndex(targetIndex); // 自动触发滚动定位[3](@ref) + // 强制更新视图(适用于隐藏后重新显示) + //ui->cb_parity->showPopup(); + //ui->cb_parity->hidePopup(); + } + + int stop = pSettings->value("modbus/stop",1).toInt(); + tmp = QString("%1").arg(stop); + + targetIndex = ui->cb_stop->findText(tmp); // 精确匹配 + if (targetIndex != -1) + { + ui->cb_stop->setCurrentIndex(targetIndex); // 自动触发滚动定位[3](@ref) + // 强制更新视图(适用于隐藏后重新显示) + //ui->cb_stop->showPopup(); + //ui->cb_stop->hidePopup(); + } + + int interval = pSettings->value("modbus/interval",15).toInt(); + tmp = QString("%1").arg(interval); + ui->interval->setText(tmp); + + int slave_id = pSettings->value("slaves/slave_id",1).toInt(); + tmp = QString("%1").arg(slave_id); + ui->slave_id->setText(tmp); + + int delay = pSettings->value("modbus/delay",1000).toInt(); + tmp = QString("%1").arg(delay); + ui->delay_timeout->setText(tmp); + } + else + { + QSettings* pSettings = new QSettings(iniFilePath, QSettings::IniFormat,this); + + pSettings->setValue("modbus/baund",9600); + pSettings->setValue("modbus/com","COM1"); + pSettings->setValue("modbus/data",8); + pSettings->setValue("modbus/parity",0); + pSettings->setValue("modbus/stop",1); + pSettings->setValue("modbus/interval",15); + pSettings->setValue("modbus/delay",1000); + pSettings->setValue("slaves/slave_id",1); + + pSettings->setValue("version/ver","1_0_0"); + pSettings->setValue("modbus/type",1); + + pSettings->setValue("modbus/ip","127.0.0.1"); + pSettings->setValue("modbus/port",502); + } // 恢复默认光标 QApplication::restoreOverrideCursor(); } @@ -147,6 +255,7 @@ void FormSerialPortSettingDialog::onOkClicked() int stop = ui->cb_stop->currentData().toInt(); int slave_id = ui->slave_id->text().toInt(); int intervai = ui->interval->text().toInt(); + int delay = ui->delay_timeout->text().toInt(); pSettings->setValue("modbus/baund",baund); pSettings->setValue("modbus/com",com); @@ -154,6 +263,7 @@ void FormSerialPortSettingDialog::onOkClicked() pSettings->setValue("modbus/parity",parity); pSettings->setValue("modbus/stop",stop); pSettings->setValue("modbus/interval",intervai); + pSettings->setValue("modbus/delay",delay); pSettings->setValue("slaves/slave_id",slave_id); accept(); diff --git a/applications/EmsShower/mainwindow.cpp b/applications/EmsShower/mainwindow.cpp index 3bf9524..c8d92e8 100644 --- a/applications/EmsShower/mainwindow.cpp +++ b/applications/EmsShower/mainwindow.cpp @@ -457,16 +457,18 @@ bool MainWindow::InitializeModbus() QString jsonFilePath = appDir + QString::fromStdString("/emsshower.json"); ReadConfiguration(jsonFilePath); - m_bInitializeModbus = true; + //m_bInitializeModbus = true; switch (m_modbus_type) { case 0: - return InitializeTcp(); + m_bInitializeModbus = InitializeTcp(); + return m_bInitializeModbus; break; default: case 1: - return InitializeRtu(); + m_bInitializeModbus = InitializeRtu(); + return m_bInitializeModbus; break; } } @@ -552,6 +554,15 @@ bool MainWindow::readRegister() uint16_t* tab_reg = new uint16_t[iterAddress->quantity]; int regs = modbus_read_registers(m_pModbus, iterAddress->start_addr, iterAddress->quantity, tab_reg); + + if (regs <= 0) + { + QString s = QString(tr("Failed to read registers from address %1")).arg(iterAddress->start_addr); + ui->statusbar->showMessage(s); + delete []tab_reg; + continue; + } + assert(regs>0); QVector registers;