YD_TrainingCompetition_Api/debug-stop-reset-control.md
2026-06-10 15:54:30 +08:00

3.4 KiB
Raw Permalink Blame History

Debug Session: stop-reset-control

  • Status: [OPEN]
  • Issue: 点击停止后设备仍继续计数;清零按钮通常需要点两下才生效。
  • Debug Server: http://127.0.0.1:7777/event
  • Log File: .dbg/trae-debug-log-stop-reset-control.ndjson

Reproduction Steps

  1. 进入比赛页,确认串口连接到真实网关串口。
  2. 下载本场并点击开始。
  3. 等待 2-3 秒后点击“停止”,观察设备是否继续计数。
  4. 再点击“清零”,观察是否需要点两下才能生效。

Hypotheses & Verification

ID Hypothesis Likelihood Effort Evidence
A 停止命令已发出,但设备随后持续上报运行态数据,导致现场看起来“仍未停计” High Med Pending
B 清零第一次点击时,命令发送成功但设备尚未完成状态切换,第二次点击才落入稳定时机 High Med Pending
C 停止/清零的前后顺序或帧间延时与旧 WinForms 不一致,导致设备未按预期处理 High Med Pending
D 后端在按钮操作后立即广播了本地状态,但稍后设备快照又把模式/计数覆盖回页面 Med Med Pending

Log Evidence

  • 预修复日志确认停止链路已进入后端:
    • CompetitionSessionService.StopAsync 进入,日志时间 1781076318182
    • 随后 SerialGateway.SendAsync 发出 5530000000000000000000AA,日志时间 1781076318183
    • 约 215ms 后,CompetitionSessionService.StopAsync 已把会话切到 IsTesting=false,日志时间 1781076318398
  • 但停止后设备仍持续回传运行态:
    • 在 1781076318433 之后仍持续出现 device snapshot observed
    • 快照里 snapshot.Mode=2,且第二个设备从 Counter=64 继续增长到 Counter=66
    • 说明“停止按钮无效”不是接口没调到,也不是串口没发,而是设备没有稳定进入停止态
  • 清零链路同样已进入后端:
    • CompetitionSessionService.ResetCurrentRoundAsync 进入,日志时间 1781076319542
    • 同时 SerialGateway.SendAsync 发出 550A0A0000000000000000AA
    • 本地状态已在 1781076319543 被清为 Count=0 / Mode=0
  • 但清零前一刻设备仍停留在运行态:
    • reset button entered 时当前场次仍能看到 participant.Mode=2
    • 清零后紧接着又收到 snapshot.Mode=2
    • 说明第一次清零经常发生在设备尚未真正停稳的窗口内
  • 旧版 WinForms 对照结论:
    • 单独停止按钮会先把本地 Mode 置为 0,再发送 0x30
    • 下载完成收尾流程是先 0x30 再 0x0A
    • 当前后端停止时没有同步把当前场次参与者 Mode 置回 0,清零也没有先补一次停止

Verification Conclusion

  • A confirmed:停止命令已发出,但设备随后继续回传运行态数据。
  • B confirmed:清零第一次点击常落在设备未停稳的窗口里,因此体感上需要第二次。
  • C confirmed:当前停止/清零时序与旧版关键细节仍有差异,至少缺少“停止后本地模式归零”和“清零前先停”的收尾动作。
  • D partially confirmed:后端不会在停止后继续写分,但停止广播中的 participant.Mode 仍保留旧值,页面会继续显示运行态颜色。
  • 最小修复方向:
    • 停止命令改为更稳妥的双发 0x30
    • 手动停止时立即把当前场次参与者 Mode 归零
    • 清零前先补一次停止,再发送 0x0A