From 4d80ea414734a2689dc630857e879f0665abfdf5 Mon Sep 17 00:00:00 2001 From: suyu <1643689728@qq.com> Date: Mon, 17 Aug 2026 19:19:06 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E5=8E=86=E5=8F=B2=E4=B8=8E=E6=89=B9=E9=87=8F=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/ai/handoff.md | 11 ++++++++++- docs/architecture.md | 8 ++++++-- docs/工程格式说明.md | 6 ++++++ 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/docs/ai/handoff.md b/docs/ai/handoff.md index 93ffa8e..c817541 100644 --- a/docs/ai/handoff.md +++ b/docs/ai/handoff.md @@ -11,7 +11,8 @@ - 画布只选择可见节点,不暴露内部表达式容器;橡皮框或多选连续节点后可直接建立并联支路 - 执行器递归求值并生成节点、表达式、网络轨迹,离线运行时画布显示导通路径和故障位置 - HMI 和梯形图直接配置 M/D 地址,不依赖预先创建的数据点 -- HMI 控件描述注册表统一维护现有 7 种控件的稳定名称、默认值、绑定规则和运行值类型 +- HMI 控件描述注册表统一维护现有 8 种控件的稳定名称、默认值、绑定规则和运行值类型 +- HMI ProgressBar 使用 D 区 Word 值和可配置范围显示百分比,支持越界钳制、JSON 往返和运行态只读展示 - `ActiveRegisterRepository` 在离线虚拟仓库与 PLC 缓存仓库之间切换 - `PlcCommunicationService` 使用 Qt SerialBus 异步连接、轮询和单点写入,UI 不阻塞 - 真机连接收集 HMI、报警定义和梯形图实际引用地址,按 M/D 分区并合并相邻地址读取 @@ -188,6 +189,14 @@ NumericInput、Label、PageJump 和 AlarmList 的工程稳定类型名、界面 M/D 绑定与运行值匹配及未知类型拒绝。10 个自动化测试工程全部重新构建并通过,Qt Release 主工程完成独立构建,`git diff --check` 无空白错误。 +本轮新增 HMI ProgressBar 控件。进度条使用 D 区 Word 绑定,保存最小值、最大值和是否显示百分比, +运行态将读回值钳制到配置范围后绘制水平填充,不接收鼠标写入。属性面板支持范围编辑,JSON +严格要求 `minimumValue`、`maximumValue` 和 `showValue`,领域测试覆盖无效范围、越界映射和 +M/D 绑定边界;主窗口测试覆盖创建、属性编辑、运行绘制和只读交互。 + +此前的 7 种控件已升级为 8 种控件,ProgressBar 的稳定类型名为 `progressBar`,默认范围为 +`0~100`,默认尺寸为 `240x36`。 + 2026-08-17 使用 `COM3 / 9600 / 8E1 / 站号 1` 完成本轮注册表重构后的真机只读复核, 成功读取 `M0~M2 = OFF`、`D0 = 0`,测试结束后正常关闭串口,全程没有执行 PLC 写操作。 diff --git a/docs/architecture.md b/docs/architecture.md index b34f435..c8d7fc6 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -64,10 +64,10 @@ main.cpp -> UI + Services + Infrastructure `Project::validate()` 允许未绑定控件、待配置节点和未完成网络作为编辑草稿保存。`Project::validateForRunning()` 额外拒绝未绑定 HMI、待配置节点、空条件和缺少输出的网络,并检查已启用逻辑中的 T 触点必须有唯一的 TON 驱动。 -HMI 控件公共描述由无 Qt 依赖的 `hmi_control_registry` 模块统一提供。当前 7 种控件的工程稳定类型名、 +HMI 控件公共描述由无 Qt 依赖的 `hmi_control_registry` 模块统一提供。当前 8 种控件的工程稳定类型名、 界面名称、默认 ID 前缀、默认文字、默认尺寸、M/D 绑定规则和运行值类型只在注册表中定义一次。 领域校验、编辑服务、运行服务、JSON 存储和属性面板共同查询该描述;控件绘制、按钮写入、 -PageJump 导航和 AlarmList 展示等专用行为仍留在各自模块,不进入公共描述表。 +PageJump 导航、AlarmList 展示和 ProgressBar 范围计算等专用行为仍留在各自模块,不进入公共描述表。 HMI 按钮操作作为工程 `1.0` 的强类型字段保存,支持 `置 ON`、`置 OFF`、`取反` 和 `瞬时 ON`。新建按钮默认使用瞬时 ON;按钮按下和释放事件由 UI 转交运行服务解释,UI @@ -77,6 +77,10 @@ HMI 按钮操作作为工程 `1.0` 的强类型字段保存,支持 `置 ON`、 `AlarmList` 是不绑定单个寄存器的运行状态投影。项目级 `AlarmDefinition` 只支持 M 位为 ON、D 值大于等于阈值和 D 值小于等于阈值三种条件,不设置提示、警告、故障等级。`AlarmEditorService` 负责定义增删改,`AlarmService` 统一读取活动寄存器仓库并维护当前报警的发生时间和确认状态,所有页面上的 AlarmList 共享这份状态。报警条件恢复后立即删除对应运行记录;运行态没有报警时 AlarmList 隐藏,出现报警时显示并置顶。返回编辑态时清空运行记录,工程 JSON 只保存报警定义。 +`ProgressBar` 绑定 D 区字地址,以 `minimumValue` 和 `maximumValue` 将读回值钳制并映射到 +`0~100%`。进度条配置还保存 `showValue`,最小值必须严格小于最大值;控件只读,不产生 PLC +写请求。运行值读取沿用 `HmiRuntimeService` 的 Word 读取契约,绘制层只接收运行值和领域配置。 + ## 结构化梯形图 网络条件采用递归表达式: diff --git a/docs/工程格式说明.md b/docs/工程格式说明.md index 1674a36..51b6016 100644 --- a/docs/工程格式说明.md +++ b/docs/工程格式说明.md @@ -48,6 +48,7 @@ | `label` | 必须为 `null` | 无 | | `pageJump` | 必须为 `null` | `targetPageId` | | `alarmList` | 必须为 `null` | 无 | +| `progressBar` | D 地址或 `null` 草稿 | `minimumValue`、`maximumValue`、`showValue` | 按钮操作字符串为 `setOn`、`setOff`、`toggle` 或 `momentaryOn`。PageJump 使用目标页面稳定 ID,不使用名称或数组位置: @@ -67,6 +68,11 @@ AlarmList 只负责显示项目级当前报警,不保存独立触发逻辑,也不直接绑定单个寄存器。多个页面放置 AlarmList 时共享同一组当前报警和确认状态。运行态没有报警时控件隐藏;报警恢复后对应记录立即移除,最后一条报警恢复后控件再次隐藏。 +ProgressBar 使用绑定 D 地址的有符号 16 位字值,并将其限制在 `minimumValue` 到 +`maximumValue` 的范围后映射为百分比。`minimumValue` 和 `maximumValue` 必须是有符号 16 位整数, +且最小值严格小于最大值;`showValue` 为布尔值,决定是否在进度条上显示百分比。ProgressBar +是只读控件,不产生 PLC 写请求。 + ## 报警定义 ```json