From cf69b9c5dbbb14f42b1b23b39a400b81fd92cdef Mon Sep 17 00:00:00 2001 From: suyu <1643689728@qq.com> Date: Wed, 12 Aug 2026 12:28:35 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=A7=BB=E9=99=A4=20HMI=20=E7=94=BB?= =?UTF-8?q?=E5=B8=83=E6=9C=AA=E7=BB=91=E5=AE=9A=E7=8A=B6=E6=80=81=E5=8F=A0?= =?UTF-8?q?=E5=8A=A0=E6=96=87=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/ui/hmi_editor_widget.cpp | 8 -------- docs/ai/handoff.md | 10 +++++++++- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/ui/hmi_editor_widget.cpp b/app/src/ui/hmi_editor_widget.cpp index 8e0e244..6439758 100644 --- a/app/src/ui/hmi_editor_widget.cpp +++ b/app/src/ui/hmi_editor_widget.cpp @@ -138,14 +138,6 @@ public: painter->setPen(QPen(QColor(QStringLiteral("#1677a8")), 2)); painter->drawRect(boundingRect().adjusted(0, 0, -1, -1)); } - if (!control_.isConfigured()) - { - painter->setPen(QColor(QStringLiteral("#b54708"))); - painter->drawText( - rect.adjusted(2, rect.height() - 15, -2, 0), - Qt::AlignCenter, - QStringLiteral("未绑定")); - } } // 向场景和外部控件返回该图元对应的领域控件标识 diff --git a/docs/ai/handoff.md b/docs/ai/handoff.md index 0c3afc7..f84a08a 100644 --- a/docs/ai/handoff.md +++ b/docs/ai/handoff.md @@ -58,6 +58,7 @@ - `app/src/ui/logic_editor_widget.cpp` - `app/tests/logic_editor_service_tests.pro` - `app/tests/logic_editor_service_tests.cpp` + - `app/tests/runtime_mode_service_tests.pro` - Decisions made: - Qt 应用源码位于 `app/`,构建输出位于被忽略的 `build/`。 - 使用 qmake、Qt Widgets、Qt SerialBus 和 MinGW 8.1。 @@ -82,7 +83,7 @@ - 当前尚未接入 PLC 通信,真机运行入口会按领域规则提示先连接并完成首次读取。 - 项目代码不使用自定义命名空间,分层由目录、接口和依赖方向表达。 - `HmiEditorService` 负责页面控件的添加、删除、移动和属性修改,画布项只保存控件标识。 - - 控件拖动必须限制在页面内,控件标识在页面内唯一,保存前校验必需 M/D 绑定。 + - 控件拖动必须限制在页面内,控件标识在页面内唯一;未绑定控件可作为草稿保存,但不得进入离线运行。 - 新增控件先以未绑定状态进入编辑器,避免自动分配地址造成误绑定。 - 离线运行的按钮采用点击切换 M 位语义,数值输入写入一个带符号 16 位 D 字。 - `HmiRuntimeService` 仅通过 `RegisterRepository` 访问寄存器,不依赖虚拟寄存器、串口或 Modbus。 @@ -91,6 +92,12 @@ - `LogicEditorService` 负责网络、串联条件、并联条件、输出线圈、属性和删除操作。 - `LogicEditorWidget` 自动布局母线、支路和节点,不允许自由拖动或手动画线,不保存节点坐标。 - 控制逻辑编辑器不访问 HMI、寄存器仓库或 PLC,工程格式版本保持 `1.0`。 + - 新增 HMI 控件立即进入工程内存但默认未绑定,属性区明确显示“未绑定”,不再以 `M0/D0` 伪装默认绑定。 + - 新增梯形图节点立即进入工程内存,但 `configured=false`;画布显示 `< M 地址 >`、`< D 地址 >` 或 `< 常量 >`,点击应用逻辑属性后才成为已配置节点。 + - `Project::validate()` 是草稿保存和加载校验,允许未绑定 HMI、待配置节点及未完成网络;`Project::validateForRunning()` 额外校验可运行完整性。 + - `RuntimeModeService` 依赖 `ProjectService` 的只读工程,在进入离线运行态前执行完整性校验,拒绝未配置或未完成的工程。 + - JSON 节点新增 `configured` 字段;缺失字段的旧版 `1.0` 工程按历史逻辑视为已配置,保持兼容读取。 + - 梯形图 UI 已按 LAD 可读性优化:普通线圈采用标准 `( )` 形状,导线连接元件端子而不穿透符号,比较条件显示为带数据类型和上下操作数的指令块。 - Validation run and results: - 在 `build/baseline/` 执行 qmake 与 `mingw32-make -j2`,构建成功。 - 已启动 `integrated_platform.exe` 并正常退出。 @@ -115,6 +122,7 @@ - Debug 应用构建成功。 - 启动 Debug 应用确认主窗口创建成功,窗口标题为“综合平台编程器”。 - 梯形图结构重构后,领域、逻辑编辑服务、工程管理和主窗口测试重新构建并全部通过。 + - 待配置节点改造后,Release 应用构建成功;领域、工程管理、逻辑编辑服务、运行模式和主窗口测试全部通过。 - Remaining work: 进入开发顺序第 8 步,实现离线软件逻辑执行器和 HMI 闭环。 - Known risks / blockers: 无。 - Suggested next command: 为控制逻辑建立固定周期的软件执行器,按网络顺序执行并计算级间 AND 与级内 OR。