From a3430d15e0673eb480141a13a9bab931f9143174 Mon Sep 17 00:00:00 2001 From: hulk Date: Thu, 17 Sep 2026 11:16:11 +0800 Subject: [PATCH] =?UTF-8?q?fix(DLPilot):=20=E7=94=B5=E6=BA=90=E8=87=AA?= =?UTF-8?q?=E6=A3=80=E8=AF=AF=E6=8A=8A=E6=88=90=E5=8A=9F=E5=B8=A7=E5=88=A4?= =?UTF-8?q?=E4=B8=BA=E9=94=99=E8=AF=AF(=E5=AE=9E=E6=9C=BA=20M301=20?= =?UTF-8?q?=E5=9B=9E=E5=8C=85=20payload=3D'PD'=20=E6=97=A0=20ok=20?= =?UTF-8?q?=E5=89=8D=E7=BC=80,=20=E6=94=B9=E6=8C=89=20TYPE=20=E8=AF=91?= =?UTF-8?q?=E7=A0=81=E5=88=86=E7=B1=BB)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DLPilot/src/app_gui.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/DLPilot/src/app_gui.py b/DLPilot/src/app_gui.py index 3a67935..7145ca3 100644 --- a/DLPilot/src/app_gui.py +++ b/DLPilot/src/app_gui.py @@ -878,7 +878,17 @@ class App(ctk.CTk): self._pd_timer = self.after(3000, lambda: self._pd_step_done(False, '超时')) def _pd_on_reply(self, line): - self._pd_step_done(line.startswith('← ok'), line) + self._pd_step_done(self._pd_reply_ok(line), line) + + @staticmethod + def _pd_reply_ok(line): + """应答行 -> 是否成功帧(TYPE=0xF0): 成功行正文是 payload 原文(如 'PD'/'okTL:246', + 不必有 ok 前缀), 失败行正文是 TYPE 译码词或带 err:, 据此区分""" + body = line[2:].split(' [')[0].strip() + if 'err:' in body: + return False + return not any(n in body for n in dlpc_rs485.TYPE_NAMES.values() + if n != '成功') # '成功' 不会出现在日志正文, 仅防 payload 撞词 def _pd_step_done(self, ok, line=''): if not self._pd_seq: @@ -889,8 +899,9 @@ class App(ctk.CTk): _cmd, kind = self._pd_seq.pop(0) payload = '' if ok: - payload = line[2:].split(' [')[0].strip() # 去 '← ' 与尾部 hex - payload = payload[2:].strip() if payload[:2].lower() == 'ok' else '' + body = line[2:].split(' [')[0].strip() # 去 '← ' 与尾部 hex + payload = '' if body.lower() == 'ok' else \ + (body[2:].strip() if body[:2].lower() == 'ok' else body) if kind == 'pd': self.chip_pd.configure(fg_color=CHIP_OK if ok else CHIP_ERR, text_color='#FFFFFF',