|
|
@@ -13,7 +13,7 @@ app/ |
|
|
├── integrated_platform.pro qmake 工程入口 |
|
|
├── integrated_platform.pro qmake 工程入口 |
|
|
├── src/ |
|
|
├── src/ |
|
|
│ ├── main.cpp 对象创建与依赖注入 |
|
|
│ ├── main.cpp 对象创建与依赖注入 |
|
|
│ ├── ui/ Qt Widgets 视图和交互协调 |
|
|
|
|
|
|
|
|
│ ├── ui/ Qt Widgets 视图和界面控制器 |
|
|
│ ├── domain/ 工程、HMI、梯形图和寄存器模型 |
|
|
│ ├── domain/ 工程、HMI、梯形图和寄存器模型 |
|
|
│ ├── services/ 编辑、仿真、运行模式和通信契约 |
|
|
│ ├── services/ 编辑、仿真、运行模式和通信契约 |
|
|
│ └── infrastructure/ JSON、PLC 缓存和 Qt Modbus RTU 实现 |
|
|
│ └── infrastructure/ JSON、PLC 缓存和 Qt Modbus RTU 实现 |
|
|
@@ -35,8 +35,13 @@ main.cpp -> UI + Services + Infrastructure |
|
|
- `main.cpp` 负责组合依赖,不承载业务规则 |
|
|
- `main.cpp` 负责组合依赖,不承载业务规则 |
|
|
|
|
|
|
|
|
主窗口的菜单、工具栏和属性表单由 Qt Designer 的 |
|
|
主窗口的菜单、工具栏和属性表单由 Qt Designer 的 |
|
|
`main_window.ui` 定义。C++ 仅创建 HMI/梯形图自定义画布、填充运行时数据并连接服务层信号。 |
|
|
|
|
|
真实 PLC 的串口与轮询参数由独立的 `PlcConnectionDialog` 收集,主窗口只保留配置连接和断开入口。 |
|
|
|
|
|
|
|
|
`main_window.ui` 定义。界面交互按职责由三个 UI 控制器协调: |
|
|
|
|
|
|
|
|
|
|
|
- `ProjectWorkspaceController` 负责工程树、页面/逻辑会话选择和工程对象刷新 |
|
|
|
|
|
- `PropertyPanelController` 负责 HMI/梯形图选择状态、属性面板和编辑器信号 |
|
|
|
|
|
- `RuntimePanelController` 负责运行监控工作台、运行值刷新和离线执行器反馈 |
|
|
|
|
|
|
|
|
|
|
|
`MainWindow` 负责组合这些控制器、处理窗口级菜单和跨区域模式切换,不重复实现工程校验或寄存器业务规则。真实 PLC 的串口与轮询参数由独立的 `PlcConnectionDialog` 收集。 |
|
|
|
|
|
|
|
|
## 核心领域模型 |
|
|
## 核心领域模型 |
|
|
|
|
|
|
|
|
@@ -48,16 +53,22 @@ main.cpp -> UI + Services + Infrastructure |
|
|
| `register_monitor_model.*` | 保存当前调试会话的自由监控 M/D 地址集合 | |
|
|
| `register_monitor_model.*` | 保存当前调试会话的自由监控 M/D 地址集合 | |
|
|
| `alarm_model.*` | 定义项目级 M ON、D 高限和 D 低限报警条件 | |
|
|
| `alarm_model.*` | 定义项目级 M ON、D 高限和 D 低限报警条件 | |
|
|
| `hmi_model.*` | 定义页面、控件、布局和寄存器绑定 | |
|
|
| `hmi_model.*` | 定义页面、控件、布局和寄存器绑定 | |
|
|
|
|
|
| `hmi_control_registry.*` | 集中描述 HMI 控件的稳定名称、默认值、绑定规则和运行值类型 | |
|
|
| `control_logic_model.*` | 定义梯形图表达式树、边沿/触点/比较/TON 节点和输出线圈 | |
|
|
| `control_logic_model.*` | 定义梯形图表达式树、边沿/触点/比较/TON 节点和输出线圈 | |
|
|
| `project_model.*` | 聚合 HMI 页面、报警定义和控制逻辑并执行工程校验 | |
|
|
| `project_model.*` | 聚合 HMI 页面、报警定义和控制逻辑并执行工程校验 | |
|
|
| `runtime_state.*` | 定义编辑、离线运行和真机运行状态机 | |
|
|
| `runtime_state.*` | 定义编辑、离线运行和真机运行状态机 | |
|
|
|
|
|
|
|
|
工程文件格式保持 `1.0`。当前 `1.0` 直接保存有序 `hmiPages`、`initialHmiPageId`、有序 `alarmDefinitions`、工程级 `registerComments`、有序 `controlLogics` 和梯形图表达式树,不读取其他结构,也不包含迁移和兼容代码。加载必须先完成 JSON 解析、版本检查和领域校验,成功后才能替换当前工程;保存使用原子提交。完整字段定义见 `docs/工程格式说明.md`。 |
|
|
工程文件格式保持 `1.0`。当前 `1.0` 直接保存有序 `hmiPages`、`initialHmiPageId`、有序 `alarmDefinitions`、工程级 `registerComments`、有序 `controlLogics` 和梯形图表达式树,不读取其他结构,也不包含迁移和兼容代码。加载必须先完成 JSON 解析、版本检查和领域校验,成功后才能替换当前工程;保存使用原子提交。完整字段定义见 `docs/工程格式说明.md`。 |
|
|
|
|
|
|
|
|
`HmiPage.id` 和 `ControlLogic.id` 是稳定内部标识,名称可修改,数组顺序分别决定工程树页面顺序和离线逻辑扫描顺序。`MainWindow` 保存 `current_hmi_page_id_` 与 `current_logic_id_` 作为编辑会话选择,它们不进入 JSON。`Project.initialHmiPageId` 是运行态每次启动 HMI 时使用的持久化初始页,与编辑器当前正在查看的页面相互独立。 |
|
|
|
|
|
|
|
|
`HmiPage.id` 和 `ControlLogic.id` 是稳定内部标识,名称可修改,数组顺序分别决定工程树页面顺序和离线逻辑扫描顺序。`MainWindow` 保存 `current_hmi_page_id_` 与 `current_logic_id_` 作为编辑会话选择,`ProjectWorkspaceController` 负责将它们同步到工程树和编辑画布,它们不进入 JSON。`Project.initialHmiPageId` 是运行态每次启动 HMI 时使用的持久化初始页,与编辑器当前正在查看的页面相互独立。 |
|
|
|
|
|
|
|
|
`Project::validate()` 允许未绑定控件、待配置节点和未完成网络作为编辑草稿保存。`Project::validateForRunning()` 额外拒绝未绑定 HMI、待配置节点、空条件和缺少输出的网络,并检查已启用逻辑中的 T 触点必须有唯一的 TON 驱动。 |
|
|
`Project::validate()` 允许未绑定控件、待配置节点和未完成网络作为编辑草稿保存。`Project::validateForRunning()` 额外拒绝未绑定 HMI、待配置节点、空条件和缺少输出的网络,并检查已启用逻辑中的 T 触点必须有唯一的 TON 驱动。 |
|
|
|
|
|
|
|
|
|
|
|
HMI 控件公共描述由无 Qt 依赖的 `hmi_control_registry` 模块统一提供。当前 7 种控件的工程稳定类型名、 |
|
|
|
|
|
界面名称、默认 ID 前缀、默认文字、默认尺寸、M/D 绑定规则和运行值类型只在注册表中定义一次。 |
|
|
|
|
|
领域校验、编辑服务、运行服务、JSON 存储和属性面板共同查询该描述;控件绘制、按钮写入、 |
|
|
|
|
|
PageJump 导航和 AlarmList 展示等专用行为仍留在各自模块,不进入公共描述表。 |
|
|
|
|
|
|
|
|
HMI 按钮操作作为工程 `1.0` 的强类型字段保存,支持 `置 ON`、`置 OFF`、`取反` 和 |
|
|
HMI 按钮操作作为工程 `1.0` 的强类型字段保存,支持 `置 ON`、`置 OFF`、`取反` 和 |
|
|
`瞬时 ON`。新建按钮默认使用瞬时 ON;按钮按下和释放事件由 UI 转交运行服务解释,UI |
|
|
`瞬时 ON`。新建按钮默认使用瞬时 ON;按钮按下和释放事件由 UI 转交运行服务解释,UI |
|
|
不直接决定写入值。当前版本不迁移缺少按钮操作字段的旧工程文件。 |
|
|
不直接决定写入值。当前版本不迁移缺少按钮操作字段的旧工程文件。 |
|
|
|