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']}")
|
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):
|
class MacConfigDialog(QDialog):
|
||||||
def __init__(self, socket: QTcpSocket, parent=None):
|
def __init__(self, socket: QTcpSocket, parent=None):
|
||||||
super().__init__(parent)
|
super().__init__(parent)
|
||||||
@ -672,7 +742,8 @@ class CalibrationDialog(QDialog):
|
|||||||
def process_wave_packet(self, wave_data):
|
def process_wave_packet(self, wave_data):
|
||||||
data = wave_data # 接收所有数据
|
data = wave_data # 接收所有数据
|
||||||
data = np.frombuffer(data, dtype=np.int32) # 根据实际数据格式转换
|
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
|
self.scaled_data = data * LSB_32BIT
|
||||||
|
|
||||||
result = self.get_extremes(self.scaled_data)
|
result = self.get_extremes(self.scaled_data)
|
||||||
@ -682,7 +753,7 @@ class CalibrationDialog(QDialog):
|
|||||||
print(f"top10_max 去除最大的数据后的平均值1:{mean_max}")
|
print(f"top10_max 去除最大的数据后的平均值1:{mean_max}")
|
||||||
mean_min = self.mean_without_min_optimized(result['top10_min'])
|
mean_min = self.mean_without_min_optimized(result['top10_min'])
|
||||||
print(f"top10_min 去除最大的数据后的平均值2:{mean_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:
|
if self.type_cb.currentIndex() == 2:
|
||||||
self.value_labels[self.type_index].setText(str(round(pp, 6)))
|
self.value_labels[self.type_index].setText(str(round(pp, 6)))
|
||||||
print(f"pp :{mean_max - mean_min}")
|
print(f"pp :{mean_max - mean_min}")
|
||||||
|
|||||||
@ -8,7 +8,8 @@ from typing import Tuple, Optional
|
|||||||
import matplotlib
|
import matplotlib
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
from PyQt5.QtCore import QTimer
|
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 matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas, NavigationToolbar2QT
|
||||||
from scipy.fft import fft, fftfreq
|
from scipy.fft import fft, fftfreq
|
||||||
|
|
||||||
@ -184,6 +185,7 @@ class SocketClientApp(QMainWindow):
|
|||||||
self.save_button_csv = QPushButton("存储到csv")
|
self.save_button_csv = QPushButton("存储到csv")
|
||||||
self.set_sn_button = QPushButton("设置序列号")
|
self.set_sn_button = QPushButton("设置序列号")
|
||||||
self.get_sn_button = QPushButton("获取序列号")
|
self.get_sn_button = QPushButton("获取序列号")
|
||||||
|
self.iepe_power_switch = QPushButton("IEPE供电开关")
|
||||||
self.get_data_button.setEnabled(False) # 初始状态不可点击
|
self.get_data_button.setEnabled(False) # 初始状态不可点击
|
||||||
self.get_data_button2.setEnabled(False) # 初始状态不可点击
|
self.get_data_button2.setEnabled(False) # 初始状态不可点击
|
||||||
self.upgrade_button.setEnabled(False) # 初始状态不可点击
|
self.upgrade_button.setEnabled(False) # 初始状态不可点击
|
||||||
@ -197,6 +199,7 @@ class SocketClientApp(QMainWindow):
|
|||||||
self.get_version_button.setEnabled(False)
|
self.get_version_button.setEnabled(False)
|
||||||
self.set_sn_button.setEnabled(False)
|
self.set_sn_button.setEnabled(False)
|
||||||
self.get_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.ip_input.setText("192.168.0.253")
|
||||||
self.port_input.setText("12345")
|
self.port_input.setText("12345")
|
||||||
|
|
||||||
@ -247,6 +250,7 @@ class SocketClientApp(QMainWindow):
|
|||||||
button_layout.addWidget(self.save_button_csv)
|
button_layout.addWidget(self.save_button_csv)
|
||||||
button_layout.addWidget(self.set_sn_button)
|
button_layout.addWidget(self.set_sn_button)
|
||||||
button_layout.addWidget(self.get_sn_button)
|
button_layout.addWidget(self.get_sn_button)
|
||||||
|
button_layout.addWidget(self.iepe_power_switch)
|
||||||
main_layout.addLayout(button_layout)
|
main_layout.addLayout(button_layout)
|
||||||
|
|
||||||
# 添加分割线
|
# 添加分割线
|
||||||
@ -291,6 +295,9 @@ class SocketClientApp(QMainWindow):
|
|||||||
central_widget.setLayout(main_layout)
|
central_widget.setLayout(main_layout)
|
||||||
self.setCentralWidget(central_widget)
|
self.setCentralWidget(central_widget)
|
||||||
|
|
||||||
|
# 创建菜单栏
|
||||||
|
self.create_menus()
|
||||||
|
|
||||||
# 事件绑定
|
# 事件绑定
|
||||||
self.connect_button.clicked.connect(self.connect_to_server)
|
self.connect_button.clicked.connect(self.connect_to_server)
|
||||||
self.get_data_button.clicked.connect(self.on_button_clicked)
|
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.batch_process_button.clicked.connect(self.on_button_batch)
|
||||||
self.get_sn_button.clicked.connect(self.on_button_get_sn)
|
self.get_sn_button.clicked.connect(self.on_button_get_sn)
|
||||||
self.set_sn_button.clicked.connect(self.on_button_set_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)
|
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):
|
def on_button_batch(self):
|
||||||
dialog = BatchOperationDialog()
|
dialog = BatchOperationDialog()
|
||||||
if dialog.exec_() == QDialog.Accepted:
|
if dialog.exec_() == QDialog.Accepted:
|
||||||
@ -364,6 +404,8 @@ class SocketClientApp(QMainWindow):
|
|||||||
port = int(self.port_input.text())
|
port = int(self.port_input.text())
|
||||||
self.socket.abort()
|
self.socket.abort()
|
||||||
self.socket.connectToHost(ip, port)
|
self.socket.connectToHost(ip, port)
|
||||||
|
# 设置 TCP Keep-Alive
|
||||||
|
self.socket.setSocketOption(QAbstractSocket.KeepAliveOption, True)
|
||||||
|
|
||||||
def on_socket_connected(self):
|
def on_socket_connected(self):
|
||||||
self.status_bar.showMessage("状态: 连接成功")
|
self.status_bar.showMessage("状态: 连接成功")
|
||||||
@ -380,6 +422,7 @@ class SocketClientApp(QMainWindow):
|
|||||||
self.get_version_button.setEnabled(True)
|
self.get_version_button.setEnabled(True)
|
||||||
self.set_sn_button.setEnabled(True)
|
self.set_sn_button.setEnabled(True)
|
||||||
self.get_sn_button.setEnabled(True)
|
self.get_sn_button.setEnabled(True)
|
||||||
|
self.iepe_power_switch.setEnabled(True)
|
||||||
self.connect_button.setText("断开")
|
self.connect_button.setText("断开")
|
||||||
|
|
||||||
def on_socket_disconnected(self):
|
def on_socket_disconnected(self):
|
||||||
@ -399,6 +442,7 @@ class SocketClientApp(QMainWindow):
|
|||||||
self.get_version_button.setEnabled(False)
|
self.get_version_button.setEnabled(False)
|
||||||
self.set_sn_button.setEnabled(False)
|
self.set_sn_button.setEnabled(False)
|
||||||
self.get_sn_button.setEnabled(False)
|
self.get_sn_button.setEnabled(False)
|
||||||
|
self.iepe_power_switch.setEnabled(False)
|
||||||
# self.current_reconnect_attempts = 0
|
# self.current_reconnect_attempts = 0
|
||||||
# self.reconnect_timer.start(self.reconnect_interval)
|
# self.reconnect_timer.start(self.reconnect_interval)
|
||||||
|
|
||||||
@ -814,6 +858,13 @@ class SocketClientApp(QMainWindow):
|
|||||||
dialog.exec_()
|
dialog.exec_()
|
||||||
self.socket.readyRead.connect(self.on_ready_read)
|
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):
|
def calibration_dialog(self):
|
||||||
self.recv_state = ''
|
self.recv_state = ''
|
||||||
self.socket.readyRead.disconnect(self.on_ready_read)
|
self.socket.readyRead.disconnect(self.on_ready_read)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user