Compare commits

...

3 Commits

Author SHA1 Message Date
dfe6dd1647 add codes. 2025-11-13 14:48:48 +08:00
d0d1fc8098 fix LSB_32BIT bug and set keep alive option 2025-11-13 11:02:38 +08:00
e431e048d9 support iepe switch and add version info 2025-11-12 12:00:48 +08:00
2 changed files with 125 additions and 3 deletions

View File

@ -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)
@ -672,7 +742,8 @@ class CalibrationDialog(QDialog):
def process_wave_packet(self, wave_data):
data = wave_data # 接收所有数据
data = np.frombuffer(data, dtype=np.int32) # 根据实际数据格式转换
LSB_32BIT = (2.8 / (2 ** 31)) * ((750 + 287) / 287) * 1000 / 10.2
LSB_32BIT = (2.8 / (2 ** 31)) * ((750 + 249) / 249) * 1000 / 10.2
# LSB_32BIT = (2.8 / (2 ** 31)) * ((750 + 287) / 287) * 1000 / 10.2
self.scaled_data = data * LSB_32BIT
result = self.get_extremes(self.scaled_data)
@ -682,7 +753,7 @@ class CalibrationDialog(QDialog):
print(f"top10_max 去除最大的数据后的平均值1{mean_max}")
mean_min = self.mean_without_min_optimized(result['top10_min'])
print(f"top10_min 去除最大的数据后的平均值2{mean_min}")
pp = mean_max - mean_min
pp = (mean_max - mean_min) / 100
if self.type_cb.currentIndex() == 2:
self.value_labels[self.type_index].setText(str(round(pp, 6)))
print(f"pp :{mean_max - mean_min}")

View File

@ -8,7 +8,8 @@ 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.QtNetwork import QAbstractSocket
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 +185,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 +199,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 +250,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 +295,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 +314,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.3\n"
"支持的分布式节点版本号2.2以上\n"
"更新日期2025-11-13")
# 设置按钮
msg.setStandardButtons(QMessageBox.Ok)
# 显示消息框
msg.exec_()
def on_button_batch(self):
dialog = BatchOperationDialog()
if dialog.exec_() == QDialog.Accepted:
@ -364,6 +404,8 @@ class SocketClientApp(QMainWindow):
port = int(self.port_input.text())
self.socket.abort()
self.socket.connectToHost(ip, port)
# 设置 TCP Keep-Alive
self.socket.setSocketOption(QAbstractSocket.KeepAliveOption, True)
def on_socket_connected(self):
self.status_bar.showMessage("状态: 连接成功")
@ -380,6 +422,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 +442,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 +858,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)