diff --git a/TSI_Config.pro b/TSI_Config.pro index a5f0235..a800707 100644 --- a/TSI_Config.pro +++ b/TSI_Config.pro @@ -17,6 +17,7 @@ SOURCES += \ common.cpp \ config_mgr.cpp \ connect.cpp \ + copy_channel.cpp \ dc_output_channel.cpp \ dc_outputs.cpp \ ethconfig.cpp \ @@ -53,6 +54,7 @@ HEADERS += \ common.h \ config_mgr.h \ connect.h \ + copy_channel.h \ data_config.h \ dc_output_channel.h \ dc_outputs.h \ @@ -87,6 +89,7 @@ FORMS += \ channel_1_2.ui \ channel_3_4.ui \ connect.ui \ + copy_channel.ui \ dc_output_channel.ui \ dc_outputs.ui \ ethconfig.ui \ diff --git a/copy_channel.cpp b/copy_channel.cpp new file mode 100644 index 0000000..cbd0e13 --- /dev/null +++ b/copy_channel.cpp @@ -0,0 +1,63 @@ +#include "copy_channel.h" +#include "ui_copy_channel.h" + +CopyChannel::CopyChannel(QWidget *parent) : + QWidget(parent), + ui(new Ui::CopyChannel) +{ + ui->setupUi(this); +} + +CopyChannel::~CopyChannel() +{ + delete ui; +} + +void CopyChannel::on_radioButton_ch1_clicked(bool checked) +{ + if(checked){ + ui->checkBox_ch1->setChecked(false); + ui->checkBox_ch1->setEnabled(false); + } + ui->checkBox_ch2->setEnabled(true); + ui->checkBox_ch3->setEnabled(true); + ui->checkBox_ch4->setEnabled(true); + +} + + +void CopyChannel::on_radioButton_ch2_clicked(bool checked) +{ + if(checked){ + ui->checkBox_ch2->setChecked(false); + ui->checkBox_ch2->setEnabled(false); + } + ui->checkBox_ch1->setEnabled(true); + ui->checkBox_ch3->setEnabled(true); + ui->checkBox_ch4->setEnabled(true); +} + + +void CopyChannel::on_radioButton_ch3_clicked(bool checked) +{ + if(checked){ + ui->checkBox_ch3->setChecked(false); + ui->checkBox_ch3->setEnabled(false); + } + ui->checkBox_ch2->setEnabled(true); + ui->checkBox_ch1->setEnabled(true); + ui->checkBox_ch4->setEnabled(true); +} + + +void CopyChannel::on_radioButton_ch4_clicked(bool checked) +{ + if(checked){ + ui->checkBox_ch4->setChecked(false); + ui->checkBox_ch4->setEnabled(false); + } + ui->checkBox_ch2->setEnabled(true); + ui->checkBox_ch3->setEnabled(true); + ui->checkBox_ch1->setEnabled(true); +} + diff --git a/copy_channel.h b/copy_channel.h new file mode 100644 index 0000000..5ea3f89 --- /dev/null +++ b/copy_channel.h @@ -0,0 +1,31 @@ +#ifndef COPY_CHANNEL_H +#define COPY_CHANNEL_H + +#include + +namespace Ui { +class CopyChannel; +} + +class CopyChannel : public QWidget +{ + Q_OBJECT + +public: + explicit CopyChannel(QWidget *parent = nullptr); + ~CopyChannel(); + +private slots: + void on_radioButton_ch1_clicked(bool checked); + + void on_radioButton_ch2_clicked(bool checked); + + void on_radioButton_ch3_clicked(bool checked); + + void on_radioButton_ch4_clicked(bool checked); + +private: + Ui::CopyChannel *ui; +}; + +#endif // COPY_CHANNEL_H diff --git a/copy_channel.ui b/copy_channel.ui new file mode 100644 index 0000000..bbcaf25 --- /dev/null +++ b/copy_channel.ui @@ -0,0 +1,244 @@ + + + CopyChannel + + + + 0 + 0 + 673 + 534 + + + + 复制通道 + + + + + + + 0 + 60 + + + + + 16777215 + 60 + + + + + + + 复制通道配置 + + + Qt::AlignCenter + + + + + + + + + + + + + 选择被复制的通道 + + + + + 20 + 80 + 111 + 19 + + + + 通道1 + + + buttonGroup + + + + + + 190 + 80 + 111 + 19 + + + + 通道2 + + + buttonGroup + + + + + + 360 + 80 + 111 + 19 + + + + 通道3 + + + buttonGroup + + + + + + 530 + 80 + 111 + 19 + + + + 通道4 + + + buttonGroup + + + + + + + + 选择需要复制的通道 + + + + + 20 + 90 + 87 + 19 + + + + 通道1 + + + + + + 180 + 90 + 87 + 19 + + + + 通道2 + + + + + + 350 + 90 + 87 + 19 + + + + 通道3 + + + + + + 540 + 90 + 87 + 19 + + + + 通道4 + + + + + + + + + + + + 0 + 80 + + + + + 16777215 + 80 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + 确定 + + + + + + + + 100 + 35 + + + + + 100 + 35 + + + + 取消 + + + + + + + + + + + + + + diff --git a/data_config.h b/data_config.h index 4cb878b..76309ec 100644 --- a/data_config.h +++ b/data_config.h @@ -220,6 +220,7 @@ enum CMTCommand { kCleanSubCardLatch = 30, // 清理子板特定通道的Latch状态 kConfigMQTTBrokerInfo = 31, // 配置与获取MQTT broker信息 kConfigDeviceID = 32, // 配置设备编号,编号范围为1~99 + kGetVoltageRangeValue = 33 // 获取子板动态电压范围 }; enum RS485Baudrate { kBaudrate2400 = 0, @@ -739,6 +740,20 @@ typedef struct { char data[0]; // 请保存为.tar.gz文件 } GetSubCardLogRsp; +typedef struct { + uint8_t head[3]; // 固定值:0xAA55AA + uint8_t cmd; + uint8_t version; // 版本号,默认为1 + uint8_t card_id; +} GetSubCardVoltageRangeReq; + +typedef struct { + uint8_t head[3]; // 固定值:0xAA55AA + uint8_t cmd; + uint8_t version; // 版本号,默认为1 + uint8_t voltage; // 单位为v +} GetSubCardVoltageRangeRsp; + // cmd: kTimingCmd = 26 typedef struct { uint8_t head[3]; // 固定值:0xAA55AA diff --git a/mainwindow.cpp b/mainwindow.cpp index c61d847..c6b99bd 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -209,6 +209,8 @@ void MainWindow::createMenu(const QString &rootTitle, QPushButton *parent) { QAction *version = mainMenu->addAction("查看版本"); QAction *config_sub_card = mainMenu->addAction("更新配置"); QAction *get_sub_log = mainMenu->addAction("获取日志"); + QAction *get_sub_card_voltage = mainMenu->addAction("获取电压范围"); + // 绑定 **鼠标事件过滤器**,确保只响应右键 // 设置右键菜单策略 parent->setContextMenuPolicy(Qt::CustomContextMenu); @@ -233,6 +235,8 @@ void MainWindow::createMenu(const QString &rootTitle, QPushButton *parent) { QObject::connect(version, &QAction::triggered, this, &MainWindow::onMenuActionTriggered); QObject::connect(config_sub_card, &QAction::triggered, this, &MainWindow::onMenuActionTriggered); QObject::connect(get_sub_log, &QAction::triggered, this, &MainWindow::onMenuActionTriggered); + QObject::connect(get_sub_card_voltage, &QAction::triggered, this, &MainWindow::onMenuActionTriggered); + } void MainWindow::createMenuSet(const QString &rootTitle, QPushButton *parent) { @@ -395,6 +399,8 @@ void MainWindow::onMenuActionTriggered() { ConfigSubCard(button_id); }else if (action->text() == "获取日志") { GetSubLog(button_id); + }else if (action->text() == "获取电压范围") { + GetVoltageRangeValue(button_id); } break; // 找到按钮后,跳出循环 } @@ -787,6 +793,24 @@ void MainWindow::GetSubLog(int slot){ m_tcpClient->waitForRead(); qDebug() << "bytesWritten: " << bytesWritten; } +void MainWindow::GetVoltageRangeValue(int slot){ + slot_no = slot; + qDebug() << "slot" << slot ; + GetSubCardVoltageRangeReq get_sub_card_log_req = { {0xAA, 0x55, 0xAA}, kGetVoltageRangeValue, 1, 0 }; + SlotConfig slot_config = map_slot_config[slot]; + if (slot == 0 || slot_config.slot_type == "DOM810") { + QMessageBox::information(this, QStringLiteral("提示"), QStringLiteral("请选择正确的板卡!")); + return; + } + get_sub_card_log_req.card_id = slot & 0xFF; + + char send_buf[20] = {0}; + memcpy(send_buf, (char *)&get_sub_card_log_req, sizeof(GetSubCardVoltageRangeReq)); + int length = sizeof(GetSubCardVoltageRangeReq); + qint64 bytesWritten = m_tcpClient->sendData(send_buf, length); + m_tcpClient->waitForRead(); + qDebug() << "bytesWritten: " << bytesWritten; +} void MainWindow::readData(const QByteArray &data) { qDebug() << "Received from server:" << data; diff --git a/mainwindow.h b/mainwindow.h index bb8c80e..9af83a8 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -62,6 +62,8 @@ private: void initStyle(); void connectServer(); void UploadConfigFile(uint8_t sub_cmd); + void GetVoltageRangeValue(int slot); + private slots: diff --git a/pressure_pulsation.ui b/pressure_pulsation.ui index ba2e2d9..2201551 100644 --- a/pressure_pulsation.ui +++ b/pressure_pulsation.ui @@ -394,7 +394,7 @@ - 1 + 0 diff --git a/radial_vibration.ui b/radial_vibration.ui index 4c7f455..dd15ce4 100644 --- a/radial_vibration.ui +++ b/radial_vibration.ui @@ -98,7 +98,7 @@ - 2 + 1 @@ -369,7 +369,7 @@ - 1 + 0 @@ -1156,7 +1156,7 @@ - 1 + 0 @@ -1181,12 +1181,12 @@ - + - + diff --git a/seismic_monitor.cpp b/seismic_monitor.cpp index c22462a..6d51f68 100644 --- a/seismic_monitor.cpp +++ b/seismic_monitor.cpp @@ -17,6 +17,7 @@ #include "pressure_pulsation.h" #include "channel_1_2.h" #include "channel_3_4.h" +#include "copy_channel.h" Seismic_monitor::Seismic_monitor(int slot,int cardtype, QWidget *parent) : QWidget(parent), @@ -520,3 +521,11 @@ void Seismic_monitor::on_pushButton_config_3_4_clicked() ch3_4->show(); } + +void Seismic_monitor::on_pushButton_copy_channel_clicked() +{ + CopyChannel *copy_channel = new CopyChannel(); + copy_channel->setWindowModality(Qt::ApplicationModal); + copy_channel->show(); +} + diff --git a/seismic_monitor.h b/seismic_monitor.h index 5a6565b..dd07162 100644 --- a/seismic_monitor.h +++ b/seismic_monitor.h @@ -61,6 +61,8 @@ class Seismic_monitor : public QWidget { void on_pushButton_config_3_4_clicked(); + void on_pushButton_copy_channel_clicked(); + private: Ui::Seismic_monitor *ui; void UpdateData(std::shared_ptr vib_data); diff --git a/seismic_monitor.ui b/seismic_monitor.ui index aabd2c0..a671b65 100644 --- a/seismic_monitor.ui +++ b/seismic_monitor.ui @@ -7,7 +7,7 @@ 0 0 928 - 610 + 623 @@ -1057,7 +1057,7 @@ 20 50 - 232 + 238 27 @@ -2257,7 +2257,7 @@ 20 50 - 232 + 238 27 @@ -2547,6 +2547,19 @@ + + + + + 100 + 35 + + + + 复制通道 + + + diff --git a/trust.ui b/trust.ui index c2bcd8d..967ff4e 100644 --- a/trust.ui +++ b/trust.ui @@ -369,7 +369,7 @@ - 1 + 0 diff --git a/velocity.ui b/velocity.ui index eb7e092..0c27cce 100644 --- a/velocity.ui +++ b/velocity.ui @@ -375,7 +375,7 @@ - 1 + 0