diff --git a/AGENTS.md b/AGENTS.md index 44b87757..b5545ecf 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -10,7 +10,7 @@ ## 项目概况 -**现状一句话**:平台能力(网络 / 存储 / 时间 / UI / 日志 / 看门狗 / FTP / 配置)**已实现并台架验收**;采集主线已闭环到业务消费者(L1→L2 相量→L2.5 遥测快照→L3 保护判据 protectTask→104 遥信/遥测+UI,B5/批 2);**RS-485 采集尚未接线**(B2 按用户决策冻结,见 `docs/任务规划/暂缓-RS485.md`)——当前最大功能缺口,接线节奏受 E-59 门禁约束(见「平台约束」)。 +**现状一句话**:平台能力(网络 / 存储 / 时间 / UI / 日志 / 看门狗 / FTP / 配置)**已实现并台架验收**;采集主线已闭环到业务消费者(L1→L2 相量→L2.5 遥测快照→L3 保护判据 protectTask→104 遥信/遥测+UI,B5/批 2);⚠ **保护判据现处于「未标定闭锁」态**——产品构建下 `adc_cal_flags()` 的 `ADC_CAL_F_VALID` 未置位,`protect_task.c:98` 直接停走判据,等卡 12 两点标定写入 `[adc_cal] valid` 后自动解卡(用户裁定 2026-10-25:保持闭锁,不用万用表走捷径);**RS-485 采集尚未接线**(B2 按用户决策冻结,见 `docs/任务规划/暂缓-RS485.md`)——当前最大功能缺口,接线节奏受 E-59 门禁约束(见「平台约束」)。 **数据主线**(能力视角;分层图与跨层依赖表 → `docs/架构设计/项目架构总览.md`): diff --git a/docs/README.md b/docs/README.md index cd25f292..91954f02 100644 --- a/docs/README.md +++ b/docs/README.md @@ -238,7 +238,7 @@ docs/ | 位置 | 内容 | |---|---| -| [`任务规划/`](任务规划/README.md) | **统一待办登记簿(文件夹)**——`README.md` = 排序权威(推进顺序 + 波次语义名)+ 编号空间 + 维护约定;`数据可信.md` = **当前波次**(通道标定 → 遥测链 → 运行参数,14 张卡);`采集保护收尾.md` = 「采集保护收尾」剩余(只剩 M3 送检);`登记簿.md` = N/S/T-x 长期观察;`排期详述.md` / `暂缓-RS485.md` / `测试与架构专项.md` = 波内详表 / 冻结簇 / 专项;`基线与待确认.md` = 待确认(开放问题,OQ 族属主);**`并行分道方案.md` = 待办横向归道(写域 域1~域8 + 道A~道H + 批次 + 合并次序)**;只保留未闭环项,完成即删 | +| [`任务规划/`](任务规划/README.md) | **统一待办登记簿(文件夹)**——`README.md` = 排序权威(推进顺序 + 波次语义名)+ 编号空间 + 维护约定;`UI补齐.md` = **当前波次**(21 叶补齐,7 张卡);`数据可信.md` = 收口态(软件侧已 100%,剩 3 张台架/外部卡);`采集保护收尾.md` = 「采集保护收尾」剩余(只剩 M3 送检);`登记簿.md` = N/S/T-x 长期观察;`排期详述.md` / `暂缓-RS485.md` / `测试与架构专项.md` = 波内详表 / 冻结簇 / 专项;`基线与待确认.md` = 待确认(开放问题,OQ 族属主);**`并行分道方案.md` = 待办横向归道(写域 域1~域8 + 道A~道H + 批次 + 合并次序)**;只保留未闭环项,完成即删 | | `硬件平台/` | 网表详细分析报告与语义图(V0.0 / V0.1);**[`ADC通道映射说明.md`](硬件平台/ADC通道映射说明.md)——V0.1 十七路 ADC 语义/网名/通道号权威映射表(固件取数、UI 显示、自检注入以此为准)** | | `芯片手册/` | 外部芯片数据手册转录(CH395F / GD5F2GQ5UE / SD2506 / TPAFE5160 / RTL8305NBI 等) | | `images/` | 文档技术配图(`.svg` 产物,由 `tools/arch_diagram/`、`tools/refgraph/` 生成) | diff --git a/docs/UI设计/页面补齐规划.md b/docs/UI设计/页面补齐规划.md index 268719b1..fe4c6198 100644 --- a/docs/UI设计/页面补齐规划.md +++ b/docs/UI设计/页面补齐规划.md @@ -66,8 +66,8 @@ | 14 | 定值(查看) | 列表(18 项 / 3 页) | 同 9 | ✅(需快照层) | | 15 | 控制字(查看) | 列表(4 项) | 同 10 | ✅(需快照层) | | 16 | 软压板(查看) | 列表(10 项 / 2 页) | 同 11 | ✅(需快照层) | -| 18 | 遥测死区 | 可编辑列表(4 项) | 运行参数段 0x8020~0x8023 | ❌ 运行参数段未实现 | -| 19 | 遥测系数 | 可编辑列表(9 项) | 微调系数(参考 TLV10) | ❌ 随标定 | +| 18 | 遥测死区 | 可编辑列表(4 项) | `[run_par]` 9 键死区 | ✅ 数据层已落地(卡 10),**页面未做** | +| 19 | 遥测系数 | 可编辑列表(9 项) | `[adc_cal]` 的 k / b | ✅ 数据层已落地(卡 2),**页面未做** | | 20 | 遥信类型 | 可编辑列表 | 开入量 | ❌ 开入未实现 | | 21 | 遥信防抖 | 可编辑列表(1 项) | 运行参数 0x8030 | ❌ 同上 | | 22 | 双点遥信 | 可编辑列表 | 开入量 | ❌ 同上 | @@ -77,7 +77,7 @@ | 27 | 清除记录 | 操作页(选类型 + 确认) | `sys_log`(**缺删除 API**) | 🔶 需补 API | | 29 | 通讯设置 | 可编辑列表(4~6 项) | 104 公共地址/端口/主站(当前固定) | 🔶 需 `comm_cfg` | | 31 | SNTP设置 | 可编辑列表(3 项) | SNTP 客户端 | ❌ 未实现(产品口径亦未定) | -| 33 | SOE记录 | 动态列表(每记录 2 行) | `/log/soe.log` 二进制 64B | 🔶 需专用 reader | +| 33 | SOE记录 | 动态列表(每记录 2 行) | `/log/soe.log` 二进制 64B | ✅ 已落地(`ui_page_soe.c`) | | 34 | 事故记录 | 动态列表 | 跳闸记录 | ❌ 记录类型未实现 | | 35 | 操作记录 | 动态列表 | 操作记录 | ❌ 同上 | | 36 | 保护告警 | 动态列表 | 告警记录 | ❌ 同上 | @@ -85,7 +85,7 @@ | 38 | 遥控记录 | 动态列表 | 遥控记录 | ❌ 同上 | | 41 | 运行报告 | 信息页(统计) | 上电次数/运行时长/复位原因/通信统计 | ❌ 计数器未实现 | -**统计**:数据现成 **11** 项 · 需新数据层 **3** 项 · 数据源不存在 **13** 项。 +**统计(2026-10-25 复核)**:本表 27 叶中 **6 叶已落地**(遥信量 / 查看 4 页 / SOE),剩 21 叶 = 数据现成 **8** 项(整定 4 + 时钟 + 复归 + 死区 + 系数)· 需新数据层 **2** 项(清除记录 / 通讯设置)· 数据源不存在 **11** 项(遥信 3 + 手动录波 + SNTP + 记录 5 + 运行报告)。**分批与 DoD 见 `docs/任务规划/UI补齐.md`**——本表只讲逐页形态与数据源,不重复排期。 --- diff --git a/docs/任务规划/README.md b/docs/任务规划/README.md index 0bb98cb0..dde160ff 100644 --- a/docs/任务规划/README.md +++ b/docs/任务规划/README.md @@ -9,7 +9,8 @@ > |---|---|---| > | `README.md`(本文件) | 编号空间(§0)· 未闭环一览(§1)· **推进顺序权威(§2)** · 维护约定(§3) | 低频;仅主工作树 | > | `采集保护收尾.md` | 「采集保护收尾」剩余:只剩 M3 送检(B10) | 低频——送检窗口前后改 | -> | `数据可信.md` | **当前波次(2026-10-23 用户定项)**:通道标定 → 遥测链 → 运行参数段;含事实基线、折算模型、**14 张任务卡**(含"已知电压注入验证"与"端子变比确认"两卡)、前置决策 | **高频**——开工后状态流转只改它 | +> | `UI补齐.md` | **当前波次(2026-10-25 用户定项)**:菜单树剩 21 叶未绑,按数据源就绪度分三梯队;含现状核对、三梯队、**7 张任务卡** | **高频**——开工后状态流转只改它 | +> | `数据可信.md` | **收口态**:软件侧 100%(卡 1~11 已销项),只剩卡 0 / 0b / 12 三张台架与外部卡;含事实基线、折算模型、前置决策 | 低频——只在上机或外部资源到位时改 | > | `排期详述.md` | 「结构债」/「验证常态」波内详表 | 低频 | > | `并行分道方案.md` | **待办横向归道**:文件级写域(域1~域8)· 八条道(道A~道H)· 批次与合并次序 · 不能并行的事项 | 低频——分道或批次变化时改;**明细不复制**,只做归道 | > | `暂缓-RS485.md` | B2 RS-485 整簇冻结清单(用户决定) | 极少 | @@ -17,7 +18,7 @@ > | `测试与架构专项.md` | S1x / A-x 专项(P1-10 / S12 / A-5 已于 2026-10-25 销项) | 低频 | > | `基线与待确认.md` | **只放还没答案的问题**(OQ 族属主登记处);基线类内容已移出到模块文档 | 参考,少改 | > -> **怎么用**:想知道"现在该做什么、按什么顺序" → 本文件 **§2**;想知道"当前波次任务卡状态 / 验收判据 / 并行道" → `数据可信.md`; +> **怎么用**:想知道"现在该做什么、按什么顺序" → 本文件 **§2**;想知道"当前波次任务卡状态 / 验收判据 / 并行道" → `UI补齐.md`; > 想知道"某条待办的来龙去脉" → 按编号查 `登记簿.md` / `测试与架构专项.md`;想知道"还差哪些验证" → `排期详述.md` §2。 > > **只保留待办**:已完成条目直接删除,不留变更记录(历史见 `git log` 与各模块文档); @@ -56,27 +57,33 @@ | 类别 | 数量 | 条目 | |---|---|---| -| 网络 | 4 | N-3(L5 基线重验)· N-16(A2/A4 负向台架)· **reconcile 突发饿死 uiTask**(🟦并档 E-27/28 批 3 评估)——2026-10-25 台架两轮分箱定案的饿死型签名。本波连带三修已合入并销项(按位分账 66f862e / sink 往返喂位 9d90e00 / v5 判读 v1.1 4c05b58+a92baa2,两轮验收与分箱证据 `boot_log_data/f3rounds_r1/r2` 两 gz)。本波道F 原三张条目(日志静默观察 / 探针窗口心跳 / 写回 flush)已于 2026-10-25 台架大窗销项删行——心跳主签名在 9 条 stall 行中 NET 位全程在场 = 旧 44/44 必发归零;复跑暴露的两个新签名以语义标识上行为本表独立条目,详 `登记簿.md` §1 | +| 网络 | 4 | N-3(L5 基线重验)· N-16(A2/A4 负向台架)· N-30(relisten 沉降段统一受阻,观察)· **reconcile 突发饿死 uiTask**(🟦并档 E-27/28 批 4 评估)——2026-10-25 台架两轮分箱定案的饿死型签名。本波连带三修已合入并销项(按位分账 66f862e / sink 往返喂位 9d90e00 / v5 判读 v1.1 4c05b58+a92baa2,两轮验收与分箱证据 `boot_log_data/f3rounds_r1/r2` 两 gz)。本波道F 原三张条目(日志静默观察 / 探针窗口心跳 / 写回 flush)已于 2026-10-25 台架大窗销项删行——心跳主签名在 9 条 stall 行中 NET 位全程在场 = 旧 44/44 必发归零;复跑暴露的两个新签名以语义标识上行为本表独立条目,详 `登记簿.md` §1 | | 存储 / 日志 | 3 | **S-3(USART1 TX-only 根治)** · S-4(dhara 重试自旋)· S-5(可选全序列卷锁) | | 结构 / 健壮性 | 3 | N-23(注册校验残余白名单)· N-25(性能/语义簇)· N-28(uvprojx 空 TU 观察) | | 仓库 | 1 | N-29(`.git` **233 MB**,**已决策暂不处理、登记观察**) | | 硬件 | 1 | N-18(V0.2 改版项) | | 测试 / 基础设施 | 3 | T-7(CI 远端两 job 闭环 + 第二机交叉验证)· A-4(采集链路测试约束,RS485 侧随 B2 暂缓)· 串口助手 A6/A7 补验(待 CH340) | -| UI | 1 | U5 页面落地 🟦**批 2 道E 大部落地**(批 1~4:`ui_data` 三通道 + 遥信 33 行 + 定值查看 4 页 + 记录页 reader 链,黄金 18 页入库;余批 5 = 整定 4 页 + `param_request` 写路径,板端有状态导航器已备) | +| **UI**(当前波次) | 1 簇 · **21 叶** | **U5 页面落地**——33 叶已绑 12、剩 **21**(不是原口径的 4 叶):第一梯队 9 叶(整定 4 + 维护 3 + 遥测 2,数据源全就绪)· 第二梯队 4 叶(通讯设置 + 遥信 3 页)· 第三梯队 6 叶(记录 5 + 运行报告)· 不排 2 叶(手动录波缺模块 / SNTP 缺口径)。组件层三件套已落地但**零消费者**,详表 `UI补齐.md` | | **暂缓** | 2 簇 | **B2 RS-485 整簇**(`暂缓-RS485.md`)· **N-27 内存优化簇剩余**(R-2 后半 / R-3 / R-4 / R-6;重开条件见 `../内存管理/RAM使用分析与优化方案.md` §4)。⚠ 已落地的 R-9 与 `mem-budget` 门禁/台账/趋势**不回退** | -| **数据可信**(当前波次) | 1 簇 · 在途 3 卡 | 🔴台架/外部:已知电压注入(卡 0,一块万用表就能开)· 端子变比确认(0b,🟡)· 标准源两点标定(12,🟡)。**卡 1~7 批 1 销项、卡 8~11 批 2 销项(2026-10-25,遥测快照/104 读快照/运行参数段/频率绑定全链 + 大窗与验收窗台架钉证;详表 `数据可信.md` §5)** | +| **数据可信**(收口态) | 1 簇 · 剩 3 张外部卡 | **软件侧已 100%**:卡 1~7 批 1 销项、卡 8~11 批 2 销项(2026-10-25,遥测快照/104 读快照/运行参数段/频率绑定全链 + 大窗与验收窗台架钉证;详表 `数据可信.md` §5)。剩 🔴 已知电压注入(卡 0,一块万用表即可)· 🟡 端子变比(0b)· 🟡 标准源两点标定(12)。⚠ **保护现处于未标定闭锁态**——`protect_task.c:98` 要求 UA/UN/IA 的 `ADC_CAL_F_VALID` 全置位,而 VALID 只在标定写入 `[adc_cal] valid` 后才置位;用户裁定(2026-10-25)**保持闭锁到标准源到位**,不缩短解锁路径 | > **网络侧 E-xx 存量项**(历史编号族,属主文档已于 2026-10-15 删除,编号冻结见 > `docs/编号规范.md` §4.3):E-27 / E-28 挂「net 层跨上下文收口」(见 `排期详述.md` §1); > E-47 待 CH395F 驱动侧定案;E-12 为 `FF_FS_LOCK` / 单写者纪律记录项;E-31 后续与 E-62 > 为回归监督项(纪律已固化于 `AGENTS.md`,无需改动)。 -> UI 标准化只剩 U5 页面落地,见 §2「UI 扩展」;lftpd 主机测试缺口为整簇排期项。 +> UI 标准化只剩 U5 页面落地(21 叶),见 §2「UI 补齐」;lftpd 主机测试缺口为整簇排期项。 ### 1.1 结构性判断(排序依据) 1. **功能主线优先(用户决定 2026-10-12)**:把"采集→相量→保护→上送"链路收口到"台架闭环 + 功能面完整 + 可送检"。前两项已达成,「采集保护收尾」只剩 M3 送检(`采集保护收尾.md`)。**RS-485 对下采集(B2)暂缓**(`暂缓-RS485.md`),主线不等它。 -2. **内存预算红线已机械化**:`mem-budget` 钩子拦 RW_IRAM1/RW_CCM >92%,子系统配额 / CCM 台账 / 趋势基线 → `docs/内存管理/RAM预算台账.md`。**R-2 后半与 R-3 / R-4 / R-6 整簇暂缓**(CCM 只剩 **7,904 B**,重开条件见 `../内存管理/RAM使用分析与优化方案.md` §4)——**门禁与台账继续常开,它们正是"何时该重开"的传感器**。 -3. **验证债仅剩窗口性事项**(L5 基线重锁 / A2-A4 负向台架 / 探针窗口心跳 / 串口助手补验),不单独排期、逢窗口顺手做。 +2. **产品功能面在 V0.1 已到顶**(2026-10-25 复核):保护元件的三相类(B/C 相过流、零序过流、PT/CT 断线、方向/功率类)**全部被 N-18 硬件缺陷挡住**(跨转换器无同一时刻性 + STM32 侧削顶),剩余可行的只有 A 相涌流制动 / 突变量启动 / 无压无流闭锁 / 元件级校验和 4 项,而它们**没有标准源就无法验证**。加上**保护当前整条链处于未标定闭锁态**(`protect_task.c:98`),保护侧的工作在标准源到位前**没有可闭环的增量**。 +3. **数据可信软件侧已尽**:卡 1~11 全销项,剩下的卡 0 / 0b / 12 三张全是台架或外部资源(万用表 / 子板 / 标准源),软件道插不上手。 +4. **内存预算红线已机械化**:`mem-budget` 钩子拦 RW_IRAM1/RW_CCM >92%,子系统配额 / CCM 台账 / 趋势基线 → `docs/内存管理/RAM预算台账.md`。**R-2 后半与 R-3 / R-4 / R-6 整簇暂缓**(CCM 只剩 **7,904 B**,重开条件见 `../内存管理/RAM使用分析与优化方案.md` §4)——**门禁与台账继续常开,它们正是"何时该重开"的传感器**。 +5. **验证债仅剩窗口性事项**(L5 基线重锁 / A2-A4 负向台架 / 串口助手补验 / T-7 CI 两 job),不单独排期、逢机顺手做。 + +> **结论(2026-10-25 重排的实质)**:第 1~3 条说明**高优先级波次全部被外部资源或硬件代次卡住**, +> 而 UI 补齐是唯一"数据源已就绪、不依赖台架、能整波闭环"的工作。故本轮**只做 UI**, +> 结构债押后——不是它不重要,是它没有外部依赖、随时能捡起来,而 UI 的 21 叶一直压着产品可见度。 --- @@ -85,7 +92,10 @@ > **本节是全项目所有工作流唯一的权威顺序**:`产品需求设计文档.md` §9.2、`../算法/继电保护功能复现规划.md`、 > 各模块文档里的路线图均为局部视图,**顺序变更只改本节,其它文档只留指针**。 > 排序原则:**安全风险 > 产品功能主线 > 数据正确性 > 预算/结构债 > 验证常态 > UI 扩展 > 仓库决策**(当前无未闭环安全项)。 -> 波内详表在挂接文件里(`采集保护收尾.md` / `排期详述.md` / `暂缓-RS485.md`),但**波次增删与先后只改 §2.0**。 +> **但优先级只在"能开工"的项之间比较**:高优先级波次若全部被外部资源(标准源 / 子板 / 台架 / runner) +> 或硬件代次卡住,波次表按"**现在能整波闭环**"重排,阻塞原因写进「为什么在这」列—— +> 2026-10-25 的重排就是这种情况(保护元件被 N-18 挡、数据可信被标准源挡 → UI 补齐顶上)。 +> 波内详表在挂接文件里(`采集保护收尾.md` / `UI补齐.md` / `排期详述.md` / `暂缓-RS485.md`),但**波次增删与先后只改 §2.0**。 ### 2.0 波次总览 @@ -95,12 +105,12 @@ | 波次 | 内容 | 为什么在这 | |---|---|---| -| **采集保护收尾** | **只剩 M3 送检**(B10,Fixed Date)——任务卡与判据见 `采集保护收尾.md` | 收口目标"台架闭环 + 功能面完整 + 可送检"的前两项已达成;**真约束只剩送检窗口**,窗口一到全道让路、窗口前 2 日特性冻结 | -| **数据可信**(当前) | **通道标定 → 遥测链 → 运行参数**:M4 系数与量纲 / M5 遥测链 / M6 运行参数与点表;14 张卡与事实基线见 `数据可信.md` | **用户决定(2026-10-23):下一步做通道标定,先于 UI 页面与结构债**。它是唯一"改一处、全链受益"的入口(`App/task/adc_task.c:335` 是码值→工程量的唯一位置),也是「UI 扩展」页面与 104 遥测的共同前置——先做页面则 `ui_data_feed` 组装的码值帧要返工。本波紧随「采集保护收尾」,排在「预算与内存」「结构债」之前。⚠ 2026-10-23 补记:ADC 至今**从未采过已知电压**(连极性都没验过,见 `数据可信.md` §2.6),故第一张卡是"已知电压注入验证"——只需一块万用表,不需要信号源/示波器,是开工的第一刀 | +| **采集保护收尾** | **只剩 M3 送检**(B10,Fixed Date)——任务卡与判据见 `采集保护收尾.md` | 收口目标"台架闭环 + 功能面完整 + 可送检"的前两项已达成;**真约束只剩送检窗口**,窗口一到全道让路、窗口前 2 日特性冻结。⚠ B10 的「L1-5 标定复核」依赖卡 12,而卡 12 要标准源;保护现处于未标定闭锁态(`protect_task.c:98`),送检前必须先解卡 | +| **数据可信**(收口态) | **软件侧已 100%**:M4 系数与量纲 ②③④⑥ / M5 遥测链 / M6 运行参数与点表全部达成;**只剩 3 张台架与外部卡**——卡 0 已知电压注入(万用表)· 卡 0b 端子变比(子板)· 卡 12 标准源两点标定。详表 `数据可信.md` | **用户决定(2026-10-23):通道标定先于 UI 与结构债**——它是唯一"改一处、全链受益"的入口(`App/task/adc_task.c:335` 是码值→工程量的唯一位置),软件道已于 2026-10-25 全部走完(卡 1~11 销项)。⚠ **剩下的三张卡没有软件道可做**:0 要万用表与台架、0b 要子板、12 要标准源。**台架不在手边(2026-10-25 确认)→ 本波整体顺延**,不占编码道 | +| **UI 补齐**(当前) | 菜单树剩 **21 叶未绑**(33 叶已绑 12):第一梯队 9 叶零依赖 · 第二梯队 4 叶需新配置段 · 第三梯队 6 叶需写入方或计数器;7 张任务卡见 `UI补齐.md` | **用户决定(2026-10-25):下一波只做 UI 补齐,结构债押后**。判据是"能开工"——产品功能面被 N-18 挡、数据可信被标准源挡,而结构债无外部依赖、随时能捡;UI 是唯一**数据源已就绪、不依赖台架、能整波闭环**的工作,且 21 叶一直压着产品可见度。组件层三件套(编辑器 / 定值表 / 操作页)已落地但**零消费者**,不写页面等于白做 | +| **结构债**(押后) | **net 层跨上下文收口(含 2026-10-25 台架实证的 reconcile 饿死签名)→ 注册校验白名单清理 → 性能语义簇 / 空 TU**;USART1 改为只发不收**单独独占一轮**(CubeMX 重生成,需清空全部工作树)。日志管线与 S8 合并评估、写回 flush 已于 2026-10-25 销项;详表 `排期详述.md` §1 | **无人在等、无外部依赖 → 随时能捡起来**,故排在 UI 之后。其中 net 收口优先于 USART1:饿死签名是台架**实测捕获**的可用性缺陷(8 连窗 UI 缺席 800 ms+,v1.1 判据下 3 事件 8 行、漏检与误报均为零),而 USART1 那条只是 IWDG 误复位的机制根源、且已有 250 ms drain 预算 + 300 ms 冷却的缓解 | | **预算与内存** | ⏸ **整簇暂缓**:R-2 后半(缩堆 56→32 KB → 29.5 KB 迁 CCM)· R-3 · R-4 · R-6;R-5 已判定不可行 | **不再排期**:没有功能在等这块预算,而搬迁要动 scatter、要逐条过 DMA 可达性清单、缩堆还要上板复测。重开条件 → `../内存管理/RAM使用分析与优化方案.md` §4 | -| **结构债** | **USART1 改为只发不收 → net 层跨上下文收口(含重建窗回执排队问题的根治)→ 注册校验白名单清理 → 性能语义簇 / 空 TU**(日志管线与 S8 合并评估、写回 flush 已于 2026-10-25 销项;详表 `排期详述.md` §1) | 无紧急,按性价比排:USART1 那条灭 IWDG 误复位的机制根源;net 层收口体量大、验证重,放后 | -| **验证常态** | T-7 CI · L5 基线重锁 · A2/A4 负向台架 · 探针窗口心跳 · 串口助手 A6/A7(详表 `排期详述.md` §2) | 窗口性,逢机顺带,不单独排期 | -| **UI 扩展** | **U5 页面落地**——27 是目标数不是差集(现存 7 个页面实现;27 个空叶子已归并为 7 模块 + 2 项前置能力) | 🟦**批 2 道E 在途**(2026-10-25 开工,组件层三件套已于批 1 落地)。地基已齐(U1~U4 落地、`ui-golden` 与字符集差集检查已挂 pre-commit),新增一页 = 3 处人工 + 1 条生成器命令。**最早在「数据可信」的 M4 之后开工**——`ui_data` / `ui_data_feed` 需要真数据(`数据可信.md` §10)。逐页规格见 `../UI设计/页面扩充详细方案.md` | +| **验证常态** | T-7 CI · L5 基线重锁 · A2/A4 负向台架 · 串口助手 A6/A7(详表 `排期详述.md` §2) | 窗口性,逢机顺带,不单独排期。探针窗口心跳已于 2026-10-25 台架大窗销项(心跳主签名在 9 条 stall 行中 NET 位全程在场 = 旧 44/44 必发归零) | | **仓库决策** | **N-29** `.git` **233 MB** + 图片 36.3 MB | **已决策(2026-10-11):暂不处理、登记观察**——推送/协作前重评(`git filter-repo` 历史重写影响未推送提交与协作者) | | **暂缓** | **B2 RS-485 整簇**(`暂缓-RS485.md`) | **用户决定(2026-10-12):当前不处理 RS-485** | | **硬件改版** | N-18 8 路电气量全接 TPAFE(V0.2) | 下一版硬件;固件侧已用语义映射隔离,改版只动映射表 | @@ -109,19 +119,20 @@ ``` 采集保护收尾 只剩 B10 送检(M3, Fixed Date) 详表 采集保护收尾.md + ↓ ⚠ 送检的「L1-5 标定复核」依赖卡 12(标准源),且保护要先解卡 +数据可信 ⏸ 软件侧已 100%(卡 1~11 销项,M4/M5/M6 达成) + 只剩 卡 0(万用表)→ 0b(子板变比)→ 12(标准源) 详表 数据可信.md + 台架不在手边(2026-10-25)→ 整体顺延,不占编码道 ↓ -数据可信 通道标定 → 遥测链 → 运行参数 - M4 系数与量纲 → M5 遥测链 → M6 运行参数与点表 详表 数据可信.md - 关键路径: 量程口径 → 标定模块 → 落盘 → 未标定即闭锁 → 量纲回归 - 「UI 扩展」可在 M4 后开工 +UI 补齐 21 叶:第一梯队 9(零依赖)→ 第二梯队 4(新配置段) + → 第三梯队 6(写入方 / 计数器) 详表 UI补齐.md + 单道串行(菜单树与页面注册表是单写者生成物) + ↓ +结构债 net 收口(含 reconcile 饿死签名)→ 白名单 → 性能簇 / 空 TU + USART1 只发不收 = 单独独占一轮(需清空全部工作树) ↓ 预算与内存 ⏸ 整簇暂缓(重开条件见 `../内存管理/RAM使用分析与优化方案.md` §4) - ↓ -结构债 USART1 只发不收 → 日志管线与 S8 → net 层收口 → 白名单清理 → 写回/性能/空TU - ↓ -验证常态 T-7 CI · L5 基线重锁 · A2/A4 负向台架 · 探针心跳 · 串口助手 - ↓ -UI 扩展 U5 页面落地(未排期,最早「数据可信」M4 之后) +验证常态 T-7 CI · L5 基线重锁 · A2/A4 负向台架 · 串口助手 仓库决策 N-29 .git 233MB(已决策暂不处理) 硬件:N-18 V0.2 暂缓 B2 RS-485 整簇(见 暂缓-RS485.md) ``` diff --git a/docs/任务规划/UI补齐.md b/docs/任务规划/UI补齐.md new file mode 100644 index 00000000..58b24d25 --- /dev/null +++ b/docs/任务规划/UI补齐.md @@ -0,0 +1,126 @@ +# UI 补齐(U5 页面落地 · 当前波次) + +> **一句话**:菜单树 33 个叶子已绑 12、剩 **21**;组件层三件套(数值编辑器 / 定值表 / 操作页) +> 已落地但**零消费者**。本波按**数据源就绪度**把 21 叶分三梯队,先做零依赖的 9 叶。 +> +> **本文定位**:本波次的任务卡与验收判据。**排序权威在 `docs/任务规划/README.md` §2**。 +> 逐页行表与代码改动量见 `docs/UI设计/页面扩充详细方案.md`;清单与就绪度见 +> `docs/UI设计/页面补齐规划.md`;数据供给契约见 `docs/UI设计/UI_数据供给设计说明.md`。 +> +> **修订**:2026-10-25 建档(用户决定:下一波只做 UI 补齐,结构债押后;台架不在手边, +> 卡 0 顺延)。**取代原「余批 5 = 整定 4 页」的口径**——那是按页面批次统计的,漏了批 1 +> 剩的 3 页与批 3 的 12 页,实际剩 21 叶。 + +--- + +## 1. 现状(2026-10-25 代码级核对) + +| 项 | 数 | 说明 | +|---|---|---| +| 菜单树叶总数 | **33** | `ui_menu_tree.txt` 实际叶子(不含 9 个父节点) | +| 已绑页面 | **12** | 装置信息 · 交流量 · 直流量 · 遥信量 · 查看 4 页 · 网口设置 · SOE · 自检记录 · 运行记录 | +| 未绑叶子 | **21** | 见 §2 三梯队 | +| 组件层 | **3 就绪** | `ui_w_editor` / `ui_w_setlist` / `ui_page_action` 均已落地(批 1 道B),**当前无任何页面消费**——写了不用等于没写 | +| 数据供给 | 3 通道 | `ui_data` 的 rt / par / info 三通道 + `ui_data_feed` 已接线(批 2 道E) | +| 黄金用例 | 18 页 | `ui-golden` 像素基线 + 字符集差集检查均已挂 pre-commit | + +> ⚠ **未绑叶子 ≠ 空菜单项**:未绑的叶子按菜单树规则是"无内容页",进得去但只显示空框架。 +> 21 叶里 8 叶(整定 4 + 维护 3 + 通讯设置)**数据源已就绪**,只是没写页面; +> 6 叶(遥信三页 + 记录 5 页中的 5 叶)**缺数据层或写入方**;1 叶(手动录波)缺模块。 + +--- + +## 2. 三梯队(按数据源就绪度分,不按菜单顺序) + +### 2.1 第一梯队:数据源已就绪(9 叶,可立即开工) + +| 叶 | 数据源 | 为什么现在能做 | +|---|---|---| +| 参数 / 定值 / 控制字 / 软压板(整定 4 页) | `prot_set` 31 项 + `ui_w_editor` | 编辑器已落地;只缺**写路径**(UI 只投递 → `prot_set_set_sealed` → 置脏 → defaultTask 落盘) | +| 时钟设置 | `sys_clock_set_unix()` | API 就绪,6 字段表单 + 回读校验 | +| 强制复归 | `prot_elm_request_reset()` | 单字标志,任意上下文可投;`ui_page_action` 直接套 | +| 清除记录 | `sys_log` | ⚠ **缺删除 API**(按 ID 删文件 + 重建 + 计数归零),需先补 ~40 行 | +| 遥测死区 / 遥测系数(2 页) | `run_par`(9 键死区,卡 10)+ `adc_cal`(k/b,卡 2) | 两个数据层都已落地,页面只做可编辑列表 | + +### 2.2 第二梯队:需先补数据层(4 叶,但只立 1 张卡) + +> 遥信类型 / 防抖 / 双点这 3 叶**不立卡**——V0.1 没有开入硬件,三类配置没有可配的对象, +> 做出来只是"改一组没人读的参数"。随开入固件(独立立项)一起做,见 §5。 + +| 叶 | 缺什么 | +|---|---| +| 通讯设置 | `[comm]` 段(104 公共地址 / 端口 / 主站地址)——当前编译期固定。照 `net_cfg` 的"RAM 副本 + 保存请求交接"范式 | +| 遥信类型 / 遥信防抖 / 双点遥信(3 页) | 开入量本身不存在(V0.1 无开入硬件),三类遥信配置**没有可配的对象**。⚠ 这三页做出来只能是"改一组没人读的参数" | + +### 2.3 第三梯队:需先立模块或补写入方(6 叶) + +| 叶 | 缺什么 | +|---|---| +| 事故 / 操作 / 保护告警 / 保护启动 / 遥控记录(5 页) | 每类记录 = 一个写入点 + 一个 `syslog_id_t`。当前只有 SOE 与 selftest/run 三类有写入方 | +| 运行报告 | 计数器:上电次数 / 104 统计;`uptime_s` 与复位原因**已有**(`ui_data_feed` 的 info 通道 + `app_main` 锁存) | + +--- + +## 3. 任务卡(五字段;完成即销项删行) + +> 资源图例:🔴 台架(COM6/ST-LINK,`bench.lock` 独占)· 🟡 外部 · 🟢 纯软件。 +> 状态:⬜ 未开始 · 🟦 进行中。**条目用语义标识,不新增字母+数字编号** +> (规则见 `docs/任务规划/README.md` §0)。序栏只为阅读顺序。 + +| 序 | 任务 | DoD(可验证验收判据) | 硬依赖 | 资源 | 写范围 | 状态 | +|---|---|---|---|---|---|---| +| 1 | **`param_request` 写路径** | `ui_data_param_request/state` 落地:小环形队列(深度 4,满返 -1)+ 状态四值 `OK` / `ERR_RANGE` / `ERR_LOCKED` / `ERR_BUSY`;`ui_data_feed_tick()` 侧取出后调 `prot_set_set_sealed()` + 置脏;**主机单测覆盖**:满队列、越界拒绝(`bad_mask` 指出越界项)、闭锁态拒绝、正常往返 | `ui_data` 三通道(已落) | 🟢 | `Drivers/BSP/UI/ui_data.*` + `App/app/ui_data_feed.*` | ⬜ | +| 2 | **整定 4 页** | 4 叶绑页面;就地改一条定值 → 保存 → **掉电重启后值保持且校验和自检通过**;主站 `C_RD` 读到同一值;越界时高亮越界行、页脚"越界"、值不落盘;黄金用例入库 | 1、`ui_w_editor`(已落) | 🟢 | `Drivers/BSP/UI/` + `ui_menu_tree.txt` + 生成物 | ⬜ | +| 3 | **装置维护 3 页** | ① 时钟设置:写 `sys_clock_set_unix()` 后回读校验(RTC 慢墙钟 8 h 的现象要在证据里说明);② 强制复归:确认后 YX 动作位复归、SOE 有复归记录;③ 清除记录:选类型 → 确认 → 计数归零且文件重建(**先补 `sys_log` 删除 API**,单测覆盖删后重建/计数归零/不存在时幂等) | `ui_page_action`(已落);③ 需 `sys_log` 删除 API | 🟢 | `Drivers/BSP/UI/` + `App/log/sys_log.*` | ⬜ | +| 4 | **遥测死区 / 系数 2 页** | 改死区 → 104 上送门限随之变化(PC 主站读回核对);改 `k` → 页面显示值按比例变化;两页都走 `[run_par]` / `[adc_cal]` 的既有落盘链,**不新增第三份真源** | `run_par` / `adc_cal`(均已落) | 🟢 | `Drivers/BSP/UI/` + `ui_menu_tree.txt` | ⬜ | +| 5 | **通讯设置(`[comm]` 段)** | 新建 `[comm]` 段(公共地址 / 端口 / 主站地址);改后重启,主站仍能连上且公共地址生效;`CFG_FILE_MAX_KEYS` / 段数上限核对(当前 5/8 段) | — | 🟢 | `App/cfg/` + `App/protocol/iec104/` + `Drivers/BSP/UI/` | ⬜ | +| 6 | **记录 5 页** | 每类记录一个写入点 + 一个 `syslog_id_t`;页面能翻到最近 20 条,空记录显示"无记录"而非空白;5 页共用一份 reader | — | 🟢 | `App/log/` + `Drivers/BSP/UI/` | ⬜ | +| 7 | **运行报告** | 4 组:上电次数 / 运行时长 / 复位原因 / 104 统计;前两组与 info 通道一致,后两组新建计数器(掉电不丢则需落盘,否则页面标注"本次运行") | — | 🟢 | `App/log/` 或 `App/app/` + `Drivers/BSP/UI/` | ⬜ | + +> **遥信三页(类型/防抖/双点)不立卡**:V0.1 无开入硬件,三类配置没有可配对象—— +> 做出来只是"改一组没人读的参数"。随开入固件(独立立项)一起做,见 §5。 + +--- + +## 4. 顺序与并行 + +``` +1 param_request 写路径 ─→ 2 整定 4 页 +3 装置维护 3 页(独立;③ 先补 sys_log 删除 API) +4 遥测死区/系数 2 页(独立) + ↓ 第一梯队 9 叶 +5 通讯设置([comm] 段)→ 6 记录 5 页 → 7 运行报告 +``` + +- **单道串行**(2026-10-25 用户决定:本波只做 UI):`ui_menu_tree.txt` 与 + `ui_page_registry.c` 是**单写者生成物**,两条道并行会在菜单树与注册表上互相覆盖。 + 一条道 = 零冲突;需要并行度时优先拆"数据层"与"页面层"(如 `[comm]` 段可先行)。 +- **每页标准动作**(已被生成器收敛成 3 处人工 + 1 条命令):写 `ui_page_xxx.c/.h` → + 菜单树加 ` #page=xxx` → 跑 `python tools/menu_gen/gen_menu.py` → 登记黄金用例。 +- **字符集**:新文案的汉字必须先过 `tools/font_gen/extract_cn.py` → `make_font.py`, + 否则显示方块(`font-charset` 门禁会拦)。40 条定值名建议沿用 2~4 字缩写 + ("过流Ⅰ段定值"→"Ⅰ段定值")。 +- **台架**:本波 21 叶里只有整定 4 页与遥测 2 页需要上板验证(保存/重启/C_RD 回读)。 + 台架不在手边时先做页面 + 黄金用例,**把上板项累积成一批,下次上机一次过**。 + +--- + +## 5. 范围边界(本波不做) + +| 不做 | 理由 / 归属 | +|---|---| +| 遥信类型 / 防抖 / 双点(3 叶) | V0.1 无开入硬件;随开入固件独立立项(`docs/任务规划/并行分道方案.md` §4.2 的 L4-1~L4-3 同批) | +| 手动录波(1 叶) | 录波模块未立项;且录波通道必须先有工程量(`docs/任务规划/数据可信.md` §9) | +| SNTP 设置(1 叶) | 当前对时走 8888 端口私有协议,SNTP 是另一条链;产品口径亦未定。只做页面 = 又一个"看着能用其实不生效"的页 | +| 交流量 / 直流量回炉 | 批 1 已做(接 `ui_data` 快照层);直流量行表按 V0.1 实际可用量裁剪,已并入 | +| 结构债 / net 收口 | 用户决定(2026-10-25):本波只做 UI,结构债押后(`docs/任务规划/README.md` §2) | + +--- + +## 6. 与其它波次的关系 + +| 波次 | 关系 | +|---|---| +| **数据可信** | 本波消费其产出:`ui_data` 的 `eng` 字段由 `adc_cal_flags()` 决定(M4 后 `eng=0` = 引脚电压);遥测死区页直接改 `run_par`。**保护当前处于未标定闭锁态**(`protect_task.c:98`),整定页可改定值但判据不会动作——页面须显示闭锁原因,不能让用户以为"改了没用" | +| **采集保护收尾** | B10 送检不依赖 UI 页面;无交集 | +| **结构债** | 押后;`sys_log` 删除 API 与日志管线同域,本波只补这一个 API,不动管线 | diff --git a/docs/任务规划/并行分道方案.md b/docs/任务规划/并行分道方案.md index 97fb882d..99ba5900 100644 --- a/docs/任务规划/并行分道方案.md +++ b/docs/任务规划/并行分道方案.md @@ -2,7 +2,7 @@ > **本文只做三件事**:把未闭环待办**归到道**、划**文件级写域**、定**合并次序**。 > **明细不复制**——DoD / 硬依赖 / 验收判据仍在 `docs/任务规划/登记簿.md`、 -> `docs/任务规划/数据可信.md`、`docs/任务规划/采集保护收尾.md`、 +> `docs/任务规划/UI补齐.md`、`docs/任务规划/数据可信.md`、`docs/任务规划/采集保护收尾.md`、 > `docs/算法/继电保护功能复现规划.md`。机制(worktree / 两把锁 / `done` 流程)见 > `docs/环境与部署/并行任务工作树方案.md`。 > @@ -13,25 +13,33 @@ --- -## 1. 一句话结论 - -> **批 1 已收口(2026-10-25)**:九分支全合主干(`15aa085`→`db9f256`,工作树清零、两锁空闲); -> M4 六条 ②③④⑥ 达成、①⑤台架面 deferred(归卡 0/0b/12);台架 f2→f3 转 PASS 并顺带复活 -> HW 模式看门狗掩码死分支。**批 2 主体已收(2026-10-25 大窗+验收窗全绿,主干 1a624b1)**:道D 遥测(卡 8~11 销项)∥ -> 道E UI 页面(黄金 18 页;余批 5 整定写路径)∥ 道F 结构债(三条销项;复跑暴露两新签名, -> 修复 F2/F3 已合入、台架两轮判据在跑;附 R1 主站 RX 位修)。批 2.5 尾单 = 两轮判据 + -> v5arch 日志归档 + 道E 批 5;批 3(道G/H)**未开,另行请令**。 -> 道C 不含主机单测(S1-c 已完成,证据见 `docs/测试说明/主机单测覆盖率口径.md` §9), -> 只剩"断言宏 + 门禁 + 构建实测"三件。 +> **批 1 / 批 2 / 批 2.5 全部收口(2026-10-25)**,工作树清零、两锁空闲。 +> 批 1(九分支):M4 六条 ②③④⑥ 达成、①⑤台架面 deferred(归卡 0/0b/12);台架 f2→f3 转 PASS。 +> 批 2(三大道):道D 遥测(卡 8~11 销项)∥ 道E UI 页面(黄金 18 页)∥ 道F 结构债(三条销项; +> 复跑暴露两新签名,F2/F3 修复已合入)。批 2.5 尾单三件全清:两轮判据(`17ece86`)、 +> v5arch 日志归档(`ac51ff2`)、v5 判读工具 v1.1(`4c05b58`)。 +> +> **批 3 重定义(2026-10-25 用户决定)**:原计划的「道G 保护元件 ∥ 道H 采集增强」**整体押后**—— +> 产品功能面在 V0.1 已到顶(三相类全被 N-18 挡)、且保护当前处于未标定闭锁态、没有标准源就 +> 无法验证;道H 的幅值类判据同样依赖标定。**批 3 只剩道E 一条道(UI 补齐 21 叶)**, +> 单道串行。结构债(含 USART1 独占轮)押后到批 4。 +> +> 道C 不含主机单测(S1-c 已完成,证据见 `docs/测试说明/主机单测覆盖率口径.md` §9)。 ``` -批 1 道A 标定与量纲 ∥ 道B UI 组件层 ∥ 道C 工具链与验证 +批 1 道A 标定与量纲 ∥ 道B UI 组件层 ∥ 道C 工具链与验证 ✅ 2026-10-25 收口 ↓ -批 2 道D 遥测链 ∥ 道E UI 页面 ∥ 道F 结构债与网络 +批 2 道D 遥测链 ∥ 道E UI 页面 ∥ 道F 结构债与网络 ✅ 2026-10-25 收口 ↓ -「USART1 改为只发不收」独占一轮(CubeMX 重生成,不能与任何分支并存) +批 2.5 两轮判据 ∥ v5arch 归档 ∥ 判读工具 v1.1 ✅ 2026-10-25 收口 ↓ -批 3 道G 保护元件 ∥ 道H 采集增强 ∥ 台架/外部窗口(卡 12、N-16、N-3、B10) +批 3 道E UI 补齐(21 叶,单道串行) ← 当前 + ↓ +批 4 结构债:net 收口(含饿死签名)∥ 白名单 ∥ 性能簇 + → 「USART1 改为只发不收」独占一轮(CubeMX 重生成,清空全部工作树) + ↓ +批 5 道G 保护元件 V0.1 子集 ∥ 道H 采集增强 ← 等标准源 / V0.2 硬件 + 台架/外部窗口:卡 0 / 0b / 12、N-16、N-3、B10 ``` **道名对照**(全文只用这 8 个标签): @@ -42,16 +50,16 @@ | **道B** | UI 组件层(等数据时先做的活) | 1 | 域5 | | **道C** | 工具链与验证(断言/门禁/构建实测) | 1 | 域8 | | **道D** | 遥测链(「数据可信」M5/M6) | 2 | 域1+域4+域2 | -| **道E** | UI 页面(27 叶 + 3 页回炉) | 2 | 域5 | -| **道F** | 结构债与网络(net 层收口 / 日志管线 / 探针心跳 / 写回 flush) | 2 | 域6+域7 | -| **道G** | 保护元件扩展 | 3 | 域3+域2 | -| **道H** | 采集增强(等周波/零序/谐波轨) | 3 | 域1+域3 | +| **道E** | UI 页面(21 叶补齐) | **3(当前)** | 域5 | +| **道F** | 结构债与网络(net 收口 / 白名单 / 性能簇 / USART1) | 4 | 域6+域7 | +| **道G** | 保护元件扩展(V0.1 子集) | 5(等标准源) | 域3+域2 | +| **道H** | 采集增强(等周波/零序/谐波轨) | 5(等标定) | 域1+域3 | **关键判断**:用户最关心的"保护待做"**大部分不能与标定并行**——因为保护元件的判据全是 "与定值比",而定值是工程单位(10 A / 120 V),标定没落地时新元件写出来就是"码值比二次值", 和现在 `prot_elm` 的错配是同一个病。真正能提前的只有**比值类判据**(涌流制动、CT 断线、 突变量启动),但它们要往 `prot_set` 里加定值项 → 改 `PS_ID_COUNT` 与 blob VER → 与「数据可信」 -的落盘/闭锁卡互斥。**所以保护整簇排在「数据可信」M4 之后**,逐项归道见 §4.2。 +的落盘/闭锁卡互斥。**所以保护整簇排在「数据可信」之后**(批 5,等标准源),逐项归道见 §4.2。 --- @@ -104,6 +112,10 @@ ### 4.1 数据可信(14 卡) +> **卡 1~11 已全部销项**(批 1 道A + 批 2 道D,2026-10-25),下表保留作为归道记录。 +> **只剩卡 0 / 0b / 12 三张**,全是台架或外部资源,**批号改为「顺延」**——台架不在手边, +> 不占编码道(`docs/任务规划/数据可信.md` §5)。 + | 条目 | 写域 | 道 | 批 | |---|---|---|---| | 卡 1 TPAFE 量程口径定死 | 文档(`docs/硬件平台/`) | **道A 标定** | 1 | @@ -127,18 +139,18 @@ |---|---|---|---|---| | L1-5 通道标定 | — | 域1 | = 卡 2/4 | 1 | | L5-2 码值越界检出(残余) | 否(越界门限可用 FS 百分比) | 域1(`adc_health`) | **道A 标定** | 1 | -| L3-7 涌流制动(二次谐波占比) | **否**(比值) | 域3 + 域2(加定值) | **道G 保护** | 3 | -| L3-9 CT 断线(电流不平衡) | **否**(比值) | 域3 + 域2 | **道G 保护** | 3 | -| L3-11 故障启动(突变量) | **否**(相对量) | 域3 + 域2 + 新 `prot_start.*` | **道G 保护** | 3 | -| L3-8 PT 断线 | **是**(电压阈值) | 域3 + 域2 | **道G 保护** | 3 | -| L3-12 无压/无流闭锁 | **是** | 域3 + 域2 | **道G 保护** | 3 | -| L3-10 母线接地告警 | **是** | 域3 + 域2 | **道G 保护** | 3 | -| L5-1 残余(元件级校验和常量表) | 否 | 域2 + 域3 | **道G 保护** | 3 | -| L5-3 硬件自检 | 否(但需出口硬件) | 域3 | **道G 保护** | 3 | +| L3-7 涌流制动(二次谐波占比) | **否**(比值) | 域3 + 域2(加定值) | **道G 保护** | 5(等标准源) | +| L3-9 CT 断线(电流不平衡) | **否**(比值) | 域3 + 域2 | **道G 保护** | 5(等标准源) | +| L3-11 故障启动(突变量) | **否**(相对量) | 域3 + 域2 + 新 `prot_start.*` | **道G 保护** | 5(等标准源) | +| L3-8 PT 断线 | **是**(电压阈值) | 域3 + 域2 | **道G 保护** | 5(等标准源) | +| L3-12 无压/无流闭锁 | **是** | 域3 + 域2 | **道G 保护** | 5(等标准源) | +| L3-10 母线接地告警 | **是** | 域3 + 域2 | **道G 保护** | 5(等标准源) | +| L5-1 残余(元件级校验和常量表) | 否 | 域2 + 域3 | **道G 保护** | 5(等标准源) | +| L5-3 硬件自检 | 否(但需出口硬件) | 域3 | **道G 保护** | 5(等标准源) | | L4-1 跳闸出口 / L4-2 告警出口 / L4-3 出口自检 | 否 | 新模块 `prot_do.*` | **独立立项** | — | -| L1-7 等周波调频 | 是(依赖标定后幅值) | 域1 + 域3 | **道H 采集增强** | 3 | -| L1-8 零序通道接入 | 是 | 域1 | **道H 采集增强** | 3 | -| L2-8 遥测谐波轨 | 是 | 域1(`phasor`) | **道H 采集增强** | 3 | +| L1-7 等周波调频 | 是(依赖标定后幅值) | 域1 + 域3 | **道H 采集增强** | 5(等标定) | +| L1-8 零序通道接入 | 是 | 域1 | **道H 采集增强** | 5(等标定) | +| L2-8 遥测谐波轨 | 是 | 域1(`phasor`) | **道H 采集增强** | 5(等标定) | | L3-2 零序过流 / L2-5 线·负序·零序合成 | — | 域1 + 域3 | **V0.2 硬件** | — | | L4-6 故障录波 | — | 新子系统 | **独立立项** | — | @@ -146,43 +158,56 @@ > (`docs/问题记录/采集与数据处理短板评测.md` 登记),出口要驱动 U18 桥 + 继电器, > 是一整个模块(GPIO 安全默认电平 + 出口保持/脉冲 + 回读自检),量级与"加一个元件"不同。 -### 4.3 UI(两篇规划) +> **为什么道G 整簇押后到批 5(2026-10-25 复核)**:表里 10 项只有 4 项在 V0.1 上可行 +> (L3-7 A 相涌流制动 / L3-11 突变量启动 / L3-12 无压无流闭锁 / L5-1 元件级校验和)—— +> L3-8 PT 断线、L3-9 CT 断线要三相同时刻,被 N-18 硬件缺陷挡死;L3-10 母线接地只有电压侧可判; +> L5-3 硬件自检要出口硬件。而这 4 项**没有标准源就无法验证**,加上保护现处于未标定闭锁态, +> 写出来只能"建接口不使能"。**等标准源到位或 V0.2 硬件改版后再开**。 -| 条目 | 写域 | 道 | 批 | -|---|---|---|---| -| 字库扩充(约 25 字:段/投/延/零/频/荷/闸/跳/低/过/Ⅰ/Ⅱ/Ⅲ…) | `ui_cn_chars.txt` + `tools/font_gen/` + `ui_font_cn_12.c`(生成物) | **道B UI** | 1 | -| `ui_w_editor` 数值编辑器 | 域5(新增) | **道B UI** | 1 | -| `ui_w_setlist` 定值表组件 | 域5(新增) | **道B UI** | 1 | -| `ui_page_action` 动作确认页 | 域5(新增) | **道B UI** | 1 | -| 记录 reader 注入(削 3 条分层基线) | 域5 + `scripts/check_layer_deps.py` | **道B UI** | 1 | -| `ui_data` 快照层 + `ui_data_feed` | 域5 + `App/app/` | **道E UI 页面** | 2 | -| 27 个空叶子 + 3 页回炉(30 页次) | 域5 + `ui_menu_tree.txt` + 生成物 | **道E UI 页面** | 2 | +### 4.3 UI(批 3 唯一在跑的道) -> **`ui_data` 为什么排在批 2 而不是批 1**:`ui_data_feed` 组装的 `eng` 字段要等「数据可信」M4 -> 的结论(`docs/任务规划/数据可信.md` §2.6 与 §10)。组件层(编辑器/定值表/记录 reader) -> 与标定无关,所以单独提到批 1——**这是本次分道最大的收益点**:让 UI 在等标定的同时有活干。 +**批 1 / 批 2 已交付**(过程记录,不再排期):字库扩充 · `ui_w_editor` · `ui_w_setlist` · +`ui_page_action` · 记录 reader 注入 · `ui_data` 三通道 + `ui_data_feed` · 遥信 33 行 · +定值查看 4 页 · 记录 3 页 · 交流量/直流量回炉。**黄金 18 页入库**。 + +**剩余 21 叶按数据源就绪度分三梯队**(明细与 DoD 见 `docs/任务规划/UI补齐.md`): + +| 梯队 | 条目 | 叶数 | 写域 | 前置 | +|---|---|---|---|---| +| **一** | `param_request` 写路径 → 整定 4 页 · 装置维护 3 页(时钟/复归/清除记录)· 遥测死区/系数 2 页 | 9 | 域5 + `App/app/` + `App/log/`(仅补删除 API) | 组件层已就绪;清除记录需 `sys_log` 删除 API | +| **二** | 通讯设置(`[comm]` 段)· 遥信类型/防抖/双点 3 页 | 4 | 域2 + 域4 + 域5 | `[comm]` 段不存在;遥信三页**无开入硬件,不立卡** | +| **三** | 记录 5 页(事故/操作/告警/启动/遥控)· 运行报告 | 6 | 域6 + 域5 | 记录写入方 / 计数器不存在 | +| **不排** | 手动录波(缺录波模块)· SNTP(对时是另一条链) | 2 | — | — | + +> **为什么批 3 只有一条道**:`ui_menu_tree.txt` 与 `ui_page_registry.c` 是**单写者生成物**, +> 两条道并行会在菜单树与注册表上互相覆盖;`uvprojx` 也要逐条手工并。单道串行 = 零冲突, +> 而 UI 是当前唯一在跑的波次,并行度换来的收益抵不过合并成本。 +> +> **`ui_data` 为什么当初排批 2 而不是批 1**:`ui_data_feed` 组装的 `eng` 字段要等「数据可信」M4 +> 的结论(`docs/任务规划/数据可信.md` §2.6 与 §10)。组件层与标定无关,所以单独提到批 1—— +> **这是分道最大的收益点**:让 UI 在等标定的同时有活干。 ### 4.4 结构债、验证与其它 +> **批 1 的道C 三项已全销项**(`docs/任务规划/测试与架构专项.md` 的 P1-10 测试固件构建实测 / +> S12 断言宏 / A-5 体积门禁), +> **批 2 的道F 三项也已销项**(日志管线与 S8 合并评估 / 写回缓存 flush / 探针窗口心跳)—— +> 均不再列入本表。剩余条目归批 4。 + | 条目 | 写域 | 道 | 批 | |---|---|---|---| -| **USART1 改为只发不收**(S-3) | `.ioc` + `Src/*`(重生成) | **独占** | 2.5 | -| **日志管线与 S8 合并评估**(N-2) | 域6 | **道F 结构债** | 2 | -| N-22 写回缓存空闲 flush | 域6 | **道F 结构债** | 2 | -| N-17 探针窗口心跳缺口 | 域7 + `App/sync/` | **道F 结构债** | 2 | -| **net 层跨上下文收口**(E-27 / E-28) | 域7 | **道F 结构债** | 3 | -| N-25 性能与语义簇(PASV/PHY/SOCKETS) | 域7 | **道F 结构债** | 3 | -| S-4 dhara 重试自旋 | 域6 | **道F 结构债** | 3 | -| S-5 全序列卷锁评估 | 域6 | **道F 结构债** | 3 | -| `docs/任务规划/测试与架构专项.md` 的 P1-10 测试固件构建实测 | `MDK-ARM/` 测试配置 | **道C 工具链** | 1 | -| S12 模块级断言宏 | `App/util/app_assert.h`(新增)+ 试点 | **道C 工具链** | 1 | -| A-5 残余 CI 体积门禁盲区 | `.gitea/` + `scripts/` | **道C 工具链** | 1 | -| **L5 队列往返基线重锁**(N-3) | 无码(需 PC peer) | **台架道** | 3 | -| **A2/A4 负向台架**(N-16) | 无码 | **台架道** | 3 | +| **net 层跨上下文收口**(E-27 / E-28 裸指针收口 + reconcile 饿死签名) | 域7 | **道F 结构债** | 4 | +| N-25 性能与语义簇(PASV / PHY / SOCKETS) | 域7 | **道F 结构债** | 4 | +| S-4 dhara 重试自旋 · S-5 全序列卷锁评估 | 域6 | **道F 结构债** | 4 | +| N-23 注册校验白名单清理(只剩 `rs485_task.c`,随 B2) | 域8 | **道F 结构债** | 4(或随 B2) | +| **USART1 改为只发不收**(S-3) | `.ioc` + `Src/*`(重生成) | **独占** | 4(清空全部工作树后单独一轮) | +| **L5 队列往返基线重锁**(N-3) | 无码(需 PC peer) | **台架道** | 窗口 | +| **A2/A4 负向台架**(N-16) | 无码 | **台架道** | 窗口 | | **串口助手 A6/A7 补验** | 无码(需 CH340) | **台架道** | 待硬件 | | B10 送检(标准源 + 第三方主站) | 无码 | **外部窗口** | Fixed Date | | T-7 CI runner | 外部基础设施 | **外部** | 待 runner | -| N-30 relisten 收口 / 原报告 F-5 空 TU(N-28 簇)/ N-29 `.git` / N-18 V0.2 / N-27 内存簇 / B2 RS-485 / 开入开出 / 录波 | — | **不排** | — | +| 道G 保护元件 V0.1 子集 · 道H 采集增强 | 域1+域3 | **道G / 道H** | 5(等标准源 / 标定) | +| N-30 relisten 收口 / N-28 空 TU / N-29 `.git` / N-18 V0.2 / N-27 内存簇 / B2 RS-485 / 开入开出 / 录波 | — | **不排** | — | --- @@ -290,40 +315,30 @@ | 事项 | 为什么不能并行 | 正确做法 | |---|---|---| | **USART1 改为只发不收**(S-3) | 改 `.ioc` → CubeMX 重生成会**打回 5 处手工定制**(IWDG 延迟启动、Fault Handler、FreeRTOSConfig 加固区等),且重写 `Src/*` 大片生成文件 → 与任何分支必冲突 | **独占一轮**:清空所有工作树 → 在主工作树做 → `check_cubemx_survival.py` 全过 → 台架闭环 | -| **字库重生成** | `make_font.py` 重写 `ui_font_cn_12.c`(整文件生成物),两人同时扩字会互相覆盖 | 归道B 一个分支独占;后续加字必须重新走一次 | -| **往 `prot_set` 加定值项** | 改 `PS_ID_COUNT` → blob VER 2→3 → 影响落盘格式、104 定值段、UI 整定页分组 | 只在**没有任何「数据可信」定值卡在飞**的时候做(批 3 的道G) | +| **字库重生成** | `make_font.py` 重写 `ui_font_cn_12.c`(整文件生成物),两人同时扩字会互相覆盖 | 归道E 一个分支独占;后续加字必须重新走一次 | +| **往 `prot_set` 加定值项** | 改 `PS_ID_COUNT` → blob VER 2→3 → 影响落盘格式、104 定值段、UI 整定页分组 | 只在**没有任何定值卡在飞**的时候做(批 5 的道G);⚠ 整定 4 页(批 3)会改 `prot_set` 的读写路径,**道G 必须在它之后** | --- -## 8. 执行清单(批 1 起步) +## 8. 执行清单(批 3 起步) ```powershell $PY = ".venv\Scripts\python.exe" $WT = ".dsh\skills\task-worktree\scripts\task_worktree.py" -# 批 1 道A(ID 必须唯一:台账按 ID 落盘,branch = task/-) -& $PY $WT new cal-scale doc -& $PY $WT new cal-adc cal -& $PY $WT new cal-lockout dim +# 先确认没有残骸占名额(当前有一棵:D:/Code/DTU Code/_wt/v5tool2-v11,分支已合入) +& $PY $WT list -# 批 1 道B -& $PY $WT new UI-font subset -& $PY $WT new UI widgets -& $PY $WT new UI-rec reader - -# 批 1 道C -& $PY $WT new S12 assert - -# 台架(在主工作树,验证已合入镜像) -& $PY $WT lock acquire bench --task cal-adc -# ……注入验证 / @test…… -& $PY $WT lock release bench --task cal-adc --bench-pass +# 批 3 道E:单道串行,一次只开一棵工作树(菜单树/注册表是单写者生成物) +& $PY $WT new UI-param write # param_request 写路径(无页面,先落通道) +& $PY $WT new UI-set edit # 整定 4 页 +& $PY $WT new UI-maint pages # 装置维护 3 页(含 sys_log 删除 API) +& $PY $WT new UI-cal par # 遥测死区 / 系数 2 页 ``` > ⚠ **`new` 必须给两个参数**(` `),少一个直接 rc=3;**ID 不能重复**—— -> 台账是 `.state/.json`,同 ID 第二次 `new` 会报"任务已存在"。所以同簇多任务要靠 -> ID 区分(上面 `cal-scale` / `cal-adc` / `cal-lockout` 三段即三个不同 ID,分支名恰好是 -> `task/cal-scale-doc` / `task/cal-adc-cal` / `task/cal-lockout-dim`)。 +> 台账是 `.state/.json`,同 ID 第二次 `new` 会报"任务已存在"。分支名是 +> `task/-`(上面四段即 `task/UI-param-write` / `task/UI-set-edit` / …)。 > > ⚠ **活跃任务数按"台账 + 目录是否存在"统计**,不是按 git 注册表。遗留目录会让名额被白占—— > 开工前先 `list` 确认没有 `` 显示 `? ?`(那是分支已删、目录还在的残骸)。 @@ -333,7 +348,7 @@ $WT = ".dsh\skills\task-worktree\scripts\task_worktree.py" > 删完补一条 `git worktree prune`。 > **删前先确认目录里没有联接**(`.venv` / `simulator/SDL2`)——直接删会把主工作树的 `.venv` 带走。 -> 分支 ID 用语义 slug(`cal-scale-doc` / `UI-font-subset`),与 `docs/任务规划/README.md` §0 的 +> 分支 ID 用语义 slug(`UI-set-edit` / `cal-scale-doc`),与 `docs/任务规划/README.md` §0 的 > "新条目用语义标识"一致;存量编号(N-x / S-x)仍可直接当 ID 用。 --- @@ -346,6 +361,10 @@ $WT = ".dsh\skills\task-worktree\scripts\task_worktree.py" | N-27 内存优化簇剩余(原报告 R-2 后半 / R-3 / R-4 / R-6) | ⏸ 用户裁定 2026-10-15 | `docs/内存管理/RAM使用分析与优化方案.md` §4 | | N-29 `.git` 233 MB | 决策:登记观察 | 推送/协作前重评 | | N-18 V0.2 硬件改版 | 下一版硬件 | 硬件改版立项 | +| **道G 保护元件 V0.1 子集**(A 相涌流制动 / 突变量启动 / 无压无流闭锁 / 元件级校验和) | ⏸ 等标准源(2026-10-25 复核) | 标准源到位 **或** V0.2 硬件改版;且保护须先解卡(当前未标定闭锁,`protect_task.c:98`) | +| **道H 采集增强**(L1-7 等周波 / L1-8 零序 / L2-8 谐波轨) | ⏸ 等标定 | 卡 12 两点标定完成(幅值类判据依赖工程量) | +| **遥信类型 / 防抖 / 双点 3 页** | ⏸ 无开入硬件 | 开入固件立项(与 L4-1~L4-3 出口同批) | +| **SNTP 设置页** | ⏸ 对时是另一条链 | SNTP 客户端立项(当前走 8888 私有协议) | | N-30 relisten 收口 | 观察(原语版实测回退) | 三条语义前置满足后 | | 原报告 F-5 空 TU(N-28 簇) | 观察 | 有全量构建耗时痛点时 | | T-7 CI runner | 外部基础设施 | runner 就绪 | diff --git a/docs/任务规划/排期详述.md b/docs/任务规划/排期详述.md index 753d2fe1..de2d71e5 100644 --- a/docs/任务规划/排期详述.md +++ b/docs/任务规划/排期详述.md @@ -1,9 +1,13 @@ # 结构债与验证常态 -> 波次总览与顺序权威在 `docs/任务规划/README.md` §2;当前波次任务卡在 `数据可信.md`, -> 「采集保护收尾」只剩 M3 送检(`采集保护收尾.md`)。 +> 波次总览与顺序权威在 `docs/任务规划/README.md` §2;当前波次任务卡在 `UI补齐.md`, +> 「数据可信」已转收口态(`数据可信.md`),「采集保护收尾」只剩 M3 送检(`采集保护收尾.md`)。 > 本文件只放**已排期但非当前波次**的详述表——低频改动,随窗口更新。 > +> **结构债整体押后**(2026-10-25 用户决定:下一波只做 UI 补齐)。押后不等于降级: +> 它**没有外部依赖、随时能捡起来**,这正是它让位给 UI 的原因——UI 那 21 叶一旦等台架就卡死, +> 结构债不会。 +> > **条目一律用语义名**(2026-10-25 起):原先「C 组短码」(结构债 1/3/5/6)与「D 组短码」 > (验证窗口 2/5/6/7)已废止。原因是它们**同字母不同义**——`C` 组在 > `docs/UI设计/UI_界面制作流程.md` 里是 UI 设计约束(屏幕/字符集/文本/编码),`D` 组在 @@ -12,15 +16,17 @@ ## 1. 结构债(按性价比排序) -> 顺序 = 先可靠性根治,后大体量重构;评估簇随窗口。 +> 顺序 = 先灭实测缺陷,后可靠性根治,再大体量重构;评估簇随窗口。 +> **2026-10-25 已销项三项**:日志管线与 S8 合并评估(N-2)、写回缓存空闲 flush(N-22)、 +> 探针窗口心跳缺口(N-17)——结论沉淀在模块文档,本表不再保留。 | 条目 | 内容 | 出处 | |---|---|---| -| **USART1 改为只发不收** | 灭 ORE 僵尸机制根源(2026-10-02 台架 IWDG 误复位的机制根源):改 `.ioc` 令 USART1 不使能 RX / PA10 不复用为 `USART1_RX` → CubeMX 重生成 → 跑 `check_cubemx_survival.py`。结构性改动,需单开一轮 + 复跑台架闭环 | S-3 | -| **日志管线:与 S8 非阻塞日志合并评估** | 剩余动作只有这一条。丢弃可观测性代码已具备、V5 30 min 未复现 49s 静默(运行期 >10s 静默全在 `e02_probe` 窗口内=N-17) | N-2 | -| **net 层跨上下文收口** | 剩余动作:**消化 E-27 / E-28**(裸指针收口为状态查询 API) | E-27 / E-28 | +| **net 层跨上下文收口(含 reconcile 饿死签名)** | 两件事同批做:① 裸指针收口为状态查询 API(E-27 / E-28);② **对时 reconcile/relisten 突发把 uiTask 压成 800 ms+ 单串缺席**——2026-10-25 台架两轮分箱定案:同负载换 `:7003` churn 2200 周期 stall=0(阻塞型已被 F3 治愈),探针轮 3 事件 8 行全为该签名(漏检零、误报零)。处置两案并评:优先级矩阵复核 ∥ reconcile 突发分片让路 | E-27 / E-28;`../网络/网络自愈架构设计.md` §4.6;`../子系统设计/看门狗设计说明.md` §11.3 | +| **USART1 改为只发不收**(独占一轮) | 灭 ORE 僵尸机制根源(2026-10-02 台架 IWDG 误复位的机制根源):改 `.ioc` 令 USART1 不使能 RX / PA10 不复用为 `USART1_RX` → CubeMX 重生成 → 跑 `check_cubemx_survival.py`。结构性改动,**需清空全部工作树后独占一轮** + 复跑台架闭环 | S-3 | | **注册校验白名单清理** | 剩余动作:清 `KNOWN_GAPS` 白名单(现只剩 `App/task/rs485_task.c`,见 `登记簿.md`)。**RS-485 DE 收尾已移入 `暂缓-RS485.md`** | N-23 残余 | -| **写回缓存空闲 flush · 性能与语义簇 · 空 TU 观察** | 三项随窗口评估,逐项见 `登记簿.md` 对应行 | N-22 / N-25 / N-28 | +| **性能与语义簇 · 空 TU 观察** | 两项随窗口评估,逐项见 `登记簿.md` 对应行 | N-25 / N-28 | +| **dhara 重试自旋 · 全序列卷锁** | 两项低优先,先确认是否真有第二写者/是否再出"存储侧喂狗饥饿" | S-4 / S-5 | ## 2. 验证常态(逢窗口顺带,不单独排期) @@ -28,5 +34,4 @@ |---|---|---| | **L5 队列往返基线重锁** | 下次 Phase 13 窗口顺带做(低风险:阈值余量 >8×;**需 PC peer**) | N-3 | | **A2/A4 负向台架窗口** | PHY 拔线(需断 DTU 侧 / 关受管交换机端口)、A2 芯片级 `net_init` 失败(SPI 故障注入)、A4 短写压测 | N-16 | -| **探针窗口心跳缺口** | 定位 `time_sync` 监听重建为何阻塞 NET/FTP/UI(~1s 缺口,余量仅 ~0.7s);评估缩短重建重试或让掉线路径不阻塞其它任务 | N-17 | | **串口助手 A6/A7 正路径补验** | 需 CH340 硬件接入后补验(`../测试说明/串口助手设计说明.md` 状态行 A1–A5/A8 已过) | — | diff --git a/docs/任务规划/数据可信.md b/docs/任务规划/数据可信.md index 33ce533e..42789bea 100644 --- a/docs/任务规划/数据可信.md +++ b/docs/任务规划/数据可信.md @@ -13,6 +13,12 @@ > 2026-10-23 补卡:用户指出"ADC 还没采过真实电压"——经核查成立且更严重(连极性都没验过, > 见 §2.6),故新增"已知电压注入验证"与"端子变比确认"两卡,并把 M4 的承诺边界改为 > "引脚电压"(`eng=0`),"端子二次值"降为依赖变比的条件项。 +> **2026-10-25 转收口态**:卡 1~7(批 1 道A)与卡 8~11(批 2 道D)全部销项,**软件侧已 100%**; +> 剩卡 0 / 0b / 12 三张台架与外部卡。**台架不在手边(2026-10-25 确认)→ 本波整体顺延**, +> 不占编码道,当前波次已切到 `UI补齐.md`。 +> ⚠ **保护现处于未标定闭锁态**:`protect_task.c:98` 要求 UA/UN/IA 的 `ADC_CAL_F_VALID` +> 全置位才走判据,而 VALID 只在标定写入 `[adc_cal]` 的 `valid` 位图后才置位 +> (`adc_cal.c:338`)。用户裁定(2026-10-25)**保持闭锁到标准源到位**,不缩短解锁路径。 --- @@ -163,11 +169,11 @@ set = prot_set_get_f(cfg->set_id); /* 定值侧,单位 A / V(二次值) **波次目标**:把"数"从原始码值推进到**有物理含义、有品质、有死区、能上送**的工程量。 -| 里程碑 | 退出判据(全部满足才算完成) | 服务分类 | -|---|---|---| -| **M4 系数与量纲** | ① **至少 1 路电压通道经已知电压注入验证**(卡 0),斜率与理论 LSB 偏差 ≤2 %;② `adc_cal` 折算落地,采样环里是**引脚电压 V**而非码值(`eng=0`;若卡 0b 已给变比则直接到二次值 `eng=1`);③ 8 通道系数/零点可落盘、上电加载失败回退 ROM 默认;④ 三处下游常数按工程量重定并注明依据;⑤ "未标定 → 保护闭锁"生效;⑥ 量纲回归用例(不该动作时不动作)通过 | Standard | -| **M5 遥测链** | ① 200 ms 遥测快照模块产出值 + 品质;② 104 与 UI 共用同一份快照(不再各自取相量);③ 死区从编译期常量改为运行参数;④ 104 上送值与工程量一致(PC 主站读回核对) | Standard | -| **M6 运行参数与点表** | ① 运行参数段 `0x8020~0x8058` 可读写并持久化;② `0x401D` 频率点绑 `freq_get()`,品质位正确;③ 总召/周期/变位三种上送路径均取新值 | Standard | +| 里程碑 | 退出判据(全部满足才算完成) | 服务分类 | 状态(2026-10-25) | +|---|---|---|---| +| **M4 系数与量纲** | ① **至少 1 路电压通道经已知电压注入验证**(卡 0),斜率与理论 LSB 偏差 ≤2 %;② `adc_cal` 折算落地,采样环里是**引脚电压 V**而非码值(`eng=0`;若卡 0b 已给变比则直接到二次值 `eng=1`);③ 8 通道系数/零点可落盘、上电加载失败回退 ROM 默认;④ 三处下游常数按工程量重定并注明依据;⑤ "未标定 → 保护闭锁"生效;⑥ 量纲回归用例(不该动作时不动作)通过 | Standard | 🔶 **②③④⑥ 达成**(卡 2/4/6/7 销项);**① 与 ⑤ 的台架面 deferred** —— 卡 0 未跑(台架不在手边),故 M4 行保留、本波不收口 | +| **M5 遥测链** | ① 200 ms 遥测快照模块产出值 + 品质;② 104 与 UI 共用同一份快照(不再各自取相量);③ 死区从编译期常量改为运行参数;④ 104 上送值与工程量一致(PC 主站读回核对) | Standard | ✅ **①②③ 达成**(卡 8~11 销项,大窗 24 项读回 + 验收窗全绿);④ 的"值与快照一致"已验,**"与工程量一致"待卡 0/12**(工程量口径尚未成立) | +| **M6 运行参数与点表** | ① 运行参数段 `0x8020~0x8058` 可读写并持久化;② `0x401D` 频率点绑 `freq_get()`,品质位正确;③ 总召/周期/变位三种上送路径均取新值 | Standard | ✅ **全部达成**(`[run_par]` 9 键死区 + 0x401D 频率绑定 + 三路径取新值,台架钉证) | > **批 2 裁定补记(lead,道D 票转述)**:遥测轨的两项增强——谐波**方和根真有效值**(挂 > `继电保护功能复现规划.md` L2-8)与快照**4 点平均平滑**——**不进 M5/M6 退出判据**, @@ -291,6 +297,10 @@ typedef struct { > (规则见 `docs/任务规划/README.md` §0)。 > **2026-10-23 新增"已知电压注入验证"与"端子变比确认"两卡**(序栏 0 / 0b 只为阅读顺序): > 补的是 §2.6「ADC 从未采过已知电压」这一前置验证,不改动既有 1~12 的编号与引用。 +> +> **2026-10-25 收口态**:卡 1~11 已全部销项,本表只剩 **0 / 0b / 12** 三张——三张全是台架或 +> 外部资源,**没有软件道可做**。台架不在手边 → 本波顺延,不占编码道(当前波次 `UI补齐.md`)。 +> 顺序不变:**卡 0 是唯一"只需一块万用表"的卡**,它同时是 M4 ①、卡 12 与 B10 送检的前置。 | 序 | 任务 | DoD(可验证验收判据) | 硬依赖 | 资源 | 写范围 | 状态 | |---|---|---|---|---|---|---| @@ -311,36 +321,40 @@ typedef struct { ## 6. 并行与顺序 ``` -② 核心折算+三条分支(✅ 2026-10-25 销项:231dc81 / d39e5c9 / 59da40b) +② 核心折算 + 三条分支(✅ 2026-10-25 全部销项:231dc81 / d39e5c9 / 59da40b) 2 标定模块 ─→ 4 落盘 ─→ 5 未标定闭锁 ─┐ 6 三常数重定 ─────────────────────┼─→ 7 量纲回归 -③ 批 2 在途 +③ 遥测与运行参数(✅ 2026-10-25 全部销项:9c2653c / 969fc5c / 7bbcc9c) 8 遥测快照 ─→ 9 104 读快照 ─→ 10 运行参数段 6 ─→ 11 频率点绑定 - -台架道(🔴,串行):0 注入验证 → 5 闭锁验证 → 9 主站读回 → 11 频率核对 -外部道(🟡,与软件道并行):0b 变比确认 → 12 标准源两点标定(本波末) +④ 剩余三张(⏸ 顺延,等台架/外部) + 0 注入验证(万用表)→ 0b 变比(子板)→ 12 两点标定(标准源) + 0 ─→ 5 闭锁验证(VALID 置位后保护才走判据)→ B10 送检 ``` - **卡 0 斜率规则对 ROM 默认仍有效**(卡 1~7 已按理论 LSB 冻结销项):实测斜率与理论值 偏差 >2 % 时**先查前端(分压/变比/焊接)再改系数**——用系数凑斜率会把硬件的错固化成"标定值"。 - **WIP ≤ 2**:代码道最多 2 个并行(台架道 1 个),沿用 `docs/环境与部署/并行任务工作树方案.md` §7.3。 -- **写范围冲突预警**:卡 9 / 11 都改 `App/protocol/iec104/iec104_pts.c`,必须同一分支顺序做; - 卡 8 新 `App/algo/meas.*`、卡 10 新 `App/algo/run_par.*`,落新文件须双端注册。 + **当前软件道为 0**(本波已收口)。 +- **写范围冲突预警**(历史记录,卡 9 / 11 均已销项):两卡都改 + `App/protocol/iec104/iec104_pts.c`,必须同一分支顺序做;卡 8 新增 `App/algo/meas.*`、 + 卡 10 新增 `App/algo/run_par.*`,落新文件须双端注册。 --- -## 7. 前置决策(需用户拍板) +## 7. 前置决策 -| # | 问题 | 备选 | 建议 | +> 2026-10-25 收口复核:原 7 条里 5 条已随实现定案,只剩 **2 条真开放**。已定案的结论沉淀在 +> 代码与 `App/algo/adc_cal.h` / `meas.h` 的头注释里,不再占本表。 + +| # | 问题 | 备选 | 建议 / 现状 | |---|---|---|---| -| 1 | **未标定时保护是否闭锁** | ① 闭锁(安全)② 照常动作(现状,但量纲错配)③ 编译期开关 | **①**。拿端子电压比二次值定值等于保护瞎动作;现有台架期望要跟着改 | -| 2 | **精度目标** | 0.5 级 / 1 级 | 决定卡 12 的判据;也决定 `k` 是否需要 Q16(建议直接 Q16,成本为零) | -| 3 | **`CFG_VAL_INT` 是否本波做** | ① 补引擎类型(30 行)② 零点加偏置绕开 | **①**。运行参数段的死区/系数后面也要有符号值,一次做完;绕开的偏置约定是给未来埋坑 | -| 4 | **遥测快照由谁驱动 200 ms** | ① `adc_task` 分频(生产者发布)② `protect_task` 分频 ③ 独立软定时/新任务 | **①**。快照是"数据层",应由生产者在自己的上下文发布(与 `ui_data_feed` 同理);放协议任务会让 UI 在 104 未连接时拿不到新值,新任务则白占栈 | -| 5 | **温度通道是否纳入** | ① 不纳入(`flags=0`)② 补热敏曲线 | **①**。V0.1 温度只是机箱监视,非线性折算没有精度要求;纳入会拖长本波 | -| 6 | **端子 / 子板变比从哪来** | ① 有子板原理图(直接算)② 只有子板实物(万用表同时量端子与引脚)③ 都没有 | 决定 `eng` 能否置 1。②同样可行且够用;③则本波只交付"ADC 引脚电压",二次值登记为缺口 | -| 7 | **首次注入在哪一级** | ① ADC 引脚侧(验 LSB,排除前端)② 端子侧(验全链,但需先确认耐压) | **①**。引脚侧加 ≤2 V 不会烧任何东西;端子侧在变比未知前也只允许 ≤2 V 直流,**严禁直接上 100 V / 220 V** | +| 1 | **精度目标** | 0.5 级 / 1 级 | 决定卡 12 的判据。**仍未拍板**——保护判据本身只需 3~5 %,0.5 级是计量口径;**卡 12 开跑前必须定**,否则"误差 ≤ 目标精度"这条 DoD 无法判定 | +| 2 | **端子 / 子板变比从哪来** | ① 有子板原理图(直接算)② 只有子板实物(万用表同时量端子与引脚)③ 都没有 | 决定 `eng` 能否置 1。②同样可行且够用;③则本波只交付"ADC 引脚电压",二次值登记为缺口。**未拍板**(取决于子板是否到手) | + +**已定案(不再讨论)**:未标定即闭锁(卡 5 实现;2026-10-25 用户裁定**保持闭锁到标准源到位**, +不缩短解锁路径)· `CFG_VAL_INT` 补引擎类型(卡 3)· 遥测快照由 `adc_task` 分频发布(卡 8)· +温度不纳入线性标定(`adc_cal_flags(TEMP)` 恒 0)· 首次注入在 ADC 引脚侧(卡 0 DoD,≤2 V 直流)。 --- diff --git a/docs/任务规划/测试与架构专项.md b/docs/任务规划/测试与架构专项.md index d5ccef06..b82426cb 100644 --- a/docs/任务规划/测试与架构专项.md +++ b/docs/任务规划/测试与架构专项.md @@ -8,18 +8,18 @@ > `../测试说明/实机测试实施指南.md`(S4/S5/S7/S9/S11)、`../问题记录/GD5F2GQ5UE_Trap_Records.md`(S9)、 > `../测试说明/主机单测覆盖率口径.md` §9「P1 落地」与「P2 落地」(S1-c:`sys_log_mcu` 106 例、 > `time_sync` 既有 4 例,两套均已被 `test-coverage` 总闸覆盖)。 +> +> **本文件只剩 1 项未闭环**(A-4,且 RS485 侧随 B2 暂缓)。2026-10-25 复核时把已销项条目 +> 压缩成证据指针——原来的详述与「完成即销项」规则冲突,留着会让读者以为还有活。 -## 1. P1 收尾(0 项:P1-10 已于 2026-10-25 销项) +## 1. P1 收尾(0 项) -### P1-10 测试固件静态 RAM 预算(基线已重建、缓冲已瘦身,剩构建实测闭环) +**P1-10 测试固件静态 RAM 预算** 已于 2026-10-25 销项(`task/P1-10-test-fw`→73f9e10): +CH395F 套件 5 档构建全部链接通过,最坏态 `RW_IRAM1` 91,088 B / 69.5%(距 92% 线余 29,498 B); +`@test` f3 轮 VERDICT PASS(Phase 1/12/15 = 9/9、1/1、21/21)。**数字与规范正文的唯一出处**是 +`test/board/ch395f_test.h` 的开关区注释,本文件不再重复。 -- **位置**:`MDK-ARM/STM32F407-Demo/STM32F407-Demo.sct`(`RW_IRAM1 0x20000000 0x00020000` = 128KB;芯片 192KB 的上部 64KB 有意未映射,克隆芯片兼容性考量) -- **已销项(2026-10-25,`task/P1-10-test-fw`→73f9e10)**:① CH395F 套件 **5 档**实际构建全部链接通过 - (PHASE5 三静态缓冲确证在链:ch395f_test_task.o 数据段 12,285 B;最坏态 RW_IRAM1 91,088 B / 69.5%, - 距 92% 线余 29,498 B——数字与规范正文见 `test/board/ch395f_test.h` 开关区,同一事实不在此重复); - ② `@test` f3 轮 **VERDICT PASS**(Phase 1/12/15 = 9/9、1/1、21/21,身份戳 + 烧后回读核对, - bench PASS 入 task-worktree 台账;f2→f3 顺带复活 HW 模式看门狗掩码死分支 a9ba8ec,台架记录同文件)。 -- **约束**:**不建议**扩 scatter 到 192KB(破坏既有克隆芯片兼容决策)。 +**约束(仍然有效)**:**不建议**扩 scatter 到 192 KB——破坏既有克隆芯片兼容决策。 ## 2. 测试与架构改进专项(S1x / A-x) @@ -29,32 +29,11 @@ |---|---|---|---| | **A-4** | ADC / RS485 采集链路的**测试可验证性约束** | ⏸ ADC 侧随 B1 闭环;**RS485 侧随 B2 暂缓(`暂缓-RS485.md`)** | §2.2 | -### 2.1 S12:模块级轻量断言宏 ✅(2026-10-25 销项,实现 `Drivers/BSP/app_assert.h`→658fbe7; -落位与示意稿 `App/util/` 的偏离理由 = layer-deps 方向约束,载于该头注释与提交正文) +### 2.1 S12:模块级轻量断言宏(✅ 2026-10-25 销项) -**动机**:`configASSERT` 只覆盖 FreeRTOS 内部;自研代码的"不该发生"靠散落的 `if`。 - -**设计要点**(**必须零生产开销**): - -```c -/* App/util/app_assert.h —— 示意,非最终实现 */ -#ifdef APP_ASSERT_ENABLE - #define APP_ASSERT(cond) do { if (!(cond)) { \ - DBG_ERROR("[ASSERT] %s:%d", __FILE__, __LINE__); vApplicationAssertFailed(__FILE__, __LINE__); } \ - } while (0) -#else - #define APP_ASSERT(cond) ((void)0) /* 生产构建:编译期消失,零符号零开销 */ -#endif -``` - -**⚠️ 关键纪律**: -- **不得**在中断 / 高频路径使用(`DBG_ERROR` 有代价); -- **不得**替代正常的错误返回(断言是"内部不变量",不是"外部输入校验"); -- 生产构建 `APP_ASSERT_ENABLE` **关闭**——与 `ENABLE_DESTRUCTIVE_TESTS` 同级策略。 - -**建议先在 1~2 处试点**(如 `net_socket.c` 的状态机不变量),验证收益后再推广。 - -**完成判据**:宏存在 + 生产构建 `@build` 0/0 且 `.map` 无新增符号;试点处有实际使用。 +实现 `Drivers/BSP/app_assert.h`(→658fbe7)。**落位从示意稿的 `App/util/` 改到 `Drivers/BSP/` +的理由 = layer-deps 方向约束**,载于该头注释与提交正文。生产构建 `APP_ASSERT_ENABLE` 关闭时 +宏展开为 `((void)0)`,零符号零开销——口径唯一正文 = 该头文件注释。 ### 2.2 A-4:ADC / RS485 采集链路的测试可验证性约束 ⏸ @@ -72,18 +51,8 @@ **完成判据**:B2 设计文档体现上述三条;协议解析函数有对应 L0.5 单测。(B1 侧:ADC 无协议解析面,其"同一时刻性"由原子快照保证、已闭环。) -### 2.3 A-5 残余:CI 体积门禁盲区 ✅(2026-10-25 销项,同码凭证 + CI 复核→564715c、 -跨树稳定修复→7c4628b;口径唯一正文 = `scripts/check_size_gate.py` docstring) +### 2.3 A-5 残余:CI 体积门禁盲区(✅ 2026-10-25 销项) -**现状**:`mem-numbers` 钩子**在 CI 上被跳过**(CI 无 `.map`)→ **CI 不守体积门禁**。 -S14 已在 workflow 显式提示"体积门禁未执行"(`::notice::`)并在 `../CI/远程CI完整指南.md` 声明, -但**盲区本身未消除**——看到 CI 全绿仍可能误以为体积也守住了。 - -**可选处置**: -- 让 runner 具备 Keil 后,在 CI 增 `@build` job(成本高,需授权与许可证); -- 或把"体积校验"固化为**提交前必跑的本地门禁**(`scripts/ci_local.py`,当前已是事实标准)。 - -**完成判据**:存在**强制的**体积校验路径(CI 侧或本地侧),且文档明确其边界。 - -> **注**:本项与栈预算是同一话题的两面——**具体栈风险(原 S-1)已于 2026-10-10 削链闭环** -> (核算见 `docs/内存管理/RAM使用分析与优化方案.md`),本项仍是**门禁缺口**。 +同码凭证 + CI 复核→564715c、跨树稳定修复→7c4628b。**口径唯一正文** = `scripts/check_size_gate.py` +的 docstring(含"CI 侧跳过 `mem-numbers` 的边界"与本地强制路径)。`docs/内存管理/RAM预算台账.md` +§1 仍指向本条目名,读那里的数字即可,不必回本文件。 diff --git a/docs/任务规划/登记簿.md b/docs/任务规划/登记簿.md index fdc42eae..e3d7a086 100644 --- a/docs/任务规划/登记簿.md +++ b/docs/任务规划/登记簿.md @@ -1,7 +1,7 @@ # 登记簿(长期观察项;存量 `N-x / S-x / T-x`,**新条目用语义标识**) > 编号空间与"不回收"规则见 `docs/任务规划/README.md` §0;排期位置见 `docs/任务规划/README.md` §2 波次总览; -> 当前波次任务卡(带 DoD / 写范围 / 状态)在 `数据可信.md`——**「采集保护收尾」的 M1/M2 已收口,只剩 M3 送检**; +> 当前波次任务卡(带 DoD / 写范围 / 状态)在 `UI补齐.md`(`数据可信.md` 已转收口态)——**「采集保护收尾」的 M1/M2 已收口,只剩 M3 送检**; > 并行归道(写域 / 道 / 合并次序)见 `并行分道方案.md`。 > **本文件是低频文件**:新发现按类别进对应表;销项 = 删行 + 清引用(`docs/任务规划/README.md` §3)。 > **2026-10-14 起新条目的 `#` 列填「语义标识」**——一行短语直接说清是什么事(如 @@ -14,7 +14,7 @@ |---|---|---|---|---| | N-3 | **L5 队列往返基线(1223/988µs)的 L3 后重验**——L5 测 DONTWAIT 队列全程;L3 对该路径逐位不变 → 机制上无影响,但基线数值属分片时代,严格重锁需跑一轮 Phase 13(需 PC peer) | 2026-09-22(L3 收尾留档) | 低风险:10ms/100ms 阈值余量 >8×;下次 Phase 13 窗口顺带重锁即可 | `链路延迟测试说明.md` §6.4 L5 注¹ | | N-16 | **A2/A4 专项场景台架验证待办**(正常路径已实测零回归):① PHY 拔线负向测试——断链需断 **DTU 侧**线缆或关**受管交换机端口**;② A2 芯片级 `net_init` 失败分支(需 SPI 故障注入);③ A4 短写压测(需远显客户端 + UI 推流压力) | 2026-10-03(台架拓扑 = CH395↔交换机,拔线操作受限) | 待专项台架窗口 | `实机测试实施指南.md` §10 | -| reconcile 突发饿死 uiTask | **对时 reconcile/relisten 突发(0~4s 窗)把唯一 BelowNormal 的 uiTask 压成同一任务 800ms+ 单串缺席(饿死型,非等待型——F3 返回点喂位射程外)**:8 连窗级 UI 缺席期间喂狗面本身未断(cf=0 seg=1)、uisn=0(不在 sink 段内)、uip 在途 307→1083ms 而 uis 峰仅 183ms——被拖的 1s 在 feed/port 纯计算段墙钟。**2026-10-25 台架两轮分箱定案**:同负载换 :7003 churn 2200 周期 stall=0(阻塞型已被 F3 治愈),探针轮 3 事件 8 行全为该签名(漏检零、误报零,v1.1 口径 FAIL 面精确收缩)。处置方向 = 自愈设计 §11.3 脆弱点 1 实测样本并档 **E-27/28 批 3**:优先级矩阵复核 与 reconcile 突发分片让路 两案并评 | 2026-10-25(F2/F3 验收轮②,v1.1 判据下捕获) | `docs/测试说明/boot_log_data/f3rounds_r2_probe_30min.log.gz`(3 事件 8 行 + STALL 证据行 + 同行 PROF);对照轮 `f3rounds_r1_7003_churn_30min.log.gz`;机理归档 `../网络/网络自愈架构设计.md` §4.6、`../子系统设计/看门狗设计说明.md` §11.3、`../UI设计/UI_设计架构.md` §5.8 | `../算法/继电保护功能复现规划.md`(E-27/28 属主文档指针) | +| reconcile 突发饿死 uiTask | **对时 reconcile/relisten 突发(0~4s 窗)把唯一 BelowNormal 的 uiTask 压成同一任务 800ms+ 单串缺席(饿死型,非等待型——F3 返回点喂位射程外)**:8 连窗级 UI 缺席期间喂狗面本身未断(cf=0 seg=1)、uisn=0(不在 sink 段内)、uip 在途 307→1083ms 而 uis 峰仅 183ms——被拖的 1s 在 feed/port 纯计算段墙钟。**2026-10-25 台架两轮分箱定案**:同负载换 :7003 churn 2200 周期 stall=0(阻塞型已被 F3 治愈),探针轮 3 事件 8 行全为该签名(漏检零、误报零,v1.1 口径 FAIL 面精确收缩)。处置方向 = 自愈设计 §11.3 脆弱点 1 实测样本并档 **E-27/28 批 3**:优先级矩阵复核 与 reconcile 突发分片让路 两案并评;**排期 = 批 4(结构债)**,与 E-27/E-28 裸指针收口同批 | 2026-10-25(F2/F3 验收轮②,v1.1 判据下捕获) | `docs/测试说明/boot_log_data/f3rounds_r2_probe_30min.log.gz`(3 事件 8 行 + STALL 证据行 + 同行 PROF);对照轮 `f3rounds_r1_7003_churn_30min.log.gz`;机理归档 `../网络/网络自愈架构设计.md` §4.6、`../子系统设计/看门狗设计说明.md` §11.3、`../UI设计/UI_设计架构.md` §5.8 | `../算法/继电保护功能复现规划.md`(E-27/28 属主文档指针) | | N-30 | **relisten 沉降段统一到驱动 `sock_reset` 原语受阻**——"去重复实现"的收口已实测回退:原语版 `ftp_abort_probe` RST **0/10**、FIN **0/5**(中止后首笔复连仍被截断到 ≤2048B),另新增 `sock_reset_sync timeout (600ms)` 与 `close: sock_reset not done` 两条 `[ERR]`;同场 net 层自建序列 **10/10 + 5/5** | 2026-10-14(同一块板 A/B,判据 `test/host/ftp_abort_probe.py`;快复连 50/50、背靠背 30/30 两版都过 → 失效面精确落在"中止后首笔复连") | **现状 = `net_listener.c` 保留自建排渣序列**(排空 + CLOSE + 排事件 + 等 CLOSED,30 ms 重试轮持续清)。重开前置三条语义:① 隔离窗内**持续**排空/关闭(残渣在 CLOSE 之后才落进 RX,一次排空接不住)② **复用让位**(复位机不得拆上层刚在同一芯片 Socket 上重建的监听)③ `net_sock_reset_sync` 改"已在运行 = 加入等待"(`begin` 返 -1 ≠ 失败) | `../网络/网络自愈架构设计.md` §8 延后项 1、§5.2 E16;`../问题记录/CH395F_Trap_Records.md` TRAP-NET-18 | ## 2. 存储 / 日志管线 @@ -46,4 +46,4 @@ | N-27 | **内存优化簇剩余**:原报告 R-2 后半(缩堆 56→32 KB → 迁 CCM)· R-3 · R-4 · R-6 | ⏸ **整簇暂缓**(2026-10-15 用户裁定):没有功能在等这块预算,而搬迁要动 scatter、要逐条过 DMA 可达性清单、缩堆还要上板复测。⚠ 代价落在"以后加任务 / 抬栈 / 加堆"那一刻——CCM 只剩 7,904 B、FreeRTOS 堆 `min_ever` 8,464 B,届时 `mem-budget` 会先报警 | 重开条件见 `../内存管理/RAM使用分析与优化方案.md` §4。⚠ **原报告 R-5 已判定不可行**(CMSIS-RTOS2 `freertos_os2.h` 有 `#if (configMAX_PRIORITIES != 56) #error`,改小直接编译失败),不再列入 | **暂缓** | 报告 R-2 剩余/R-3/R-4/R-6/§5.5 | | N-28 | **报告 F-5:uvprojx 里 127 个空 TU**(201 个 LVGL `.c` 中 127 个 `.map` 零产出) | 增量构建实测 4~5 s、远程 CI 刻意不跑 `@build` → **非产品指标**;报告原"编译时长 −40%"无基线记录 | 🟡 观察:等有实测的全量构建耗时痛点再做——用 Keil 原生 `0`(可逆)而非删条目,且排在任何 `lv_conf.h` 改动之后;动手前先补一次全量构建计时做基线 | 结构债 | 报告 F-5 | | N-29 | **仓库膨胀**:`.git` **233 MB**(2026-10-25 实测)+ 手册图片 36.3 MB(受控文件合计仅 79.3 MB,`.git` 已是它的 3 倍) | clone/备份慢,且持续恶化 | 降采样 / 拆 submodule / LFS 三选一 **+ 一次 `git filter-repo` 历史重写**(三项都不解决历史膨胀)。**已决策(2026-10-11):暂不处理、登记观察**——推送/协作前重评 | **仓库决策** | 报告 D-1 | -| U 簇 | **U5 页面落地**——⚠ "27 页"是目标数、不是差集:现存 **7 个页面实现**(`ui_page_ac/dc/device_info/net_cfg/password/runlog/selftest.c`,`ui_page_registry.c` 是生成物不算页面),27 个空叶子已归并为 **7 模块 + 2 项前置能力**(`../UI设计/页面补齐规划.md`) | 地基已齐(U1~U4 已落地;`ui-golden` 与 UI 字符集差集检查均已挂 pre-commit),新增一页 = 3 处人工 + 1 条生成器命令;缺的是产品定义与真数据 | **未排期**(2026-10-20 用户裁定暂缓);最早在「数据可信」M4 之后开工——`ui_data` / `ui_data_feed` 组装的是码值帧,先做会返工(`数据可信.md` §10)。逐页规格:`../UI设计/页面扩充详细方案.md` | UI 扩展 | `../UI设计/页面补齐规划.md` | +| U 簇 | **U5 页面落地**——33 叶已绑 **12**、剩 **21**("27 页"是目标数、不是差集;`ui_page_registry.c` 是生成物不算页面)。组件层三件套(`ui_w_editor` / `ui_w_setlist` / `ui_page_action`)已落地但**零消费者** | 地基已齐(U1~U4 落地;`ui-golden` 与字符集差集检查均已挂 pre-commit),新增一页 = 3 处人工 + 1 条生成器命令 | **当前波次**(2026-10-25 用户决定:下一波只做 UI 补齐、结构债押后)。21 叶按数据源就绪度分三梯队,第一梯队 9 叶零依赖——明细与 DoD 见 `UI补齐.md` | UI 扩展 | `../UI设计/页面补齐规划.md` | diff --git a/docs/任务规划/采集保护收尾.md b/docs/任务规划/采集保护收尾.md index a06f1d74..d7ed037e 100644 --- a/docs/任务规划/采集保护收尾.md +++ b/docs/任务规划/采集保护收尾.md @@ -28,3 +28,9 @@ > ⚠ **B10 与「数据可信」的依赖**:B10 的"L1-5 标定复核"依赖「数据可信」的通道标定卡(卡 12), > 即 **「数据可信」是 B10 的前置**。该依赖已在 `docs/任务规划/数据可信.md` §10 登记,两边不要 > 各写一套;送检窗口若早于「数据可信」的 M4,先按卡 0 的注入结果对齐口径。 +> +> ⚠ **送检前必须先解保护闭锁**(2026-10-25 复核):产品构建下 `protect_task.c:98` 要求 +> UA/UN/IA 的 `ADC_CAL_F_VALID` 全置位才走判据,而 VALID 只在标定写入 `[adc_cal] valid` +> 后才置位——**当前保护不动作**。B10 要验"过流/过负荷/电压+频率类判据全通过", +> 必须先完成卡 12 把 VALID 置起来,否则送检现场所有保护判据都表现为"不动作"。 +> 用户裁定(2026-10-25):**保持闭锁到标准源到位**,不用万用表标定走捷径。