From 36baabeb5f948cf01def0f8e6e13916feb280922 Mon Sep 17 00:00:00 2001 From: YuanHongbin <975559679@qq.com> Date: Wed, 2 Sep 2026 10:48:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=85=8D=E7=BD=AE=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=EF=BC=9A=E6=B3=A2=E7=89=B9=E7=8E=87=E5=8F=AF=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E3=80=81=E7=A7=BB=E9=99=A4=E6=BF=80=E5=85=89=E4=B8=8E?= =?UTF-8?q?=E5=85=A8=E5=8A=9F=E7=8E=87=E6=97=B6=E6=AE=B5=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E3=80=81=E8=B0=83=E6=95=B4LoRa=E4=BF=A1=E9=81=93=E5=B9=B6?= =?UTF-8?q?=E8=A7=84=E8=8C=83=E6=B3=A8=E5=86=8C=E7=8A=B6=E6=80=81=E6=98=BE?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- laser_tracing_config.py | 128 +++++----------------------------------- 1 file changed, 14 insertions(+), 114 deletions(-) diff --git a/laser_tracing_config.py b/laser_tracing_config.py index 0f18e83..f9a9ab0 100644 --- a/laser_tracing_config.py +++ b/laser_tracing_config.py @@ -64,7 +64,9 @@ class LaserTracingConfigApp: ttk.Label(conn_frame, text="波特率:").grid(row=0, column=3, sticky=tk.W, padx=2) 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) self.databits_var = tk.StringVar(value="8") @@ -93,47 +95,22 @@ class LaserTracingConfigApp: self._fc_display_to_value = {} self._fc_value_to_display = {} fc_displays = [] - freq = 410100000 - ch = 1 - while freq <= 492900000: + freq = 470100000 + ch = 0 + while freq <= 492600000: display = f"信道{ch}: {freq / 1000000:.1f}MHz" fc_displays.append(display) self._fc_display_to_value[display] = str(freq) self._fc_value_to_display[str(freq)] = display - freq += 200000 + freq += 500000 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, values=fc_displays, width=20, state="readonly") 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.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.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) 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.pack(fill=tk.BOTH, expand=True, padx=8, pady=(4, 8)) @@ -308,6 +254,9 @@ class LaserTracingConfigApp: except serial.SerialException as e: messagebox.showerror("连接失败", str(e)) self._log(f"连接失败: {e}", "error") + except ValueError: + messagebox.showwarning("参数错误", "波特率必须为数字") + self._log("波特率必须为数字", "error") def _disconnect(self): self.running = False @@ -387,32 +336,6 @@ class LaserTracingConfigApp: return 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): @@ -430,8 +353,6 @@ class LaserTracingConfigApp: (r"Register Status:\s*(.*)", "注册状态"), (r"Lora.*?fc\s*(\d+)", "Lora频率"), (r"LpCfg:\s*(.*)", "低功耗配置"), - (r"FpoCfg:\s*(.*)", "全功率工作时间段"), - (r"Laser:\s*(.*)", "激光"), ] found = {} @@ -444,6 +365,9 @@ class LaserTracingConfigApp: # 更新参数显示 for key in self._para_order: 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: self._para_labels[key].configure(text=value) @@ -493,30 +417,6 @@ class LaserTracingConfigApp: if et_match: 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):