Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 36baabeb5f | |||
| afa83653a3 | |||
| 03046499ee |
+92
-13
@@ -89,7 +89,7 @@ story = []
|
|||||||
story.append(Spacer(1, 6*cm))
|
story.append(Spacer(1, 6*cm))
|
||||||
story.append(Paragraph("边坡变形监测-变形(位移)<br/>自动测量系统配置工具<br/>使用说明书", style_cover_title))
|
story.append(Paragraph("边坡变形监测-变形(位移)<br/>自动测量系统配置工具<br/>使用说明书", style_cover_title))
|
||||||
story.append(Spacer(1, 1.5*cm))
|
story.append(Spacer(1, 1.5*cm))
|
||||||
story.append(Paragraph("版本 V1.0", style_cover_sub))
|
story.append(Paragraph("版本 V2.0", style_cover_sub))
|
||||||
story.append(PageBreak())
|
story.append(PageBreak())
|
||||||
|
|
||||||
# 目录
|
# 目录
|
||||||
@@ -106,12 +106,16 @@ toc_items = [
|
|||||||
(False, " 4.2 参数配置区域"),
|
(False, " 4.2 参数配置区域"),
|
||||||
(False, " 4.3 设备参数信息区域"),
|
(False, " 4.3 设备参数信息区域"),
|
||||||
(False, " 4.4 低功耗配置区域"),
|
(False, " 4.4 低功耗配置区域"),
|
||||||
(False, " 4.5 通讯日志区域"),
|
(False, " 4.5 功率与激光配置区域"),
|
||||||
|
(False, " 4.6 通讯日志区域"),
|
||||||
(True, "5 操作指南"),
|
(True, "5 操作指南"),
|
||||||
(False, " 5.1 连接设备"),
|
(False, " 5.1 连接设备"),
|
||||||
(False, " 5.2 查询设备参数"),
|
(False, " 5.2 查询设备参数"),
|
||||||
(False, " 5.3 修改Lora信道频率"),
|
(False, " 5.3 修改Lora信道频率"),
|
||||||
(False, " 5.4 发送自定义指令"),
|
(False, " 5.4 全功率时段配置"),
|
||||||
|
(False, " 5.5 激光控制"),
|
||||||
|
(False, " 5.6 设备升级"),
|
||||||
|
(False, " 5.7 发送自定义指令"),
|
||||||
(True, "6 指令参考"),
|
(True, "6 指令参考"),
|
||||||
(True, "7 常见问题与故障排除"),
|
(True, "7 常见问题与故障排除"),
|
||||||
]
|
]
|
||||||
@@ -131,8 +135,11 @@ features = [
|
|||||||
"自动识别并列出本机可用串口",
|
"自动识别并列出本机可用串口",
|
||||||
"通过RS485串口连接激光示踪传感器设备",
|
"通过RS485串口连接激光示踪传感器设备",
|
||||||
"一键查询设备全部参数(软件版本、硬件版本、MAC地址、电池电量、注册状态等)",
|
"一键查询设备全部参数(软件版本、硬件版本、MAC地址、电池电量、注册状态等)",
|
||||||
"修改Lora无线通信信道频率(410.1MHz ~ 524.9MHz,步进200kHz)",
|
"修改Lora无线通信信道频率(410.1MHz ~ 492.9MHz,步进200kHz)",
|
||||||
"查看设备低功耗配置参数(采集间隔、上报时间、紧急上报间隔/时长)",
|
"查看设备低功耗配置参数(采集间隔、上报时间、紧急上报间隔/时长)",
|
||||||
|
"查看功率与激光参数,并配置全功率工作时间段",
|
||||||
|
"控制激光开关及设置自动关闭时间",
|
||||||
|
"通过通用串口升级协议(V1.1)实现设备固件升级",
|
||||||
"支持发送自定义AT指令",
|
"支持发送自定义AT指令",
|
||||||
"通讯日志实时显示,方便调试",
|
"通讯日志实时显示,方便调试",
|
||||||
]
|
]
|
||||||
@@ -209,16 +216,28 @@ story.append(make_table(
|
|||||||
))
|
))
|
||||||
|
|
||||||
story.append(Paragraph("4.2 参数配置区域", style_h2))
|
story.append(Paragraph("4.2 参数配置区域", style_h2))
|
||||||
story.append(Paragraph("包含Lora参数配置和查询操作:", style_body))
|
story.append(Paragraph("包含Lora参数、全功率时段配置、激光控制以及查询/升级操作:", style_body))
|
||||||
story.append(Paragraph("Lora 参数:", style_body))
|
story.append(Paragraph("Lora 参数:", style_body))
|
||||||
story.append(Paragraph(
|
story.append(Paragraph(
|
||||||
"信道频率(fc):下拉选择Lora通信频率,范围410.1MHz ~ 524.9MHz,步进200kHz(共575个信道)。"
|
"信道频率(fc):下拉选择Lora通信频率,范围410.1MHz ~ 492.9MHz,步进200kHz(共415个信道)。"
|
||||||
'选择后点击"发送"按钮即可修改设备频率。',
|
'选择后点击"发送"按钮即可修改设备频率。',
|
||||||
style_bullet
|
style_bullet
|
||||||
))
|
))
|
||||||
story.append(Paragraph("查询当前配置:", style_body))
|
story.append(Paragraph("全功率时段配置:", style_body))
|
||||||
story.append(Paragraph(
|
story.append(Paragraph(
|
||||||
'点击"查询当前配置(para)"按钮,向设备发送para指令,查询设备全部参数。查询结果将自动解析并显示在下方的参数信息区域。',
|
"设置全功率工作时间段:开始时间(0~23时)、持续时间(0~24时,0=关闭),"
|
||||||
|
'输入后点击"发送"按钮下发配置。',
|
||||||
|
style_bullet
|
||||||
|
))
|
||||||
|
story.append(Paragraph("激光控制:", style_body))
|
||||||
|
story.append(Paragraph(
|
||||||
|
'点击"打开"/"关闭"按钮控制激光开关;"自动关闭(min)"设置激光自动关闭时间(0=禁用),点击"设置"下发。',
|
||||||
|
style_bullet
|
||||||
|
))
|
||||||
|
story.append(Paragraph("查询与升级按钮:", style_body))
|
||||||
|
story.append(Paragraph(
|
||||||
|
'点击"查询当前配置(para)"按钮,软件向设备发送para指令查询全部参数。'
|
||||||
|
'查询结果将自动解析并显示在下方参数信息区域。点击"设备升级"按钮可打开设备升级对话框。',
|
||||||
style_bullet
|
style_bullet
|
||||||
))
|
))
|
||||||
|
|
||||||
@@ -254,14 +273,29 @@ story.append(make_table(
|
|||||||
col_widths=[5*cm, 11*cm]
|
col_widths=[5*cm, 11*cm]
|
||||||
))
|
))
|
||||||
|
|
||||||
story.append(Paragraph("4.5 通讯日志区域", style_h2))
|
story.append(Paragraph("4.5 功率与激光配置区域", style_h2))
|
||||||
|
story.append(Paragraph("显示通过para指令查询到的功率与激光运行参数:", style_body))
|
||||||
|
story.append(make_table(
|
||||||
|
["参数名称", "说明"],
|
||||||
|
[
|
||||||
|
["开始时间", "全功率工作时间段的开始时刻"],
|
||||||
|
["结束时间", "全功率工作时间段的结束时刻"],
|
||||||
|
["全功率时长", "全功率工作持续时间"],
|
||||||
|
["当前模式", "当前工作模式(全功率/低功耗)"],
|
||||||
|
["激光状态", "激光当前开关状态(ON/OFF)"],
|
||||||
|
["自动关闭", "激光自动关闭时间"],
|
||||||
|
],
|
||||||
|
col_widths=[5*cm, 11*cm]
|
||||||
|
))
|
||||||
|
|
||||||
|
story.append(Paragraph("4.6 通讯日志区域", style_h2))
|
||||||
story.append(Paragraph("界面底部,分为左右两部分:", style_body))
|
story.append(Paragraph("界面底部,分为左右两部分:", style_body))
|
||||||
story.append(Paragraph("日志窗口:实时显示串口通讯内容,带时间戳。不同类型信息��不同颜色区分:", style_body))
|
story.append(Paragraph("日志窗口:实时显示串口通讯内容。不同类型信息用不同颜色区分:", style_body))
|
||||||
story.append(make_table(
|
story.append(make_table(
|
||||||
["颜色", "含义"],
|
["颜色", "含义"],
|
||||||
[
|
[
|
||||||
["蓝色", "发送的指令"],
|
["蓝色", "发送的指令"],
|
||||||
["绿色", "接收到的��据"],
|
["绿色", "接收到的数据"],
|
||||||
["浅绿色", "系统提示信息"],
|
["浅绿色", "系统提示信息"],
|
||||||
["红色", "错误信息"],
|
["红色", "错误信息"],
|
||||||
],
|
],
|
||||||
@@ -310,7 +344,44 @@ story.append(Paragraph(
|
|||||||
style_warning
|
style_warning
|
||||||
))
|
))
|
||||||
|
|
||||||
story.append(Paragraph("5.4 发送自定义指令", style_h2))
|
story.append(Paragraph("5.4 全功率时段配置", style_h2))
|
||||||
|
steps = [
|
||||||
|
"确认串口已成功连接。",
|
||||||
|
'在"参数配置"区域的"全功率时段配置"中输入开始时间(0~23)和持续时间(0~24,0=关闭)。',
|
||||||
|
'点击"发送"按钮下发配置。',
|
||||||
|
'发送后建议点击"查询当前配置"验证配置是否生效。',
|
||||||
|
]
|
||||||
|
for i, s in enumerate(steps, 1):
|
||||||
|
story.append(step(i, s))
|
||||||
|
|
||||||
|
story.append(Paragraph("5.5 激光控制", style_h2))
|
||||||
|
steps = [
|
||||||
|
"确认串口已成功连接。",
|
||||||
|
'点击"打开"或"关闭"按钮控制激光开关。',
|
||||||
|
"如需要设置自动关闭时间,在\"自动关闭(min)\"框中输入分钟数(0=禁用),点击\"设置\"下发。",
|
||||||
|
'发送后建议点击"查询当前配置"验证激光状态。',
|
||||||
|
]
|
||||||
|
for i, s in enumerate(steps, 1):
|
||||||
|
story.append(step(i, s))
|
||||||
|
|
||||||
|
story.append(Paragraph("5.6 设备升级", style_h2))
|
||||||
|
story.append(Paragraph("设备升级用于通过通用串口升级协议对设备固件进行升级。升级期间请保持设备供电正常。", style_body))
|
||||||
|
steps = [
|
||||||
|
"确认串口已成功连接。",
|
||||||
|
'点击"参数配置"区域中的"设备升级"按钮,打开设备升级对话框。',
|
||||||
|
"在对话框中选择要更新的固件文件(.bin),并确认设备MAC地址(默认自动填充本机MAC)。",
|
||||||
|
'点击"开始升级"按钮,软件通过协议下发固件并向设备逐包传输。',
|
||||||
|
"握住安装、进度条显示传输进度;升级日志显示握手/下发/完成等过程信息。",
|
||||||
|
"升级完成后可在同一对话框再次点击\"开始升级\"重复升级,无需关闭重开。",
|
||||||
|
]
|
||||||
|
for i, s in enumerate(steps, 1):
|
||||||
|
story.append(step(i, s))
|
||||||
|
story.append(Paragraph(
|
||||||
|
"注意:升级过程中请勿断开串口或断电,否则可能导致设备无法正常启动。",
|
||||||
|
style_warning
|
||||||
|
))
|
||||||
|
|
||||||
|
story.append(Paragraph("5.7 发送自定义指令", style_h2))
|
||||||
steps = [
|
steps = [
|
||||||
"确认串口已成功连接。",
|
"确认串口已成功连接。",
|
||||||
'在通讯日志区域右侧的"自定义指令"输入框中输入AT指令。',
|
'在通讯日志区域右侧的"自定义指令"输入框中输入AT指令。',
|
||||||
@@ -328,7 +399,10 @@ story.append(make_table(
|
|||||||
[
|
[
|
||||||
["para", "查询设备全部参数", "para"],
|
["para", "查询设备全部参数", "para"],
|
||||||
["lora fc <频率值>", "设置Lora信道频率(单位Hz)", "lora fc 433100000"],
|
["lora fc <频率值>", "设置Lora信道频率(单位Hz)", "lora fc 433100000"],
|
||||||
["(自定义指令)", "在自定义指令输入框中输入任意AT指令", "—"],
|
["fpocfg <开始> <持续>", "设置全功率工作时间段(时,0=关闭)", "fpocfg 8 2"],
|
||||||
|
["laser on / off", "打开/关闭激光", "laser on"],
|
||||||
|
["laser time <min>", "设置激光自动关闭时间(0=禁用)", "laser time 10"],
|
||||||
|
["(自定义指令)", "在自定义指令输入框中输入任意指令", "—"],
|
||||||
],
|
],
|
||||||
col_widths=[5*cm, 6*cm, 5*cm]
|
col_widths=[5*cm, 6*cm, 5*cm]
|
||||||
))
|
))
|
||||||
@@ -365,6 +439,11 @@ qa_items = [
|
|||||||
"1. 点击更多信息;\n"
|
"1. 点击更多信息;\n"
|
||||||
"2. 点击仍要运行按钮;\n"
|
"2. 点击仍要运行按钮;\n"
|
||||||
"3. 此提示是因为exe未做代码签名,软件本身安全。"),
|
"3. 此提示是因为exe未做代码签名,软件本身安全。"),
|
||||||
|
("点击设备升级后无握手/升级失败",
|
||||||
|
"1. 确认设备MAC地址正确;\n"
|
||||||
|
"2. 确认固件文件为正确的.bin文件;\n"
|
||||||
|
"3. 确认串口连接正常、设备供电稳定;\n"
|
||||||
|
"4. 查看通讯日志中的设备调试信息辅助排查。"),
|
||||||
]
|
]
|
||||||
for q, a in qa_items:
|
for q, a in qa_items:
|
||||||
story.append(Paragraph("Q: " + q, style_q))
|
story.append(Paragraph("Q: " + q, style_q))
|
||||||
|
|||||||
+15
-121
@@ -64,7 +64,9 @@ class LaserTracingConfigApp:
|
|||||||
|
|
||||||
ttk.Label(conn_frame, text="波特率:").grid(row=0, column=3, sticky=tk.W, padx=2)
|
ttk.Label(conn_frame, text="波特率:").grid(row=0, column=3, sticky=tk.W, padx=2)
|
||||||
self.baudrate_var = tk.StringVar(value="9600")
|
self.baudrate_var = tk.StringVar(value="9600")
|
||||||
ttk.Label(conn_frame, textvariable=self.baudrate_var, width=8).grid(row=0, column=4, padx=2)
|
self.baudrate_combo = ttk.Combobox(conn_frame, textvariable=self.baudrate_var, width=8,
|
||||||
|
values=["2400", "4800", "9600", "19200", "38400", "57600", "115200"])
|
||||||
|
self.baudrate_combo.grid(row=0, column=4, padx=2)
|
||||||
|
|
||||||
ttk.Label(conn_frame, text="数据位:").grid(row=0, column=5, sticky=tk.W, padx=2)
|
ttk.Label(conn_frame, text="数据位:").grid(row=0, column=5, sticky=tk.W, padx=2)
|
||||||
self.databits_var = tk.StringVar(value="8")
|
self.databits_var = tk.StringVar(value="8")
|
||||||
@@ -93,47 +95,22 @@ class LaserTracingConfigApp:
|
|||||||
self._fc_display_to_value = {}
|
self._fc_display_to_value = {}
|
||||||
self._fc_value_to_display = {}
|
self._fc_value_to_display = {}
|
||||||
fc_displays = []
|
fc_displays = []
|
||||||
freq = 410100000
|
freq = 470100000
|
||||||
ch = 1
|
ch = 0
|
||||||
while freq <= 492900000:
|
while freq <= 492600000:
|
||||||
display = f"信道{ch}: {freq / 1000000:.1f}MHz"
|
display = f"信道{ch}: {freq / 1000000:.1f}MHz"
|
||||||
fc_displays.append(display)
|
fc_displays.append(display)
|
||||||
self._fc_display_to_value[display] = str(freq)
|
self._fc_display_to_value[display] = str(freq)
|
||||||
self._fc_value_to_display[str(freq)] = display
|
self._fc_value_to_display[str(freq)] = display
|
||||||
freq += 200000
|
freq += 500000
|
||||||
ch += 1
|
ch += 1
|
||||||
self.lora_fc_display_var = tk.StringVar(value=self._fc_value_to_display.get("433100000", fc_displays[0] if fc_displays else ""))
|
self.lora_fc_display_var = tk.StringVar(value=self._fc_value_to_display.get("470100000", fc_displays[0] if fc_displays else ""))
|
||||||
self.lora_fc_combo = ttk.Combobox(lora_frame, textvariable=self.lora_fc_display_var,
|
self.lora_fc_combo = ttk.Combobox(lora_frame, textvariable=self.lora_fc_display_var,
|
||||||
values=fc_displays, width=20, state="readonly")
|
values=fc_displays, width=20, state="readonly")
|
||||||
self.lora_fc_combo.grid(row=0, column=1, padx=2)
|
self.lora_fc_combo.grid(row=0, column=1, padx=2)
|
||||||
ttk.Button(lora_frame, text="发送", command=self._send_lora_config).grid(row=0, column=3, padx=8)
|
ttk.Button(lora_frame, text="发送", command=self._send_lora_config).grid(row=0, column=3, padx=8)
|
||||||
ttk.Label(lora_frame, text="设置LoRa通信信道频率", foreground="gray").grid(row=0, column=4, padx=(0, 2), sticky=tk.W)
|
ttk.Label(lora_frame, text="设置LoRa通信信道频率", foreground="gray").grid(row=0, column=4, padx=(0, 2), sticky=tk.W)
|
||||||
|
|
||||||
# 全功率时段配置
|
|
||||||
fpo_cfg = ttk.LabelFrame(config_frame, text="全功率时段配置", padding=6)
|
|
||||||
fpo_cfg.pack(fill=tk.X, pady=(0, 4))
|
|
||||||
ttk.Label(fpo_cfg, text="开始时间(h):").grid(row=0, column=0, sticky=tk.W, padx=2)
|
|
||||||
self._fpo_start_var = tk.StringVar(value="0")
|
|
||||||
ttk.Entry(fpo_cfg, textvariable=self._fpo_start_var, width=8).grid(row=0, column=1, padx=2)
|
|
||||||
ttk.Label(fpo_cfg, text="持续时间(h):").grid(row=0, column=2, sticky=tk.W, padx=2)
|
|
||||||
self._fpo_dur_var = tk.StringVar(value="0")
|
|
||||||
ttk.Entry(fpo_cfg, textvariable=self._fpo_dur_var, width=8).grid(row=0, column=3, padx=2)
|
|
||||||
ttk.Button(fpo_cfg, text="发送", command=self._send_fpo_cfg).grid(row=0, column=4, padx=8)
|
|
||||||
ttk.Label(fpo_cfg, text="设置全功率时间段,开始0~23时,持续0~24时(0=关闭)", foreground="gray").grid(
|
|
||||||
row=0, column=5, padx=(0, 2), sticky=tk.W)
|
|
||||||
|
|
||||||
# 激光控制配置
|
|
||||||
laser_cfg = ttk.LabelFrame(config_frame, text="激光控制", padding=6)
|
|
||||||
laser_cfg.pack(fill=tk.X, pady=(0, 4))
|
|
||||||
ttk.Button(laser_cfg, text="打 开", command=lambda: self._send_command("laser on")).grid(row=0, column=0, padx=2)
|
|
||||||
ttk.Button(laser_cfg, text="关 闭", command=lambda: self._send_command("laser off")).grid(row=0, column=1, padx=2)
|
|
||||||
ttk.Label(laser_cfg, text="自动关闭(min):").grid(row=0, column=2, sticky=tk.W, padx=2)
|
|
||||||
self._laser_time_var = tk.StringVar(value="10")
|
|
||||||
ttk.Entry(laser_cfg, textvariable=self._laser_time_var, width=8).grid(row=0, column=3, padx=2)
|
|
||||||
ttk.Button(laser_cfg, text="设置", command=self._send_laser_time).grid(row=0, column=4, padx=8)
|
|
||||||
ttk.Label(laser_cfg, text="打开/关闭激光,自动关闭时间(0=禁用)", foreground="gray").grid(
|
|
||||||
row=0, column=5, padx=(0, 2), sticky=tk.W)
|
|
||||||
|
|
||||||
# 查询按钮行
|
# 查询按钮行
|
||||||
query_frame = ttk.Frame(config_frame)
|
query_frame = ttk.Frame(config_frame)
|
||||||
query_frame.pack(fill=tk.X, pady=4)
|
query_frame.pack(fill=tk.X, pady=4)
|
||||||
@@ -191,37 +168,6 @@ class LaserTracingConfigApp:
|
|||||||
val_label.grid(row=row, column=col + 1, sticky=tk.W + tk.E, padx=(0, 10), pady=2)
|
val_label.grid(row=row, column=col + 1, sticky=tk.W + tk.E, padx=(0, 10), pady=2)
|
||||||
self._lp_labels[key] = val_label
|
self._lp_labels[key] = val_label
|
||||||
|
|
||||||
# 功率与激光配置
|
|
||||||
pwr_frame = ttk.LabelFrame(self.root, text="功率与激光配置", padding=6)
|
|
||||||
pwr_frame.pack(fill=tk.X, padx=8, pady=4)
|
|
||||||
|
|
||||||
for col in range(4):
|
|
||||||
pwr_frame.columnconfigure(col, weight=1)
|
|
||||||
|
|
||||||
self._pwr_labels = {}
|
|
||||||
pwr_params = [
|
|
||||||
("fpo_start", "开始时间"),
|
|
||||||
("fpo_end", "结束时间"),
|
|
||||||
("fpo_dur", "全功率时长"),
|
|
||||||
("fpo_mode", "当前模式"),
|
|
||||||
]
|
|
||||||
for idx, (key, label) in enumerate(pwr_params):
|
|
||||||
row = idx // 2
|
|
||||||
col = (idx % 2) * 2
|
|
||||||
ttk.Label(pwr_frame, text=f"{label}:", font=("SimSun", 9)).grid(row=row, column=col, sticky=tk.W, padx=(0, 2), pady=2)
|
|
||||||
val_label = ttk.Label(pwr_frame, text="-", font=("SimSun", 9), foreground="green")
|
|
||||||
val_label.grid(row=row, column=col + 1, sticky=tk.W + tk.E, padx=(0, 10), pady=2)
|
|
||||||
self._pwr_labels[key] = val_label
|
|
||||||
|
|
||||||
# 激光另起一行
|
|
||||||
laser_row = 2
|
|
||||||
ttk.Label(pwr_frame, text="激光状态:", font=("SimSun", 9)).grid(row=laser_row, column=0, sticky=tk.W, padx=(0, 2), pady=2)
|
|
||||||
self._laser_state_label = ttk.Label(pwr_frame, text="-", font=("SimSun", 9), foreground="green")
|
|
||||||
self._laser_state_label.grid(row=laser_row, column=1, sticky=tk.W + tk.E, padx=(0, 10), pady=2)
|
|
||||||
ttk.Label(pwr_frame, text="自动关闭:", font=("SimSun", 9)).grid(row=laser_row, column=2, sticky=tk.W, padx=(0, 2), pady=2)
|
|
||||||
self._laser_autooff_label = ttk.Label(pwr_frame, text="-", font=("SimSun", 9), foreground="green")
|
|
||||||
self._laser_autooff_label.grid(row=laser_row, column=3, sticky=tk.W + tk.E, padx=(0, 10), pady=2)
|
|
||||||
|
|
||||||
# 通讯日志区域
|
# 通讯日志区域
|
||||||
log_frame = ttk.LabelFrame(self.root, text="通讯日志", padding=4)
|
log_frame = ttk.LabelFrame(self.root, text="通讯日志", padding=4)
|
||||||
log_frame.pack(fill=tk.BOTH, expand=True, padx=8, pady=(4, 8))
|
log_frame.pack(fill=tk.BOTH, expand=True, padx=8, pady=(4, 8))
|
||||||
@@ -308,6 +254,9 @@ class LaserTracingConfigApp:
|
|||||||
except serial.SerialException as e:
|
except serial.SerialException as e:
|
||||||
messagebox.showerror("连接失败", str(e))
|
messagebox.showerror("连接失败", str(e))
|
||||||
self._log(f"连接失败: {e}", "error")
|
self._log(f"连接失败: {e}", "error")
|
||||||
|
except ValueError:
|
||||||
|
messagebox.showwarning("参数错误", "波特率必须为数字")
|
||||||
|
self._log("波特率必须为数字", "error")
|
||||||
|
|
||||||
def _disconnect(self):
|
def _disconnect(self):
|
||||||
self.running = False
|
self.running = False
|
||||||
@@ -344,11 +293,6 @@ class LaserTracingConfigApp:
|
|||||||
|
|
||||||
def _on_data_received(self, text):
|
def _on_data_received(self, text):
|
||||||
self._log(text, "recv", newline=False)
|
self._log(text, "recv", newline=False)
|
||||||
# 等待 dch ch1 切换完成后再发送 para
|
|
||||||
if getattr(self, "_pending_dch", False) and "Debug channel switched to RS485_1" in self.recv_buffer:
|
|
||||||
self._pending_dch = False
|
|
||||||
self._send_command("para")
|
|
||||||
return
|
|
||||||
# 收到完整para回应:起始与结束各出现一次分隔符(****)后才解析
|
# 收到完整para回应:起始与结束各出现一次分隔符(****)后才解析
|
||||||
marker = "**********************************************************"
|
marker = "**********************************************************"
|
||||||
if self.recv_buffer.count(marker) >= 2:
|
if self.recv_buffer.count(marker) >= 2:
|
||||||
@@ -375,8 +319,7 @@ class LaserTracingConfigApp:
|
|||||||
# ─────────────────── 指令发送 ───────────────────
|
# ─────────────────── 指令发送 ───────────────────
|
||||||
|
|
||||||
def _send_para(self):
|
def _send_para(self):
|
||||||
self._pending_dch = True
|
self._send_command("para")
|
||||||
self._send_command("dch ch1")
|
|
||||||
|
|
||||||
def _launch_upgrade(self):
|
def _launch_upgrade(self):
|
||||||
"""打开设备升级对话框。复用当前已连接的串口,不断开连接。"""
|
"""打开设备升级对话框。复用当前已连接的串口,不断开连接。"""
|
||||||
@@ -393,32 +336,6 @@ class LaserTracingConfigApp:
|
|||||||
return
|
return
|
||||||
self._send_command(f"lora fc {fc}")
|
self._send_command(f"lora fc {fc}")
|
||||||
|
|
||||||
def _send_fpo_cfg(self):
|
|
||||||
try:
|
|
||||||
start = int(self._fpo_start_var.get().strip())
|
|
||||||
dur = int(self._fpo_dur_var.get().strip())
|
|
||||||
except ValueError:
|
|
||||||
messagebox.showwarning("参数错误", "请输入有效整数")
|
|
||||||
return
|
|
||||||
if not (0 <= start <= 23):
|
|
||||||
messagebox.showwarning("参数错误", "开始小时范围 0~23")
|
|
||||||
return
|
|
||||||
if not (0 <= dur <= 24):
|
|
||||||
messagebox.showwarning("参数错误", "时长范围 0~24 (0=关闭)")
|
|
||||||
return
|
|
||||||
self._send_command(f"fpocfg {start} {dur}")
|
|
||||||
|
|
||||||
def _send_laser_time(self):
|
|
||||||
try:
|
|
||||||
mins = int(self._laser_time_var.get().strip())
|
|
||||||
except ValueError:
|
|
||||||
messagebox.showwarning("参数错误", "请输入有效整数")
|
|
||||||
return
|
|
||||||
if mins < 0:
|
|
||||||
messagebox.showwarning("参数错误", "关闭时间不能为负")
|
|
||||||
return
|
|
||||||
self._send_command(f"laser time {mins}")
|
|
||||||
|
|
||||||
# ─────────────────── 回应解析 ───────────────────
|
# ─────────────────── 回应解析 ───────────────────
|
||||||
|
|
||||||
def _parse_para_response(self, text):
|
def _parse_para_response(self, text):
|
||||||
@@ -436,8 +353,6 @@ class LaserTracingConfigApp:
|
|||||||
(r"Register Status:\s*(.*)", "注册状态"),
|
(r"Register Status:\s*(.*)", "注册状态"),
|
||||||
(r"Lora.*?fc\s*(\d+)", "Lora频率"),
|
(r"Lora.*?fc\s*(\d+)", "Lora频率"),
|
||||||
(r"LpCfg:\s*(.*)", "低功耗配置"),
|
(r"LpCfg:\s*(.*)", "低功耗配置"),
|
||||||
(r"FpoCfg:\s*(.*)", "全功率工作时间段"),
|
|
||||||
(r"Laser:\s*(.*)", "激光"),
|
|
||||||
]
|
]
|
||||||
|
|
||||||
found = {}
|
found = {}
|
||||||
@@ -450,6 +365,9 @@ class LaserTracingConfigApp:
|
|||||||
# 更新参数显示
|
# 更新参数显示
|
||||||
for key in self._para_order:
|
for key in self._para_order:
|
||||||
value = found.get(key, "-")
|
value = found.get(key, "-")
|
||||||
|
if key == "注册状态" and value != "-":
|
||||||
|
raw = value.strip().lower()
|
||||||
|
value = "已注册" if raw in ("1", "registered", "reg", "ok", "true", "yes", "success") else "未注册"
|
||||||
if key in self._para_labels:
|
if key in self._para_labels:
|
||||||
self._para_labels[key].configure(text=value)
|
self._para_labels[key].configure(text=value)
|
||||||
|
|
||||||
@@ -499,30 +417,6 @@ class LaserTracingConfigApp:
|
|||||||
if et_match:
|
if et_match:
|
||||||
self._lp_labels["ET"].configure(text=format_min(et_match.group(1)))
|
self._lp_labels["ET"].configure(text=format_min(et_match.group(1)))
|
||||||
|
|
||||||
# 解析全功率工作时间段
|
|
||||||
if "全功率工作时间段" in found:
|
|
||||||
fpo_str = found["全功率工作时间段"]
|
|
||||||
m_start = re.search(r"Start:(\S+)", fpo_str)
|
|
||||||
m_dur = re.search(r"Dur:(\S+)", fpo_str)
|
|
||||||
m_end = re.search(r"End:(\S+)", fpo_str)
|
|
||||||
if m_start:
|
|
||||||
self._pwr_labels["fpo_start"].configure(text=m_start.group(1).replace(",", ""))
|
|
||||||
if m_end:
|
|
||||||
self._pwr_labels["fpo_end"].configure(text=m_end.group(1).replace(",", ""))
|
|
||||||
if m_dur:
|
|
||||||
self._pwr_labels["fpo_dur"].configure(text=m_dur.group(1).replace(",", ""))
|
|
||||||
self._pwr_labels["fpo_mode"].configure(text="低功耗" if "LowPower" in fpo_str else "全功率")
|
|
||||||
|
|
||||||
# 解析激光状态
|
|
||||||
if "激光" in found:
|
|
||||||
laser_str = found["激光"]
|
|
||||||
m_state = re.search(r"^([A-Za-z]+)", laser_str)
|
|
||||||
m_autooff = re.search(r"AutoOff:\s*(\S+)", laser_str)
|
|
||||||
if m_state:
|
|
||||||
self._laser_state_label.configure(text=m_state.group(1).replace(",", ""))
|
|
||||||
if m_autooff:
|
|
||||||
self._laser_autooff_label.configure(text=m_autooff.group(1).replace(",", ""))
|
|
||||||
|
|
||||||
# ─────────────────── 日志 ───────────────────
|
# ─────────────────── 日志 ───────────────────
|
||||||
|
|
||||||
def _clear_log(self):
|
def _clear_log(self):
|
||||||
|
|||||||
Binary file not shown.
BIN
Binary file not shown.
Reference in New Issue
Block a user