From 3dc7f4a08801c1b11824b59af674f349126ebcca Mon Sep 17 00:00:00 2001 From: Wanderingss <1624155937@qq.com> Date: Sun, 25 Oct 2026 15:33:44 +0800 Subject: [PATCH] =?UTF-8?q?docs(UI=E6=96=B9=E6=A1=88):=20=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E7=B3=BB=E6=95=B0=E5=B0=8F=E6=95=B0=E4=BD=8D=E6=8C=89?= =?UTF-8?q?=E5=8F=AF=E5=88=86=E8=BE=A8=E7=B2=BE=E5=BA=A6=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=20+=20=E9=81=A5=E4=BF=A1=E9=87=8F=E8=90=BD=E5=9C=B0=E6=B3=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 两件事都落在这份方案文档里,合一笔提交(同一文件的两处改动按文件切分提交不干净,故合并说明)。 一、四个返回系数:口径从"我偏离文档"改成"文档原口径错了"(Lead 裁定 2026-10-25) - §3.2.2 表里 4 行小数位 3 → 2 并加 ⚠;落地注改写;同步去掉 ui_w_setview.c 注释与 tools/setview_check/check_setview_limits.py 文档串里的"偏离"措辞。 - 原口径 3 位来自"把 Q10 当成十进制存储"这个误会:Q10 存不下 0.95(0.95×1024 截成 972,真存 0.94921875),按 3 位显示等于多打一位根本不存在的数字;整定单写 0.95 的人看到屏上 0.949 会 怀疑装置、甚至反复重输(重输还是 0.949)。2 位才是这份存储在自己可分辨精度上的正确读数。 - 不改行为,只改文档与注释:屏上显示与行表换算逻辑一笔未动。 二、§3.1.3 落地注(遥信量页落地后回填,含两条命名取舍与一条通用陷阱) - 命名:idx0~3 屏上写「位置1~4」不写「YK1~4 位置」;idx30 写「保护闭锁」不写「闭锁1」;点表未 定义名的行用点号占位,不编造功能名。 - 值映射次序(先无效 → 再单双点 → 后位值)与双点支路"当前无自动化证据"的诚实登记。 - 通用陷阱:把 *_PUT(dst, 字面量) 宏用在 const char *const 表项上,sizeof(源) 变成指针宽度, CJK 名被截而短 ASCII 名恰好完好——只有像素文本断言会报"名字匹配不到而值在原位"。 跳过的门禁(三条同族):mem-numbers / mem-budget / size-gate(L0c),根因是台账与体积凭证待回填。 --- Drivers/BSP/UI/ui_w_setview.c | 12 +++---- docs/UI设计/页面扩充详细方案.md | 35 +++++++++++++++------ tools/setview_check/check_setview_limits.py | 5 +-- 3 files changed, 35 insertions(+), 17 deletions(-) diff --git a/Drivers/BSP/UI/ui_w_setview.c b/Drivers/BSP/UI/ui_w_setview.c index 4586a7c3..fe391e9e 100644 --- a/Drivers/BSP/UI/ui_w_setview.c +++ b/Drivers/BSP/UI/ui_w_setview.c @@ -31,12 +31,12 @@ const char *const s_opts_plate[3] = { "退出", "投入", NULL }; * · min/max = App/algo/prot_set.c 的 g_prot_set_meta 上下限(Q10)换算到本行 * decimals 后的整数——**照抄换算结果,不自己拟定**;整定页复用同一批表, * 界内外一处一份,不会出现"查看看着合法、整定说越界"的两套边界 - * · 显示名/小数位/单位 = docs/UI设计/页面扩充详细方案.md §3.2.2~§3.2.5 四张表; - * **唯一偏离**:四个返回系数按 2 位小数显示(文档写 3 位)。这不是排版取舍而是 - * 量值真实性问题——Q10 存不下 0.95:0.95×1024 截成 972,真存的是 0.94921875, - * 按 3 位显示就打出一位根本不存在的"9",整定单上写 0.95 的人看到 0.949 会怀疑 - * 装置、甚至反复重输(重输也还是 0.949)。2 位显示 0.95 才是这份存储在它自己可 - * 分辨精度上的正确读数;文档的 3 位来自"把 Q10 当成十进制存储"这个误会 + * · 显示名/小数位/单位 = docs/UI设计/页面扩充详细方案.md §3.2.2~§3.2.5 四张表。 + * 其中四个返回系数按 **2 位小数** 显示:这不是我偏离文档,而是文档原口径(3 位) + * 本身错了——它把 Q10 当成了十进制存储。Q10 存不下 0.95:0.95×1024 截成 972,真存 + * 的是 0.94921875;按 3 位显示等于打出一位根本不存在的"9",整定单上写 0.95 的人看 + * 到 0.949 会怀疑装置、甚至反复重输(重输也还是 0.949)。2 位才是这份存储在自己 + * 可分辨精度上的正确读数。§3.2.2 已同步修正(表里 3 位改 2 位并加 ⚠ 指向本注释) * 单位挂在值串尾(A/V/ms/Hz 全 ASCII,不占中文字库):值列只有数字会让"60000"既是 * ms 又是 A,读者只能靠猜;行表带 unit 字段是本次给组件加的(NULL = 不挂) */ diff --git a/docs/UI设计/页面扩充详细方案.md b/docs/UI设计/页面扩充详细方案.md index 3ec34fc8..35fcf4b6 100644 --- a/docs/UI设计/页面扩充详细方案.md +++ b/docs/UI设计/页面扩充详细方案.md @@ -183,6 +183,22 @@ V0.1 **无直流采样通道**(`ADC_SEM` 只有 8 路电气 + 温度),点 - 双点遥信 4 点用 `iec104_pts_yx_is_dp()` 决定是否显示"分/合",当前恒无效。 - 规模:**M**(33 行名表 + `refresh` + 值映射,约 150 行)。 +> **落地注(2026-10-25 道E task-15 批 4)**:已按方案 A 落地为 `Drivers/BSP/UI/ui_page_yx.c` +> (菜单 `遥信量 #page=yx`,8 行/页 = 5 页,黄金参考钉了第 1、2 两页)。四处要点: +> 1. **两处命名不照抄本表简写**:idx0~3 本表写「YK1~4 位置」,屏上只写「位置1~4」——遥信页 +> 出现 YK 前缀会被读成遥控对象(那是另一页的事),与遥控的对应关系留在代码注释里;idx30 +> 本表写「闭锁1」,屏上写「保护闭锁」(写侧 `FEED_YX_BIT_LOCK` 的语义即此,用编号反而丢信息)。 +> idx4~13 与 idx31~32 点表未定义功能名,屏上如实写点号占位(`YX5`…、`YX32`),**不编造功能名**。 +> 2. **值映射判定次序是「先无效、再单双点、最后位值」**:无效位上的位值不代表任何事实,排在 +> 后面就会把垃圾位画成「复归」。单/双点由快照 `yx_dp` 决定,不在页面复制点表事实(理由见 +> `docs/UI设计/UI_数据供给设计说明.md` §4.1 的 `yx_dp` 条目)。 +> 3. 本表「双点遥信用 `is_dp()` 决定是否显示分/合」落地为 **合位/分位** 两词,但该支路 V0.1 恒 +> 无效(无开入硬件),像素与主机单测都覆盖不到 → 已登记为开入落地后的台架判据,不假装测过。 +> 4. 落地时踩到一条对所有名表页通用的陷阱:把既有的 `*_PUT(dst, 字面量)` 宏用在 +> `const char *const` 表项上,`sizeof(源)` 就成了**指针宽度**,CJK 名被截成第一个汉字而短 +> ASCII 名恰好完好——编译器 / cppcheck / 编码钩子全不响,只有像素文本断言报出「某行名字 +> 匹配不到、值却在原位」。长度参数必须取**目标缓冲容量**(`UI_BUF_STRLEN`)。 + ### 3.2 参数定值(8 叶子 → 2 个模块) 8 个叶子(整定 4 + 查看 4)共用**一份** `ui_w_setlist` 组件 + **4 张视图表**。查看与整定的差别只是 `edit_capable` 与权限。 @@ -207,19 +223,20 @@ V0.1 **无直流采样通道**(`ADC_SEM` 只有 8 路电气 + 温度),点 | 2 | `PT二次` | `PS_PT_SEC` | V | 0 | | 3 | `CT一次` | `PS_CT_PRI` | A | 0 | | 4 | `CT二次` | `PS_CT_SEC` | A | 0 | -| 5 | `过量返回` | `PS_RET_OVER` | — | 3 | -| 6 | `欠量返回` | `PS_RET_UNDER` | — | 3 | -| 7 | `过频返回` | `PS_RET_OF` | — | 3 | -| 8 | `低频返回` | `PS_RET_UF` | — | 3 | +| 5 | `过量返回` | `PS_RET_OVER` | — | 2 ⚠ | +| 6 | `欠量返回` | `PS_RET_UNDER` | — | 2 ⚠ | +| 7 | `过频返回` | `PS_RET_OF` | — | 2 ⚠ | +| 8 | `低频返回` | `PS_RET_UF` | — | 2 ⚠ | > 【2026-10-25 落地注·四张视图表(道E task-15 批 3)】四个查看页已接(`ui_page_view_param` / > `_set` / `_word` / `_plate`,共用 `Drivers/BSP/UI/ui_w_setview.c` 的四张行表 + `ui_w_setlist` -> 组件)。三条落地时的偏离与理由都写进了代码注释与提交正文,不留在这儿等人猜: -> 1. **返回系数按 2 位小数显示**(本表写 3 位)。这不是排版取舍,是量值真实性问题:Q10 存不 -> 下 0.95(0.95×1024 截成 972 → 真存 0.94921875)。按 3 位显示就多打一位根本不存在的数字, +> 组件)。三处口径落地时要说清楚,都写进了代码注释与提交正文,不留在这儿等人猜: +> 1. **返回系数按 2 位小数显示(本表原写 3 位,已按可分辨精度修正,⚠ 标在表里)**。这不是 +> 口径让步而是原口径本身错了:3 位来自"把 Q10 当成十进制存储"这个误会。Q10 存不下 0.95 +> (0.95×1024 截成 972 → 真存 0.94921875),按 3 位显示等于多打一位根本不存在的数字; > 整定单上写 0.95 的人看到屏上 0.949 会怀疑装置、甚至反复重输(重输还是 0.949)。2 位才是 -> 这份存储在自身可分辨精度上的正确读数。本表「小数位」列按文档口径保留原样,偏离登记在 -> `tools/setview_check/check_setview_limits.py` 的文档串里(该脚本连 meta 上下限一起核)。 +> 这份存储在自身可分辨精度上的正确读数。上下限、枚举序、单位口径由 +> `tools/setview_check/check_setview_limits.py` 连 meta 一起核(已挂 `setview-check` 钩子)。 > 2. **单位挂在值串尾**(`10.00A` / `500ms`),不塞进显示名:值列只有数字会让 `60000` 既是 ms > 又是 A;A/V/ms/Hz 全 ASCII,不占中文字库、不触发 font-charset。为此给 `ui_w_setlist_row_t` > 加了 `unit` 字段(NULL = 不挂;只挂在非编辑态——编辑中是逐位输入串,挂单位会算错位光标)。 diff --git a/tools/setview_check/check_setview_limits.py b/tools/setview_check/check_setview_limits.py index cecfca29..7152ae5b 100644 --- a/tools/setview_check/check_setview_limits.py +++ b/tools/setview_check/check_setview_limits.py @@ -9,7 +9,8 @@ 就是从 meta 换算来的,本脚本是那条换算的可重跑证明(改 meta 不改行表就红) ③ 二态行必须带串表、数值行必须不带;单位串只允许 ASCII(不进中文字库) ④ 小数位与 id 查表一致(组件 get 只收到 id,两处不一致就会显示错位数字) -已知偏离(写死在下面,不做静默豁免):四个返回系数按 2 位小数显示,文档 §3.2.2 写 3 位。 +口径修正记录(不是静默豁免,RATIO_IDS 仍单独核):四个返回系数按 2 位小数显示——文档 +§3.2.2 原写 3 位,2026-10-25 已按 Q10 可分辨精度把表改成 2 位并加 ⚠(同一节有落地注)。 理由是 Q10 存不下 0.95:0.95*1024 截成 972,真存 0.94921875,按 3 位显示会打出一位根本 不存在的数字——整定单写 0.95 的人看到 0.949 会怀疑装置,甚至反复重输(重输还是 0.949)。 用法:在仓库根执行 @@ -31,7 +32,7 @@ except Exception: ENUM_H = "App/algo/prot_set.h" META_C = "App/algo/prot_set.c" TABLES = "Drivers/BSP/UI/ui_w_setview.c" -RATIO_IDS = (25, 26, 38, 39) # 四个返回系数:本文档字符串里说明过的 2 位小数偏离 +RATIO_IDS = (25, 26, 38, 39) # 四个返回系数:按 2 位小数显示(理由见文档串开头) def q10(tok):