feat(ui-pages): 遥信量 33 行固定名表页接实时快照(新增 yx_dp)
批 4 主体(票 task-15;规格 docs/UI设计/页面扩充详细方案.md §3.1.3 方案 A)。V0.1 只有 6 点有 硬件来源,其余 27 点在屏上就是 "--"——这是真实状态,不是页面没做完。 页面与数据 - 33 行固定名表(Flash const)+ 动态分页(8 行/页 = 5 页)。两处命名不照抄文档简写:idx0~3 屏上写「位置1~4」而非「YK1~4 位置」(遥信页出现 YK 前缀会被读成遥控对象,对应关系留在注释); idx30 写「保护闭锁」(写侧位号注释的语义即此,用编号反而丢信息)。idx4~13、idx31~32 点表未 定义功能名,如实写点号占位(YX5…、YX32),不编造功能名。 - 值映射次序:先判无效 → 再判单/双点 → 最后看位值。无效位上的位值不代表任何事实,次序颠倒就会 把垃圾位画成「复归」。 - 快照新增 yx_dp 双点位图(+8 B)。不教页面"前 4 点是双点":单双点是 104 点表事实(YX_DP_N / iec104_pts_yx_is_dp),抄进表现层就是第二真相——点表把双点段挪位或改起始下标,屏上不报错, 只会用错词形容同一个点。写侧逐点问 is_dp() 拼位图。 - UI_DATA_YX_N(33) 与 iec104_pts_yx_count() 编译期比不了(那个 #define 在协议层 .c 内),故写侧 留一条一次性 DBG_ERROR(约 90 B Flash,只在真漂移时打一次)。名表行数 = UI_DATA_YX_N 由数组 宽度法编译期守卫钉住(ARMCC C99 无 _Static_assert,本仓惯用写法)。 - 补 include 一条实测坑:DBG_ERROR 是宏,漏 include "dbg_log.h" 时 ARMCC 把它当隐式声明函数放过 编译期,错落在链接期(L6218E Undefined symbol DBG_ERROR)——报错点离根因隔了一整个链接步骤, 已在 include 处写明「DBG_TAG 必须在 include 之前」。 一个只有像素文本断言能抓到的截断 bug - 照抄批 1 的 *_PUT(dst, 源) 宏(长度取 sizeof(源)),但本表源是 const char *const 数组的 **元素(指针)**,sizeof 得 4 → 「故障总」被截成「故」,而 "YX9" 恰好 4 字节看起来完全正常。 编译器 / cppcheck / 编码钩子全不响。定位来自断言:第 2 页「过流Ⅰ段」匹配不到,同一行值列 「复归」却在原位 = 名字被截、值没错位。修法:长度取目标缓冲容量 UI_BUF_STRLEN。同名宏、不同 参数类别(数组 vs 指针),批 1 那处本身是对的,照抄才中招——教训写在宏定义上方。 模拟器与覆盖诚实性 - 固定帧发布 yx_dp = 0x0F,但刻意不把这几位置进 yx_valid:V0.1 无开入硬件,屏上就是 "--"。不用 「让它显示合位/分位」的假数据填满画面,那等于让黄金参考声称本机有开关位置遥信。 - 代价如实登记:合位/分位这条词映射当前**没有任何自动化证据**(像素恒 IV;页面依赖 LVGL 进不了 主机单测)。已写进方案 §3.1.3 落地注与契约落地进度·四,作为开入落地后的台架判据,不假装测过。 测试 - 主机单测 +2 条(TC-UIDATA-009c 双点位图原样透传、不被 valid 掩;009d 点数 33 的独立见证,注明 绊红时要同步改哪四处)→ 85/85。 - 文本断言 +33 条(yx / yxp2 两态,含页码钉住 33/8 = 5 页的分页数学);两页像素基线单独一笔。 - font-charset 本批零新增字:名表用字全部命中既有 183 字子集——「置/故/障/总/外/部」正属批 1 成组并入 KEEP_EXTRA 的那批字,第二次兑现(当时若按 extract 输出重写字符集,这些字早被洗掉, 上屏是空白,而门禁只会说「字不在清单里」)。 体积(同一棵树、构建前后的实测增量) - Code 224272→224688(+416);RO 24040→24640(+600);RW 1324→1328(+4); ZI 134844→135088(+244)→ Flash 约 +1020 B、RAM +248 B。 - RO 增量主要是 33 行名表与名称串,是"把 33 个真点名上屏"的代价,不是可省开销。 跳过的门禁(三条同族,同一根因):mem-numbers / mem-budget / size-gate(L0c)——台账与体积凭证 回填是 Lead 单写者,本分支不做静默处理,数值见上。
This commit is contained in:
@@ -109,6 +109,7 @@ set(UI_SOURCES
|
||||
${UI_DIR}/ui_page_view_plate.c
|
||||
${UI_DIR}/ui_page_view_set.c
|
||||
${UI_DIR}/ui_page_view_word.c
|
||||
${UI_DIR}/ui_page_yx.c
|
||||
)
|
||||
|
||||
# 运行/自检记录引擎(双端共享核心 + 平台存储后端;MCU 端编 sys_log_mcu.c,见 Keil 工程)
|
||||
|
||||
+6
-1
@@ -274,7 +274,12 @@ static void sim_publish_data_frames(void) {
|
||||
rt.ph[i].qds = UI_DATA_Q_IV; /* 未发布的槽:无效,页面显示 "--" */
|
||||
}
|
||||
rt.yx_bits = 0u; /* 固定帧无动作态 */
|
||||
rt.yx_valid = 0x4043C000ULL; /* YX15~18/23/31 有效位图 */
|
||||
rt.yx_valid = 0x4043C000ULL; /* YX15~18/23/31 有效位图(与点表同集合) */
|
||||
/* 双点位图照写侧口径给(App/protocol/iec104/iec104_pts.c 的 YX_DP_N = 4 → bit0~3)。
|
||||
* 这 4 点**不在**上面的有效位图里(V0.1 无开入硬件),所以遥信页对它们打 "--"——
|
||||
* 刻意不把 bit0 塞进 yx_valid 让画面多两个汉字好看:那会让黄金参考显示成"这台设备
|
||||
* 有开关位置遥信",而真机上没有(屏上的话必须与本机一致,同页脚页码那条裁定) */
|
||||
rt.yx_dp = 0x0FULL;
|
||||
rt.freq_valid = 0u; /* eng=0 期间幅值门恒失效 → 无新鲜读数 */
|
||||
rt.freq_hz = 0.0f;
|
||||
rt.clock_ok = 1u;
|
||||
|
||||
@@ -41,6 +41,10 @@ PAGES = [
|
||||
("info", "e"), # 装置信息(node 1)
|
||||
("ac", "dee"), # 交流量(node 3,实时数据下第 1 项)
|
||||
("dc", "dede"), # 直流量(node 4,实时数据下第 2 项)
|
||||
# 遥信量(实时数据下第 3 项):d 到实时数据 → e 进(选中交流量)→ dd 到遥信量 → e 开页;
|
||||
# yxp2 再多按 8 次下移,让选中行跨过页边界落到第 2 页首行
|
||||
("yx", "dedde"),
|
||||
("yxp2", "dedde dddddddd"),
|
||||
# SOE 记录(node 51,记录查询下第 1 项):6 下进记录查询 → e → 首项 SOE记录 → e;
|
||||
# 数据 = simulator/main.c 的固定 3 条假记录(含 type 7 未标定闭锁这条非元件支路)
|
||||
("soe", "dddddde e"),
|
||||
@@ -112,6 +116,52 @@ TEXTS = {
|
||||
("r5名", "未标定闭锁", (94, 108), False),
|
||||
("页脚", "第 1 页,共 1 页", (140, 160), False),
|
||||
],
|
||||
# ── 批 4:遥信量(33 点固定名表,5 页)──
|
||||
# 第 1 页 8 行**全是 --**(位置 1~4 是无硬件的双点,YX5~8 点表未定义)——这不是画面坏了,
|
||||
# 是 V0.1 的真实状态:27 个点没有开入来源。方案 B(只显有效点)会把这件事藏起来,方案 A
|
||||
# 让现场能逐点对、也能一眼看出缺哪些点(取舍见 页面扩充详细方案.md §3.1.3)。
|
||||
# 第 2 页才出现有来源的点(故障总 / 过流Ⅰ段 = 复归);两页合起来同时钉住分页数学:
|
||||
# 33 行 / 8 行每页 = 5 页,页码算错这里直接响。
|
||||
"yx": [
|
||||
("标题", "遥信量", (0, 24), False),
|
||||
("r0名", "位置1", (24, 38), True),
|
||||
("r0值", "--", (24, 38), True),
|
||||
("r1名", "位置2", (38, 52), False),
|
||||
("r1值", "--", (38, 52), False),
|
||||
("r2名", "位置3", (52, 66), False),
|
||||
("r2值", "--", (52, 66), False),
|
||||
("r3名", "位置4", (66, 80), False),
|
||||
("r3值", "--", (66, 80), False),
|
||||
("r4名", "YX5", (80, 94), False),
|
||||
("r4值", "--", (80, 94), False),
|
||||
("r5名", "YX6", (94, 108), False),
|
||||
("r5值", "--", (94, 108), False),
|
||||
("r6名", "YX7", (108, 122), False),
|
||||
("r6值", "--", (108, 122), False),
|
||||
("r7名", "YX8", (122, 136), False),
|
||||
("r7值", "--", (122, 136), False),
|
||||
("页脚", "第 1 页,共 5 页", (140, 160), False),
|
||||
],
|
||||
"yxp2": [
|
||||
("标题", "遥信量", (0, 24), False),
|
||||
("r0名", "YX9", (24, 38), True),
|
||||
("r0值", "--", (24, 38), True),
|
||||
("r1名", "YX10", (38, 52), False),
|
||||
("r1值", "--", (38, 52), False),
|
||||
("r2名", "YX11", (52, 66), False),
|
||||
("r2值", "--", (52, 66), False),
|
||||
("r3名", "YX12", (66, 80), False),
|
||||
("r3值", "--", (66, 80), False),
|
||||
("r4名", "YX13", (80, 94), False),
|
||||
("r4值", "--", (80, 94), False),
|
||||
("r5名", "YX14", (94, 108), False),
|
||||
("r5值", "--", (94, 108), False),
|
||||
("r6名", "故障总", (108, 122), False),
|
||||
("r6值", "复归", (108, 122), False),
|
||||
("r7名", "过流Ⅰ段", (122, 136), False),
|
||||
("r7值", "复归", (122, 136), False),
|
||||
("页脚", "第 2 页,共 5 页", (140, 160), False), # 选中行落到第 2 页首行(YX9);页码同时钉住 33/8 = 5 页
|
||||
],
|
||||
# ── 批 3:参数定值 → 查看 四页(数据 = prot_set 出厂默认,值串带单位)──
|
||||
# 名与值两列都断:值列断的是换算后的小数位与单位——光看像素,没人会去核 0.95 是不是被
|
||||
# Q10 存成了 0.94921875。控制字页还多钉一层:Ⅰ/Ⅱ 段默认是「跳闸」、Ⅲ 与过负荷段默认是
|
||||
|
||||
Reference in New Issue
Block a user