Bladeren bron

docs: 补充自由监控与运行工作台说明

main
suyu 1 maand geleden
bovenliggende
commit
4c024b79eb
2 gewijzigde bestanden met toevoegingen van 41 en 1 verwijderingen
  1. +12
    -0
      docs/ai/handoff.md
  2. +29
    -1
      docs/architecture.md

+ 12
- 0
docs/ai/handoff.md Bestand weergeven

@@ -17,6 +17,10 @@
- 真机模式要求首次读取完成,不复制离线值,不运行 PC 软件逻辑执行器
- 通信错误停止轮询并保留最后一次有效缓存,状态栏和日志显示错误
- 主窗口静态控件已迁入 `main_window.ui`,PLC 参数由独立配置对话框收集后再发起连接
- 已增加运行监控工作台:离线仿真同时显示 HMI、梯形图轨迹和自由监控,真机运行只显示 HMI 和自由监控
- 自由监控支持 `M0~M4000`、`D0~D4000` 地址输入、连续批量添加、去重、删除、清空和最多 64 项限制
- 自由监控读取活动寄存器仓库,离线使用虚拟 M/D,真机使用 PLC 缓存,通信故障保留并标记最后有效值
- PLC 轮询集合已扩展为 HMI、梯形图和自由监控地址的并集,连接后可动态增删监控地址
- 已在真实 `COM3 / 9600 / 8E1 / 站号 1` 上完成只读联机验证,项目通信服务可完成 M/D 首次读取并进入真机运行前置状态

## 关键决策
@@ -31,6 +35,8 @@
- PLC 读写使用从 `0` 开始的原始 Modbus 地址
- HMI 写请求不乐观修改 PLC 缓存,由下一次轮询确认真实值
- 真机运行时 PLC 内部程序是控制源,软件逻辑执行器保持停止
- 真机运行不显示本地梯形图导通轨迹,避免把本地工程误表示为 PLC 内部程序的真实执行状态
- 自由监控表属于当前调试会话,不进入工程 `1.0` JSON,不重新引入数据点表

## 自动化验证

@@ -44,6 +50,7 @@
- `runtime_mode_service_tests`
- `plc_runtime_tests`
- `main_window_tests`
- `register_monitor_service_tests`

`main_window_tests` 还覆盖 PLC 配置参数往返、独立配置弹窗入口,以及主窗口不再内嵌串口参数控件。

@@ -63,6 +70,11 @@ PLC 连接初始化会连续通知首读重置、正在连接和已连接。旧

本轮梯形图编辑重构还验证了:固定网格渲染、水平/垂直正交布线、工具栏直接建立并联支路,以及连续范围 `A AND ((B AND C) OR D)` 的结构变换和非连续范围拒绝。

本轮自由监控与运行工作台实现还验证了:地址字符串解析和边界、连续范围展开、去重和数量
上限、活动仓库切换、离线工作台三区域同时可见、真机工作台只显示 HMI 与自由监控、离线
监控读取虚拟 M/D,以及真机运行期间新增地址立即进入 PLC 聚合轮询集合。PLC 动态轮询在
读取请求空闲后应用新集合,连接首读完成后不会因新增监控地址而回退。

Qt Release 应用已完成干净构建,并执行了启动与正常退出冒烟验证。`git diff --check` 无空白错误。

## 待完成事项


+ 29
- 1
docs/architecture.md Bestand weergeven

@@ -45,6 +45,7 @@ main.cpp -> UI + Services + Infrastructure
| `register_address.*` | 定义 `M0~M4000`、`D0~D4000` 地址和值域规则 |
| `register_repository.*` | 定义 M/D 统一读写接口和离线内存实现 |
| `active_register_repository.*` | 在虚拟仓库与 PLC 缓存仓库之间切换当前数据源 |
| `register_monitor_model.*` | 保存当前调试会话的自由监控 M/D 地址集合 |
| `hmi_model.*` | 定义页面、控件、布局和寄存器绑定 |
| `control_logic_model.*` | 定义梯形图表达式树、条件节点和输出线圈 |
| `project_model.*` | 聚合 HMI 页面和控制逻辑并执行工程校验 |
@@ -97,6 +98,26 @@ HMI 控件和梯形图节点直接绑定 `M0~M4000`、`D0~D4000` 地址,不要

软元件注释、网络注释和命令语视图不属于当前实现。后续如增加注释,应把地址级软元件注释和网络级说明分开建模,不能重新引入“名称、注释、当前值、引用位置”混合的数据点表。

## 自由监控与运行工作台

自由监控是当前调试会话中的寄存器诊断工具,不属于工程模型,也不写入工程 JSON。用户可输入
`M0~M4000` 或 `D0~D4000`,并按连续个数批量添加地址。监控表最多保留 64 个去重地址,M
值显示为 `ON/OFF`,D 值按带符号 16 位十进制显示。

`RegisterMonitorService` 负责地址解析、范围展开、去重、增删和通过活动寄存器仓库读取值。
`FreeMonitorWidget` 只投影服务结果,不直接访问虚拟仓库、PLC 缓存或串口。监控地址在离线和
真机运行期间均可增删,因为它们属于调试操作而不是工程结构编辑。

主窗口在进入运行模式后自动打开运行监控工作台:

| 模式 | 同时显示 | 统一数据源 |
| --- | --- | --- |
| 离线运行 | HMI、梯形图仿真轨迹、自由监控 | 虚拟 M/D |
| 真机运行 | HMI、自由监控 | PLC 缓存 |

真机模式不显示本地梯形图导通轨迹。当前项目不能读取 PLC 内部程序和网络执行轨迹,本地
梯形图也不保证与 PLC 中的程序一致,因此不得把本地条件推演伪装成 PLC 实际运行状态。

## 寄存器与 Modbus RTU

`HmiRuntimeService` 和运行界面只访问 `RegisterRepository`。`ActiveRegisterRepository` 在两种数据源之间切换:
@@ -104,7 +125,14 @@ HMI 控件和梯形图节点直接绑定 `M0~M4000`、`D0~D4000` 地址,不要
- 离线运行使用 `VirtualRegisterRepository`
- 真机运行使用 `PlcRegisterRepository` 的最近一次有效缓存

`PlcCommunicationService` 使用 `QModbusRtuSerialMaster` 异步连接、读取和写入。连接时从 HMI 和梯形图的实际引用中收集 M/D 地址,去重后按区域合并相邻地址进行轮询。M 使用线圈,D 使用保持寄存器;所有 Modbus 地址均为从 `0` 开始的原始地址。
`PlcCommunicationService` 使用 `QModbusRtuSerialMaster` 异步连接、读取和写入。轮询集合由
HMI 引用、梯形图引用和自由监控地址合并而成,去重后按区域合并相邻地址。M 使用线圈,D
使用保持寄存器;所有 Modbus 地址均为从 `0` 开始的原始地址。

PLC 连接后可以动态增删自由监控地址。存在读取请求时,新的轮询集合在当前响应处理完成后
应用,旧响应仍按发出时的读取块解析。连接级首次读取完成后,动态增加地址不会撤销真机
运行资格;新增地址自身在首次读回前显示“等待读取”。如果连接首次读取尚未完成,新的完整
轮询集合会共同参与首次读取判定。

HMI 写入只表示异步请求已受理,不乐观修改 PLC 缓存,实际值由后续读回确认。超时、协议错误或断线会停止轮询、保留最后一次有效值并进入故障状态,错误通过运行模式服务交给 UI 展示。



Laden…
Annuleren
Opslaan