- 故障录波设计说明 §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
15 KiB
故障录波板级到场轮执行手册(人要做的事,一步一行)
这份手册解决什么:录波的判据里剩下的那半轮——需要有人的手和信号发生器的验证——把它拆成"你做什么、说哪句话、会看到什么"。 它不是判据属主:判据、留痕名清单、执行顺序图全在
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 已被埋点推翻)。第二幕尾步要在这个页面上看坏段画面,页面不修好就没测试面。
- [agent] 在
App/task/ui_task.c的扫描函数给f_opendir/f_readdir失败分支加带 FR 码的留痕(顺带修伴生纪律:失败不许钉s_wave_scanned=1)→/keil-build0 错误 0 警告 → 烧录(-Rst -Run+ 回读校验,见docs/测试说明/测试工具/ST-LINK_CLI_复位使用说明.md)。 - [agent] 等 30 s 装置起来 → 远程走 UI 开回放页 → 串口读那条带 FR 码的新留痕。
- 你对结果做一次定性(agent 会把原文贴给你):FR_DENIED → 锁纪律;FR_NO_PATH/FR_NOT_READY → 路径或挂载;FR_OK 但零条目 → readdir 与卷状态交互——根因入登记簿,这条销项。
- [agent] 按根因出修复构建,重烧重验:回放页开屏应列出 WAVE00…05 六段、
↑↓切道←→切段照常、l切段不再空。 - 要烧几次板,都由 agent 盯;你只在会话里看到"请确认烧录"时回一个"烧"字(烧录动作属 Ask-first 边界,agent 不会自己烧)。
这一幕完成的标志:回放页能列出段并可翻段——agent 会给你一张远程抓屏图,画面顶行有通道名和段号。
(2026-11-02 实际交付:开屏 UA SEC6 M、l 切至 UA SEC5 M、d 切至 UB SEC5 M,均带波形与峰值标注。)
4. 第二幕「注量对表」——你只出手三次
这一幕验什么:录下来的波是不是现场那个波。判据只有四样:周波数、幅值、极性、钉轨路数——不比绝对相位(口径缘由见 docs/子系统设计/故障录波设计说明.md §4.2,别在这里重开)。
- 到你接线了:发生器正弦 50.000 Hz / 1.000 V rms 接 UA 端子(接线四条件照 ADC 注入流程 §8.3:发生器端接高阻、端子侧焊盘、万用表并接、单点共地)——接好说"接上了"。
- [agent] 先落一个基准:抓串口最近三条
meas:与wave:心跳存证(对表分母)。 - 到按键(二选一,agent 会问):你面板走 主界面 → 装置维护 → 手动录波 →(修改密码 123)→
e确认 →e执行,页面出「已请求录波」即成;或者让 agent 从 7003 远程注键——键时序它已趟熟(drain 纪律见scripts/board_ui_nav.py文件头)。 - [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 五路在交流注入时反而没钉,先怀疑接线)。 - 换点再来一遍:发生器升到能钉住 UB/UC/IB/IC/IN 任一路的量级(削顶的老口径见
docs/测试说明/专项验证/ADC前端注入验证流程.md§8.5 削顶卡;片内 ADC 五路单极性、负半周钉 0 的机理在docs/硬件平台/ADC通道映射说明.md)——这一遍你只拧幅值键,录波触发重复第 3~4 步,钉轨对表应见 ≥1 路实测钉轨且能由注入解释。 - [agent]
meas:与 104 浮点遥测对表:参考主站test/host/iec104_master.py读 YC 浮点,和meas:行、和你注入的 1.000 V 三方对齐——你只需报万用表读数。 - 坏段画面(这一幕的收尾,要第一幕修好):[agent] 造一份位翻转坏段上板(
RETR→翻一位→STOR 回同号)→ 开回放页翻到该段——判据:绝不许画成一条直线,该显拒收态;agent 抓屏给你目检。 - 到你拔线。
现场记录表(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 遥测的二次值都按这份近似标定出数——留着就要在台账注明非送检级)。
步骤(决定一通过后):
- 到你接线:UA 两点——近零(发生器 0 V 或最低档)与满度附近(如 8 V)各录一次;UN、IA 同法(IA 的注入端子与换算照
docs/测试说明/专项验证/ADC前端注入验证流程.md§8.3 同款接线,通道与量程归属看docs/硬件平台/ADC通道映射说明.md)。每次换点说一句"点了",agent 抓该点码值。 - [agent] 两点公式(算术核
App/algo/adc_cal.c的adc_cal_two_point())算各路 k/b → 经 [run_par] 写者链落配置(App/algo/run_par.c会同步回写[adc_cal]并置 valid)→ 上传/config.ini→ 复位生效。 - [agent] 验证解锁:串口
protect心跳恢复判据走数、UI 实时数据"未标定"徽标消失、104 YC 开始出浮点量。 - 到你加注:给 IA 慢慢加(定值基准 1 A:OC3 段 = 2×Ir = 2 A 二次最灵敏;OC1/OC2 是 10/5 A——加到 UI 遥测 IA 显示刚过 2 A 即可,不必真到一次侧大电流)。
- [agent] 30 s 内收证据四连:
wave:心跳 src=P 且 seg+1;/log/start.log新增一条过流启动;两者时刻对齐(段头 t0 与 start.log 时刻差在秒级内,同时看armed——只盯 ovf/计数有已知容差,docs/子系统设计/故障录波设计说明.md§9);104 遥信该元件变位上送。 - 到你拔线。决定二此时拍板,agent 按你的选择还原或保留,并把结果写进
docs/子系统设计/故障录波设计说明.md§10「板级远程半轮记录」小节。
6. 第四幕「bench 自抓与卷占用」——你可以不在场
这一幕验什么:定时自抓(T 源)那路触发,和 docs/子系统设计/故障录波设计说明.md §5.2 第四条陷阱的板级观察——写者被卷忙拖过 2 s 封存窗,必须自弃、只留一条痕、绝不焊死环。
- [agent] 构建 bench 档(
DTU_BENCH+WAVE_BENCH_AUTOCAP双层编译门,定周期自抓,App/task/adc_task.c188 行起)→ 烧录(同第一幕,等你回"烧")→ 起表看wave:心跳 src=T。 - [agent] 造占卷:FTP 传一个约 2 MB 填充文件到根目录(8.3 短名
FILLER.BIN),在下一次自抓即将到点的瞬间连续RETR它 ≥2 s(lftpd 全程持卷锁,见Drivers/BSP/NET/lftpd/lftpd_io.c持有约定)。 - 判据三件套(agent 读串口与目录,给你摘要):
wave:行err+1;串口只有一条[ERR] [WAVE] seg drop: ring abandoned;被弃段号不推进,下一段写同号;期间 104 链路与 UI 心跳照常(丢了录波不丢采集)。 - [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「独立」行的"一轮未跑"字样就可以清了。