Explorar el Código

docs: 补充HMI页面尺寸规则

main
suyu hace 4 semanas
padre
commit
138b092ff2
Se han modificado 3 ficheros con 15 adiciones y 3 borrados
  1. +8
    -0
      docs/ai/handoff.md
  2. +3
    -1
      docs/工程格式说明.md
  3. +4
    -2
      docs/用户使用/数量边界确认方案.md

+ 8
- 0
docs/ai/handoff.md Ver fichero

@@ -7,6 +7,8 @@
- 分支:`main`
- 核心软件闭环已经可用:HMI 编辑、结构化梯形图、离线仿真、工程 JSON、统一运行监控大屏、自由监控和 Modbus RTU 真机读写均已实现
- HMI 外观属性和梯形图十列可选插入网格均已按逻辑完成提交;开始工作前仍需先看 `git status` 和相关 diff,不要重置来源不明的改动
- HMI 页面宽高已支持编辑态页面属性设置;业务范围统一为宽 `320~1600`、高 `200~800`,默认新建页面为 `800×400`,页面缩小导致控件越界时由服务层原子拒绝
- HMI 控件属性面板的显示文本输入统一限制为 12 个字符;领域层工程文件文本上限仍为 4096 个 UTF-8 字节
- `docs/二次开发/` 是已有未跟踪资料,不能因当前任务删除
- 测试体系已建立统一 `app/tests/tests.pro` 聚合入口、分层 `.pri` 清单、公共 `TestSupport` fixture 和独立 `performance_tests` 目标;长期测试规则见 `docs/测试约定.md`
- 当前没有代码阻塞;实际设备 RUN 联动和离线演示均已完成,下一步是最终交付资料整理
@@ -40,6 +42,7 @@
- 新建报警列表默认尺寸调整为 `360×136`,默认字号比应用字体小 2pt;运行态按当前页 1~5 条记录收缩高度,超过 5 条可通过表头按钮翻页且确认命中使用当前页索引
- 主窗口默认工具栏布局调整为运行模式栏第一行,HMI 或梯形图编辑工具栏第二行;编辑工具栏仍允许用户拖动重新停靠
- 新增 HMI 保留外观属性键和领域校验:颜色为严格 `#RRGGBB`,字号为 `6~72`,粗体和斜体为 `true/false`
- HMI 页面属性面板新增宽度和高度编辑;`HmiEditorService::resizePage()` 复用页面边界校验并纳入撤销/重做,成功后画布和工程树尺寸摘要同步刷新;JSON 页面尺寸也统一按 `320~1600 × 200~800` 校验
- 属性面板新增颜色输入与选择按钮、字号、粗体、斜体;通过既有 `HmiEditorService::updateControl()` 原子提交并保留撤销/重做
- `HmiGraphicsItem` 统一应用文字外观,保留地址提示、按钮禁用色、指示灯状态色、控件边框和选中框的原有语义
- 更新工程格式和数量边界文档;新增领域、HMI 编辑服务、JSON 往返和主窗口 UI 测试
@@ -54,10 +57,15 @@
- 2026-08-20 使用 `COM3 / 9600 / 8E1 / 站号 1` 完成真实 PLC 安全读写:读取 `D4000=0`,临时写入并读回 `1`,随后恢复并读回 `0`;没有下载 PLC 程序,也没有执行切换 RUN 的动作
- 2026-08-21 用户使用 `json/motor_forward_reverse.json` 在已连接的真实 PLC 上完成 RUN 联动手动验收:通过运行监控 HMI 操作正转启动、反转启动和停止,并确认对应运行状态反馈正常;该项验证覆盖实际 PLC 内部程序、接线和现场负载,不由自动化替身测试替代
- 2026-08-21 在 Qt/MinGW 运行库 PATH 正确的独立环境中重新执行 10 个 Release 测试目标,全部通过:`alarm_service_tests`、`domain_tests`、`hmi_editor_service_tests`、`logic_editor_service_tests`、`main_window_tests`、`offline_simulation_service_tests`、`plc_runtime_tests`、`project_management_tests`、`register_monitor_service_tests`、`runtime_mode_service_tests`
- 2026-08-21 页面尺寸第一版改动通过 `hmi_editor_service_tests` 和 `main_window_tests`,覆盖原子越界拒绝、撤销/重做、页面属性面板提交和工程树尺寸摘要刷新;随后重新运行全部 10 个 Release 功能测试目标,均通过
- 2026-08-21 页面尺寸最终范围改动新增 JSON 显式边界覆盖:`319/1601` 宽度和 `199/801` 高度加载失败,`320×200` 与 `1600×800` 加载成功;全部 10 个 Release 功能测试目标再次通过
- 2026-08-21 页面尺寸最终范围改动后的 Qt Release 主程序已在 `build/release` 重新构建并链接成功
- 2026-08-21 本地综合演示工程 `json/all_ladder_components_demo.json` 原为 `1280×900`,已调整为 `1280×800`;现有控件仍完整位于页面内,所有本地 JSON 演示工程均符合新页面范围
- 2026-08-21 使用 `scripts/run_qt_tests.ps1 -Configuration Release` 重新构建并运行上述 10 个功能目标及独立 `performance_tests`;功能回归全部通过,性能目标包含 100 个控制逻辑扫描和 4001 个 M 寄存器访问基准
- 2026-08-21 在 `build/tests_aggregate` 对 `app/tests/tests.pro` 执行完整 Release 聚合构建,11 个测试目标(10 个功能目标和 `performance_tests`)全部成功生成可执行文件
- CTU/CTD 显示修复已通过 `main_window_tests`(`QT_QPA_PLATFORM=offscreen`)和 Qt Release 主程序重新构建;改动仅涉及梯形图 UI 投影,因此未连接真实 PLC
- 报警列表和分页改动已通过 `domain_tests`、`alarm_service_tests`、`hmi_editor_service_tests`、`project_management_tests` 和 `main_window_tests`;覆盖输入长度、默认五行尺寸、默认字号、运行态高度收缩、六条报警翻页和跨页确认
- HMI 控件属性文本输入上限改动已通过 Qt Release 功能回归和 `main_window_tests`;普通控件与报警列表均确认属性输入框最大长度为 12
- 报警列表改动后的 Qt Release 主程序已重新构建并链接成功;改动不涉及 PLC 通信、Modbus 地址或运行模式,因此未连接真实 PLC
- 默认工具栏布局改动已通过 `main_window_tests`(`QT_QPA_PLATFORM=offscreen`)和 Qt Release 主程序重新构建
- 批量删除并联支路回归已通过专项探针、`logic_editor_service_tests` 和 `main_window_tests`;逐个删除、删除完整支路和部分批量删除均保持有效


+ 3
- 1
docs/工程格式说明.md Ver fichero

@@ -32,13 +32,15 @@
"id": "page-1",
"name": "主操作页面",
"width": 800,
"height": 480,
"height": 400,
"controls": []
}
```

每个控件都要求 `id`、`type`、`bounds`、`text`、`binding` 和 `properties`。`bounds` 包含整数 `x`、`y`、`width`、`height`,矩形必须完整位于页面内。`binding` 为寄存器对象或 JSON `null`。

页面尺寸是当前 PC HMI 编辑器的业务尺寸,宽度必须为 `320~1600`,高度必须为 `200~800`。默认页面尺寸为 `800×400`;超出范围的 JSON 页面直接加载失败。

`properties` 保存控件外观扩展属性。当前保留以下 HMI 外观属性名:

| 属性名 | 值格式 | 说明 |


+ 4
- 2
docs/用户使用/数量边界确认方案.md Ver fichero

@@ -17,10 +17,12 @@
| 工程文件 | 单个 JSON 文件大小 | 0 | 16 MiB | 读取 JSON 前直接拒绝 | 防止超大文件一次性占满内存 |
| HMI | 页面数量 | 0 | 128 | 第 129 个页面不能创建或加载 | 控制工程树和运行页面的内存开销 |
| HMI | 单页控件数量 | 0 | 512 | 第 513 个控件不能创建或加载 | 保证编辑画布和运行刷新可控 |
| HMI | 页面宽度、高度 | 1 | 8192 | 拒绝保存或加载 | 防止异常尺寸撑大画布 |
| HMI | 页面宽度 | 320 | 1600 | 拒绝保存、加载或编辑 | 当前工具只面向本机 HMI 编辑,限制在可合理查看的桌面页面范围内 |
| HMI | 页面高度 | 200 | 800 | 拒绝保存、加载或编辑 | 当前工具只面向本机 HMI 编辑,限制在可合理查看的桌面页面范围内 |
| HMI | 控件宽度、高度 | 1 | 8192 | 拒绝保存或加载;控件还必须完整放在页面内 | 防止异常尺寸和越界绘制 |
| HMI | 单控件扩展属性 | 0 对 | 64 对 | 第 65 对属性不能加载或保存 | 防止属性对象无限增长 |
| HMI | 字号 | 6 | 72 | 拒绝保存、加载或编辑 | 控制文字可读性和控件布局开销 |
| HMI | 控件属性文本输入长度 | 0 字符 | 12 个字符 | 编辑界面限制继续输入 | 保持 HMI 控件属性文本紧凑,避免编辑和运行显示溢出 |
| 报警 | 报警定义数量 | 0 | 512 | 第 513 条报警不能创建或加载 | 报警每个刷新周期都要判断 |
| 报警 | 报警列表标题输入长度 | 0 字符 | 12 个字符 | 编辑界面限制继续输入 | 标题需要在表头为翻页控件保留空间,显示不下时使用省略号 |
| 报警 | 单条报警文本输入长度 | 1 字符 | 20 个字符 | 编辑界面限制继续输入 | 报警信息按单行显示并在宽度不足时使用省略号 |
@@ -36,7 +38,7 @@
| 单个网络 | 逻辑网格行数 | 1 | 256 | 超出后编辑操作回退,加载失败 | 防止并联支路纵向无限扩展 |
| 横线 | 单段横线跨度 | 1 列 | 10 列 | 拒绝编辑或加载 | 横线只能占用条件区,不能占用输出列 |
| 字符串 | ID、格式版本、页面跳转目标 ID | 0 字节 | 128 个 UTF-8 字节 | 拒绝保存或加载;业务要求非空的 ID 仍必须非空 | ID 只用于稳定识别,不需要长文本 |
| 字符串 | 工程名、页面名、控件文本、报警文本、网络名称 | 0 字节 | 4096 个 UTF-8 字节 | 拒绝保存或加载;业务要求非空的字段仍必须非空 | 防止异常工程数据无限增长;报警编辑界面另使用上方的 12/20 字符输入限制 |
| 字符串 | 工程名、页面名、控件文本、报警文本、网络名称 | 0 字节 | 4096 个 UTF-8 字节 | 拒绝保存或加载;业务要求非空的字段仍必须非空 | 防止异常工程数据无限增长;HMI 控件文本、报警标题和报警文本编辑界面分别使用上方的 12/12/20 字符输入限制 |
| 注释 | 软元件注释 | 1 字节 | 64 个 UTF-8 字节 | 拒绝编辑、保存或加载;禁止回车和换行 | 注释绘制在梯形图节点下方,必须保持紧凑单行 |
| 注释 | 梯形图网络注释 | 0 字节 | 128 个 UTF-8 字节 | 拒绝编辑、保存或加载;禁止回车和换行 | 注释绘制在网络标题下方,换行会挤占梯形图区域 |
| 字符串 | HMI 属性名称 | 1 字节 | 128 个 UTF-8 字节 | 拒绝保存或加载 | 属性名是短标识 |


Cargando…
Cancelar
Guardar