Files
softbus_OPC/docs/softbus_daemon.md

194 lines
5.5 KiB
Markdown
Raw Permalink Normal View History

2026-06-09 17:27:24 +08:00
# softbus_daemon
**路径:** `src/softbus_daemon`
**构建目标:** `softbus_daemon`EXECUTABLE
**层级:** L3 可执行层
## 1. 概述
`softbus_daemon` 是核心守护进程Orchestrator串联 uplink 监听、Pipeline 处理、OPC UA 服务、插件加载与命令分发,是整个系统的运行时中枢。
## 2. CONSTRAINTS
- `CoreService` 是唯一编排入口,负责按序启动/停止所有子系统。
- Pipeline 不得绕过插件接口直接解析协议字节。
- 命令分发须经 `CommandDispatcher` 校验后转发,不得直接操作 TCP 连接。
- 插件加载路径解析由 `CoreService::resolvePluginPath()` 统一处理。
- Phase 1 仅加载 modbus 插件canopen 插件已编译但未接入。
## 3. 组件架构
```
CoreService (编排中心)
├── ObjectModelRegistry ← 对象模型加载
├── PluginLoader (modbus) ← 协议插件
├── UaServerEngine ← OPC UA 服务
├── UaAddressSpaceBuilder ← 地址空间构建
├── UaModelBinder ← 模型绑定
├── UaMethodBinder ← 方法绑定
├── UaEventBridge ← 事件桥接stub
├── PipelineEngine ← 数据处理管道
├── TcpUplinkServer ← 上行监听
└── CommandDispatcher ← 命令分发
```
## 4. CoreService
### 4.1 启动序列
`CoreService::start(profilePath, modelPath)` 按以下顺序初始化:
| 步骤 | 操作 | 失败行为 |
|------|------|----------|
| 1 | `ProfileLoader::loadFromFile(profilePath)` | 返回 false |
| 2 | `ObjectModelRegistry::loadFromFile(modelPath)` | 返回 false |
| 3 | `PluginLoader::load(modbusPluginPath)` | 返回 false |
| 4 | `UaServerEngine::start(port, appName, security)` | 返回 false |
| 5 | 创建 `UaModelBinder``UaMethodBinder``UaEventBridge` | — |
| 6 | `UaAddressSpaceBuilder::buildFromModel(model, binder)` | 返回 false |
| 7 | 创建 `PipelineEngine(plugin, binder)` | — |
| 8 | 创建 `TcpUplinkServer` 并注册 `rawHandler` | — |
| 9 | 创建 `CommandDispatcher` 并绑定 Method 回调 | — |
| 10 | `uplink_->start()` + 启动 io_context 线程 | — |
### 4.2 回调绑定
```cpp
// 上行RawPacket → Pipeline
uplink_->setRawPacketHandler([this](const RawPacket& packet) {
pipeline_->process(packet);
});
// 下行OPC UA Method → CommandDispatcher
uaMethodBinder_->bindExecuteCommand([this](const ExecuteCommand& cmd) {
return commandDispatcher_->dispatch(cmd);
});
```
### 4.3 插件路径解析
2026-06-11 18:06:39 +08:00
`resolvePluginPath(pluginName, profilePath)` 按以下顺序搜索(每个目录同时尝试 `lib{name}.so``{name}.so`
1. `{profileDir}/lib/` — 与配置文件同目录,如 `config/lib/`
2. `{cwd}/config/lib/`
3. `{exeDir}/``{exeDir}/../lib/`
4. `build/lib/``build/bin/`
5. `lib/``bin/``{cwd}/`
2026-06-09 17:27:24 +08:00
## 5. PipelineEngine
### 5.1 职责
`RawPacket` 经插件分帧/解析转换为 `DOMMessage`,并绑定到 OPC UA。
### 5.2 处理流程
```
process(RawPacket)
→ plugin_->framer()->extract(data, size) // Stage 1: 分帧
→ plugin_->parser()->parseFrame(data, size, sourceId) // Stage 2: 解析
→ 补充 traceId, timestampNs
→ binder_->bind(DOMMessage) // Stage 3: OPC UA 绑定
```
### 5.3 错误处理
- 分帧失败:使用原始 payload 继续解析
- 解析失败:记录 `warnTrace` 日志,丢弃消息
- 绑定失败:记录 `warnTrace`(如无对应 OPC UA 节点)
## 6. CommandDispatcher
### 6.1 职责
校验 `ExecuteCommand` 并通过 `TcpUplinkServer` 转发至边缘。
### 6.2 公共 API
| 方法 | 说明 |
|------|------|
| `dispatch(ExecuteCommand)` | 校验 + 发送至已连接边缘 |
## 7. Registry 子系统
### 7.1 ObjectModelRegistry
| 方法 | 说明 |
|------|------|
| `loadFromFile(path)` | 加载 `softbus_model.json` |
| `tree()` | 获取 `ObjectModelTree` |
| `findPointByRegister(reg)` | 按寄存器地址查找测点 |
### 7.2 MetadataRegistry
元数据注册表Phase 1 已编译但 `CoreService` 未接入。
## 8. IpcOptionalDBusPhase 1 stub
D-Bus IPC 可选实现Phase 1 未接入 `CoreService` 主流程。
## 9. CLI 参数
| 参数 | 默认值 | 说明 |
|------|--------|------|
| `--config` | `config/daemon_profile.json` | 守护进程配置 |
| `--model` | `config/softbus_model.json` | 对象模型 |
| `--self-test` | 关闭 | 启动后自动发送一次写命令 |
## 10. 主循环
```cpp
while (running) {
uaEngine_->iterate(); // 驱动 OPC UA 事件
// PlatformSignal 检查
}
```
`io_context` 在独立线程中运行,处理 TCP 异步 I/O。
## 11. 数据流(完整链路)
### 11.1 上行
```
Edge → TCP → TcpUplinkServer → PipelineEngine
→ ModbusFramer → ModbusParser → DOMMessage
→ UaModelBinder → OPC UA Variable
```
### 11.2 下行
```
OPC UA Client → UaMethodBinder → CommandDispatcher
→ TcpUplinkServer → TCP → Edge
```
## 12. 依赖
- `softbus_core`
- `softbus_transport`
- `softbus_api`
- `softbus_opcua`
- `asio`
- 可选:`dbus-1``SOFTBUS_HAS_DBUS`
- 构建依赖:`add_dependencies(softbus_daemon protocol_modbus)`
## 13. 运行示例
```bash
# 正常启动
./build/bin/softbus_daemon \
--config config/daemon_profile.json \
--model config/softbus_model.json
# 自测模式
./build/bin/softbus_daemon --self-test
```
## 14. Phase 2 规划
- 接入 `MetadataRegistry``TimeAligner`
- 加载 canopen 插件,支持多插件并行
- D-Bus IPC 接入主流程
- 多边缘连接管理