综合平台编程器项目的远程存储
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 

4.9 KiB

综合平台编程器架构

目标

项目采用 UI、领域、服务和基础设施分层。HMI 编辑、离线仿真和真机联机使用同一套领域模型,UI 不直接依赖串口或 Modbus 实现。

目录职责

app/
├── integrated_platform.pro     qmake 工程入口
├── src/
│   ├── main.cpp                应用组合入口
│   ├── ui/                     Qt Designer 界面、视图和交互协调
│   ├── domain/                 工程、HMI、逻辑、M/D 地址等纯业务模型
│   ├── services/               用例编排、运行模式和仿真服务
│   └── infrastructure/         工程文件、Modbus RTU 等外部实现
└── tests/                      单元测试与集成测试工程

依赖方向

生产代码必须保持单向依赖:

UI -> Services -> Domain
Infrastructure -> Domain
main.cpp -> UI + Services + Infrastructure
  • domain 不依赖 UI、串口、文件系统或具体 PLC 库。
  • services 只通过领域定义的接口使用寄存器、工程存储等能力。
  • infrastructure 实现外部能力,例如 JSON 工程文件和 Qt Modbus RTU。
  • ui 只调用服务并展示状态;MainWindow 只组织界面,不实现业务规则、寄存器读写或通信流程。
  • main.cpp 负责创建对象并注入依赖,不承载业务逻辑。

核心数据流

用户操作 HMI
    -> UI 发起服务请求
    -> 服务校验并更新领域模型或寄存器接口
    -> 仿真服务 / 真机 Modbus 实现执行
    -> 服务发布状态变化
    -> UI 刷新控件和状态栏

离线模式由服务连接虚拟 M/D 寄存器与软件逻辑执行器;真机模式由服务连接 PLC 寄存器缓存与 Modbus RTU 服务。两种模式共用 HMI 绑定模型,且软件逻辑执行器不得在真机模式运行。

核心领域模型

领域模型位于 app/src/domain/,只使用 C++17 标准库,不包含 Qt 界面、串口或 Modbus
类型:

文件 职责
register_address.* 定义 M/D 地址值对象,统一校验项目地址范围 0~4000
register_repository.* 定义 M 位和 D 字的统一读写接口,并提供离线内存实现。
hmi_model.* 定义 HMI 页面、控件、位置、扩展属性和寄存器绑定。
control_logic_model.* 使用独立配置类型定义触点、线圈和数值比较节点,并校验地址区域与连接引用。
project_model.* 聚合工程元数据、HMI 页面和控制逻辑,并校验工程内标识唯一性。
runtime_state.* 定义编辑态、离线运行态、真机运行态及合法切换规则。

RegisterRepository 是 HMI、逻辑执行器和运行服务唯一可见的寄存器边界。离线运行使用
VirtualRegisterRepository;真机运行后续注入由基础设施层实现的 PLC 缓存仓库。仓库读取的是
最近一次有效值,写入成功只表示请求被仓库接受;真实 PLC 的异步确认由服务层负责反馈。

控制逻辑节点使用 std::variant 组合独立配置类型。初版只包含 M 区触点、M 区线圈和 D 值与
常量比较。新增节点时应增加独立配置类型及其校验和执行处理,不得向通用 LogicNode 持续
添加只对单一节点有效的可选字段。定时器不是当前原始需求范围,不提前建立模型或执行逻辑。

运行模式边界

模式 允许编辑工程 寄存器来源 软件逻辑执行器 进入约束
编辑态 无运行仓库 停止 运行态必须先回到编辑态。
离线运行态 虚拟 M/D 运行 仅可从编辑态进入。
真机运行态 PLC 读回缓存 停止 仅可从编辑态进入,且必须先完成 PLC 初次读取。

离线运行态与真机运行态不得直接互切。进入真机运行态时不复制或写入离线仓库值,避免误写
PLC;退出任一运行态后才能重新编辑工程。

测试边界

测试按业务风险和模块边界安排,不要求为每个简单访问器或转发函数单独编写测试:

优先级 测试对象 重点验证内容
domain 地址边界、M/D 类型约束、模型校验、工程唯一性和运行模式切换
services HMI、寄存器仓库和逻辑执行器之间的离线闭环
工程存储 保存加载往返、版本字段、缺失字段和非法文件
infrastructure Modbus 帧解析、超时、CRC、断线和错误反馈
ui 新建工程、编辑、运行切换和错误提示等关键工作流
冒烟 真机联调 少量安全地址的读写和 RUN 联动验证

domainservices 的自动化测试不依赖 Qt 界面或真实 PLC。基础设施优先使用模拟串口
和测试文件,真机测试只覆盖无法在模拟环境确认的通信和联动行为。