# 整体架构 ## 1. 设计目标 SoftBus OPC 将工业现场总线数据通过统一对象模型暴露为 OPC UA 地址空间,实现: - **南向**:边缘代理采集原始总线帧,经协议插件解析为语义消息 - **北向**:OPC UA 客户端读写 Variable、调用 Method 下发控制命令 - **中间层**:守护进程编排 Pipeline,保持模型与传输协议中立 ## 2. 分层依赖 ``` L3 可执行层 softbus_daemon ─────────────────────────────┐ softbus_edge │ │ L2 服务/协议层 │ softbus_opcua · softbus_transport │ plugins/protocol_modbus · protocol_canopen │ │ L1 契约层 │ softbus_api (ExecuteCommand) │ │ L0 内核层 │ softbus_core ◄──────────────────────────────┘ ``` ### 2.1 链接依赖表 | 模块 | 类型 | 直接依赖 | |------|------|----------| | `softbus_core` | STATIC | nlohmann_json, Threads | | `softbus_api` | STATIC | softbus_core | | `softbus_transport` | STATIC | softbus_core, softbus_api, asio | | `softbus_opcua` | STATIC | softbus_core, softbus_api, open62541 | | `protocol_modbus` | SHARED | softbus_core | | `protocol_canopen` | SHARED | softbus_core | | `softbus_edge` | EXECUTABLE | core, transport, api, asio | | `softbus_daemon` | EXECUTABLE | core, transport, api, opcu, asio, dbus(可选) | ## 3. 模块职责 | 分区 | 路径 | 职责 | |------|------|------| | **softbus_core** | `src/softbus_core` | 数据模型、身份标识、配置加载、插件 ABI、日志 | | **softbus_api** | `src/softbus_api` | 跨模块控制面契约(ExecuteCommand) | | **softbus_transport** | `src/softbus_transport` | 边缘↔守护进程 TCP 传输与 UplinkWire 编解码 | | **softbus_opcua** | `src/softbus_opcua` | open62541 封装:地址空间、模型绑定、方法、事件 | | **softbus_edge** | `src/softbus_edge` | 边缘代理:ingress 采集、上行发送、命令接收 | | **softbus_daemon** | `src/softbus_daemon` | 编排中心:uplink 监听、Pipeline、OPC UA 服务 | | **plugins** | `src/plugins` | 协议分帧/解析动态库(Modbus、CANopen) | ## 4. 运行时拓扑 ``` ┌──────────────────────────────────┐ │ softbus_daemon │ │ ┌─────────┐ ┌─────────────┐ │ OPC UA Client ───►│ │UaServer │◄───│UaModelBinder│ │ opc.tcp://:4840 │ │ Engine │ └──────▲──────┘ │ │ └────┬────┘ │ │ │ │ ExecuteCommand │ │ │ ┌────▼────┐ ┌──────┴──────┐ │ │ │UaMethod │ │ Pipeline │ │ │ │ Binder │ │ Engine │ │ │ └────┬────┘ └──────▲──────┘ │ │ │ ┌──────┴──────┐ │ │ ┌────▼────┐ │protocol_ │ │ │ │Command │ │modbus.so │ │ │ │Dispatch │ └─────────────┘ │ │ └────┬────┘ │ │ ┌────▼────────────┐ │ │ │TcpUplinkServer │ :9000 │ │ └────┬────────────┘ │ └───────┼──────────────────────────┘ │ TCP JSON (UplinkWire) ┌───────▼────────────┐ │ softbus_edge │ │ MockModbusIngress │ │ UplinkClient │ └────────────────────┘ ``` ## 5. 对象模型五层结构 对象寻址路径格式:`Site/System/Asset/Device/Point` ``` DemoSite └── DemoSystem └── DemoAsset └── SimModbusDevice └── Temperature ← OPC UA Variable (Double) ``` 定义来源:`config/softbus_model.json`,由 `ObjectModelTree` 加载,驱动 OPC UA 地址空间动态构建。 ## 6. 约束原则 各模块须遵守以下全局约束(详见各分区文档 CONSTRAINTS 节): 1. **传输中立**:`softbus_core` 模型字段不得编码 D-Bus、HTTP、OPC UA 特定语义 2. **单向依赖**:上层可依赖下层,下层不得反向引用 daemon/edge/opcua 3. **插件 ABI 稳定**:通过 C ABI 导出 `create_framer` / `create_parser`,避免破坏已有插件 4. **traceId 贯穿**:上行 RawPacket 至 DOMMessage 至 OPC UA 写值,全程携带 `traceId` 便于追踪 5. **Phase 标注**:未实现功能以 stub 标注,文档与代码同步标明 Phase 范围 ## 7. 构建目标速查 | Target | 类型 | 输出路径 | |--------|------|----------| | `softbus_core` | STATIC | `build/lib/libsoftbus_core.a` | | `softbus_api` | STATIC | `build/lib/libsoftbus_api.a` | | `softbus_transport` | STATIC | `build/lib/libsoftbus_transport.a` | | `softbus_opcua` | STATIC | `build/lib/libsoftbus_opcua.a` | | `protocol_modbus` | SHARED | `build/lib/libprotocol_modbus.so` | | `protocol_canopen` | SHARED | `build/lib/libprotocol_canopen.so` | | `softbus_edge` | EXECUTABLE | `build/bin/softbus_edge` | | `softbus_daemon` | EXECUTABLE | `build/bin/softbus_daemon` |