一键下发配置文件

This commit is contained in:
95384 2025-03-12 15:57:07 +08:00
parent 28cb8b4d57
commit 6057634cf3
4 changed files with 469 additions and 6 deletions

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject> <!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.12.2, 2025-03-12T10:07:44. --> <!-- Written by QtCreator 4.12.2, 2025-03-12T15:47:38. -->
<qtcreator> <qtcreator>
<data> <data>
<variable>EnvironmentId</variable> <variable>EnvironmentId</variable>
@ -77,7 +77,7 @@
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.12.9 MinGW 32-bit</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.12.9 MinGW 32-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.12.9 MinGW 32-bit</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.12.9 MinGW 32-bit</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5129.win32_mingw73_kit</value> <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.qt5.5129.win32_mingw73_kit</value>
<value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value> <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
<value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value> <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value> <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0"> <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
@ -320,7 +320,7 @@
<value type="bool" key="RunConfiguration.UseQmlDebugger">false</value> <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value> <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
<value type="QString" key="RunConfiguration.WorkingDirectory"></value> <value type="QString" key="RunConfiguration.WorkingDirectory"></value>
<value type="QString" key="RunConfiguration.WorkingDirectory.default">E:/Y/QT/build-micro_climate_config-Desktop_Qt_5_12_9_MinGW_32_bit-Debug</value> <value type="QString" key="RunConfiguration.WorkingDirectory.default">E:/Y/QT/build-micro_climate_config-Desktop_Qt_5_12_9_MinGW_32_bit-Release</value>
</valuemap> </valuemap>
<value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value> <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap> </valuemap>

View File

@ -91,8 +91,11 @@ void Widget::disable__()
ui->groupBox->setEnabled(false); ui->groupBox->setEnabled(false);
ui->groupBox_2->setEnabled(false); ui->groupBox_2->setEnabled(false);
ui->groupBox_3->setEnabled(false); ui->groupBox_3->setEnabled(false);
// 未打开串口时不让开加密页面 // 未打开串口时不让开页面
ui->main_tabWidget->setTabEnabled(1, false); ui->main_tabWidget->setTabEnabled(1, false);
ui->main_tabWidget->setTabEnabled(2, false);
ui->Password_lineEdit->setEnabled(false); ui->Password_lineEdit->setEnabled(false);
ui->ID_lineEdit->setEnabled(false); ui->ID_lineEdit->setEnabled(false);
ui->label_10->setEnabled(false); ui->label_10->setEnabled(false);
@ -105,8 +108,9 @@ void Widget::able__()
ui->groupBox->setEnabled(true); ui->groupBox->setEnabled(true);
ui->groupBox_2->setEnabled(true); ui->groupBox_2->setEnabled(true);
ui->groupBox_3->setEnabled(true); ui->groupBox_3->setEnabled(true);
// 未打开串口时不让开加密页面 // 未打开串口时不让开页面
ui->main_tabWidget->setTabEnabled(1, true); ui->main_tabWidget->setTabEnabled(1, true);
ui->main_tabWidget->setTabEnabled(2, true);
} }
uint16_t Widget::modbusCrc16(const uint8_t *data, const int len) uint16_t Widget::modbusCrc16(const uint8_t *data, const int len)
@ -390,6 +394,7 @@ void Widget::get_configdata()
bits[i] ? error1_status_label[15 - i] -> setStyleSheet("QLabel { background-color :rgb(184, 0, 0); border-radius: 10px;}") \ bits[i] ? error1_status_label[15 - i] -> setStyleSheet("QLabel { background-color :rgb(184, 0, 0); border-radius: 10px;}") \
: error1_status_label[15 - i] -> setStyleSheet("QLabel { background-color :rgb(0, 144, 0); border-radius: 10px;}"); : error1_status_label[15 - i] -> setStyleSheet("QLabel { background-color :rgb(0, 144, 0); border-radius: 10px;}");
} }
QMessageBox::information(this, "提示", "数据接受成功");
} }
disconnect(Serial_port, &QSerialPort::readyRead, nullptr, nullptr); disconnect(Serial_port, &QSerialPort::readyRead, nullptr, nullptr);
} }
@ -901,3 +906,119 @@ void Widget::on_pushButton_9_clicked()
disconnect(Serial_port, &QSerialPort::readyRead, nullptr, nullptr); disconnect(Serial_port, &QSerialPort::readyRead, nullptr, nullptr);
connect(Serial_port, SIGNAL(readyRead()), this, SLOT(write_ack()), Qt::UniqueConnection); connect(Serial_port, SIGNAL(readyRead()), this, SLOT(write_ack()), Qt::UniqueConnection);
} }
void Widget::on_read_config_file_pushButton_clicked()
{
//清空名字
ui -> configFile_comboBox -> clear();
ui -> configFile_comboBox ->addItem("请选择配置文件");
//创建QSetting对象指定INI文件的路径和格式
QSettings settings("config/config.ini", QSettings::IniFormat);
//获取所有节名
QStringList sections = settings.childGroups();
foreach (const QString &section, sections)
{
//当前节名称添加进下拉菜单
ui -> configFile_comboBox -> addItem(section);
qDebug() << "Section" << section;
}
}
uint16_t config_1R5_value;
uint16_t config_4R5_value;
uint16_t config_8R0_value;
uint16_t rssi_value;
uint16_t coeff_value;
uint16_t distance_NS_value;
uint16_t distance_WE_value;
uint16_t delay_value;
void Widget::on_configFile_comboBox_highlighted(const QString &arg1)
{
//没东西提前返回
if(arg1 == "请选择配置文件")
{
return;
}
//创建QSetting对象指定INI文件的路径和格式
QSettings settings("config/config.ini", QSettings::IniFormat);
//读取配置
config_1R5_value = settings.value(arg1 + "/value1R5").toInt();
config_4R5_value = settings.value(arg1 + "/value4R5").toInt();
config_8R0_value = settings.value(arg1 + "/value8R0").toInt();
rssi_value = settings.value(arg1 + "/rssiValue").toInt();
coeff_value = settings.value(arg1 + "/coefficientValue").toInt();
distance_NS_value = settings.value(arg1 + "/diatanceNS").toInt();
distance_WE_value = settings.value(arg1 + "/diatanceWE").toInt();
delay_value = settings.value(arg1 + "/delayUsValue").toInt();
qDebug() << config_1R5_value;
qDebug() << config_4R5_value;
qDebug() << config_8R0_value;
qDebug() << rssi_value;
qDebug() << coeff_value;
qDebug() << distance_NS_value;
qDebug() << distance_WE_value;
qDebug() << delay_value;
//展示配置
ui -> write_1R5_lineEdit_2 -> setText("0." + QString::number(config_1R5_value));
ui -> write_4R5_lineEdit_2 -> setText("0." + QString::number(config_4R5_value));
ui -> write_8R0_lineEdit_2 -> setText("0." + QString::number(config_8R0_value));
ui -> write_lineEdit_2 -> setText("0." + QString::number(rssi_value));
ui -> write_Coefficient_lineEdit_2 -> setText(QString::number(float(coeff_value)/10000));
ui -> write_distance_NS_lineEdit_2 -> setText(QString::number(float(distance_NS_value)/500) + " mm");
ui -> write_distance_WE_lineEdit_2 -> setText(QString::number(float(distance_WE_value)/500) + " mm");
ui -> write_delay_time_lineEdit_2 -> setText(QString::number(delay_value) + " us");
}
void Widget::on_pushButton_10_clicked()
{
QByteArray sent_comand;
sent_comand.append(static_cast<uint8_t>(0x30));
sent_comand.append(static_cast<uint8_t>(0x10));
sent_comand.append(static_cast<uint8_t>(0x00));
sent_comand.append(static_cast<uint8_t>(0x1E));
sent_comand.append(static_cast<uint8_t>(0x00));
sent_comand.append(static_cast<uint8_t>(0x08));
sent_comand.append(static_cast<uint8_t>(0x10));
sent_comand.append(static_cast<uint8_t>(config_1R5_value >> 8));
sent_comand.append(static_cast<uint8_t>(config_1R5_value & 0x00FF));
sent_comand.append(static_cast<uint8_t>(config_4R5_value >> 8));
sent_comand.append(static_cast<uint8_t>(config_4R5_value & 0x00FF));
sent_comand.append(static_cast<uint8_t>(config_8R0_value >> 8));
sent_comand.append(static_cast<uint8_t>(config_8R0_value & 0x00FF));
sent_comand.append(static_cast<uint8_t>(rssi_value >> 8));
sent_comand.append(static_cast<uint8_t>(rssi_value & 0x00FF));
sent_comand.append(static_cast<uint8_t>(coeff_value >> 8));
sent_comand.append(static_cast<uint8_t>(coeff_value & 0x00FF));
sent_comand.append(static_cast<uint8_t>(distance_NS_value >> 8));
sent_comand.append(static_cast<uint8_t>(distance_NS_value & 0x00FF));
sent_comand.append(static_cast<uint8_t>(distance_WE_value >> 8));
sent_comand.append(static_cast<uint8_t>(distance_WE_value & 0x00FF));
sent_comand.append(static_cast<uint8_t>(delay_value >> 8));
sent_comand.append(static_cast<uint8_t>(delay_value & 0x00FF));
uint8_t sent_comand_u8[sent_comand.length()];
for(int i = 0; i < sent_comand.length(); i++)
{
sent_comand_u8[i] = sent_comand[i];
}
uint16_t crc_16_val = modbusCrc16(sent_comand_u8, sent_comand.length());
sent_comand.append(crc_16_val >> 8);
sent_comand.append(crc_16_val);
Serial_port->write(sent_comand);
//连接信号与槽
//断开所有其他的信号与槽连接
disconnect(Serial_port, &QSerialPort::readyRead, nullptr, nullptr);
connect(Serial_port, SIGNAL(readyRead()), this, SLOT(write_ack()), Qt::UniqueConnection);
}

View File

@ -11,6 +11,8 @@
#include <QRegExpValidator> #include <QRegExpValidator>
#include <QLabel> #include <QLabel>
#include <QThread> #include <QThread>
#include <QSettings>
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
namespace Ui { class Widget; } namespace Ui { class Widget; }
@ -58,6 +60,12 @@ private slots:
void on_pushButton_9_clicked(); void on_pushButton_9_clicked();
void on_read_config_file_pushButton_clicked();
void on_configFile_comboBox_highlighted(const QString &arg1);
void on_pushButton_10_clicked();
private: private:
Ui::Widget *ui; Ui::Widget *ui;
//关闭窗口提示 //关闭窗口提示

336
widget.ui
View File

@ -32,7 +32,7 @@
<string>微气象传感器调试助手</string> <string>微气象传感器调试助手</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout">
<item row="0" column="1"> <item row="0" column="0">
<widget class="QTabWidget" name="main_tabWidget"> <widget class="QTabWidget" name="main_tabWidget">
<property name="font"> <property name="font">
<font> <font>
@ -1684,6 +1684,301 @@ border-radius: 10px; /* 圆角半径 */
</item> </item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="fast_config_tab">
<attribute name="title">
<string>快速配置</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_9">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<property name="spacing">
<number>0</number>
</property>
<item row="0" column="0">
<layout class="QGridLayout" name="gridLayout_8" rowstretch="1,5,1,1,1,1,1,1,1,1" columnstretch="5,4,5" rowminimumheight="0,0,0,0,0,0,0,0,0,0" columnminimumwidth="0,0,0">
<property name="leftMargin">
<number>5</number>
</property>
<property name="topMargin">
<number>5</number>
</property>
<property name="rightMargin">
<number>5</number>
</property>
<property name="bottomMargin">
<number>5</number>
</property>
<item row="6" column="0">
<widget class="QLabel" name="label_49">
<property name="text">
<string>换能器表面距离NS</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_47">
<property name="text">
<string>换能器参数1R5</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLineEdit" name="write_4R5_lineEdit_2">
<property name="inputMask">
<string/>
</property>
<property name="text">
<string/>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
<property name="placeholderText">
<string/>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_43">
<property name="text">
<string>粘度修正系数:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_48">
<property name="text">
<string>换能器参数8R0</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="QLineEdit" name="write_distance_WE_lineEdit_2">
<property name="inputMask">
<string/>
</property>
<property name="text">
<string/>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
<property name="placeholderText">
<string/>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="pushButton_10">
<property name="text">
<string>下发配置</string>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QLineEdit" name="write_distance_NS_lineEdit_2">
<property name="inputMask">
<string/>
</property>
<property name="text">
<string/>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
<property name="placeholderText">
<string/>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_45">
<property name="text">
<string>RSSI有效范围</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QLineEdit" name="write_8R0_lineEdit_2">
<property name="inputMask">
<string/>
</property>
<property name="text">
<string/>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
<property name="placeholderText">
<string/>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLineEdit" name="write_1R5_lineEdit_2">
<property name="statusTip">
<string/>
</property>
<property name="inputMask">
<string/>
</property>
<property name="text">
<string/>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
<property name="placeholderText">
<string/>
</property>
<property name="cursorMoveStyle">
<enum>Qt::LogicalMoveStyle</enum>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QLineEdit" name="write_lineEdit_2">
<property name="inputMask">
<string/>
</property>
<property name="text">
<string/>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
<property name="placeholderText">
<string/>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QPushButton" name="read_config_file_pushButton">
<property name="text">
<string>读取配置文件</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_46">
<property name="text">
<string>换能器参数4R5</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_44">
<property name="text">
<string> 换能器匹配层延时:</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_50">
<property name="text">
<string>换能器表面距离WE</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="QLineEdit" name="write_delay_time_lineEdit_2">
<property name="inputMask">
<string/>
</property>
<property name="text">
<string/>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
<property name="placeholderText">
<string/>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QComboBox" name="configFile_comboBox"/>
</item>
<item row="5" column="1">
<widget class="QLineEdit" name="write_Coefficient_lineEdit_2">
<property name="inputMask">
<string/>
</property>
<property name="text">
<string/>
</property>
<property name="readOnly">
<bool>true</bool>
</property>
<property name="placeholderText">
<string/>
</property>
</widget>
</item>
<item row="9" column="1">
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="3" column="2">
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QWidget" name="encrypt_tab"> <widget class="QWidget" name="encrypt_tab">
<attribute name="title"> <attribute name="title">
<string>加密</string> <string>加密</string>
@ -1797,6 +2092,45 @@ border-radius: 10px; /* 圆角半径 */
</widget> </widget>
</widget> </widget>
</item> </item>
<item row="1" column="0">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="1">
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="2">
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout> </layout>
</widget> </widget>
<resources/> <resources/>