diff --git a/SamplingDialog.py b/SamplingDialog.py index 0d7bb77..55cbf75 100644 --- a/SamplingDialog.py +++ b/SamplingDialog.py @@ -168,6 +168,76 @@ class SNConfigDialog(QDialog): QMessageBox.warning(self, "失败", f"错误码: {pkg['result_code']}") +class IEPESwitchDialog(QDialog): + def __init__(self, socket: QTcpSocket, parent=None): + super().__init__(parent) + self.setWindowTitle("配置序列号") + self.socket = socket + self.setFixedWidth(300) + self.yymmdd = QLineEdit() + self.sn = QLineEdit() + self.save_btn = QPushButton("设置") + self.cancel_btn = QPushButton("取消") + + ymd = QHBoxLayout() + ymd.addWidget(QLabel("通道编号(1或2)")) + ymd.addWidget(self.yymmdd) + + serial_num = QHBoxLayout() + serial_num.addWidget(QLabel("状态(1打开,2关闭)")) + serial_num.addWidget(self.sn) + + btn_line = QHBoxLayout() + btn_line.addWidget(self.save_btn) + btn_line.addWidget(self.cancel_btn) + + main_layout = QVBoxLayout() + main_layout.addLayout(ymd) + main_layout.addLayout(serial_num) + main_layout.addLayout(btn_line) + self.setLayout(main_layout) + + self.save_btn.clicked.connect(self.send_config) + self.cancel_btn.clicked.connect(self.reject) + + def send_config(self): + try: + ymd_int = int(self.yymmdd.text()) + sn_int = int(self.sn.text()) + except ValueError: + QMessageBox.warning(self, "输入错误", "请输入合法的十进制数") + return + + packet = bytes([ + 0xAA, 0x55, 0xAA, + 0x15, # cmd + 0x01, # version + 0x00 # result_code (发送时为0) + ]) + struct.pack('2B', ymd_int, sn_int) + + self.socket.write(packet) + if not self.socket.waitForBytesWritten(1000): + QMessageBox.critical(self, "错误", "发送失败") + return + + if not self.socket.waitForReadyRead(3000): + QMessageBox.critical(self, "超时", "未收到回应") + return + + data = bytes(self.socket.readAll()) + pkg = PackageHead.parse(data) + + if not pkg: + QMessageBox.critical(self, "错误", "返回数据格式无效") + return + + if pkg['result_code'] == 0x00: + QMessageBox.information(self, "成功", "配置成功") + self.accept() + else: + QMessageBox.warning(self, "配置失败", f"错误码: {pkg['result_code']}") + + class MacConfigDialog(QDialog): def __init__(self, socket: QTcpSocket, parent=None): super().__init__(parent) diff --git a/mainwindow.py b/mainwindow.py index 17c4f88..f628813 100644 --- a/mainwindow.py +++ b/mainwindow.py @@ -8,7 +8,7 @@ from typing import Tuple, Optional import matplotlib import matplotlib.pyplot as plt from PyQt5.QtCore import QTimer -from PyQt5.QtWidgets import QFrame, QStatusBar, QSizePolicy, QFileDialog, QApplication, QMainWindow, QWidget +from PyQt5.QtWidgets import QFrame, QStatusBar, QSizePolicy, QFileDialog, QApplication, QMainWindow, QWidget, QAction from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas, NavigationToolbar2QT from scipy.fft import fft, fftfreq @@ -184,6 +184,7 @@ class SocketClientApp(QMainWindow): self.save_button_csv = QPushButton("存储到csv") self.set_sn_button = QPushButton("设置序列号") self.get_sn_button = QPushButton("获取序列号") + self.iepe_power_switch = QPushButton("IEPE供电开关") self.get_data_button.setEnabled(False) # 初始状态不可点击 self.get_data_button2.setEnabled(False) # 初始状态不可点击 self.upgrade_button.setEnabled(False) # 初始状态不可点击 @@ -197,6 +198,7 @@ class SocketClientApp(QMainWindow): self.get_version_button.setEnabled(False) self.set_sn_button.setEnabled(False) self.get_sn_button.setEnabled(False) + self.iepe_power_switch.setEnabled(False) self.ip_input.setText("192.168.0.253") self.port_input.setText("12345") @@ -247,6 +249,7 @@ class SocketClientApp(QMainWindow): button_layout.addWidget(self.save_button_csv) button_layout.addWidget(self.set_sn_button) button_layout.addWidget(self.get_sn_button) + button_layout.addWidget(self.iepe_power_switch) main_layout.addLayout(button_layout) # 添加分割线 @@ -291,6 +294,9 @@ class SocketClientApp(QMainWindow): central_widget.setLayout(main_layout) self.setCentralWidget(central_widget) + # 创建菜单栏 + self.create_menus() + # 事件绑定 self.connect_button.clicked.connect(self.connect_to_server) self.get_data_button.clicked.connect(self.on_button_clicked) @@ -307,9 +313,42 @@ class SocketClientApp(QMainWindow): self.batch_process_button.clicked.connect(self.on_button_batch) self.get_sn_button.clicked.connect(self.on_button_get_sn) self.set_sn_button.clicked.connect(self.on_button_set_sn) + self.iepe_power_switch.clicked.connect(self.on_iepe_power_switch_cb) # 设置布局策略,确保控件大小随窗口调整 self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) + def create_menus(self): + # 创建菜单栏 + menubar = self.menuBar() + + # 创建帮助菜单 + help_menu = menubar.addMenu('帮助') + + # 创建版本信息菜单项 + version_action = QAction('版本信息', self) + version_action.triggered.connect(self.dnm_version_info_cb) # 触发显示版本信息 + help_menu.addAction(version_action) + + # 设置状态栏右下角显示版本号 + self.status_bar.showMessage('版本号:2.2', 20000) + + def dnm_version_info_cb(self): + msg = QMessageBox() + + # 设置消息框的标题 + msg.setWindowTitle("软件版本信息") + + # 设置消息框的内容 + msg.setText("软件版本号:2.2\n" + "支持的分布式节点版本号:2.2以上\n" + "更新日期:2025-11-12") + + # 设置按钮 + msg.setStandardButtons(QMessageBox.Ok) + + # 显示消息框 + msg.exec_() + def on_button_batch(self): dialog = BatchOperationDialog() if dialog.exec_() == QDialog.Accepted: @@ -380,6 +419,7 @@ class SocketClientApp(QMainWindow): self.get_version_button.setEnabled(True) self.set_sn_button.setEnabled(True) self.get_sn_button.setEnabled(True) + self.iepe_power_switch.setEnabled(True) self.connect_button.setText("断开") def on_socket_disconnected(self): @@ -399,6 +439,7 @@ class SocketClientApp(QMainWindow): self.get_version_button.setEnabled(False) self.set_sn_button.setEnabled(False) self.get_sn_button.setEnabled(False) + self.iepe_power_switch.setEnabled(False) # self.current_reconnect_attempts = 0 # self.reconnect_timer.start(self.reconnect_interval) @@ -814,6 +855,13 @@ class SocketClientApp(QMainWindow): dialog.exec_() self.socket.readyRead.connect(self.on_ready_read) + def on_iepe_power_switch_cb(self): + self.recv_state = '' + self.socket.readyRead.disconnect(self.on_ready_read) + dialog = IEPESwitchDialog(self.socket, self) + dialog.exec_() + self.socket.readyRead.connect(self.on_ready_read) + def calibration_dialog(self): self.recv_state = '' self.socket.readyRead.disconnect(self.on_ready_read)