diff --git a/docs/ai/handoff.md b/docs/ai/handoff.md index 049ee50..c71611d 100644 --- a/docs/ai/handoff.md +++ b/docs/ai/handoff.md @@ -14,6 +14,8 @@ - HMI 控件按类型自动固定绑定区域:按钮/指示灯为 M,数值显示/输入为 D;新增控件自动分配当前区域的顺序地址,属性面板只修改地址编号,状态文本仍在专用对话框选择 M 或 D - HMI 按钮保留置 ON、置 OFF、翻转和点动四种操作,并可附加一个 M 位或 D 数值启用条件;条件不满足或读取失败时按钮置灰且禁止操作 - 按钮启用条件配置使用独立 Qt Designer 对话框;支持 M 地址 + OFF/ON、D 地址 + 四种数据类型 + 六种比较方式 + 比较值 +- 编辑态数据监控与运行态自由监控使用同一套读写行为:未连接 PLC 时读写虚拟 M/D,连接并完成首读后自动读写 PLC 缓存;PLC 首读期间禁止写入,编辑态 PLC 写入不更新离线初始值 +- 普通编程器的运行监控窗口也提供离线/真机模式下拉切换;跨运行模式时自动经过编辑态,真机首读和工程校验失败会保持原运行态 ## 领域与运行链路 @@ -40,13 +42,13 @@ ## 验证结果 -- 13 个 Release Functional 测试目标全部通过:领域、设置、报警、HMI 编辑、逻辑编辑、离线仿真、工程管理、监控、运行包、运行模式、运行面板、PLC 对话框、PLC 运行时 +- 13 个 Release Functional 测试目标全部通过:领域、设置、报警、HMI 编辑、逻辑编辑、离线仿真、工程管理、监控、运行包、运行模式、运行面板、PLC 对话框、PLC 运行时;监控专项新增编辑态 PLC 缓存读写、首读门槛和断开回退测试 - HMI 编辑专项覆盖六种对齐方向、批量对齐单步撤销/重做、非法选择原子性和无变化不产生历史记录 - 状态文本专项覆盖 M OFF/ON 映射、D 四类型区间边界、区间间隙/重叠、整数边界、NaN/Inf、只读约束、16 区间上限、JSON 往返和旧 `2.0` 拒绝 - 按钮专项覆盖 M/D 条件满足与不满足、服务层二次拒绝、点动条件变化后的释放复位、条件 JSON 往返和条件引用地址轮询 - 属性面板专项覆盖按钮/数值控件自动分配连续默认地址,以及手动修改地址编号后保持固定区域 - 运行模式专项覆盖 Double 状态文本的 `D70~D73` 轮询地址及四字 `RegisterWordRange` -- `git diff --check` 已通过;当前尚未连接真实 PLC,本轮功能为只读映射并复用既有缓存/轮询链路,不需要改写设备 +- `git diff --check` 已通过;当前尚未连接真实 PLC,本轮新增编辑态 PLC 监控读写使用 Fake/缓存仓库验证,真实设备读写仍需按 STOP 安全流程现场确认 - Release 主程序已在本轮最终代码上重新构建;设置 Qt offscreen 环境后启动 3 秒仍保持事件循环,验证结束已关闭进程 ## 工作区说明 @@ -56,6 +58,8 @@ ## 后续人工检查 +- 编辑态连接 PLC 并完成首读,打开“数据监控”,确认数据源切换为 PLC 缓存、M/D 值持续刷新且写入后等待轮询确认 +- 编辑态 PLC 正在首读或断开时,确认监控显示对应等待/虚拟状态,写入权限符合提示 - 打开 HMI 页面添加“状态文本”,确认属性面板的专用配置按钮、M/D 切换和区间表布局在常用缩放下无重叠 - 打开 HMI 页面添加按钮,分别配置 M 位和 D 数值启用条件,确认条件不满足时按钮置灰且无法点击,满足后恢复可操作 - 离线运行写入虚拟 M/D,确认 M OFF/ON 和 D 在 30、80 边界的显示结果;停止运行后恢复编辑占位词 diff --git a/docs/architecture.md b/docs/architecture.md index 04dca7c..ce7108e 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -45,6 +45,7 @@ main.cpp -> UI + Services + Infrastructure 运行界面统一投影到独立顶层 `RuntimeMonitorWindow` 中的唯一 `RuntimeMonitorWidget`。该窗口是编程器的工程师运行监控大屏,不是旧的纯 HMI 操作员窗口: - 进入离线或真机运行后,弹出并最大化运行监控窗口;主编程器窗口保留在后面且不改变布局,运行期间由同一份 `ModePolicy` 禁用编辑入口 +- 运行监控窗口顶部始终提供“离线仿真/真机运行”模式选择;从一种运行模式切换到另一种时由 UI 自动经过编辑态,再执行目标模式的完整校验 - 主窗口不保留运行监控页签;编辑态主窗口提供与“HMI 页面”“控制逻辑”并列的“数据监控”编辑页签,运行态显示弹窗中的运行监控投影 - 离线时显示可交互 HMI、软件梯形图轨迹和自由监控;真机时同时显示可交互 HMI、自由监控和根据 PLC 缓存计算的“本地推算轨迹” - HMI 页面跳转、按钮和数值输入都通过同一份 `HmiNavigationService` 和活动寄存器仓库完成;离线写虚拟 M/D,真机写 PLC,仿真停止或通信不可用时禁止写入 @@ -158,7 +159,7 @@ ApplicationSettings(启动后只读) 编辑:UI -> Editor Services -> ProjectService -> Project └── ProjectStorage -> JSON -编辑态数据监控:UI -> RegisterMonitorService -> VirtualRegisterRepository +编辑态数据监控:UI -> RegisterMonitorService -> 虚拟 M/D 或 PLC 缓存 └── 离线初始值 VirtualRegisterRepository(进程内) 离线:运行监控弹窗 -> ActiveRegisterRepository -> VirtualRegisterRepository @@ -176,7 +177,7 @@ PLC <-> PlcCommunicationService <--------------------┘ | 模式 | 允许工程编辑 | 寄存器来源 | 软件逻辑执行器 | 进入条件 | | --- | --- | --- | --- | --- | -| 编辑态 | 是 | 数据监控使用虚拟 M/D 初始值;其他编辑操作不启用运行数据源 | 停止 | 运行态先退出 | +| 编辑态 | 是 | 未连接 PLC 时使用虚拟 M/D;连接并完成首读后数据监控使用 PLC 缓存 | 停止 | 运行态先退出 | | 离线运行 | 否 | 虚拟 M/D | 运行 | 工程通过运行校验 | | 真机运行 | 否 | HMI 使用 PLC 读回缓存;轨迹使用缓存副本 | 本地只读推算 | PLC 已连接并完成本次首读,工程通过运行校验 | @@ -184,7 +185,7 @@ PLC <-> PlcCommunicationService <--------------------┘ 自由监控是会话级诊断工具,不属于 `Project`,不写入 JSON。M 监控点固定为位值,D 监控点可选 `Int16`、`Int32`、`Float32` 或 `Float64`。批量添加的步长等于类型占用字数:Int16 为 1,Int32/Float32 为 2,Float64 为 4;类型列显示完整占用范围。完全重复点拒绝,部分重叠点允许添加但提示。读写统一使用连续字块接口;真机 Int16 使用单字写入,Int32、Float32 和 Float64 使用一次多保持寄存器写入,并继续受连接与首读门槛约束。 -编辑态数据监控写入虚拟 M/D 时,同时更新当前进程内的离线初始值仓库。启动离线仿真时,运行仓库先清空,再复制这份初始值;仿真扫描产生的线圈、MOVE、ADD 和 SUB 结果只写入本轮运行仓库。仿真停止或返回编辑态时丢弃本轮输出并恢复初始值。离线初始值和监控地址均不写入工程 JSON。运行态监控继续复用同一 `RegisterMonitorService`,离线写入虚拟仓库,真机写入 PLC 缓存并等待轮询确认。 +编辑态数据监控未连接 PLC 时写入虚拟 M/D,并同时更新当前进程内的离线初始值;连接 PLC 并完成首读后,读写直接使用 PLC 缓存,写入等待后续轮询确认且不更新离线初始值。PLC 已连接但尚未完成首读时只显示等待状态并禁止写入。启动离线仿真时,运行仓库先清空,再复制离线初始值;仿真扫描产生的线圈、MOVE、ADD 和 SUB 结果只写入本轮运行仓库。仿真停止或返回编辑态时丢弃本轮输出并恢复初始值。离线初始值和监控地址均不写入工程 JSON。运行态监控继续复用同一 `RegisterMonitorService`,离线写入虚拟仓库,真机写入 PLC 缓存并等待轮询确认。 ## Modbus RTU 通信 diff --git a/docs/用户使用/数据监控与离线初始值说明.md b/docs/用户使用/数据监控与离线初始值说明.md index 9f50acf..49aa354 100644 --- a/docs/用户使用/数据监控与离线初始值说明.md +++ b/docs/用户使用/数据监控与离线初始值说明.md @@ -2,7 +2,11 @@ ## 编辑态 -打开主窗口与“HMI 页面”“控制逻辑”并列的“数据监控”编辑页,添加需要观察的 `M` 或 `D` 地址。编辑态写入的 M/D 不会写入 PLC;它们会同时保存为当前进程内的离线仿真初始值。 +打开主窗口与“HMI 页面”“控制逻辑”并列的“数据监控”编辑页,添加需要观察的 `M` 或 `D` 地址。数据监控的操作方式与运行态自由监控一致:未连接 PLC 时使用虚拟 M/D,连接 PLC 并完成首次读取后自动切换为 PLC 缓存,读取和写入都直接作用于当前数据源。 + +编辑态连接 PLC 后,监控表会显示 PLC 实时读回的数据。PLC 已连接但尚未完成首次读取时显示“正在首读”,暂不允许写入;断开或通信故障后回到虚拟 M/D。编辑态对 PLC 的写入不会修改离线初始值。 + +进入运行态后,可在运行监控窗口顶部的模式下拉框切换“离线仿真”和“真机运行”。切换过程会自动经过编辑态;切换到真机前仍必须连接 PLC 并完成首次读取。 M 地址只按 ON/OFF 位值监控。D 地址可选择四种类型: