Files
STM32F4-Base/docs/测试说明/专项验证/故障录波板级到场轮执行手册.md
T
super_agent_bot 364b163663
CI / 静态门禁 (pre-commit) (push) Failing after 44s
CI / 主机侧单测 (MSVC) (push) Failing after 45s
CI / 静态门禁 (pre-commit) (pull_request) Failing after 40s
CI / 主机侧单测 (MSVC) (pull_request) Failing after 42s
docs(wave): 回放页枚举恒空修复闭环入档并销项
- 故障录波设计说明 §10 新增「回放页枚举恒空缺陷修复记录」:四步证据链
  (失败不钉表+FR 埋点 → 诊断加强 → 根因 = 读侧用反 seg_path 返回契约 →
  同页键处理缺失效)、串口实录 `scan done cnt=7` / `head path fail idx=6`、
  修复前后板级对拍图与复现口令;10-31 那段「拿不到目录条目」的定性就地
  标注被推翻(保留为推理起点留痕);§10 表「板级·回放页」行与文首状态行
  同步为「测试面已开、坏段/空态画面仍待到场地拍」。
- 到场轮执行手册 §3 第一幕标注「已完成(2026-11-02)」,表 §1 与幕间
  依赖同步;历史三步保留但注明到场时不用再跑。
- 登记簿 §2 按「完成即销项」删除该行;任务规划 README 独立行同步。
- 证据入库 `docs/测试说明/测试数据/wave_enum_20261102/`:修复前/后回放页、
  切段、切道四帧 + README(含串口实录与复现口令)。Before = `7efa58d9`
  构建(身份戳 Nov 2 2026 14:21:24),After = 本分支构建(Code=247,288 B)。

Refs #38
2026-11-02 18:33:18 +08:00

15 KiB
Raw Blame History

故障录波板级到场轮执行手册(人要做的事,一步一行)

这份手册解决什么:录波的判据里剩下的那半轮——需要有人的手和信号发生器的验证——把它拆成"你做什么、说哪句话、会看到什么"。 它不是判据属主:判据、留痕名清单、执行顺序图全在 docs/子系统设计/故障录波设计说明.md §9 与 §10;本文只写执行动作。已完成部分(2026-10-31 远程半轮六项 PASS + 2026-11-02 缺陷「回放页段表枚举恒空」修复闭环)见 §10「板级远程半轮记录」与 §10「回放页枚举恒空缺陷修复记录」。 一句话预算:你到场约 1.5~2 小时;其中真正动手的只有接三次线、按不超过六次键、拍两个决定——其余全部由会话里的 agent 跑脚本。


1. 先看结论:四幕各是谁的活

幕 名字 要你在场? 你动手的部分 agent 跑的部分 对应判据
第一幕 枚举埋点与修复上板 已完成(2026-11-02,远程) 无 改码加埋点 → 构建 → 烧录回读 → 远程开回放页 → 读 FR 码定性 → 修复重烧 docs/子系统设计/故障录波设计说明.md §10「回放页枚举恒空缺陷修复记录」
第二幕 注量对表 要到场(只有接线需要手) 接 UA 发生器线 1 次、拔 1 次;面板按 2 次键(或让 agent 远程注键) 记心跳基准 → FTP 拉段 → wave_read 量四样 → meas:/104 YC 对表 → 削顶注大一遍 → 坏段上板看回放页绝不平线 docs/子系统设计/故障录波设计说明.md §10「板级」行 +「板级·回放页」行后半
第三幕 P 触发对时刻 要到场,还含两个由你拍板的决定 IA 两点标定各接一次线 + 过流加大到 UI 见数值过 2 A 读码算 k/b → 写配置生效 → 验证解锁 → 触发后对 start.log 时刻/段号/src=P docs/子系统设计/故障录波设计说明.md §10「板级·触发来路」行
第四幕 bench 自抓与卷占用 可远程(烧录同上;占卷用 FTP 造) 无 烧 bench 构建 → 造占卷 ≥2 s → 看 err+1、一条 ring abandoned、同号重写 → 还原产品构建 docs/子系统设计/故障录波设计说明.md §10 板级行的 ring abandoned 观察项

幕间依赖:第二幕的"坏段上板看回放页"一步已不再被阻塞(第一幕 2026-11-02 已修好并板级闭环);其余各幕互相独立,可以先做不用等的。

flowchart LR
    A[第一幕: 枚举埋点修复 可远程] -->|修好才有测试面| B2[第二幕尾: 坏段与空态画面]
    B[第二幕: 注量对表 到场接线] --> B2
    C[第三幕: P触发 到场+两个决定]
    D[第四幕: bench占卷 可远程]

2. 到场检查清单(人到板边,打开这份清单逐条打勾)

  • 板上电、网灯亮:会话里让 agent 跑 ping 192.168.31.100——通了就行(这台装置一直在线,串口 COM3、网线、ST-LINK 都常年插在这台电脑上,正常都不用动)
  • 信号发生器:和 2026-10-27 那次已知电压注入用的是同一台(波形档正弦、幅值 rms 直读;接线与端子位置照 docs/测试说明/专项验证/ADC前端注入验证流程.md §8.3 那四条,本文不重抄)
  • 万用表一块(并接监视 UA 端子,接线照上一条引的那四条)
  • 打开这个仓库的 agent 会话,对它说一句:"按故障录波到场轮手册,先做第 X 幕"——后面每步它自己跑,该你出手时它会说"到你接线了"
  • 记两个口令(出厂默认;改过的用你改的):面板查看密码 000、修改密码 123;FTP admin/admin
  • 手边留 10 分钟空档给第三幕的两个决定(见 §5,谁都不许替你拍)

3. 第一幕「枚举埋点与修复上板」——已完成(2026-11-02)

状态更新:本幕已于 2026-11-02 远程做完并板级闭环,现场无需重做。 结论:10-31 的定性 被 FR 埋点推翻——目录枚举一直正常(scan done cnt=7),坏的是读侧把 wave_store_seg_path() 的成功返回值(16 字符)当失败(!= 0),f_open 永远走不到;另修同页键处理缺 ui_content_page_invalidate() 导致的切道切段不重绘。回放页现可显示真波、切段、切道, 坏段/空态两态已有测试面。完整证据与前后对拍图 → docs/子系统设计/故障录波设计说明.md §10「回放页枚举恒空缺陷修复记录」、docs/测试说明/测试数据/wave_enum_20261102/。 下面三步保留作历史记录,你到场时不用再跑。

为什么排第一:回放页原先真机恒显「无录波段」(六段文件明明都在盘上,2026-10-31 定性为 ui_task_wave_scan() 在 uiTask 上下文拿不到目录条目——该定性 2026-11-02 已被埋点推翻)。第二幕尾步要在这个页面上看坏段画面,页面不修好就没测试面。

  1. [agent] 在 App/task/ui_task.c 的扫描函数给 f_opendir/f_readdir 失败分支加带 FR 码的留痕(顺带修伴生纪律:失败不许钉 s_wave_scanned=1)→ /keil-build 0 错误 0 警告 → 烧录(-Rst -Run + 回读校验,见 docs/测试说明/测试工具/ST-LINK_CLI_复位使用说明.md)。
  2. [agent] 等 30 s 装置起来 → 远程走 UI 开回放页 → 串口读那条带 FR 码的新留痕。
  3. 你对结果做一次定性(agent 会把原文贴给你):FR_DENIED → 锁纪律;FR_NO_PATH/FR_NOT_READY → 路径或挂载;FR_OK 但零条目 → readdir 与卷状态交互——根因入登记簿,这条销项。
  4. [agent] 按根因出修复构建,重烧重验:回放页开屏应列出 WAVE00…05 六段、↑↓ 切道 ←→ 切段照常、l 切段不再空。
  5. 要烧几次板,都由 agent 盯;你只在会话里看到"请确认烧录"时回一个"烧"字(烧录动作属 Ask-first 边界,agent 不会自己烧)。

这一幕完成的标志:回放页能列出段并可翻段——agent 会给你一张远程抓屏图,画面顶行有通道名和段号。 (2026-11-02 实际交付:开屏 UA SEC6 M、l 切至 UA SEC5 M、d 切至 UB SEC5 M,均带波形与峰值标注。)


4. 第二幕「注量对表」——你只出手三次

这一幕验什么:录下来的波是不是现场那个波。判据只有四样:周波数、幅值、极性、钉轨路数——不比绝对相位(口径缘由见 docs/子系统设计/故障录波设计说明.md §4.2,别在这里重开)。

  1. 到你接线了:发生器正弦 50.000 Hz / 1.000 V rms 接 UA 端子(接线四条件照 ADC 注入流程 §8.3:发生器端接高阻、端子侧焊盘、万用表并接、单点共地)——接好说"接上了"。
  2. [agent] 先落一个基准:抓串口最近三条 meas: 与 wave: 心跳存证(对表分母)。
  3. 到按键(二选一,agent 会问):你面板走 主界面 → 装置维护 → 手动录波 →(修改密码 123)→ e 确认 → e 执行,页面出「已请求录波」即成;或者让 agent 从 7003 远程注键——键时序它已趟熟(drain 纪律见 scripts/board_ui_nav.py 文件头)。
  4. [agent] 等 wave: 心跳 seg+1 → FTP 拉回新段 → test/host/wave_read.py dump(双 CRC 必须绿)→ 量:周波数(160 点窗内基波频率,应 ≈50 Hz)、幅值(与万用表读数对,误差口径看 docs/任务规划/数据可信.md §7 前置决策 #1「精度目标」——该目标还没拍板,量完记实测数即可,别现场编合格线)、极性(触发拍在段内点 159,正半周起点看符号)、钉轨路数(UA 不该钉;clip_mask 位图对表规则照 docs/子系统设计/故障录波设计说明.md §10 板级行——V0.1 五路在交流注入时反而没钉,先怀疑接线)。
  5. 换点再来一遍:发生器升到能钉住 UB/UC/IB/IC/IN 任一路的量级(削顶的老口径见 docs/测试说明/专项验证/ADC前端注入验证流程.md §8.5 削顶卡;片内 ADC 五路单极性、负半周钉 0 的机理在 docs/硬件平台/ADC通道映射说明.md)——这一遍你只拧幅值键,录波触发重复第 3~4 步,钉轨对表应见 ≥1 路实测钉轨且能由注入解释。
  6. [agent] meas: 与 104 浮点遥测对表:参考主站 test/host/iec104_master.py 读 YC 浮点,和 meas: 行、和你注入的 1.000 V 三方对齐——你只需报万用表读数。
  7. 坏段画面(这一幕的收尾,要第一幕修好):[agent] 造一份位翻转坏段上板(RETR→翻一位→STOR 回同号)→ 开回放页翻到该段——判据:绝不许画成一条直线,该显拒收态;agent 抓屏给你目检。
  8. 到你拔线。

现场记录表(agent 会打印这张表逐行填,你核对签字即可):

注入点 万用表 段文件 量出基波 量出幅值 极性 实测钉轨 判定
UA 1.000 V 50.000 Hz 待填 WAVE__ __ Hz __ V 正/反 __ 路 过/不过
削顶注大 待填 WAVE__ __ Hz __ V 正/反 __ 路 过/不过
坏段(回放页画面) — 同号覆盖 — — — — 不平线=过

5. 第三幕「P 触发对时刻」——含两个只能你拍板的决定

先讲人话:过流启动录波的代码路已接在 protect_task.c 的启动边沿上(判据一 picked,录波同拍请求),但保护判据现在整机闭锁——adc_cal_flags() 的 VALID 位对 UA/UN/IA 三路都没置位,protect_task 直接停走判据。要让保护真出口,必须先把这三路标定;这正是 2026-10-25 你裁定"保持闭锁、不用万用表走捷径"守着的那道门。

  • 决定一(解锁):这一幕要不要用发生器为参考给 UA/UN/IA 做两点标定换 P 路验证?它不是送检级标定(端子变比还挂着 docs/任务规划/数据可信.md §5 的原理图确认),做出来的工程量是"发生器刻度下的近似值"。点头 → 往下走;摇头 → 第三幕整体顺延到标准源轮,本文其余各幕照做。
  • 决定二(还锁):这一幕验完,把标定清回闭锁(还原出厂系数)还是留着 valid 让保护继续在线(此后 UI 显示与 104 遥测的二次值都按这份近似标定出数——留着就要在台账注明非送检级)。

步骤(决定一通过后):

  1. 到你接线:UA 两点——近零(发生器 0 V 或最低档)与满度附近(如 8 V)各录一次;UN、IA 同法(IA 的注入端子与换算照 docs/测试说明/专项验证/ADC前端注入验证流程.md §8.3 同款接线,通道与量程归属看 docs/硬件平台/ADC通道映射说明.md)。每次换点说一句"点了",agent 抓该点码值。
  2. [agent] 两点公式(算术核 App/algo/adc_cal.c 的 adc_cal_two_point())算各路 k/b → 经 [run_par] 写者链落配置(App/algo/run_par.c 会同步回写 [adc_cal] 并置 valid)→ 上传 /config.ini → 复位生效。
  3. [agent] 验证解锁:串口 protect 心跳恢复判据走数、UI 实时数据"未标定"徽标消失、104 YC 开始出浮点量。
  4. 到你加注:给 IA 慢慢加(定值基准 1 A:OC3 段 = 2×Ir = 2 A 二次最灵敏;OC1/OC2 是 10/5 A——加到 UI 遥测 IA 显示刚过 2 A 即可,不必真到一次侧大电流)。
  5. [agent] 30 s 内收证据四连:wave: 心跳 src=P 且 seg+1;/log/start.log 新增一条过流启动;两者时刻对齐(段头 t0 与 start.log 时刻差在秒级内,同时看 armed——只盯 ovf/计数有已知容差,docs/子系统设计/故障录波设计说明.md §9);104 遥信该元件变位上送。
  6. 到你拔线。决定二此时拍板,agent 按你的选择还原或保留,并把结果写进 docs/子系统设计/故障录波设计说明.md §10「板级远程半轮记录」小节。

6. 第四幕「bench 自抓与卷占用」——你可以不在场

这一幕验什么:定时自抓(T 源)那路触发,和 docs/子系统设计/故障录波设计说明.md §5.2 第四条陷阱的板级观察——写者被卷忙拖过 2 s 封存窗,必须自弃、只留一条痕、绝不焊死环。

  1. [agent] 构建 bench 档(DTU_BENCH + WAVE_BENCH_AUTOCAP 双层编译门,定周期自抓,App/task/adc_task.c 188 行起)→ 烧录(同第一幕,等你回"烧")→ 起表看 wave: 心跳 src=T。
  2. [agent] 造占卷:FTP 传一个约 2 MB 填充文件到根目录(8.3 短名 FILLER.BIN),在下一次自抓即将到点的瞬间连续 RETR 它 ≥2 s(lftpd 全程持卷锁,见 Drivers/BSP/NET/lftpd/lftpd_io.c 持有约定)。
  3. 判据三件套(agent 读串口与目录,给你摘要):wave: 行 err +1;串口只有一条 [ERR] [WAVE] seg drop: ring abandoned;被弃段号不推进,下一段写同号;期间 104 链路与 UI 心跳照常(丢了录波不丢采集)。
  4. [agent] 删掉 FILLER.BIN → 重烧产品构建(等"烧"确认)→ 跑一遍启动锚点校验(/serial-boot-test 的 required/forbidden 全套)→ 释放 bench 锁。

7. 收工还原清单(一项不落,agent 逐条过给你看)

  • 发生器断线、夹子收走;UA/IA 端子恢复原样
  • FILLER.BIN 已从 / 删除;/WAVE 里只剩真实段(坏段样本若留着,在 docs/子系统设计/故障录波设计说明.md §10「板级远程半轮记录」里点名它是坏段,回放页翻到必须显拒收态——留着当常设负样本也行,二选一并记录)
  • 标定与定值按决定二处置完毕,处置结果已写进 docs/子系统设计/故障录波设计说明.md §10「板级远程半轮记录」的后续小节
  • 设备跑的是产品构建且启动锚点全过;UI 停在主菜单;两把锁(build/bench)空闲
  • 现场记录表数值入档、抓屏证据归档到会话的 ci-artifacts/wavebench/,docs/子系统设计/故障录波设计说明.md §10 状态与登记簿同步销项

8. 出问题怎么办(三条,都别硬试)

  • 页面看着"不动":九成是远程注键的帧流滞后(ACK 与推流同一条 TCP)——让 agent 按 scripts/board_ui_nav.py 文件头的三条纪律排空重取,不是板子死了。
  • FTP 报 425:两条 LIST 之间隔 0.5 s 再发(lftpd 单连接语义,老坑)。
  • 串口见任何 [ERR] 开头行或装置自己复位了:停止当前幕,原样贴给 agent——[ERR] 是门禁级信号,别重试掩盖现场。

9. 时间与顺序建议

顺序 幕 墙钟 你到场?
先 第一幕(埋点→定性→修复) 30~45 min 否(远程可跑,烧录要口头确认)
中 第二幕(注量对表) 40~60 min 是(接拔线 + 一次按键)
中 第三幕(P 触发) 30~60 min(含两个决定) 是(多点注入接线 + 加流)
后 第四幕(bench 占卷) 20~30 min 否

第二、三幕共用同一次到场(都在 UA/IA 端子上做文章);第一、四幕可以排在任意工作日远程做。四幕全过 = 录波本波收口——docs/任务规划/README.md §2.0「独立」行的"一轮未跑"字样就可以清了。