Merge branch 'master' into write-ratio-41-fba44d301c82

This commit is contained in:
2026-11-06 19:41:42 +08:00
22 changed files with 368 additions and 6 deletions
+1 -1
View File
@@ -66,7 +66,7 @@
| **6** | 保护元件与采集增强 | 等待标准源或硬件改版 | 保护先解除未标定闭锁;三相同时刻类功能等 V0.2 硬件 |
| **7** | 验证窗口事项 | 逢条件顺带 | CI runner、PC peer、CH340、负向故障注入条件到位时执行 |
| **8** | 独立模块与暂缓项 | 当前不排 | 开入开出、104 文件传输单独立项(SNTP 已单独立项并于 2026-11-04 落地 #73,:8888 随 #78 退役);RS-485 与内存优化按各自重启条件 |
| **独立** | **故障录波(1 kHz · 8 路原始码值 · 单通道回放)** | **代码面已交付;2026-10-31 远程半轮过六项、2026-11-02 回放页枚举缺陷已修复闭环,余注量对表与人到场项** | 用户裁定 2026-10-29 **录波先行**:数据面最小闭环 → 手动与保护启动触发 → 回放页。三块的**代码侧判据已收口**(主机单测 113 / 170 / 110 全 rc=0、双端编译 0 错误 0 警告、板端编码器与 PC 侧解码器字节级互验、手动录波与录波回放两叶已绑页、内容页黄金参考扩至 66 张);**2026-10-31 远程半轮已过六项**(真 FAT 落盘、触发→落盘全部落在 2 s 封存超时窗内、冷却恢复、轮转、PC 侧坏段拒收、冻结窗内 104 并发);同轮发现的缺陷「回放页段表枚举恒空」**已于 2026-11-02 远程修复并板级闭环**(根因 = 读侧 `wave_store_seg_path()` 返回值判错,顺带修键处理缺失效;回放页真段/切段/切道已实测,登记簿条目已销项,证据见设计说明 §10「回放页枚举恒空缺陷修复记录」);**没跑的是注量对表那半轮**(注 1 V / 50 Hz、与 `meas:` 行和 104 浮点遥测对表、回放页放坏段与空态画面)加 P 触发 / bench T 源,全部结果与清单见 `docs/子系统设计/故障录波设计说明.md` §10「板级远程半轮记录」。**板级判据、留痕名清单与执行顺序图的属主 = docs/子系统设计/故障录波设计说明.md §9 与 §10**(原卡片登记簿 2026-10-30 随销项并入后删除);**与 UI 道互斥**(菜单树与中文字库是整文件生成物,同刻只允许一条道写)——本波按此串行执行:UI 道在数据面与接线冻结之后才动生成物 |
| **独立** | **故障录波(1 kHz · 8 路原始码值 · 单通道回放)** | **代码面已交付;2026-10-31 远程半轮过六项、2026-11-02 回放页枚举缺陷已修复闭环、2026-11-04 注量对表闭环(#40 §8 交流轮)、2026-11-06 第二幕尾步坏段/空态画面台架远程轮拍毕——回放页三态板级判据全部实证;余 P 触发(需标定解锁决定)、bench T 源与卷占用、`task_prof` 耗时峰值等到场/裁定项** | 用户裁定 2026-10-29 **录波先行**:数据面最小闭环 → 手动与保护启动触发 → 回放页。三块的**代码侧判据已收口**(主机单测 113 / 170 / 110 全 rc=0、双端编译 0 错误 0 警告、板端编码器与 PC 侧解码器字节级互验、手动录波与录波回放两叶已绑页、内容页黄金参考扩至 66 张);**2026-10-31 远程半轮已过六项**(真 FAT 落盘、触发→落盘全部落在 2 s 封存超时窗内、冷却恢复、轮转、PC 侧坏段拒收、冻结窗内 104 并发);同轮发现的缺陷「回放页段表枚举恒空」**已于 2026-11-02 远程修复并板级闭环**(根因 = 读侧 `wave_store_seg_path()` 返回值判错,顺带修键处理缺失效;回放页真段/切段/切道已实测,登记簿条目已销项,证据见设计说明 §10「回放页枚举恒空缺陷修复记录」);**注量对表半轮已于 2026-11-04 由 #40 §8 交流轮闭环**(幅值 / 相位 / 削顶三项实测,`meas:` 行与板上读数逐项核对,104 浮点遥测按用户裁定不作对照证据;`docs/测试说明/测试数据/boot_log_data/20261104_ac_*`);**回放页放坏段与空态画面已于 2026-11-06 台架远程轮拍毕闭环**(同号翻位覆盖→「该段不可读」零波形元素绝不平线;全删→「无录波段」+ 串口 `open fail fr=4` 互证;证据 `docs/测试说明/测试数据/wave_shot_20261106/`,记录见设计说明 §10「回放页坏段/空态画面闭环记录」);**没跑的只剩** P 触发对时刻(先要标定解锁决定)/ bench T 源与卷占用(需 bench 构建)/ `task_prof` 读路径耗时峰值,全部结果与清单见 `docs/子系统设计/故障录波设计说明.md` §10「板级远程半轮记录」。**板级判据、留痕名清单与执行顺序图的属主 = docs/子系统设计/故障录波设计说明.md §9 与 §10**(原卡片登记簿 2026-10-30 随销项并入后删除);**与 UI 道互斥**(菜单树与中文字库是整文件生成物,同刻只允许一条道写)——本波按此串行执行:UI 道在数据面与接线冻结之后才动生成物 |
### 2.1 关键依赖
@@ -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:` 对表。**判据只量四样:周波数、幅值、极性、钉轨路数——不比绝对相位**(理由见 §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-31 远程半轮进展见下「板级远程半轮记录」小节**:PC 侧坏段拒收已过;回放页坏段/空态画面的测试面**已于 2026-11-02 枚举缺陷修复后打开**(真机已验证真段显示 + 切段切道,见下「回放页枚举恒空缺陷修复记录」小节),坏段/空态两画面本身仍是到场轮要拍的项 |
| 板级·回放页(2026-10-30 并入原卡「现场单通道回放页」板级段) | 真机上放一段真波(不是模拟器合成节拍);远端看图能拍到该页做留证(只作留证,不是波形通路,§8.4);**空态与 CRC 失败态绝不允许画成一条直线**——用坏段在真机复现一次。**2026-10-31 远程半轮进展见下「板级远程半轮记录」小节**:PC 侧坏段拒收已过;回放页坏段/空态画面的测试面**已于 2026-11-02 枚举缺陷修复后打开**(真机已验证真段显示 + 切段切道,见下「回放页枚举恒空缺陷修复记录」小节),坏段/空态两画面本身**已于 2026-11-06 台架远程轮拍毕闭环——见下「回放页坏段/空态画面闭环记录」小节,本行判据全部板级实证完毕** |
| 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` 钩子 |
@@ -383,7 +383,8 @@ try 锁纪律)照常读出并显示 ⇒ try 锁读径正常;`manual_req` 作
**本半轮没跑的(人到场轮清单)**:注量对表(周波数 / 幅值 / 极性 / 钉轨路数)、`meas:`
浮点数值对表、两个待台架核数值(封存超时窗 §4.2 兜底行与冷却时长 `App/algo/wave_ring.h`)、P 触发与 start.log 对齐(还得先解标定闭锁)、
bench T 源与卷占用 2 s 的 `ring abandoned` 观察(需 bench 构建)、~~回放页坏段画面与空态画面
(等枚举缺陷修复后才有测试面)~~ **(2026-11-02 枚举缺陷修复后测试面已开,见下小节)**、
(等枚举缺陷修复后才有测试面)~~ **(2026-11-02 枚举缺陷修复后测试面已开,见下小节;2026-11-06
台架远程轮两画面已拍毕闭环,见「回放页坏段/空态画面闭环记录」小节)**、
`task_prof` 读路径耗时峰值。**执行动作侧**(到场的人做什么、
说哪句话、会看到什么)→ `docs/测试说明/专项验证/故障录波板级到场轮执行手册.md`。
@@ -440,6 +441,42 @@ bench 锁全程持有;三次烧录(埋点 / 诊断加强 / 根因修复)
(Before/After、切段、切道共四帧 + 串口实录,见该目录 README)。
**至此回放页「真段 / 坏段 / 空态」三态全部有了测试面**,第二幕尾步的坏段画面判据可跑。
### 回放页坏段/空态画面闭环记录(2026-11-06,台架远程轮,#68 第二幕尾步)
bench 锁全程持有(任务 `remote-shoot-68-274d2d56da74`,17:03:38 起、收工 `--bench-pass` 释放),
无人到场;固件 `Nov 6 2026 00:17:43 suite=NONE`(#53 台架轮复核构建,回放页读侧代码自 11-02
修复后零改动,本轮**不涉代码**)。执行手册 §4 步 7 原文流,三态画面 + 恢复态共四帧入档
`docs/测试说明/测试数据/wave_shot_20261106/`(README 含判据对照、串口锚点、复现口令与
sha256 全清单;7003 `LCDMEM` 原帧 4× 渲染,与上小节同法):
| 画面 | 实拍结果 | 判据 |
|---|---|---|
| 覆盖前 `UA SEG6 M` | 阶梯正弦 + 0 线 + 触发光标,Pk≈1423 mV | 对照基准(真段正常放波) |
| **坏段同号覆盖后** | **仅标题 + 「该段不可读」,零波形元素、零顶行底行字段** | **绝不许画直线 = 过**(画面逐比特 = `WP_ST_BAD` 显式文案路径) |
| **空态(`/WAVE` 全删后开页)** | **仅标题 + 「无录波段」**,同刻串口 `[ERR][UI_TASK] ui wave head idx=8 open fail fr=4` | 显式说「没有」= 过;再按 `r` 再探盘画面逐字节不变 |
| 九件原件恢复后 | 网格 + 波形区回归,帧与到场首帧逐字节相同 | 收工板况 = 到场板况 |
坏段制造 = `RETR WAVE06.BIN → byte[130]^=0x01 → STOR 同号覆盖`(页开着覆盖、`r` 走满一圈
再入该段触发读侧判废——`ui_task_wave_load_head()` 头 CRC+长度等式+数据区流式 CRC 全量验,
`App/task/ui_task.c`);PC 侧同件 `wave_read dump` 同判 `REJECT: data CRC16 mismatch:
stored 0xF991 calc 0xB111 …nothing drawn`(rc=1),画面与解码器两份独立实现互证。
收工处置走手册 §7 二选一的**「不留常设负样本」**分支:板上坏段与本环投放的 `WAVE09.BIN`
均已删除,`/WAVE` 恰为到场九件原件、逐件 RETR+sha256 复验一致;坏样本点名留档在证据目录
`samples/WAVE06_bitflip_reject.BIN`(原件 `samples/WAVE06_original.BIN` 一并留档,两件只差
第 131 字节一比特)。
两条现场发现(都记账不修码):**F1** 开机后 `STOR` 的新文件(坏版、有效版都试过)**不进
回放页段表**——表只在 `manual_req` 或「当前段消失」时重扫(11-02 v1.6 钉表纪律),页开关不
触发重扫;首攻 `WAVE09` 因此静默出局,改列内既有段同号覆盖一次即中(FTP 手工投放段要让回放
页看见需顶掉当前段或触发一次手动录波——纪律性事实,供后续轮引用)。**F2** 数据 CRC 判废在
串口**静默**、靠画面自证(留痕只给 `open fail fr=` 一类),与 11-02 修复记录的留痕设计一致。
另记台架环境事实:到场时板网链路已断(会议室网口),人插回网线后远程轮才得以执行——
`[ERR][I104] i104: bind port 2404 FAIL` 在该构建每次上电复现,属 #53 跟踪面,本轮不新开。
**至此第二幕(注量对表 + 坏段/空态画面)全幕闭环**:注量三项 2026-11-04 由 #40 §8 交流轮
跑完(幅值 / 相位 / 削顶,104 浮点遥测按用户裁定不作对照证据),尾步两画面 2026-11-06 拍毕;
手册第二幕状态与 `docs/任务规划/README.md` §2.0「独立」行已同步销项。
---
## 11. 与 `docs/任务规划/数据可信.md` 的口径变更(三处)
@@ -1,7 +1,7 @@
# 故障录波板级到场轮执行手册(人要做的事,一步一行)
> **这份手册解决什么**:录波的判据里剩下的那半轮——需要**有人的手和信号发生器**的验证——把它拆成"你做什么、说哪句话、会看到什么"。
> **它不是判据属主**:判据、留痕名清单、执行顺序图全在 `docs/子系统设计/故障录波设计说明.md` §9 与 §10;本文只写**执行动作**。已完成部分(2026-10-31 远程半轮六项 PASS + 2026-11-02 缺陷「回放页段表枚举恒空」修复闭环)见 §10「板级远程半轮记录」与 §10「回放页枚举恒空缺陷修复记录」。
> **它不是判据属主**:判据、留痕名清单、执行顺序图全在 `docs/子系统设计/故障录波设计说明.md` §9 与 §10;本文只写**执行动作**。已完成部分(2026-10-31 远程半轮六项 PASS + 2026-11-02 缺陷「回放页段表枚举恒空」修复闭环 + 2026-11-04 第二幕注量对表闭环(#40 交流轮)+ 2026-11-06 坏段/空态两画面台架远程轮拍毕)见 §10「板级远程半轮记录」与 §10「回放页枚举恒空缺陷修复记录」「回放页坏段/空态画面闭环记录」。
> **一句话预算**:你到场约 1.5~2 小时;其中真正动手的只有**接三次线、按不超过六次键、拍两个决定**——其余全部由会话里的 agent 跑脚本。
---
@@ -11,7 +11,7 @@
| 幕 | 名字 | 要你在场? | 你动手的部分 | agent 跑的部分 | 对应判据 |
|---|---|---|---|---|---|
| 第一幕 | 枚举埋点与修复上板 | **已完成(2026-11-02,远程)** | 无 | 改码加埋点 → 构建 → 烧录回读 → 远程开回放页 → 读 FR 码定性 → 修复重烧 | `docs/子系统设计/故障录波设计说明.md` §10「回放页枚举恒空缺陷修复记录」 |
| 第二幕 | 注量对表 | **要到场**(只有接线需要手) | 接 UA 发生器线 1 次、拔 1 次;面板按 2 次键(或让 agent 远程注键) | 记心跳基准 → FTP 拉段 → `wave_read` 量四样 → `meas:`/104 YC 对表 → 削顶注大一遍 → 坏段上板看回放页绝不平线 | `docs/子系统设计/故障录波设计说明.md` §10「板级」行 +「板级·回放页」行后半 |
| 第二幕 | 注量对表 | **已闭环(2026-11-06)**——注量对表 2026-11-04 由 #40 交流轮跑完;坏段/空态画面 2026-11-06 台架远程轮拍毕,本幕现场无需重做 | ~~接 UA 发生器线 1 次、拔 1 次;面板按 2 次键(或让 agent 远程注键)~~ 已由远程轮与 #40 消化 | 记心跳基准 → 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` 观察项 |
@@ -80,7 +80,14 @@ flowchart LR
|---|---|---|---|---|---|---|---|
| UA 1.000 V 50.000 Hz | 待填 | WAVE__ | __ Hz | __ V | 正/反 | __ 路 | 过/不过 |
| 削顶注大 | 待填 | WAVE__ | __ Hz | __ V | 正/反 | __ 路 | 过/不过 |
| 坏段(回放页画面) | — | 同号覆盖 | — | — | — | — | 不平线=过 |
| 坏段(回放页画面) | — | WAVE06 同号覆盖(`RETR→byte[130]^=0x01→STOR`) | — | — | — | — | **过**(2026-11-06 台架远程轮实测:「该段不可读」零波形元素,绝非直线) |
> 2026-11-06 收工状态(台架远程轮,bench 锁全程持有,无人到场):第 3 行坏段拒收画面与配套的
> 「无录波段」空态画面真机抓屏已入档 `docs/测试说明/测试数据/wave_shot_20261106/`(README 含
> 判据对照、串口锚点与复现口令);第 1、2 行的注量实测数值归 2026-11-04 #40 §8 交流轮
> (`docs/测试说明/测试数据/boot_log_data/20261104_ac_*`,实测结论见 `docs/硬件平台/ADC通道映射说明.md` §8.2),
> 104 浮点遥测按该轮用户裁定不作对照证据。**本幕至此全幕闭环**;坏段样本收工不留板
> (手册 §7 二选一取「删除」,样本点名留档见证据目录 `samples/` 与设计说明 §10 闭环记录小节)。
---
@@ -0,0 +1,74 @@
# 回放页坏段/空态画面闭环证据(2026-11-06,台架远程轮)
本目录是 `docs/子系统设计/故障录波设计说明.md` §10「回放页坏段/空态画面闭环记录」的图源留档,
执行 `docs/测试说明/专项验证/故障录波板级到场轮执行手册.md` 第二幕 §4 步 7 与其空态收尾:
**真机回放页上把「坏段拒收」与「无录波段」两种画面拍下来存证,判据 = 绝不许画成一条直线**。
台架远程操作、bench 锁全程持有(`remote-shoot-68-274d2d56da74`,17:03:38 起);固件身份
`Nov 6 2026 00:17:43 suite=NONE`(#53 台架轮复核构建,回放页代码自 2026-11-02 修复后未再改动);
所有画面帧由 `scripts/board_ui_nav.py` 的 7003 链路取 `LCDMEM` 原帧(160×160 1bpp 3200 B,
本目录 PNG 按 **4×** 放大渲染,与 wave_enum_20261102 同法),同一次上电、同一块板。
## 三态画面(判据对照)
| 文件 | 画面 | 说明 |
|---|---|---|
| `good_wave06_sec6_ua.png` | `UA SEG6 M` 阶梯正弦 + 0 线 + 触发光标,Pk≈1423 mV | **覆盖前**:WAVE06 原件在盘、回放页正常放波(对照基准) |
| `bad_segment_reject_wave06.png` | 仅「录波回放」标题 + 「该段不可读」 | **覆盖后同号翻位坏段的拒收态**:零波形元素、零顶行/底行字段——绝不许画直线,判据过 |
| `empty_state_no_segments.png` | 仅「录波回放」标题 + 「无录波段」 | **真·空态**:FTP 把 `/WAVE` 十件全删后开页;串口同刻 `[ERR][UI_TASK] ui wave head idx=8 open fail fr=4`(FR_NO_FILE=卷上真没有) |
| `empty_state_recheck.png` | 同上 | 空态下按 `r`(再探盘)画面逐字节不变(两 `_raw3200.bin` sha 相同) |
| `after_restore_page_normal.png` | 网格 + 0 线 + 光标恢复绘制 | 九件原件逐件 RETR+sha256 复验后重开页,正常态回归;页面回落到 RAM 记忆的 SEC5 段,故该帧与 `arrival_open_waveplay.png` **逐字节相同**——收工画面 = 到场画面,正是想要的巧合 |
| `arrival_open_waveplay.png` | `UA SEC5 M` 平线 + PK1744mV | 到场首帧(开页落数值最大段前身的 SEC5;平线是该段真实数据,非缺陷) |
各 PNG 附同屏 `_raw3200.bin` 原始帧,供逐比特复核。
## 坏段制造口径(手册 §4 步 7 原文流)
`RETR WAVE06.BIN → byte[130] ^= 0x01(数据区内翻一位)→ STOR 同号覆盖`。页开着覆盖、
`r` 走满一圈(周期 9)再入该段即触发读侧判废:`ui_task_wave_load_head()` 头 CRC+长度等式+
数据区流式 CRC 全量验(`App/task/ui_task.c`),任一不符即 `UI_WAVE_BAD` → 页面显式文案。
样本在 `samples/`:`WAVE06_original.BIN`(sha256 `9f88ee34…`,与覆盖后板上现行字节复验一致)
与 `WAVE06_bitflip_reject.BIN`(sha256 `a9e097bf…`),两件只差第 131 字节一比特。
PC 侧同件判据实录见 `pc_side_dump.txt`:`test/host/wave_read.py dump` 对坏件打印
`REJECT: … data CRC16 mismatch: stored 0xF991 calc 0xB111 over 5120 bytes at offset 128 --
segment rejected, nothing drawn`(rc=1),对原件双 CRC OK(rc=0)——板上画面与 PC 解码器
**同一判据、两份独立实现**互证。
## 串口与时间线
`serial_excerpt.txt` 为 serial-assistant 日志摘录(原样、剔除 `seg=0` 心跳行),关键锚点:
- 18:11:18 开页 → 18:11:38 `[FTP] UPLOAD '/WAVE/WAVE06.BIN' 5250 bytes OK`(坏版覆盖)→
18:11:39 RETR 复验 sha=坏 → **18:12:02 抓屏拒收态** → 18:12:01 `UPLOAD '/WAVE/WAVE06.BIN' OK`(原字节恢复);
- 18:14:42–47 `DELE WAVE00…09.BIN` ×10 → 18:14:55/58 三次 `open fail fr=4`(段表记忆 idx=8、
盘上已无文件 → FR_NO_FILE,正是留痕本意)→ **18:14:59 抓屏空态** →
18:15:04–13 `STOR` 九件恢复(每件后随 RETR 复验 sha256);
- 两窗之间全程 `wave:` 心跳 `err=0 ovf=0`,无一轮 [ERR] 越界(空态那次 fr=4 是留痕本意,见修复记录小节)。
自动化事件日志(含每步帧名/ink/位差判定):`shoot_phase2c.py` / `shoot_phase3b.py` 产物在会话
`ci-artifacts/shoot/phase2c.json`、`phase3b.json`(一次性产物,随会话留存不入台账;本目录即台账面)。
## 两条现场发现
- **F1(已知缓存纪律的实面)**:开机后 `STOR` 新文件(先攻用 `WAVE09.BIN`,坏版与有效版都试过)
**不进回放页段表**——表只在 `manual_req` 或「当前段消失」时重扫(`ui_task_wave_scan` 钉表纪律,
2026-11-02 v1.6),页开关不触发重扫。故本幕尾步按手册原文改用**列内既有段同号覆盖**,一次即中。
这不是缺陷(写侧轮转覆盖走 find-失败重扫路,天然收敛),但 FTP 手工投放段要让回放页看见,
需同号顶掉当前段或触发一次手动录波——记此免得后人重踩。
- **F2(拒收留痕口径确认)**:数据 CRC 判废在串口**静默**(留痕只给「表上有、开档失败」的
`open fail fr=` 一类,判废靠画面自证)——与 2026-11-02 修复记录的留痕设计一致,本轮实测无违和。
## 收工处置(手册 §7 二选一)
**不留常设负样本**:坏段样本已从板上删除(`WAVE09.BIN` 为本轮投放件、一并删除),`/WAVE` 恢复
到场时的九件原件且逐件 sha256 复验一致(清单见 `manifest_sha256.json` 与 §10 记录);`samples/`
两件即「删除」分支的点名留档。固件仍为在场构建、UI 停 STANDBY、bench 锁收工释放。
## 复现口令(台架同环境)
1. `& .venv\Scripts\python.exe scripts\board_ui_nav.py --where --i-hold-bench-lock`(身份互证)
2. FTP `admin` 登录 → `CWD /WAVE` → `RETR WAVE06.BIN` → 翻 `byte[130]` → `STOR WAVE06.BIN`(页开着覆盖)
3. `& .venv\Scripts\python.exe test\host\wave_read.py dump <坏件>`(应 REJECT rc=1)
4. 7003 开回放页(记录查询列第 10 行)→ `r` 走满一圈回踩该段 → `LCDMEM` 取帧(本目录坏段帧生成法)
5. `DELE` 全部段 → 关开页 → 取空态帧 → `STOR` 九件原件恢复(逐件 RETR+sha 复验)
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 971 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 949 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 949 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

@@ -0,0 +1,20 @@
{
"README.md": "bbffa3ed7ea5c1fb25d7d63f1ea5b10c37e8fd8ff7bffefe71605e649c503ad8",
"after_restore_page_normal.png": "d0fd54629f7b597a24247ee4d5707d80528da87bf68d9016cbf0199ec6c43cb8",
"after_restore_page_normal_raw3200.bin": "4deecb9373f766e3263e4b890bd7882798b91374aec43b7fc6e96dba3f353704",
"arrival_open_waveplay.png": "d0fd54629f7b597a24247ee4d5707d80528da87bf68d9016cbf0199ec6c43cb8",
"arrival_open_waveplay_raw3200.bin": "4deecb9373f766e3263e4b890bd7882798b91374aec43b7fc6e96dba3f353704",
"bad_segment_reject_wave06.png": "a013fdf6dbab1068a7b72b8239ac573c70cea5e8de8df9214ddc5cf153586b83",
"bad_segment_reject_wave06_raw3200.bin": "17291a0068f2d4ab099f636888e809941ad9bba52cad942ff6341a8677b72889",
"empty_state_no_segments.png": "ecb6151668b0d5ef0578576dd449d9d9a7f41031fd7c9f035a98de7132853d1b",
"empty_state_no_segments_raw3200.bin": "a76c41cfd7f38cecf1092777371869a0a28a4c0ca09eb6963e17afc94d713f66",
"empty_state_recheck.png": "ecb6151668b0d5ef0578576dd449d9d9a7f41031fd7c9f035a98de7132853d1b",
"empty_state_recheck_raw3200.bin": "a76c41cfd7f38cecf1092777371869a0a28a4c0ca09eb6963e17afc94d713f66",
"good_wave06_sec6_ua.png": "db205b08fb77ac51350b802b3541dd310de1eb7ec9529d9867f64794c1aa7d6b",
"good_wave06_sec6_ua_raw3200.bin": "d6a3ac65e04d5e62007d1f13b84be38982f0b217a4e4730037a54c1864854261",
"pc_side_dump.txt": "44890852d5560073359f6e7adad03fb8c7e06e24605dfe5b1c18d4fbf8985ae6",
"serial_excerpt.txt": "f4cf0ba2eada42917abc6d2347b2e3bde041a1ff4034b48d751f5d4f6f5a66a3",
"samples/WAVE06_bitflip_reject.BIN": "a9e097bfaa0e3df8542c637c29f120d1dee347956cf0013478448861f13c40ae",
"samples/WAVE06_original.BIN": "9f88ee3490c40867299e624a2eb2323ec33bb9ca5957737d2018b9e60205a6cc",
"samples/WAVE09_seed_bitflip_reject.BIN": "b4016966c6feed92b8a7f42ce42c109dbb8a608b9531f9bad35595c22d3d6471"
}
@@ -0,0 +1,44 @@
### dump WAVE06_original.BIN(覆盖前原件,板上现行字节) → rc=0
```
FILE : WAVE06_original.BIN (5250 bytes)
magic : 57 52 01 ('WR' + version byte 1)
ver : 1
fs_hz : 1000
pts_per_cycle : 20
ch_count : 8
pts_per_ch : 320 (320 ms at 1000 Hz)
pre_pts : 160
trig_src : 1 (MANUAL)
trig_elm : 0
t0_ms : 1246139 (ms since power-on)
wall : 1793609165 (epoch s)
eng : 0 (pin-domain)
flags_seq : 0x00 VALID bits: (none)
clip_mask : 0x00E6 [UB UC IB IC IN]
frame_seq : 1245891
CRC16(hdr) : 0x0C3B OK covers [0,126), low byte first
CRC16(data) : 0xF991 OK covers 5120 bytes, low byte first
-- channel table (8 entries x 12 B) --
IDX SEM NAME SRC BITS AVAIL K_Q16 B_CODES LSB_uV FLAG
0 0 UA TPAFE5160 16 0x00 10000000 0 152.587891 .
1 1 UB STM32-ADC1 12 0x02 52800000 0 805.664062 CLIPPED
2 2 UC STM32-ADC1 12 0x02 52800000 0 805.664062 CLIPPED
3 3 UN TPAFE5160 16 0x00 10000000 0 152.587891 .
4 4 IA TPAFE5160 16 0x00 10000000 0 152.587891 .
5 5 IB STM32-ADC1 12 0x02 52800000 0 805.664062 CLIPPED
6 6 IC STM32-ADC1 12 0x02 52800000 0 805.664062 CLIPPED
7 7 IN STM32-ADC1 12 0x02 52800000 0 805.664062 CLIPPED
```
### dump WAVE06_bitflip_reject.BIN(byte[130]^=0x01 同号覆盖件) → rc=1
```
REJECT: WAVE06_bitflip_reject.BIN: data CRC16 mismatch: stored 0xF991 calc 0xB111 over 5120 bytes at offset 128 -- segment rejected, nothing drawn
```
### dump WAVE09_seed_bitflip_reject.BIN(第二幕首攻样本:20261104 真段种子翻位,未进枚举见 README 发现 F1) → rc=1
```
REJECT: WAVE09_seed_bitflip_reject.BIN: data CRC16 mismatch: stored 0xF8AA calc 0xB02A over 5120 bytes at offset 128 -- segment rejected, nothing drawn
```
@@ -0,0 +1,180 @@
串口实录摘录(serial-assistant 日志原样,剔除 seg=0 心跳行)——2026-11-06 第二幕尾步两窗:
窗一 17:52:3x–17:54:5x:WAVE09 新文件首攻(坏版 STOR + 关开页,见 README 发现 F1)
窗二 18:10:0x–18:16:0x:同号覆盖主链(18:11:38 坏版 STOR→18:12:01 原字节恢复)+ 全删空态(18:14:4x DELE×10 → 18:14:55 open fail fr=4 → 18:15:0x-14 STOR 恢复×9 RETR sha 验)
[RX] 2026-11-06T17:52:35.660+08:00 [2026-11-06 17:52:34] [FTP] connection received from 192.168.31.161:60945...
[RX] 2026-11-06T17:52:35.670+08:00 [2026-11-06 17:52:34] [FTP] CMD USER admin
[RX] 2026-11-06T17:52:35.670+08:00 [2026-11-06 17:52:34] [FTP] CMD PASS admin
[RX] 2026-11-06T17:52:35.670+08:00 [2026-11-06 17:52:34] [FTP] CMD CWD /WAVE
[RX] 2026-11-06T17:52:35.680+08:00 [2026-11-06 17:52:34] [FTP] CMD TYPE A
[RX] 2026-11-06T17:52:35.691+08:00 [2026-11-06 17:52:34] [FTP] CMD PASV
[RX] 2026-11-06T17:52:35.742+08:00 [2026-11-06 17:52:34] [FTP] CMD NLST
[RX] 2026-11-06T17:52:35.918+08:00 [2026-11-06 17:52:34] [FTP] CMD TYPE I
[RX] 2026-11-06T17:52:35.918+08:00 [2026-11-06 17:52:34] [FTP] CMD PASV
[RX] 2026-11-06T17:52:35.969+08:00 [2026-11-06 17:52:34] [FTP] CMD STOR WAVE09.BIN
[RX] 2026-11-06T17:52:36.052+08:00 [2026-11-06 17:52:34] [FTP] UPLOAD '/WAVE/WAVE09.BIN' 5250 bytes OK
[RX] 2026-11-06T17:52:36.661+08:00 [2026-11-06 17:52:35] [FTP] CMD TYPE A
[RX] 2026-11-06T17:52:36.661+08:00 [2026-11-06 17:52:35] [FTP] CMD PASV
[RX] 2026-11-06T17:52:36.724+08:00 [2026-11-06 17:52:35] [FTP] CMD NLST
[RX] 2026-11-06T17:52:36.910+08:00 [2026-11-06 17:52:35] [FTP] CMD TYPE I
[RX] 2026-11-06T17:52:36.910+08:00 [2026-11-06 17:52:35] [FTP] CMD PASV
[RX] 2026-11-06T17:52:36.962+08:00 [2026-11-06 17:52:35] [FTP] CMD RETR WAVE09.BIN
[RX] 2026-11-06T17:52:37.128+08:00 [2026-11-06 17:52:36] [FTP] DOWNLOAD '/WAVE/WAVE09.BIN' OK
[RX] 2026-11-06T17:52:37.128+08:00 [2026-11-06 17:52:36] [FTP] CMD QUIT
[RX] 2026-11-06T17:52:37.149+08:00 [2026-11-06 17:52:36] [FTP] waiting for connection...
[RX] 2026-11-06T17:52:39.623+08:00 [2026-11-06 17:52:38][UI_CONTENT_PAGE] page close: id=wave_play
[RX] 2026-11-06T17:52:43.461+08:00 [2026-11-06 17:52:42][UI_CONTENT_PAGE] page open: id=wave_play rows=0
[RX] 2026-11-06T18:10:04.225+08:00 [2026-11-06 18:10:03] [FTP] connection received from 192.168.31.161:54991...
[RX] 2026-11-06T18:10:04.225+08:00 [2026-11-06 18:10:03] [FTP] CMD USER admin
[RX] 2026-11-06T18:10:04.246+08:00 [2026-11-06 18:10:03] [FTP] CMD PASS admin
[RX] 2026-11-06T18:10:04.257+08:00 [2026-11-06 18:10:03] [FTP] CMD CWD /WAVE
[RX] 2026-11-06T18:10:04.278+08:00 [2026-11-06 18:10:03] [FTP] CMD TYPE I
[RX] 2026-11-06T18:10:04.289+08:00 [2026-11-06 18:10:03] [FTP] CMD PASV
[RX] 2026-11-06T18:10:04.424+08:00 [2026-11-06 18:10:03] [FTP] CMD STOR WAVE06.BIN
[RX] 2026-11-06T18:10:04.487+08:00 [2026-11-06 18:10:03] [FTP] UPLOAD '/WAVE/WAVE06.BIN' 5250 bytes OK
[RX] 2026-11-06T18:10:05.098+08:00 [2026-11-06 18:10:03] [FTP] CMD TYPE I
[RX] 2026-11-06T18:10:05.098+08:00 [2026-11-06 18:10:04] [FTP] CMD PASV
[RX] 2026-11-06T18:10:05.171+08:00 [2026-11-06 18:10:04] [FTP] CMD RETR WAVE06.BIN
[RX] 2026-11-06T18:10:05.346+08:00 [2026-11-06 18:10:04] [FTP] DOWNLOAD '/WAVE/WAVE06.BIN' OK
[RX] 2026-11-06T18:10:05.357+08:00 [2026-11-06 18:10:04] [FTP] CMD QUIT
[RX] 2026-11-06T18:10:05.367+08:00 [2026-11-06 18:10:04] [FTP] waiting for connection...
[RX] 2026-11-06T18:11:20.089+08:00 [2026-11-06 18:11:18][UI_CONTENT_PAGE] page open: id=wave_play rows=0
[RX] 2026-11-06T18:11:38.915+08:00 [2026-11-06 18:11:37] [FTP] connection received from 192.168.31.161:54867...
[RX] 2026-11-06T18:11:38.936+08:00 [2026-11-06 18:11:37] [FTP] CMD USER admin
[RX] 2026-11-06T18:11:38.946+08:00 [2026-11-06 18:11:37] [FTP] CMD PASS admin
[RX] 2026-11-06T18:11:38.967+08:00 [2026-11-06 18:11:37] [FTP] CMD CWD /WAVE
[RX] 2026-11-06T18:11:38.967+08:00 [2026-11-06 18:11:37] [FTP] CMD TYPE I
[RX] 2026-11-06T18:11:38.998+08:00 [2026-11-06 18:11:37] [FTP] CMD PASV
[RX] 2026-11-06T18:11:39.122+08:00 [2026-11-06 18:11:38] [FTP] CMD STOR WAVE06.BIN
[RX] 2026-11-06T18:11:39.216+08:00 [2026-11-06 18:11:38] [FTP] UPLOAD '/WAVE/WAVE06.BIN' 5250 bytes OK
[RX] 2026-11-06T18:11:39.837+08:00 [2026-11-06 18:11:38] [FTP] CMD TYPE I
[RX] 2026-11-06T18:11:39.837+08:00 [2026-11-06 18:11:38] [FTP] CMD PASV
[RX] 2026-11-06T18:11:39.879+08:00 [2026-11-06 18:11:38] [FTP] CMD RETR WAVE06.BIN
[RX] 2026-11-06T18:11:40.013+08:00 [2026-11-06 18:11:38] [FTP] DOWNLOAD '/WAVE/WAVE06.BIN' OK
[RX] 2026-11-06T18:11:40.013+08:00 [2026-11-06 18:11:38] [FTP] CMD QUIT
[RX] 2026-11-06T18:11:40.023+08:00 [2026-11-06 18:11:38] [FTP] waiting for connection...
[RX] 2026-11-06T18:12:02.780+08:00 [2026-11-06 18:12:01] [FTP] connection received from 192.168.31.161:53103...
[RX] 2026-11-06T18:12:02.802+08:00 [2026-11-06 18:12:01] [FTP] CMD USER admin
[RX] 2026-11-06T18:12:02.812+08:00 [2026-11-06 18:12:01] [FTP] CMD PASS admin
[RX] 2026-11-06T18:12:02.895+08:00 [2026-11-06 18:12:01] [FTP] CMD CWD /WAVE
[RX] 2026-11-06T18:12:02.895+08:00 [2026-11-06 18:12:01] [FTP] CMD TYPE I
[RX] 2026-11-06T18:12:02.895+08:00 [2026-11-06 18:12:01] [FTP] CMD PASV
[RX] 2026-11-06T18:12:02.957+08:00 [2026-11-06 18:12:01] [FTP] CMD STOR WAVE06.BIN
[RX] 2026-11-06T18:12:03.030+08:00 [2026-11-06 18:12:01] [FTP] UPLOAD '/WAVE/WAVE06.BIN' 5250 bytes OK
[RX] 2026-11-06T18:12:03.633+08:00 [2026-11-06 18:12:02] [FTP] CMD TYPE I
[RX] 2026-11-06T18:12:03.643+08:00 [2026-11-06 18:12:02] [FTP] CMD PASV
[RX] 2026-11-06T18:12:03.705+08:00 [2026-11-06 18:12:02] [FTP] CMD RETR WAVE06.BIN
[RX] 2026-11-06T18:12:03.839+08:00 [2026-11-06 18:12:02] [FTP] DOWNLOAD '/WAVE/WAVE06.BIN' OK
[RX] 2026-11-06T18:12:03.839+08:00 [2026-11-06 18:12:02] [FTP] CMD QUIT
[RX] 2026-11-06T18:12:03.860+08:00 [2026-11-06 18:12:02] [FTP] waiting for connection...
[RX] 2026-11-06T18:14:44.047+08:00 [2026-11-06 18:14:42] [FTP] connection received from 192.168.31.161:58594...
[RX] 2026-11-06T18:14:44.057+08:00 [2026-11-06 18:14:42] [FTP] CMD USER admin
[RX] 2026-11-06T18:14:44.057+08:00 [2026-11-06 18:14:42] [FTP] CMD PASS admin
[RX] 2026-11-06T18:14:44.067+08:00 [2026-11-06 18:14:42] [FTP] CMD CWD /WAVE
[RX] 2026-11-06T18:14:44.067+08:00 [2026-11-06 18:14:42] [FTP] CMD TYPE A
[RX] 2026-11-06T18:14:44.078+08:00 [2026-11-06 18:14:42] [FTP] CMD PASV
[RX] 2026-11-06T18:14:44.151+08:00 [2026-11-06 18:14:43] [FTP] CMD LIST
[RX] 2026-11-06T18:14:44.285+08:00 [2026-11-06 18:14:43] [FTP] CMD DELE WAVE00.BIN
[RX] 2026-11-06T18:14:44.627+08:00 [2026-11-06 18:14:43] [FTP] CMD DELE WAVE01.BIN
[RX] 2026-11-06T18:14:44.969+08:00 [2026-11-06 18:14:43] [FTP] CMD DELE WAVE02.BIN
[RX] 2026-11-06T18:14:45.312+08:00 [2026-11-06 18:14:44] [FTP] CMD DELE WAVE03.BIN
[RX] 2026-11-06T18:14:45.644+08:00 [2026-11-06 18:14:44] [FTP] CMD DELE WAVE04.BIN
[RX] 2026-11-06T18:14:45.997+08:00 [2026-11-06 18:14:44] [FTP] CMD DELE WAVE05.BIN
[RX] 2026-11-06T18:14:46.340+08:00 [2026-11-06 18:14:45] [FTP] CMD DELE WAVE06.BIN
[RX] 2026-11-06T18:14:46.672+08:00 [2026-11-06 18:14:45] [FTP] CMD DELE WAVE07.BIN
[RX] 2026-11-06T18:14:47.016+08:00 [2026-11-06 18:14:45] [FTP] CMD DELE WAVE08.BIN
[RX] 2026-11-06T18:14:47.358+08:00 [2026-11-06 18:14:46] [FTP] CMD DELE WAVE09.BIN
[RX] 2026-11-06T18:14:48.292+08:00 [2026-11-06 18:14:47] [FTP] CMD TYPE A
[RX] 2026-11-06T18:14:48.292+08:00 [2026-11-06 18:14:47] [FTP] CMD PASV
[RX] 2026-11-06T18:14:48.364+08:00 [2026-11-06 18:14:47] [FTP] CMD LIST
[RX] 2026-11-06T18:14:48.560+08:00 [2026-11-06 18:14:47] [FTP] CMD QUIT
[RX] 2026-11-06T18:14:48.602+08:00 [2026-11-06 18:14:47] [FTP] waiting for connection...
[RX] 2026-11-06T18:14:52.299+08:00 [2026-11-06 18:14:51][UI_CONTENT_PAGE] page close: id=wave_play
[RX] 2026-11-06T18:14:56.144+08:00 [2026-11-06 18:14:55][UI_CONTENT_PAGE] page open: id=wave_play rows=0
[RX] 2026-11-06T18:14:56.155+08:00 [2026-11-06 18:14:55][ERR][UI_TASK] ui wave head idx=8 open fail fr=4
[RX] 2026-11-06T18:14:59.703+08:00 [2026-11-06 18:14:58][ERR][UI_TASK] ui wave head idx=8 open fail fr=4
[RX] 2026-11-06T18:14:59.724+08:00 [2026-11-06 18:14:58][ERR][UI_TASK] ui wave head idx=8 open fail fr=4
[RX] 2026-11-06T18:15:02.069+08:00 [2026-11-06 18:15:00][UI_CONTENT_PAGE] page close: id=wave_play
[RX] 2026-11-06T18:15:05.361+08:00 [2026-11-06 18:15:04] [FTP] connection received from 192.168.31.161:60925...
[RX] 2026-11-06T18:15:05.372+08:00 [2026-11-06 18:15:04] [FTP] CMD USER admin
[RX] 2026-11-06T18:15:05.372+08:00 [2026-11-06 18:15:04] [FTP] CMD PASS admin
[RX] 2026-11-06T18:15:05.382+08:00 [2026-11-06 18:15:04] [FTP] CMD CWD /WAVE
[RX] 2026-11-06T18:15:05.382+08:00 [2026-11-06 18:15:04] [FTP] CMD TYPE I
[RX] 2026-11-06T18:15:05.393+08:00 [2026-11-06 18:15:04] [FTP] CMD PASV
[RX] 2026-11-06T18:15:05.466+08:00 [2026-11-06 18:15:04] [FTP] CMD STOR WAVE00.BIN
[RX] 2026-11-06T18:15:05.529+08:00 [2026-11-06 18:15:04] [FTP] UPLOAD '/WAVE/WAVE00.BIN' 5250 bytes OK
[RX] 2026-11-06T18:15:06.130+08:00 [2026-11-06 18:15:05] [FTP] CMD TYPE I
[RX] 2026-11-06T18:15:06.140+08:00 [2026-11-06 18:15:05] [FTP] CMD PASV
[RX] 2026-11-06T18:15:06.203+08:00 [2026-11-06 18:15:05] [FTP] CMD RETR WAVE00.BIN
[RX] 2026-11-06T18:15:06.367+08:00 [2026-11-06 18:15:05] [FTP] DOWNLOAD '/WAVE/WAVE00.BIN' OK
[RX] 2026-11-06T18:15:06.367+08:00 [2026-11-06 18:15:05] [FTP] CMD TYPE I
[RX] 2026-11-06T18:15:06.377+08:00 [2026-11-06 18:15:05] [FTP] CMD PASV
[RX] 2026-11-06T18:15:06.449+08:00 [2026-11-06 18:15:05] [FTP] CMD STOR WAVE01.BIN
[RX] 2026-11-06T18:15:06.522+08:00 [2026-11-06 18:15:05] [FTP] UPLOAD '/WAVE/WAVE01.BIN' 5250 bytes OK
[RX] 2026-11-06T18:15:07.135+08:00 [2026-11-06 18:15:06] [FTP] CMD TYPE I
[RX] 2026-11-06T18:15:07.135+08:00 [2026-11-06 18:15:06] [FTP] CMD PASV
[RX] 2026-11-06T18:15:07.197+08:00 [2026-11-06 18:15:06] [FTP] CMD RETR WAVE01.BIN
[RX] 2026-11-06T18:15:07.363+08:00 [2026-11-06 18:15:06] [FTP] DOWNLOAD '/WAVE/WAVE01.BIN' OK
[RX] 2026-11-06T18:15:07.363+08:00 [2026-11-06 18:15:06] [FTP] CMD TYPE I
[RX] 2026-11-06T18:15:07.373+08:00 [2026-11-06 18:15:06] [FTP] CMD PASV
[RX] 2026-11-06T18:15:07.445+08:00 [2026-11-06 18:15:06] [FTP] CMD STOR WAVE02.BIN
[RX] 2026-11-06T18:15:07.519+08:00 [2026-11-06 18:15:06] [FTP] UPLOAD '/WAVE/WAVE02.BIN' 5250 bytes OK
[RX] 2026-11-06T18:15:08.141+08:00 [2026-11-06 18:15:07] [FTP] CMD TYPE I
[RX] 2026-11-06T18:15:08.152+08:00 [2026-11-06 18:15:07] [FTP] CMD PASV
[RX] 2026-11-06T18:15:08.193+08:00 [2026-11-06 18:15:07] [FTP] CMD RETR WAVE02.BIN
[RX] 2026-11-06T18:15:08.370+08:00 [2026-11-06 18:15:07] [FTP] DOWNLOAD '/WAVE/WAVE02.BIN' OK
[RX] 2026-11-06T18:15:08.381+08:00 [2026-11-06 18:15:07] [FTP] CMD TYPE I
[RX] 2026-11-06T18:15:08.381+08:00 [2026-11-06 18:15:07] [FTP] CMD PASV
[RX] 2026-11-06T18:15:08.454+08:00 [2026-11-06 18:15:07] [FTP] CMD STOR WAVE03.BIN
[RX] 2026-11-06T18:15:08.538+08:00 [2026-11-06 18:15:07] [FTP] UPLOAD '/WAVE/WAVE03.BIN' 5250 bytes OK
[RX] 2026-11-06T18:15:09.139+08:00 [2026-11-06 18:15:08] [FTP] CMD TYPE I
[RX] 2026-11-06T18:15:09.150+08:00 [2026-11-06 18:15:08] [FTP] CMD PASV
[RX] 2026-11-06T18:15:09.191+08:00 [2026-11-06 18:15:08] [FTP] CMD RETR WAVE03.BIN
[RX] 2026-11-06T18:15:09.366+08:00 [2026-11-06 18:15:08] [FTP] DOWNLOAD '/WAVE/WAVE03.BIN' OK
[RX] 2026-11-06T18:15:09.366+08:00 [2026-11-06 18:15:08] [FTP] CMD TYPE I
[RX] 2026-11-06T18:15:09.377+08:00 [2026-11-06 18:15:08] [FTP] CMD PASV
[RX] 2026-11-06T18:15:09.461+08:00 [2026-11-06 18:15:08] [FTP] CMD STOR WAVE04.BIN
[RX] 2026-11-06T18:15:09.512+08:00 [2026-11-06 18:15:08] [FTP] UPLOAD '/WAVE/WAVE04.BIN' 5250 bytes OK
[RX] 2026-11-06T18:15:10.117+08:00 [2026-11-06 18:15:09] [FTP] CMD TYPE I
[RX] 2026-11-06T18:15:10.127+08:00 [2026-11-06 18:15:09] [FTP] CMD PASV
[RX] 2026-11-06T18:15:10.191+08:00 [2026-11-06 18:15:09] [FTP] CMD RETR WAVE04.BIN
[RX] 2026-11-06T18:15:10.367+08:00 [2026-11-06 18:15:09] [FTP] DOWNLOAD '/WAVE/WAVE04.BIN' OK
[RX] 2026-11-06T18:15:10.367+08:00 [2026-11-06 18:15:09] [FTP] CMD TYPE I
[RX] 2026-11-06T18:15:10.378+08:00 [2026-11-06 18:15:09] [FTP] CMD PASV
[RX] 2026-11-06T18:15:10.450+08:00 [2026-11-06 18:15:09] [FTP] CMD STOR WAVE05.BIN
[RX] 2026-11-06T18:15:10.513+08:00 [2026-11-06 18:15:09] [FTP] UPLOAD '/WAVE/WAVE05.BIN' 5250 bytes OK
[RX] 2026-11-06T18:15:11.117+08:00 [2026-11-06 18:15:10] [FTP] CMD TYPE I
[RX] 2026-11-06T18:15:11.127+08:00 [2026-11-06 18:15:10] [FTP] CMD PASV
[RX] 2026-11-06T18:15:11.190+08:00 [2026-11-06 18:15:10] [FTP] CMD RETR WAVE05.BIN
[RX] 2026-11-06T18:15:11.366+08:00 [2026-11-06 18:15:10] [FTP] DOWNLOAD '/WAVE/WAVE05.BIN' OK
[RX] 2026-11-06T18:15:11.366+08:00 [2026-11-06 18:15:10] [FTP] CMD TYPE I
[RX] 2026-11-06T18:15:11.377+08:00 [2026-11-06 18:15:10] [FTP] CMD PASV
[RX] 2026-11-06T18:15:11.555+08:00 [2026-11-06 18:15:10] [FTP] CMD STOR WAVE06.BIN
[RX] 2026-11-06T18:15:11.576+08:00 [2026-11-06 18:15:10] [FTP] UPLOAD '/WAVE/WAVE06.BIN' 5250 bytes OK
[RX] 2026-11-06T18:15:12.180+08:00 [2026-11-06 18:15:11] [FTP] CMD TYPE I
[RX] 2026-11-06T18:15:12.191+08:00 [2026-11-06 18:15:11] [FTP] CMD PASV
[RX] 2026-11-06T18:15:12.253+08:00 [2026-11-06 18:15:11] [FTP] CMD RETR WAVE06.BIN
[RX] 2026-11-06T18:15:12.398+08:00 [2026-11-06 18:15:11] [FTP] DOWNLOAD '/WAVE/WAVE06.BIN' OK
[RX] 2026-11-06T18:15:12.398+08:00 [2026-11-06 18:15:11] [FTP] CMD TYPE I
[RX] 2026-11-06T18:15:12.408+08:00 [2026-11-06 18:15:11] [FTP] CMD PASV
[RX] 2026-11-06T18:15:12.470+08:00 [2026-11-06 18:15:11] [FTP] CMD STOR WAVE07.BIN
[RX] 2026-11-06T18:15:12.554+08:00 [2026-11-06 18:15:11] [FTP] UPLOAD '/WAVE/WAVE07.BIN' 5250 bytes OK
[RX] 2026-11-06T18:15:13.156+08:00 [2026-11-06 18:15:12] [FTP] CMD TYPE I
[RX] 2026-11-06T18:15:13.156+08:00 [2026-11-06 18:15:12] [FTP] CMD PASV
[RX] 2026-11-06T18:15:13.207+08:00 [2026-11-06 18:15:12] [FTP] CMD RETR WAVE07.BIN
[RX] 2026-11-06T18:15:13.363+08:00 [2026-11-06 18:15:12] [FTP] DOWNLOAD '/WAVE/WAVE07.BIN' OK
[RX] 2026-11-06T18:15:13.363+08:00 [2026-11-06 18:15:12] [FTP] CMD TYPE I
[RX] 2026-11-06T18:15:13.374+08:00 [2026-11-06 18:15:12] [FTP] CMD PASV
[RX] 2026-11-06T18:15:13.447+08:00 [2026-11-06 18:15:12] [FTP] CMD STOR WAVE08.BIN
[RX] 2026-11-06T18:15:13.519+08:00 [2026-11-06 18:15:12] [FTP] UPLOAD '/WAVE/WAVE08.BIN' 5250 bytes OK
[RX] 2026-11-06T18:15:14.145+08:00 [2026-11-06 18:15:13] [FTP] CMD TYPE I
[RX] 2026-11-06T18:15:14.145+08:00 [2026-11-06 18:15:13] [FTP] CMD PASV
[RX] 2026-11-06T18:15:14.186+08:00 [2026-11-06 18:15:13] [FTP] CMD RETR WAVE08.BIN
[RX] 2026-11-06T18:15:14.363+08:00 [2026-11-06 18:15:13] [FTP] DOWNLOAD '/WAVE/WAVE08.BIN' OK
[RX] 2026-11-06T18:15:14.363+08:00 [2026-11-06 18:15:13] [FTP] CMD TYPE A
[RX] 2026-11-06T18:15:14.374+08:00 [2026-11-06 18:15:13] [FTP] CMD PASV
[RX] 2026-11-06T18:15:14.436+08:00 [2026-11-06 18:15:13] [FTP] CMD LIST
[RX] 2026-11-06T18:15:14.561+08:00 [2026-11-06 18:15:13] [FTP] CMD QUIT
[RX] 2026-11-06T18:15:14.571+08:00 [2026-11-06 18:15:13] [FTP] waiting for connection...
[RX] 2026-11-06T18:15:18.286+08:00 [2026-11-06 18:15:17][UI_CONTENT_PAGE] page open: id=wave_play rows=0
[RX] 2026-11-06T18:15:21.817+08:00 [2026-11-06 18:15:20][UI_CONTENT_PAGE] page close: id=wave_play