瀏覽代碼

docs: 更新独立HMI运行架构说明

main
suyu 1 月之前
父節點
當前提交
0914a3ccfb
共有 2 個文件被更改,包括 28 次插入17 次删除
  1. +14
    -10
      docs/ai/handoff.md
  2. +14
    -7
      docs/architecture.md

+ 14
- 10
docs/ai/handoff.md 查看文件

@@ -5,8 +5,8 @@
## 当前状态

- 分支:`main`
- 核心软件闭环已经可用:HMI 编辑、结构化梯形图、离线仿真、工程 JSON、自由监控和 Modbus RTU 真机读写均已实现
- 当前工作区有未提交改动,主要是全项目数量边界、梯形图最大 11 列、无条件输出语义及配套测试和文档;开始工作前先看 `git status` 和相关 diff,不要重置
- 核心软件闭环已经可用:HMI 编辑、结构化梯形图、离线仿真、工程 JSON、独立 HMI 运行窗口、自由监控和 Modbus RTU 真机读写均已实现
- 当前工作区有未提交改动:批量删除并联支路的结构清理修复、独立 HMI 运行窗口、相关 UI 回归测试和本交接更新;开始工作前先看 `git status` 和相关 diff,不要重置
- `docs/二次开发/` 是已有未跟踪资料,不能因当前任务删除
- 当前没有代码阻塞;下一里程碑是实际设备 RUN 联动和交付整理

@@ -22,24 +22,28 @@
- 自由监控属于当前会话,支持 M/D 批量添加、去重、读取和单点写入,不写入工程 JSON
- PLC 通信使用异步 Qt Modbus RTU;轮询地址来自 HMI、报警、梯形图和自由监控的引用并集,写入后等待轮询确认,不乐观修改缓存
- 真机进入要求当前连接完成首次读取;通信故障撤销首读资格并退出真机运行,恢复通信后仍停留在编辑态
- 进入离线或真机运行后会打开最大化的独立 HMI 窗口,主窗口保留工程师诊断工作台;两个视图共享运行页面和寄存器数据源,关闭独立窗口会统一返回编辑态
- 所有数量上限和超限处理见 `docs/用户使用/数量边界确认方案.md`,核心常量集中在 `app/src/domain/project_limits.h`

## 当前未提交改动

- 对页面、控件、报警、逻辑、表达式、字符串、JSON、通信参数、轮询规模、日志和撤销历史补齐统一数量限制
- 单网络条件区从原 256 列收紧为 10 列,输出最多占第 11 列,横线跨度最多 10 列,表达式深度最多 20 层
- 编辑服务在第 11 个条件加入时原子回退;JSON 加载和领域校验不能绕过边界
- 无条件输出已经贯通领域校验、编辑服务、JSON 往返、离线执行器、轨迹和画布提示
- `AGENTS.md`、本 handoff 和 `docs/architecture.md` 已按长期规则、动态状态和稳定架构重新分工精简
- 条件表达式归一化会递归移除空的 `Series / Parallel` 容器,避免批量删除整条并联行后残留空支路
- `LogicEditorService::removeNodes()` 删除并归一化后重新校验网络,结构非法时恢复编辑前状态
- 服务测试覆盖批量删除并联支路全部触点、结构归一化和撤销恢复;UI 测试覆盖画布整行多选删除及竖线连接清理
- 新增 `HmiRuntimeWindow`,复用运行态 HMI 画布,窗口生命周期和页面跳转由 `RuntimePanelController` 编排,不改变运行模式、PLC 通信或离线执行器
- 每个新的运行会话都会强制重建独立 HMI 当前页面,避免页面 ID 不变时遗漏编辑态新增控件

## 最近验证

- 当前数量边界和无条件输出改动已通过:`domain_tests`、`logic_editor_service_tests`、`offline_simulation_service_tests`、`project_management_tests`、`main_window_tests`
- 批量删除并联支路回归已通过专项探针、`logic_editor_service_tests` 和 `main_window_tests`;逐个删除、删除完整支路和部分批量删除均保持有效
- 修复后全量测试目标均通过:`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`
- Qt Release 主程序已重新构建并链接成功
- `git diff --check` 通过;`runtime_mode_service_tests.cpp` 仅有既存 CRLF 转 LF 提示
- `git diff --check` 通过
- 真实 PLC 已使用 `COM3 / 9600 / 8E1 / 站号 1` 验证首次读取、断线恢复和重新首读
- 2026-08-19 已读取 `D4000=0`,写入并读回 `1`,随后恢复并读回 `0`;没有下载 PLC 程序
- 当前无条件输出改动只影响领域校验和离线执行器,真机模式不执行该逻辑,因此没有为此重复写 PLC
- 本次修复只影响梯形图编辑结构归一化和删除校验,不涉及 PLC 通信或真机运行,因此没有重复写 PLC
- 独立 HMI 窗口改动已通过 `main_window_tests`(显示、关闭退出、页面同步,以及退出编辑后新增控件再次运行的页面刷新)及 `runtime_mode_service_tests`,Qt Release 主程序重新构建通过
- 本次独立窗口改动没有改变 PLC 通信协议或寄存器写入逻辑,因此未做额外真机读写

## 待完成



+ 14
- 7
docs/architecture.md 查看文件

@@ -37,9 +37,16 @@ main.cpp -> UI + Services + Infrastructure
| --- | --- |
| `ProjectWorkspaceController` | 工程树、当前页面/逻辑会话选择和编辑对象刷新 |
| `PropertyPanelController` | HMI/梯形图选择、属性表单和编辑服务调用 |
| `RuntimePanelController` | 运行工作台、运行值刷新、仿真轨迹和故障反馈 |
| `RuntimePanelController` | 运行会话、操作员 HMI 窗口、诊断工作台、运行值刷新和仿真故障反馈 |
| `HmiRuntimeWindow` | 独立顶层操作窗口,只投影 HMI 页面并转发运行时交互和退出请求 |
| `MainWindow` | 窗口级动作、工程文件操作、控制器组合和模式切换 |

运行界面按使用角色分为两个投影,二者共享同一份 `HmiNavigationService` 和活动寄存器仓库,不能各自维护页面或运行状态:

- `HmiRuntimeWindow` 是操作员窗口。进入离线或真机运行后最大化显示,只包含 HMI 页面、当前页面、运行数据源状态和退出运行入口;不显示工程树、属性、梯形图编辑或 PLC 配置
- 主窗口中的 `RuntimeMonitorWidget` 是工程师诊断工作台。离线时显示只读 HMI、软件梯形图轨迹和自由监控;真机时显示只读 HMI 和自由监控,不能显示本地梯形图伪轨迹。页面跳转会同步到操作员窗口,但按钮和数值输入不能从诊断 HMI 写入
- 关闭独立 HMI 窗口不是单纯隐藏窗口,而是请求 `MainWindow -> RuntimeModeService` 返回编辑态。离线时先停止软件扫描,真机时保留 PLC 连接但撤销运行会话

## 工程模型与持久化

```text
@@ -104,13 +111,13 @@ ConditionExpression
编辑:UI -> Editor Services -> ProjectService -> Project
└── ProjectStorage -> JSON

离线:Runtime UI -> ActiveRegisterRepository -> VirtualRegisterRepository
^
OfflineSimulationService(SoftwareLogicExecutor)
离线:HMI 运行窗口 / 诊断工作台 -> ActiveRegisterRepository -> VirtualRegisterRepository
^
OfflineSimulationService(SoftwareLogicExecutor)

真机:Runtime UI -> ActiveRegisterRepository -> PlcRegisterRepository(cache)
^
PLC <-> PlcCommunicationService <------------------┘
真机:HMI 运行窗口 / 诊断工作台 -> ActiveRegisterRepository -> PlcRegisterRepository(cache)
^
PLC <-> PlcCommunicationService <---------------------------------
```

| 模式 | 允许工程编辑 | 寄存器来源 | 软件逻辑执行器 | 进入条件 |


Loading…
取消
儲存