121 lines
6.2 KiB
Markdown
121 lines
6.2 KiB
Markdown
# 整体架构
|
||
|
||
## 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` |
|