Files
STM32F4-Base/docs/测试说明/专项验证/故障录波板级到场轮执行手册.md
T
wandering1 f81bb38b64
CI / 静态门禁 (pre-commit) (push) Failing after 5m21s
CI / 主机侧单测 (MSVC) (push) Successful in 29s
docs(测试说明): 录波远程半轮收尾回写并新增到场执行手册
- 故障录波设计说明 §10 新增「板级远程半轮记录」:真 FAT 落盘、触发
  时序三样本、冷却恢复、轮转同号覆盖、PC 侧坏段拒收、104 并发
  (参考主站 16/18 绿,两条 COV = 标定闭锁腿物理预期)六项 PASS;
  drop 400–640 点/窗入账为纯观察项(丢样本不丢采集实测面)。
- 新缺陷「回放页段表枚举恒空(板级)」登记登记簿 §2:五面判别钉死
  唯 ui_task_wave_scan() 在 uiTask 拿不到目录条目;伴生纪律缺陷
  f_opendir 失败仍钉 s_wave_scanned=1(修复方向同记录)。
- 新增 docs/测试说明/专项验证/故障录波板级到场轮执行手册.md:剩余
  人到场判据拆成四幕,逐步写清谁出手/做什么/会看到什么,含到场
  检查清单、现场记录表、两个用户决定点、收工还原清单与分诊;
  索引挂行 docs/README.md 与 测试说明/README.md(专项 5→6 篇)。
- scripts/board_ui_nav.py 文件头补三条 7003 驱动纪律(ACK 与推流
  同 TCP 须 drain 静默、home 首 e 是重开最近页捷径、级联光标记忆)。
- 自我更正入档:起草台架计划时带入的「≤15 s 判据」全仓无属主,
  已溯源改指 WAVE_SEAL_TIMEOUT_MS 2 s 封存窗(真锚);「§1.2 两个
  待台架核数值」为错引,改指 §4.2 兜底行与 wave_ring.h 冷却时长。

bench 锁已 release、设备未改烧;证据包在 ci-artifacts/wavebench/。

gate: doc-links --all --sections-strict rc=0(218 篇 3103 处 无法判定
0);mermaid 预检新发 0;py_compile 过;七文件 BOM/CR/U+FFFD 全零。
2026-11-01 14:10:53 +08:00

131 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 故障录波板级到场轮执行手册(人要做的事,一步一行)
> **这份手册解决什么**:录波的判据里剩下的那半轮——需要**有人的手和信号发生器**的验证——把它拆成"你做什么、说哪句话、会看到什么"。
> **它不是判据属主**:判据、留痕名清单、执行顺序图全在 `docs/子系统设计/故障录波设计说明.md` §9 与 §10;本文只写**执行动作**。已完成部分(2026-10-31 远程半轮六项 PASS + 缺陷「回放页段表枚举恒空」)见 §10「板级远程半轮记录」。
> **一句话预算**:你到场约 1.5~2 小时;其中真正动手的只有**接三次线、按不超过六次键、拍两个决定**——其余全部由会话里的 agent 跑脚本。
---
## 1. 先看结论:四幕各是谁的活
| 幕 | 名字 | 要你在场? | 你动手的部分 | agent 跑的部分 | 对应判据 |
|---|---|---|---|---|---|
| 第一幕 | 枚举埋点与修复上板 | **可远程**(ST-LINK 在本机就不用到场) | 无(或帮忙看一眼烧录没报错) | 改码加埋点 → 构建 → 烧录回读 → 远程开回放页 → 读 FR 码定性 → 修复重烧 | 登记簿「回放页段表枚举恒空」 |
| 第二幕 | 注量对表 | **要到场**(只有接线需要手) | 接 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` 观察项 |
幕间依赖:**只有第二幕的"坏段上板看回放页"一步等第一幕修好**;其余各幕互相独立,可以先做不用等的。
```mermaid
flowchart LR
A[第一幕: 枚举埋点修复 可远程] -->|修好才有测试面| B2[第二幕尾: 坏段与空态画面]
B[第二幕: 注量对表 到场接线] --> B2
C[第三幕: P触发 到场+两个决定]
D[第四幕: bench占卷 可远程]
```
---
## 2. 到场检查清单(人到板边,打开这份清单逐条打勾)
- [ ] 板上电、网灯亮:会话里让 agent 跑 `ping 192.168.1.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-10-31 已钉死是 `ui_task_wave_scan()` 在 uiTask 上下文拿不到目录条目)。第二幕尾步要在这个页面上看坏段画面,页面不修好就没测试面。
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 会给你一张远程抓屏图,画面顶行有通道名和段号。
---
## 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「独立」行的"一轮未跑"字样就可以清了。