diff --git a/docs/任务规划/README.md b/docs/任务规划/README.md index 8844b0a4..744e3403 100644 --- a/docs/任务规划/README.md +++ b/docs/任务规划/README.md @@ -32,13 +32,13 @@ ## 1. 当前执行:UI 补齐 -菜单树按行内 `#page=` 实测:已绑 21 叶、未绑 21 叶(清单行合计 42)。未绑里 **7 叶纳入当前执行** +菜单树共 33 叶(节点行合计 42):按行内 `#page=` 实测**已绑 21 叶、未绑 12 叶**。未绑里 **7 叶纳入当前执行** (通讯设置 1 + 记录 5 + 运行报告 1),另外 5 叶因缺少开入硬件、录波模块或 SNTP 产品定义而不做。 装置维护 3 页与遥测死区/系数 2 页已于 2026-10-27 落地入库。唯一执行清单见 `UI补齐.md`。 | 顺序 | 要做的事 | 交付结果 | |---|---|---| -| 1 | 通讯设置 | 新增 `[comm]` 配置段并接入 104 | +| 1 | 通讯设置 | `[comm]` 段与端口真源已在库,还差页面与「重启生效」真机判据 | | 2 | 记录 5 页 | 事故、操作、保护告警、保护启动、遥控记录有写入方并可查看 | | 3 | 运行报告 | 上电次数、运行时长、复位原因、104 统计 | diff --git a/docs/任务规划/UI补齐.md b/docs/任务规划/UI补齐.md index 54418fba..757abba6 100644 --- a/docs/任务规划/UI补齐.md +++ b/docs/任务规划/UI补齐.md @@ -5,9 +5,11 @@ ## 1. 目标与范围 -菜单树按行内 `#page=` 标记实测:**已绑 21 叶、未绑 21 叶**(清单行合计 42); -页面映射表 `UI_PAGE_MAP_COUNT` = 21。上一版写的 33/16/17 是`装置维护 3 页`与`遥测死区/系数 2 页` -落地前的数,已按 05:1x 工作区重测覆盖。 +菜单树共 **33 叶**(节点行合计 42,缩进即层级):按行内 `#page=` 实测**已绑 21 叶、未绑 12 叶**, +页面映射表 `UI_PAGE_MAP_COUNT` = 21(与已绑叶数一致)。未绑 12 叶 = 下方第 1~3 项的 **7 叶** ++ §5 明确不做的 **5 叶**(遥信 3 / 手动录波 1 / SNTP 1),与分类表逐项对得上。 +⚠ 本节曾两次写错口径:16/17 是装置维护与遥测两页落地前的陈旧数,而「未绑 21」是把 42 个**节点行** +当成叶子数——重算方法见本节末,按缩进判定叶子(有更深缩进后继者即非叶子)。 | 分类 | 数量 | 当前怎么处理 | |---|---:|---| @@ -31,9 +33,9 @@ | 顺序 | 任务 | 完成判据 | 主要写范围 | 状态 | |---|---|---|---|---| -| **1** | **通讯设置** | 新建 `[comm]` 段承载公共地址与端口;修改并重启后连接与公共地址生效;核对配置段数和键数上限(主站地址白名单本卡不做,见 §5) | `App/cfg/`、`App/protocol/iec104/`、`Drivers/BSP/UI/` | 未开始 | +| **1** | **通讯设置** | 配置层已落地(`[comm]` 段与端口真源在 `App/protocol/iec104/iec104_comm.{c,h}`,服务端口不再抄 `IEC104_SERV_PORT` 字面量);**还缺页面**与「改后重启即生效」的真机判据、配置段数与键数上限核对(主站地址白名单不做,见 §5) | `App/protocol/iec104/`、`Drivers/BSP/UI/` | 配置层已落地,页面未开始 | | **2** | **记录 5 页** | 事故、操作、保护告警、保护启动、遥控各有一个写入点和记录类型;可翻最近 20 条;空记录明确显示“无记录”;共用 reader | `App/log/`、`Drivers/BSP/UI/` | 未开始 | -| **3** | **运行报告** | 展示上电次数、运行时长、复位原因、104 统计;复用 info 通道的已有数据;新计数器明确“掉电保持”或“本次运行”,不得含糊 | `App/log/` 或 `App/app/`、`Drivers/BSP/UI/` | 未开始 | +| **3** | **运行报告** | 四个数的现成度已查实,判据按此写死:复位原因**解析有但 RCC 标志读后即清** ⇒ 需开机快照驻留;上电次数**无现成计数器** ⇒ 正源建议 SD2506 用户 SRAM(电池保持、零 NAND 磨损,文案写「自 RTC 电池周期起」,**禁写终身次数**);运行时长仅**本次开机内有** ⇒ 跨开机累计口径**待用户裁定**;104 统计现有量全是控制量 ⇒ 需新增只读计数与 getter。落点 `App/util/boot_stats.{c,h}`(双端注册同笔),104 计数就近留 `iec104_serv.c` 不并进 | `App/util/`、`App/protocol/iec104/`、`Drivers/BSP/UI/` | 未开始(口径待裁定) | ### 依赖关系 @@ -50,9 +52,9 @@ | 页面 | 现有数据源 | 还缺什么 | |---|---|---| -| 通讯设置 | 网口配置保存范式可复用 | `[comm]` 段及 104 消费 | +| 通讯设置 | 网口配置保存范式可复用;`[comm]` 段与端口真源已在库 | 页面与「重启生效」真机判据、段数键数上限核对 | | 记录 5 页 | SOE、自检、运行记录已有 reader 先例 | 五类写入方与记录类型 | -| 运行报告 | `uptime_s`、复位原因已有 | 上电次数与 104 统计 | +| 运行报告 | `uptime_s`(本次开机内)、复位原因解析(标志读后即清) | 上电次数正源、复位原因开机快照、104 只读计数、跨开机时长口径 | --- @@ -60,7 +62,8 @@ 1. 新增 `ui_page_xxx.c/.h`,优先复用现有组件。 2. 在 `ui_menu_tree.txt` 对应叶子增加 ` #page=xxx`。 -3. 运行 `python tools/menu_gen/gen_menu.py`,检查生成物差异。 +3. 运行 `& '.venv\Scripts\python.exe' tools/menu_gen/gen_menu.py`,检查生成物差异(该脚本只用标准库,但入口统一走 `.venv`; + 新增文案后还要跑字库链,那条**依赖 fontTools** ⇒ 见 `font-regen` skill 与 `docs/环境与部署/本地工具路径环境变量方案.md`)。 4. 新文案先过字符集提取和字库生成,不能显示方块。 5. 加像素黄金用例与必要的主机单测。 6. 涉及保存、重启、主站读回的项目,台架可用后统一补做实机判据并留证。 @@ -68,6 +71,10 @@ **单写者约束**:`ui_menu_tree.txt`、页面注册表、字库生成物不得由多个分支同时修改。 `MDK-ARM/*.uvprojx` 的新源文件注册按双端注册规则处理。 +**时基口径未定,勿顺手统一**:面板时钟页与 8888 对时把「本地钟面当 epoch」写入,而 104 `C_CS` 按 CP56Time2a 的 +UTC 写入,后写者赢 ⇒ 装置墙钟与主机本地时刻恒差 8 小时。用户裁定前**不要改动 RTC/epoch 语义**,也不要把 +时钟设置页的「回读 RTC」判据改成按某一时区补偿——那等于替产品做掉一个未定的决定。 + **保护闭锁必须可见**:整定页可以修改定值,但当前产品在 UA/UN/IA 未标定时保护判据闭锁。 页面应显示该状态,不能让用户误以为“修改定值后保护就会动作”。口径见 `docs/任务规划/数据可信.md` §4.3。 @@ -82,4 +89,5 @@ | 手动录波 | 录波模块不存在,且工程量口径尚未完成实测闭环 | 故障录波独立立项 | | SNTP 设置 | 当前使用 8888 私有对时协议,SNTP 链路与产品口径均未建立 | SNTP 客户端立项 | | net 层与其他结构债 | 当前只做 UI,避免两条主线互相拖慢 | UI 当前清单完成后,按 README §2 切换 | +| RTC 时基统一 | 两套写入口径并存(面板与 8888 写本地钟面、104 写 UTC),恒差 8 小时;统一任一侧都要动 104 上行语义或 UI 判据 | 用户裁定时基方向后,作为跨模块变更单独立项 | | 主站地址白名单 | CH395F 单连接 socket 上「拒绝即 close+重 listen」等于给扫描风暴开门,且该值现在没有任何既有消费点 | 有真实消费场景或多连接后端立项时再评 |