docs(UI方案): 返回系数小数位按可分辨精度修正 + 遥信量落地注

两件事都落在这份方案文档里,合一笔提交(同一文件的两处改动按文件切分提交不干净,故合并说明)。

一、四个返回系数:口径从"我偏离文档"改成"文档原口径错了"(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),根因是台账与体积凭证待回填。
This commit is contained in:
2026-10-25 15:33:44 +08:00
parent 345e12ebd7
commit 3dc7f4a088
3 changed files with 35 additions and 17 deletions
+6 -6
View File
@@ -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 = 不挂)
*/
+26 -9
View File
@@ -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 = 不挂;只挂在非编辑态——编辑中是逐位输入串,挂单位会算错位光标)。
+3 -2
View File
@@ -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):