docs(任务规划): 通讯设置页销项与叶数口径同步(22 绑 / 11 未绑 / 待做 6)

按「完成即销」删 UI补齐 §2 顺序 1 整行并重编号、删依赖 bullet、开篇改为从记录 5 页开始;
§1 计数按生成器自身 parse_tree 实测(nodes=42 leaves=33 bound=22 unbound=11),分类表 7 改 6
并补闭合式(6 + 5 = 11);README 开篇剩余三项改两项、§1 表同步。

两条比数字更该留下的口径:
· §3 数据源表里通讯设置那行**保留并改写**,不整行删——「改后重启即生效」的真机判据与配置段
  数键数上限核对**确实未做**,完成即销销的是已完成,不是已落地一半。
· naive 计数从 22 纠正到 23(文件头示例行也算一次)。旧文档那个 22 恰好等于新的 bound 真值,
  不改就等于教人用错算法却碰巧对上,比错更糟。
This commit is contained in:
2026-10-27 13:59:59 +08:00
parent a275539c17
commit a64db43fe4
2 changed files with 21 additions and 25 deletions
+7 -8
View File
@@ -1,6 +1,6 @@
# 任务规划
> **现在只做 UI 补齐。剩余三项按表序单道推进:通讯设置 → 记录 5 页 → 运行报告。**
> **现在只做 UI 补齐。剩余两项按表序单道推进:记录 5 页 → 运行报告(通讯设置已入库)。**
> 详细任务与验收见 `UI补齐.md`;UI 完成后的第一项是 net 层跨上下文收口。
## 怎么用这份规划
@@ -32,16 +32,15 @@
## 1. 当前执行:UI 补齐
菜单树共 33 叶(节点行合计 42):按行内 `#page=` 实测**已绑 21 叶、未绑 12 叶**(2026-10-27 复核,
判定规则与重跑命令见 `docs/任务规划/UI补齐.md` §1「叶数判定与复核」)。未绑里 **7 叶纳入当前执行**
(通讯设置 1 + 记录 5 + 运行报告 1),另外 5 叶因缺少开入硬件、录波模块或 SNTP 产品定义而不做。
装置维护 3 页与遥测死区/系数 2 页已于 2026-10-27 落地入库。唯一执行清单见 `UI补齐.md`。
菜单树共 33 叶(节点行合计 42):按行内 `#page=` 实测**已绑 22 叶、未绑 11 叶**(2026-10-27 复核,
判定规则与重跑命令见 `docs/任务规划/UI补齐.md` §1「叶数判定与复核」)。未绑里 **6 叶纳入当前执行**
(记录 5 + 运行报告 1),另外 5 叶因缺少开入硬件、录波模块或 SNTP 产品定义而不做。
装置维护 3 页、遥测死区与系数 2 页、通讯设置页已于 2026-10-27 陆续落地入库。唯一执行清单见 `UI补齐.md`。
| 顺序 | 要做的事 | 交付结果 |
|---|---|---|
| 1 | 通讯设置 | `[comm]` 段与端口真源已在库,还差页面与「重启生效」真机判据 |
| 2 | 记录 5 页 | 事故、操作、保护告警、保护启动、遥控记录有写入方并可查看 |
| 3 | 运行报告 | 上电次数、运行时长、复位原因、104 统计 |
| 1 | 记录 5 页 | 事故、操作、保护告警、保护启动、遥控记录有写入方并可查看 |
| 2 | 运行报告 | 上电次数、运行时长、复位原因、104 统计 |
**执行纪律:单道串行。** 菜单树与页面注册表是生成物,字库也是整文件生成物;
不要同时开多条 UI 页面分支。上板验证可累积成一批,但保存、重启、主站读回等判据不能删除。
+14 -17
View File
@@ -1,24 +1,24 @@
# 当前任务:UI 补齐
> **从第 1 项「通讯设置」开始,按表序单道串行推进。**
> **从第 1 项「记录 5 页」开始,按表序单道串行推进。**(通讯设置页已于 2026-10-27 入库)
> 本文件是当前唯一执行清单;全项目顺序见 `docs/任务规划/README.md` §2。
## 1. 目标与范围
菜单树共 **33 叶**(节点行合计 42,缩进即层级):按行内 `#page=` 实测**已绑 21 叶、未绑 12 叶**,
页面映射表 `UI_PAGE_MAP_COUNT` = 21(与已绑叶数一致)。未绑 12 叶 = 下方第 1~3 项的 **7 叶**
+ §5 明确不做的 **5 叶**(遥信 3 / 手动录波 1 / SNTP 1),与分类表逐项对得上。
菜单树共 **33 叶**(节点行合计 42,缩进即层级):按行内 `#page=` 实测**已绑 22 叶、未绑 11 叶**,
页面映射表 `UI_PAGE_MAP_COUNT` = 22(与已绑叶数一致)。未绑 11 叶 = 下方第 1~2 项的 **6 叶**
+ §5 明确不做的 **5 叶**(遥信 3 / 手动录波 1 / SNTP 1),与分类表逐项对得上(6 + 5 = 11)。
| 分类 | 数量 | 当前怎么处理 |
|---|---:|---|
| 需补配置或写入方 | 7 | 当前执行:通讯设置 1 + 记录 5 + 运行报告 1(即下方第 1~3 项) |
| 需补配置或写入方 | 6 | 当前执行:记录 5 + 运行报告 1(即下方第 1~2 项) |
| 无开入硬件 | 3 | 不做:遥信类型、遥信防抖、双点遥信 |
| 缺独立模块或产品定义 | 2 | 不做:手动录波、SNTP 设置 |
现有基础:`ui_w_editor` / `ui_w_setlist` / `ui_page_action` 已就绪;`ui_data` 已扩到**四通道**
(rt / par / info + 遥测死区与系数用的第四张注入表);像素黄金用例与字符集门禁已存在,内容页黄金
现有 **47 页**(菜单 8 状态另计)。**装置维护 3 页与遥测死区/系数 2 页已把这套基础接上了真实消费者,
剩余三项继续用它,不另发明一套机制。**
现有 **53 页**(菜单 8 状态另计)。**装置维护 3 页与遥测死区/系数 2 页已把这套基础接上了真实消费者,
剩余两项继续用它,不另发明一套机制。**
逐页形态见 `docs/UI设计/页面补齐规划.md`;数据契约见
`docs/UI设计/UI_数据供给设计说明.md`。本文件只维护执行顺序和完成判据。
@@ -28,7 +28,7 @@
1. **节点行** = `ui_menu_tree.txt` 里非空、非 `#` 开头的行(当前 **42** 行,含根「主界面」)。
2. **缩进即层级**(每级 2 空格;Tab 会被 `gen_menu.py` 直接拒绝):某节点行之后再没有更深缩进的行 = **叶**
(当前 **33** 叶);有更深缩进后继者 = 菜单节点(当前 **9** 个)。等价于生成物口径 `ui_menu_tab_has_children(node) == false`。
3. **绑定**:叶行行尾带 ` #page=` = 已绑(当前 **21** 叶);不带的 = 未绑(当前 **12** 叶)。
3. **绑定**:叶行行尾带 ` #page=` = 已绑(当前 **22** 叶);不带的 = 未绑(当前 **11** 叶)。
复核命令(复用生成器自己的解析器 `tools/menu_gen/gen_menu.py` 的 `parse_tree`,不另写一套计数逻辑,免得与生成物脱钩):
@@ -36,11 +36,10 @@
& '.venv\Scripts\python.exe' -c "import io,sys; sys.path.insert(0,'tools/menu_gen'); import gen_menu as g; n,_=g.parse_tree(io.open('ui_menu_tree.txt',encoding='utf-8').read()); leaf=[i for i,x in enumerate(n) if all(y[0]!=i for y in n)]; b=sum(1 for i in leaf if n[i][4]); print('nodes=%d leaves=%d bound=%d unbound=%d' % (len(n),len(leaf),b,len(leaf)-b))"
```
输出 `nodes=42 leaves=33 bound=21 unbound=12`;交叉核对生成物:`ui_menu_tab.h` 的 `UI_MENU_TAB_COUNT` = 42(节点行数)、
`ui_page_registry.h` 的 `UI_PAGE_MAP_COUNT` = 21(已绑叶数)——一对 42、一对 21,与上面逐项对得上。
输出 `nodes=42 leaves=33 bound=22 unbound=11`;交叉核对生成物:`ui_menu_tab.h` 的 `UI_MENU_TAB_COUNT` = 42(节点行数)、
`ui_page_registry.h` 的 `UI_PAGE_MAP_COUNT` = 22(已绑叶数)——一对 42、一对 22,与上面逐项对得上。
三个已踩过的错算法:**把 42 个节点行当叶子**(多算 9 个菜单节点,得出「未绑 21」);**`grep -c '#page='` 得 22**
(文件头注释第 5 行有 `#page=<模块名>` 示例字样,必须先剔注释行);**按叶子名去重得 29**(`参数`/`定值`/
三个已踩过的错算法:**把 42 个节点行当叶子**(多算 9 个菜单节点,得出「未绑 21」);**`grep -c '#page='` 得 23**(比已绑多 1:文件头注释第 5 行有 `#page=<模块名>` 示例字样,必须先剔注释行);**按叶子名去重得 29**(`参数`/`定值`/
`控制字`/`软压板` 在「整定」「查看」下各一份,4 对同名不能合并)。
---
@@ -51,14 +50,12 @@
| 顺序 | 任务 | 完成判据 | 主要写范围 | 状态 |
|---|---|---|---|---|
| **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** | **运行报告** | 四个数的现成度已查实,判据按此写死:复位原因**解析有但 RCC 标志读后即清** ⇒ 需开机快照驻留;上电次数**无现成计数器** ⇒ 正源建议 SD2506 用户 SRAM(电池保持、零 NAND 磨损,文案写「自 RTC 电池周期起」,**禁写终身次数**);运行时长**用户裁定 2026-10-27 = 只报本次开机以来**(直接用现成 `uptime_s`,**不引** RTC 用户 SRAM 存秒数,UI 该栏必须**明写「本次开机以来」**免被误读为累计值);104 统计现有量全是控制量 ⇒ 需新增只读计数与 getter。落点 `App/util/boot_stats.{c,h}`(双端注册同笔),104 计数就近留 `iec104_serv.c` 不并进 | `App/util/`、`App/protocol/iec104/`、`Drivers/BSP/UI/` | 未开始(时长口径已定,其余三项待做) |
| **1** | **记录 5 页** | 事故、操作、保护告警、保护启动、遥控各有一个写入点和记录类型;可翻最近 20 条;空记录明确显示“无记录”;共用 reader | `App/log/`、`Drivers/BSP/UI/` | 未开始 |
| **2** | **运行报告** | 四个数的现成度已查实,判据按此写死:复位原因**解析有但 RCC 标志读后即清** ⇒ 需开机快照驻留;上电次数**无现成计数器** ⇒ 正源建议 SD2506 用户 SRAM(电池保持、零 NAND 磨损,文案写「自 RTC 电池周期起」,**禁写终身次数**);运行时长**用户裁定 2026-10-27 = 只报本次开机以来**(直接用现成 `uptime_s`,**不引** RTC 用户 SRAM 存秒数,UI 该栏必须**明写「本次开机以来」**免被误读为累计值);104 统计现有量全是控制量 ⇒ 需新增只读计数与 getter。落点 `App/util/boot_stats.{c,h}`(双端注册同笔),104 计数就近留 `iec104_serv.c` 不并进 | `App/util/`、`App/protocol/iec104/`、`Drivers/BSP/UI/` | 未开始(时长口径已定,其余三项待做) |
### 依赖关系
- 各项虽可独立开发,但当前仍按表序单道执行(菜单树、页面注册表与字库都是生成物)。
- 通讯设置可先完成配置层再接页面,但最终必须作为一整项验收。
- 记录 5 页与运行报告先补真实写入方或计数器,再做页面;不允许用静态演示数据充数。
- 历史教训(已完成的装置维护 3 页留下的口径,后续项沿用):**执行类页面不得做成「点了个按钮但没效果」**——清除记录必须按 `syslog_clear_state()` 出真反馈;遥测死区/系数两页的三态用
`run_par_dirty_peek()` 区分「已受理」与「已落盘」,且黄金必须出 WAIT 与 OK 两张(假件保留脏位、只由
@@ -70,7 +67,7 @@
| 页面 | 现有数据源 | 还缺什么 |
|---|---|---|
| 通讯设置 | 网口配置保存范式可复用;`[comm]` 段与端口真源已在库 | 页面与「重启生效」真机判据、段数键数上限核对 |
| 通讯设置 | 页面与六态黄金已随 `728d6067` 入库;`[comm]` 段与端口真源在 `App/protocol/iec104/iec104_comm.{c,h}` | 「改后重启即生效」真机判据、配置段数与键数上限核对(台架窗口统一补做并留证) |
| 记录 5 页 | SOE、自检、运行记录已有 reader 先例 | 五类写入方与记录类型 |
| 运行报告 | `uptime_s`(本次开机内)、复位原因解析(标志读后即清) | 上电次数正源、复位原因开机快照、104 只读计数(**跨开机累计不做**,用户已裁定只报本次开机) |