YD_TrainingCompetition_Api/debug-serial-gateway-download.md
2026-06-10 11:16:46 +08:00

2.7 KiB

[OPEN] serial-gateway-download

问题描述

  • 连接 2.4G 网关后,终端设备没有接收到数据。
  • “下载本场”功能没有作用。
  • 需要参照参考项目 Jump_window/Form1 的逻辑排查并修复。

当前症状

  • 后端可以打开串口。
  • 终端设备未见有效接收结果。
  • 需要确认串口收发、协议解析、下载本场发送顺序是否与旧版一致。

假设

  1. 打开的串口不是网关真实串口。
  2. 下载本场的发送帧内容或顺序与旧版 Form1 不一致。
  3. 接收解析规则与设备协议不匹配,导致有效帧被丢弃。
  4. 场次/设备地址映射与旧版不一致,数据下载到了错误地址。
  5. 前端触发了接口,但后端未实际执行关键串口发送链路。

计划

  1. 对照参考项目 Form1 收发逻辑。
  2. 给串口打开、串口发送、串口接收解析、下载本场流程加运行时埋点。
  3. 复现下载本场与接收数据流程。
  4. 基于日志证据确定根因后再做最小修复。

证据

  • 用户确认秩序册中的 001.002.003.033.074 这类字段是“终端设备通信地址”。
  • 用户反馈模板 秩序册1场2人_模板 .xlsx 中,003.002.003.005.052 属于赵其三,但计数落到了李胜席。
  • 实际读取模板表后,原始顺序是:李胜席 -> 001.002.003.023.200,赵其三 -> 003.002.003.005.052,秩序册解析顺序本身正确。
  • 旧版 Form1 接收逻辑直接使用 MyJumper[PerChangCi, ReceivedByte[2]],说明设备回传索引是当前场次内的 0 基槽位。
  • 当前新后端默认把 participant DeviceId 设为 slotIndex + 1,前端也传了 1/2/3...,因此第二个手柄回传索引 1 会被映射到第一个人。
  • 旧版 Form1.button2_Click 的下载顺序为:06 06 -> FF 13 04 00 03 -> 0D 0D -> 姓名 -> RFID -> 30 -> 0A 0A。
  • 修复前日志缺少 55FF130400030000000000AA,且没有帧间等待与发送前清缓存。
  • 修复后日志已出现 55FF130400030000000000AA,且发送时间间隔符合旧版 100ms/50ms。
  • 当前运行日志仍显示打开端口为 COM1,且暂无接收日志,说明“错误串口/网关未响应”仍是剩余风险。

已实施修复

  1. 下载本场发送顺序改为对齐 Form1.button2_Click。
  2. 每帧发送前执行清接收缓存,发送后按旧版加入延时。
  3. 前端不再默认自动选择第一个串口,避免误开 COM1。
  4. 前端秩序册解析新增“通信地址/手柄地址/设备地址/终端地址”字段识别,并将该字段传入后端下载地址帧。
  5. 后端 participant 默认设备号改为当前场次 0 基槽位,前端移除错误的 1 基 deviceId 覆盖,修正计数错位问题。