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 全零。
This commit is contained in:
@@ -158,6 +158,7 @@ docs/
|
||||
|---|---|
|
||||
| [`ADC前端注入验证流程.md`](测试说明/专项验证/ADC前端注入验证流程.md) | **ADC 前端与两片转换器的台架注入验证**(已知电压注入验证的执行侧,实测证据 → `docs/硬件平台/ADC通道映射说明.md` §8.1):注入点清单 / 期望码值表 / 零点·线性·映射·极性·节奏五步(每步自带现场记录表,边做边填);**不需示波器与信号源**,一块万用表即可 |
|
||||
| [`启动日志原子性复验流程.md`](测试说明/专项验证/启动日志原子性复验流程.md) | **控制台整行独占 / 崩溃遗言原子性**这类**行级完整性**判据的固定动作与口径(`docs/子系统设计/控制台单写者日志设计说明.md` 的验收侧:那边讲怎么修,这边讲怎么证明修好了、以及为什么"标记全中"不等于"日志没坏") |
|
||||
| [`故障录波板级到场轮执行手册.md`](测试说明/专项验证/故障录波板级到场轮执行手册.md) | **录波剩余台架判据的执行手册**(判据属主是 `docs/子系统设计/故障录波设计说明.md` §10,这里只写"人做什么、说哪句话、会看到什么"):四幕(枚举埋点修复 / 注量对表 / P 触发对时刻含两个用户决定 / bench 自抓占卷)各自标清到场与否,配到场检查清单、现场记录表与收工还原清单 |
|
||||
| [`链路延迟测试说明.md`](测试说明/专项验证/链路延迟测试说明.md) | 网络链路时延分段定义、判定基线、执行流程 |
|
||||
| [`模拟器差距清单.md`](测试说明/专项验证/模拟器差距清单.md) | **PC 模拟器 vs 真机差距登记册**(保护判据门禁可信度依据;改动涉及网络/日志/硬件层前必查 §3 决策规则) |
|
||||
| [`存储维护与容量恢复.md`](测试说明/专项验证/存储维护与容量恢复.md) | 全片擦除恢复 dhara 坏块记账 / 容量恢复 |
|
||||
|
||||
+1
-1
@@ -65,7 +65,7 @@ docs/测试说明/专项验证/模拟器差距清单.md §2.3「开机账本 boo
|
||||
| **6** | 保护元件与采集增强 | 等待标准源或硬件改版 | 保护先解除未标定闭锁;三相同时刻类功能等 V0.2 硬件 |
|
||||
| **7** | 验证窗口事项 | 逢条件顺带 | CI runner、PC peer、CH340、负向故障注入条件到位时执行 |
|
||||
| **8** | 独立模块与暂缓项 | 当前不排 | 开入开出、SNTP、104 文件传输单独立项;RS-485 与内存优化按各自重启条件 |
|
||||
| **独立** | **故障录波(1 kHz · 8 路原始码值 · 单通道回放)** | **代码面已交付(板级判据一轮未跑)** | 用户裁定 2026-10-29 **录波先行**:数据面最小闭环 → 手动与保护启动触发 → 回放页。三块的**代码侧判据已收口**(主机单测 113 / 170 / 110 全 rc=0、双端编译 0 错误 0 警告、板端编码器与 PC 侧解码器字节级互验、手动录波与录波回放两叶已绑页、内容页黄金参考扩至 66 张);**没跑的是板级那一轮**(注 1 V / 50 Hz、FTP 拉回、与 `meas:` 行和 104 浮点遥测对表、段文件 CRC 不符必须拒收、回放页看真段)。**板级判据、留痕名清单与执行顺序图的属主 = docs/子系统设计/故障录波设计说明.md §9 与 §10**(原卡片登记簿 2026-10-30 随销项并入后删除);**与 UI 道互斥**(菜单树与中文字库是整文件生成物,同刻只允许一条道写)——本波按此串行执行:UI 道在数据面与接线冻结之后才动生成物 |
|
||||
| **独立** | **故障录波(1 kHz · 8 路原始码值 · 单通道回放)** | **代码面已交付;2026-10-31 远程半轮过六项,余注量对表与人到场项** | 用户裁定 2026-10-29 **录波先行**:数据面最小闭环 → 手动与保护启动触发 → 回放页。三块的**代码侧判据已收口**(主机单测 113 / 170 / 110 全 rc=0、双端编译 0 错误 0 警告、板端编码器与 PC 侧解码器字节级互验、手动录波与录波回放两叶已绑页、内容页黄金参考扩至 66 张);**2026-10-31 远程半轮已过六项**(真 FAT 落盘、触发→落盘全部落在 2 s 封存超时窗内、冷却恢复、轮转、PC 侧坏段拒收、冻结窗内 104 并发),同轮发现缺陷「回放页段表枚举恒空」登记 `登记簿.md` §2;**没跑的是注量对表那半轮**(注 1 V / 50 Hz、与 `meas:` 行和 104 浮点遥测对表、回放页放真段与坏段画面——等枚举缺陷修复)加 P 触发 / bench T 源,全部结果与清单见 `docs/子系统设计/故障录波设计说明.md` §10「板级远程半轮记录」。**板级判据、留痕名清单与执行顺序图的属主 = docs/子系统设计/故障录波设计说明.md §9 与 §10**(原卡片登记簿 2026-10-30 随销项并入后删除);**与 UI 道互斥**(菜单树与中文字库是整文件生成物,同刻只允许一条道写)——本波按此串行执行:UI 道在数据面与接线冻结之后才动生成物 |
|
||||
|
||||
### 2.1 关键依赖
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
|---|---|---|---|---|
|
||||
| dhara 重试自旋残留 | **dhara 重试自旋残留**——`try_recover()` 的 `DHARA_MAX_RETRIES`(8) 自旋在坏块密集时仍可能长时间占用 defaultTask(喂狗点) | 2026-10-02 | 低优先:现有 `vol_lock` + 喂狗节奏缓解;若台架再出"存储侧喂狗饥饿"再排期 | `Lib/dhara/map.c` |
|
||||
| 可选全序列卷锁 | **可选全序列卷锁**——现卷锁仅覆盖 `syslog` / `cfg` / `lftpd` 三条路径(`vol_lock_wait(0)` try 语义),其它潜在访问点(如 UI 读日志)未纳入 | 2026-10-02 | 待评估:先确认是否真有第二写者;无则关闭本项 | `App/fs/vol_lock.{c,h}` |
|
||||
| 回放页段表枚举恒空 | **回放页段表枚举恒空(真机缺陷)**——回放页真机开屏恒显「无录波段」,而 FTP `LIST` 六段全见、`RETR`/`DELE` 正常、同 try 锁纪律的 SOE 页读卷正常、defaultTask 写侧 `/wave` 枚举也正常——**唯独 `ui_task_wave_scan()` 在 uiTask 上下文拿不到目录条目**;伴生:`f_opendir` 失败照样置 `s_wave_scanned=1` 钉表,卷忙一类失败被钉成假空态、直到下一次 `manual_req` 才重试 | 2026-10-31 板级远程半轮(五个独立判别面见出处) | **等修复(到场轮)**:`f_opendir`/`f_readdir` 分支带 FR 码埋点定位;失败不钉表、下键重试(与 soe_store 读者同纪律);修好才有回放页坏段/空态画面的测试面 | `../子系统设计/故障录波设计说明.md` §10「板级远程半轮记录」;`App/task/ui_task.c` 扫描函数 |
|
||||
|
||||
## 3. 硬件(V0.1 缺陷 → V0.2 改版项)
|
||||
|
||||
|
||||
+41
-2
@@ -2,7 +2,7 @@
|
||||
|
||||
> **模块名称**:故障录波——采样源沿用 TIM3 1 kHz 节拍,专用录波环(`App/algo/wave_ring.c`,已落地)、触发、落盘(defaultTask 是文件系统唯一写者)、取回(FTP 21 端口)、现场回放(UI 单通道页)。
|
||||
> **文档定位**:本波的**设计属主**——口径、通道集、数据形态、触发模型、文件格式、预算与所有权边界、显示契约、二期不返工的结构约束在此定稿。**板级判据与本波执行顺序的属主即本文 §9 与 §10**——原任务规划下的《故障录波》卡片登记簿已于 2026-10-30 随销项并入本文后删除(沿革见 §14);排期顺位在 `docs/任务规划/README.md` §2.0「独立」行。
|
||||
> **状态**:设计已定稿,**数据面 + 触发与落盘接线 + UI 两个页面(手动录波、录波回放)的代码面已交付(2026-10-29)**——主机单测 113 / 170 / 110 全 rc=0、双端编译 0 错误 0 警告、板端编码器与 PC 侧解码器两份独立实现字节级互验通过。**没做完的只有板级判据那一轮**(注量对表、FTP 拉回、与 `meas:` 和 104 浮点 YC 对表、CRC 不符必须拒收的实测、回放页放一段真波、两个待台架核数值),逐条列在本文 §10 板级各行。三条已裁定口径见 §1.2。
|
||||
> **状态**:设计已定稿,**数据面 + 触发与落盘接线 + UI 两个页面(手动录波、录波回放)的代码面已交付(2026-10-29)**——主机单测 113 / 170 / 110 全 rc=0、双端编译 0 错误 0 警告、板端编码器与 PC 侧解码器两份独立实现字节级互验通过。**没做完的只有板级判据那一轮**(注量对表、FTP 拉回、与 `meas:` 和 104 浮点 YC 对表、CRC 不符必须拒收的实测、回放页放一段真波、两个待台架核数值),逐条列在本文 §10 板级各行。三条已裁定口径见 §1.2。**2026-10-31 远程半轮**已把其中不需要到场与注入的六样跑过(落盘道、触发时序、冷却恢复、轮转、PC 侧坏段拒收、104 并发)——结果与回放页新缺陷「段表枚举恒空」全在 §10「板级远程半轮记录」小节。
|
||||
> **相关文档**:
|
||||
> `docs/子系统设计/ADC采样节拍设计说明.md`(节拍与时序账的属主;本文 §3 的数据源就是它)
|
||||
> `docs/硬件平台/ADC通道映射说明.md`(网名 `AINn` 不等于板级 `ADCn`,也不等于转换器通道号;链路分段与削顶归属)
|
||||
@@ -324,7 +324,7 @@ flowchart TD
|
||||
| 跨工具链分叉(实证,写进来是为了下一个模块别重踩) | 两份录波 .c 只 include 自身头(链上只有 stdint.h)时,ARMCC 报 22 条 identifier "NULL" is undefined;而主机 MSVC / gcc 会传递性把 stddef.h 拉进来,**主机单测完全照不出这个分叉** → 新增模块需要用 NULL 就自己 include stddef.h(与 `App/algo/sample_ring.c` 同口径,别塞公共头) |
|
||||
| 板级 | 信号发生器注 1 V / 50 Hz → 手动一段 → FTP 拉回 → PC 脚本量出周波数、幅值、极性与注入一致;再把 PC 重算的基波有效值与板上 `meas:` 与 104 浮点 YC 对表。**判据只量四样:周波数、幅值、极性、钉轨路数——不比绝对相位**(理由见 §4.2「段内点序」:触发瞬间在工频周期内任意落点,段字节里没有绝对时间参考;真要比相位必须让发生器给同步触发,本波不做)。**钉轨对表的合格判据 = 头位图 ⊇ 实测钉轨路数,且差异必须能由注入条件解释**——因为 `clip_mask` 是按来源派生的链路可信性标记(§6.2 偏移 24 行),不是本段实测值:只加直流或小幅注入时那五路本就不该钉轨,硬取等式会假红。**同段另起一条强观察项**:V0.1 下这五路若在做**交流注入**时反而没钉轨,先怀疑接线或该路根本没被驱动——这是告警面,不是失败面(等式仍作为默认尺子留在 PC 侧 `shape --strict` 里,因为它有这个信号价值;要放行差异用那条判据的解释权,不靠改尺子)。**§5.2 第四条的板级观察项(代码与单测面已有、板级未测)**:bench 连续自抓期间人为把卷占住 2 s 以上(例如同一段跑 FTP 大文件读),看串口 `wave:` 行的 `err` 是否加一、是否只出现**一条** `[ERR] … seg drop: ring abandoned` 留痕(不是每拍刷屏)、且段号不推进(下一段仍写同号文件) |
|
||||
| 板级·触发来路(2026-10-30 并入原卡「手动触发与保护启动接线」板级段) | 真机面板按一次「手动录波」出一段;造一次过流,段号与该时刻 `/log/start.log` 事件对齐;冷却期内二次触发只加 `ovf` 不重录(**同时看 `armed` 与那一刻 start.log 的时刻,不要只盯 `ovf` 数字**——容差见 §9);冻结窗口内 104 上送与保护判据不受影响(这条是「丢录波样本不丢采集」的验收) |
|
||||
| 板级·回放页(2026-10-30 并入原卡「现场单通道回放页」板级段) | 真机上放一段真波(不是模拟器合成节拍);远端看图能拍到该页做留证(只作留证,不是波形通路,§8.4);**空态与 CRC 失败态绝不允许画成一条直线**——用坏段在真机复现一次 |
|
||||
| 板级·回放页(2026-10-30 并入原卡「现场单通道回放页」板级段) | 真机上放一段真波(不是模拟器合成节拍);远端看图能拍到该页做留证(只作留证,不是波形通路,§8.4);**空态与 CRC 失败态绝不允许画成一条直线**——用坏段在真机复现一次。**2026-10-31 远程半轮进展见下「板级远程半轮记录」小节**:PC 侧坏段拒收已过;回放页坏段/空态画面**没够到测试面**(缺陷「回放页段表枚举恒空」) |
|
||||
| UI | `ui-verify` 五步;回放页入 `ui-golden` 黄金参考(**参考图一旦入库只能改代码对齐,禁止刷参考掩盖**);新叶走 `gen_menu.py` 重生成 + 字库链 |
|
||||
| 构建 | `/keil-build` 要求 0 错误 0 警告;新 .c 双端注册走 `new-source-file`(`MDK-ARM/STM32F407-Demo.uvprojx` 与 `simulator/CMakeLists.txt` 两处显式列表) |
|
||||
| 台账 | R6 三处同步 + `scripts/ram_baseline.py --update` + `mem-numbers` 与 `mem-budget` 钩子 |
|
||||
@@ -351,6 +351,45 @@ flowchart TD
|
||||
|
||||
图内不写步骤号,节点名与 §10 各行语义逐字可对。并行度规则见 `docs/环境与部署/并行任务工作树方案.md` §7.3;**UI 道是单写者**——菜单树与中文字库都是整文件生成物,动叶子的那条道不许与别的改 UI 的道并行。
|
||||
|
||||
### 板级远程半轮记录(2026-10-31,无注入·无人值守)
|
||||
|
||||
bench 锁全程持有(收工 release,PASS 证据就是本小节);设备未改烧。前置事实:
|
||||
`[adc_cal] valid=0`(标定闭锁)→ **P 触发类物理不可跑**;无信号源 → 注入类判据未跑。
|
||||
落盘道、时序、冷却恢复、轮转、PC 侧坏段拒收、104 并发六样全在**真 FAT 卷**上过了一遍:
|
||||
|
||||
| 项 | 结果 |
|
||||
|---|---|
|
||||
| 真 FAT 落盘道(本次上电 WAVE00→05 共六段) | 全 5250B、`wave_read dump` 头 CRC+数据 CRC 双绿;段头 `clip_mask`=0xE6 与串口 `cal: cl=0xe6` 一致(钉轨对表的首份真机证据,口径见 §6.2 偏移 24 行) |
|
||||
| 触发→落盘时序(三个干净样本) | 文件出现 +0.39 / +0.53 / +0.55 s,写定(尺寸稳定)+1.08 / +1.23 / +1.23 s——**全部落在封存超时窗内**(`WAVE_SEAL_TIMEOUT_MS` 2000 拍 = 2 s,§4.2 兜底行):写定即写者在窗口内搬完段并 ACK,`err`=0 无自弃就是这条的合格面 |
|
||||
| 冷却后再触发恢复 | 前一触发后独立走完整链(进页 → 二次确认 → 执行)再成段;`ovf` 全程干净 |
|
||||
| 轮转命名 | 段号顺序推进;坏段 DELE 后重触发**同号覆盖**为真段(WAVE05) |
|
||||
| PC 侧坏段拒收 | 位翻转样本 `wave_read dump` → `REJECT: data CRC16 mismatch: stored 0x2F13 calc 0x03D5 over 5120 bytes at offset 128 -- segment rejected, nothing drawn`(rc=1)✓ |
|
||||
| 冻结窗口内 104 上送无恙(**正式判据项**) | 参考主站 `test/host/iec104_master.py` 全程跑在落盘窗口内:GI 扫描(双点组 / 单点组 / YC 组 / 频率)+ actterm + 定值读回全绿,**唯二 FAIL 是两条 COV 腿 = 标定闭锁腿(OC1 不出口,物理预期,非链路故障)**;全程无链路异常、无 send fail |
|
||||
| `drop` 观测 | 每冻结窗约 400–640 点(51–79 拍 × 8 路)入账,量级 = SEALED 态每拍 push +8 直到落盘 ACK 的窗口长度;`seg` 无丢段、`err`=0,采集无恙——纯观察项非失败(「丢样本不丢采集」的实测面) |
|
||||
|
||||
**新发现缺陷「回放页段表枚举恒空(板级)」**(登记 `docs/任务规划/登记簿.md` §2):回放页真机开屏恒显
|
||||
「无录波段」,而 FTP `LIST` 六段全见、`RETR`/`DELE` 正常。判别面(五个独立复核,全非偶然):
|
||||
手动触发照常成段(计数 + 真文件都在)⇒ 写侧取卷锁正常;SOE 记录页(同一条 `vol_lock_wait(0)`
|
||||
try 锁纪律)照常读出并显示 ⇒ try 锁读径正常;`manual_req` 作废段表缓存后重扫**仍空** ⇒ 不是
|
||||
心跳写抢锁的一次性 miss;defaultTask 写侧 `wave_store_next_idx()` 对 `/wave` 的枚举正常
|
||||
(坏段 DELE 后 WAVE05 正确回到同号为证)⇒ FatFs 层 readdir 能力正常。**定性:`ui_task_wave_scan()`
|
||||
在 uiTask 上下文下拿不到目录条目**,根因须上埋点(`f_opendir`/`f_readdir` 分支带 FR 码)或到场隔离。
|
||||
伴生代码纪律问题同页修(本轮读码钉死,独立于上面的主缺陷):**`f_opendir` 失败也无条件置
|
||||
`s_wave_scanned=1`**(`App/task/ui_task.c` 扫描函数尾)——卷忙 / `FR_DENIED` 一类失败会被钉成
|
||||
「0 段缓存」,回放页从此假显「无录波段」、直到下一次 `manual_req` 才重试;失败应不钉表、
|
||||
下键重试,与 soe_store 读者同纪律。
|
||||
|
||||
**本半轮没跑的(人到场轮清单)**:注量对表(周波数 / 幅值 / 极性 / 钉轨路数)、`meas:` 与 104
|
||||
浮点 YC 数值对表、两个待台架核数值(封存超时窗 §4.2 兜底行与冷却时长 `App/algo/wave_ring.h`)、P 触发与 start.log 对齐(还得先解标定闭锁)、
|
||||
bench T 源与卷占用 2 s 的 `ring abandoned` 观察(需 bench 构建)、**回放页坏段画面与空态画面
|
||||
(等枚举缺陷修复后才有测试面)**、`task_prof` 读路径耗时峰值。**执行动作侧**(到场的人做什么、
|
||||
说哪句话、会看到什么)→ `docs/测试说明/专项验证/故障录波板级到场轮执行手册.md`。
|
||||
|
||||
**远程驱动教训(7003 注键)**:KEY 的 ACK 与 LCDMEM 推流共用同一条 TCP,按键后**必须 drain 到
|
||||
帧流静默再取帧**才可信(否则拿到的是 N−1 屏、误判「页面不动」);home 上首个 `e` 是**重开最近
|
||||
页**的捷径而非进菜单(本次上电开过页之后);级联列光标开列时记忆上次位置、不归零。三条的
|
||||
执行纪律归主 `scripts/board_ui_nav.py` 文件头,本文只留事实现场。
|
||||
|
||||
---
|
||||
|
||||
## 11. 与 `docs/任务规划/数据可信.md` 的口径变更(三处)
|
||||
|
||||
+2
-2
@@ -12,7 +12,7 @@ docs/测试说明/
|
||||
├── 流程与规范/ 测试开发的标准动作、门禁决策表、测试文档模板(3 篇)
|
||||
├── 单元测试/ 主机侧纯逻辑单测的说明 + 跨全部套件的覆盖率口径(9 篇)
|
||||
├── 板级测试/ 上板测试:芯片/模块测试指南 + 实机测试实施流程(5 篇)
|
||||
├── 专项验证/ 针对一个问题或一次复验的台架专项流程、存储恢复操作(5 篇)
|
||||
├── 专项验证/ 针对一个问题或一次复验的台架专项流程、存储恢复操作(6 篇)
|
||||
├── 测试工具/ PC 侧工具用法:串口助手、ST-LINK_CLI 烧录与复位(3 篇)
|
||||
└── 测试数据/ 测试跑出来的原始证据:boot_log_data/ m2_data/ m3_data/
|
||||
```
|
||||
@@ -43,7 +43,7 @@ docs/测试说明/
|
||||
| `流程与规范/` | `测试开发标准流程.md` · `自动化测试流程.md` · `测试文档模板规范.md` |
|
||||
| `单元测试/` | `看门狗单元测试说明.md` · `系统时钟单元测试说明.md` · `开机账本单元测试说明.md` · `配置文件单元测试说明.md` · `ADC输入层单元测试说明.md` · `相量层单元测试说明.md` · `卷锁单元测试说明.md` · `时间同步单元测试说明.md` · `主机单测覆盖率口径.md` |
|
||||
| `板级测试/` | `CH395F_Test_Guide.md` · `GD5F2GQ5UE_Test_Guide.md` · `SD2506_Test_Guide.md` · `FTP_Test_Guide.md` · `实机测试实施指南.md` |
|
||||
| `专项验证/` | `ADC前端注入验证流程.md` · `启动日志原子性复验流程.md` · `链路延迟测试说明.md` · `存储维护与容量恢复.md` · `模拟器差距清单.md` |
|
||||
| `专项验证/` | `ADC前端注入验证流程.md` · `启动日志原子性复验流程.md` · `链路延迟测试说明.md` · `存储维护与容量恢复.md` · `模拟器差距清单.md` · `故障录波板级到场轮执行手册.md` |
|
||||
| `测试工具/` | `串口助手使用指南.md` · `串口助手设计说明.md` · `ST-LINK_CLI_复位使用说明.md` |
|
||||
| `测试数据/` | `boot_log_data/`(39 个文件,串口/SoE 一手证据)· `m2_data/`(8 个,链路时延安静档)· `m3_data/`(11 个,链路时延 M3 各档) |
|
||||
|
||||
|
||||
@@ -0,0 +1,130 @@
|
||||
# 故障录波板级到场轮执行手册(人要做的事,一步一行)
|
||||
|
||||
> **这份手册解决什么**:录波的判据里剩下的那半轮——需要**有人的手和信号发生器**的验证——把它拆成"你做什么、说哪句话、会看到什么"。
|
||||
> **它不是判据属主**:判据、留痕名清单、执行顺序图全在 `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「独立」行的"一轮未跑"字样就可以清了。
|
||||
@@ -28,6 +28,15 @@
|
||||
否则直接拒绝(退出码 3,不碰网络)——台架是独占资源,脚本不替人判断有没有在用。
|
||||
--walk 的存证目录默认在 ci-artifacts/uinav/walk(版本控制之外),--outdir 可改;
|
||||
落在版本控制内会被直接拒绝——台架证据不进工作树,工作树才能保持干净可比对。
|
||||
2026-10-31 板级远程半轮补三条(本文件当这三条的纪律属主;事实现场见
|
||||
docs/子系统设计/故障录波设计说明.md §10「板级远程半轮记录」):
|
||||
① KEY 的 ACK 与 LCDMEM 推流共用同一条 TCP:按键后排空要排到**帧流静默
|
||||
≥900 ms** 再 grab,否则拿到的是 N−1 屏——半轮里多次差点据此误判「页面不动」;
|
||||
② 本次上电开过页之后,home 上的 `e` 是**重开最近页**的捷径、不是进菜单;
|
||||
backoff 序 'esl' 的 `e` 因此可能把刚关的坏页又打开——闭环必须先认屏:
|
||||
落点是内容页就 `s` 关回 home、再按一次 `e` 才是菜单,盲连按走不动;
|
||||
③ 级联列光标**开列时记忆上次停留行**、不归零——"进列后按 k 次下"的算式
|
||||
只在光标已知位于列首时成立;稳妥做法 = 先上溢钳顶(`u` × 列高)再数 k。
|
||||
退出码: 0 = 成功;1 = 分类或导航失败;2 = 环境错误(exe 缺失 / 板子连不上)
|
||||
创建日期:2026-10-25(道E,Lead 大窗反馈后的判据脚本升级)
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user