support serial num config and get

This commit is contained in:
pandx 2025-11-05 17:06:19 +08:00
parent 3584fbc48e
commit 7299157dba
2 changed files with 111 additions and 4 deletions

View File

@ -98,6 +98,76 @@ class Eigenvalue:
self.offset2 = offset2 self.offset2 = offset2
class SNConfigDialog(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("年月日(ex:20251105)"))
ymd.addWidget(self.yymmdd)
serial_num = QHBoxLayout()
serial_num.addWidget(QLabel("序列号(ex:12)"))
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_sn_config)
self.cancel_btn.clicked.connect(self.reject)
def send_sn_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,
0x13, # cmd
0x01, # version
0x00 # result_code (发送时为0)
]) + struct.pack('2I', 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)

View File

@ -182,6 +182,8 @@ class SocketClientApp(QMainWindow):
self.get_version_button = QPushButton("版本") self.get_version_button = QPushButton("版本")
self.upgrade_button_sampling = QPushButton("采样率/时间") self.upgrade_button_sampling = QPushButton("采样率/时间")
self.save_button_csv = QPushButton("存储到csv") self.save_button_csv = QPushButton("存储到csv")
self.set_sn_button = QPushButton("设置序列号")
self.get_sn_button = QPushButton("获取序列号")
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) # 初始状态不可点击
@ -193,7 +195,9 @@ class SocketClientApp(QMainWindow):
self.ipv4_config_button.setEnabled(False) self.ipv4_config_button.setEnabled(False)
self.calibration_config_button.setEnabled(False) self.calibration_config_button.setEnabled(False)
self.get_version_button.setEnabled(False) self.get_version_button.setEnabled(False)
self.ip_input.setText("192.168.0.191") self.set_sn_button.setEnabled(False)
self.get_sn_button.setEnabled(False)
self.ip_input.setText("192.168.0.253")
self.port_input.setText("12345") self.port_input.setText("12345")
# 预留绘图区域 # 预留绘图区域
@ -241,6 +245,8 @@ class SocketClientApp(QMainWindow):
button_layout.addWidget(self.calibration_config_button) button_layout.addWidget(self.calibration_config_button)
button_layout.addWidget(self.get_version_button) button_layout.addWidget(self.get_version_button)
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.get_sn_button)
main_layout.addLayout(button_layout) main_layout.addLayout(button_layout)
# 添加分割线 # 添加分割线
@ -299,6 +305,8 @@ class SocketClientApp(QMainWindow):
self.calibration_config_button.clicked.connect(self.calibration_dialog) self.calibration_config_button.clicked.connect(self.calibration_dialog)
self.get_version_button.clicked.connect(self.on_button_get_version) self.get_version_button.clicked.connect(self.on_button_get_version)
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.set_sn_button.clicked.connect(self.on_button_set_sn)
# 设置布局策略,确保控件大小随窗口调整 # 设置布局策略,确保控件大小随窗口调整
self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
@ -370,6 +378,8 @@ class SocketClientApp(QMainWindow):
self.ipv4_config_button.setEnabled(True) self.ipv4_config_button.setEnabled(True)
self.calibration_config_button.setEnabled(True) self.calibration_config_button.setEnabled(True)
self.get_version_button.setEnabled(True) self.get_version_button.setEnabled(True)
self.set_sn_button.setEnabled(True)
self.get_sn_button.setEnabled(True)
self.connect_button.setText("断开") self.connect_button.setText("断开")
def on_socket_disconnected(self): def on_socket_disconnected(self):
@ -387,6 +397,8 @@ class SocketClientApp(QMainWindow):
self.ipv4_config_button.setEnabled(False) self.ipv4_config_button.setEnabled(False)
self.calibration_config_button.setEnabled(False) self.calibration_config_button.setEnabled(False)
self.get_version_button.setEnabled(False) self.get_version_button.setEnabled(False)
self.set_sn_button.setEnabled(False)
self.get_sn_button.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)
@ -522,9 +534,17 @@ class SocketClientApp(QMainWindow):
body_size = struct.calcsize(body_format) body_size = struct.calcsize(body_format)
body_data = recv_data[HEADER_SIZE:HEADER_SIZE + body_size] body_data = recv_data[HEADER_SIZE:HEADER_SIZE + body_size]
unpacked_data = struct.unpack(body_format, body_data) unpacked_data = struct.unpack(body_format, body_data)
print(f"version{unpacked_data}") print(f"mac info {unpacked_data}")
QMessageBox.information(self, "MAC地址", QMessageBox.information(self, "MAC地址",
f"50-29-4D-20-{format(unpacked_data[0], '02x')}-{format(unpacked_data[1], '02x')}") f"50-29-4D-20-{format(unpacked_data[0], '02x')}-{format(unpacked_data[1], '02x')}")
elif cmd == 0x14:
body_format = '< I I'
body_size = struct.calcsize(body_format)
body_data = recv_data[HEADER_SIZE:HEADER_SIZE + body_size]
unpacked_data = struct.unpack(body_format, body_data)
print(f"sn: {unpacked_data}")
QMessageBox.information(self, "序列号为: ",
f"年月日: {unpacked_data[0]}, 序号: {unpacked_data[1]}")
def receive_data(self, length: int): def receive_data(self, length: int):
while len(self.buffer) < length: while len(self.buffer) < length:
@ -613,7 +633,7 @@ class SocketClientApp(QMainWindow):
0x01, 0x00, 0x00, 0x01, 0x00, 0x00,
0x01 0x01
]) + rate_bytes + time_bytes ]) + rate_bytes + time_bytes
print("get channel 1 wave")
self.socket.write(packet) self.socket.write(packet)
print(packet) print(packet)
self.status_bar.showMessage(f"状态: 正在获取通道1数据采样率: {self.rate_code}, 时间: {time_value}s") self.status_bar.showMessage(f"状态: 正在获取通道1数据采样率: {self.rate_code}, 时间: {time_value}s")
@ -634,7 +654,7 @@ class SocketClientApp(QMainWindow):
0x01, 0x00, 0x00, 0x01, 0x00, 0x00,
0x02 0x02
]) + rate_bytes + time_bytes ]) + rate_bytes + time_bytes
print("get channel 2 wave")
self.socket.write(packet) self.socket.write(packet)
self.status_bar.showMessage(f"状态: 正在获取通道2数据采样率: {self.rate_code}, 时间: {time_value}s") self.status_bar.showMessage(f"状态: 正在获取通道2数据采样率: {self.rate_code}, 时间: {time_value}s")
self.socket.waitForReadyRead() self.socket.waitForReadyRead()
@ -787,6 +807,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_button_set_sn(self):
self.recv_state = ''
self.socket.readyRead.disconnect(self.on_ready_read)
dialog = SNConfigDialog(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)
@ -814,6 +841,16 @@ class SocketClientApp(QMainWindow):
except Exception as e: except Exception as e:
self.status_bar.showMessage(f"状态: 错误 - {str(e)}") self.status_bar.showMessage(f"状态: 错误 - {str(e)}")
def on_button_get_sn(self):
try:
self.recv_state = ''
self.status_bar.showMessage("状态: 正在获取数据...", 3000)
self.socket.write(bytes(
[0xAA, 0x55, 0xAA, 0x14, 0x01, 0x00])) # 发送数据
self.socket.waitForReadyRead()
except Exception as e:
self.status_bar.showMessage(f"状态: 错误 - {str(e)}")
if __name__ == '__main__': if __name__ == '__main__':
app = QApplication(sys.argv) app = QApplication(sys.argv)