Compare commits
3 Commits
7299157dba
...
dfe6dd1647
| Author | SHA1 | Date | |
|---|---|---|---|
| dfe6dd1647 | |||
| d0d1fc8098 | |||
| e431e048d9 |
@ -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}")
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user