fix(DLPilot): 电源自检误把成功帧判为错误(实机 M301 回包 payload='PD' 无 ok 前缀, 改按 TYPE 译码分类)

This commit is contained in:
2026-09-17 11:16:11 +08:00
parent 419c902a38
commit a3430d15e0
+14 -3
View File
@@ -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',