2026-06-09 17:27:24 +08:00
|
|
|
|
# 构建与配置
|
|
|
|
|
|
|
|
|
|
|
|
## 1. 环境要求
|
|
|
|
|
|
|
|
|
|
|
|
| 依赖 | 版本 | 获取方式 |
|
|
|
|
|
|
|------|------|----------|
|
|
|
|
|
|
| CMake | ≥ 3.16 | 系统安装 |
|
|
|
|
|
|
| C++ 编译器 | C++17 | GCC / Clang / MSVC |
|
|
|
|
|
|
| nlohmann_json | v3.11.3 | FetchContent 自动 |
|
|
|
|
|
|
| asio | v1.30.2 | FetchContent 自动 |
|
|
|
|
|
|
| open62541 | v1.4.6 | Vendor:`third_party/open62541/`(`SOFTBUS_WITH_OPCUA=ON`) |
|
|
|
|
|
|
| Python 3 | — | open62541 代码生成(构建时) |
|
|
|
|
|
|
| Threads | — | CMake 自动 |
|
|
|
|
|
|
| dbus-1 | 可选 | 系统安装(Linux) |
|
|
|
|
|
|
|
|
|
|
|
|
## 2. CMake 选项
|
|
|
|
|
|
|
|
|
|
|
|
| 选项 | 默认值 | 说明 |
|
|
|
|
|
|
|------|--------|------|
|
|
|
|
|
|
| `SOFTBUS_WITH_OPCUA` | ON | 启用 open62541 与 softbus_opcua |
|
|
|
|
|
|
| `SOFTBUS_WITH_ZMQ` | OFF | ZeroMQ 传输(未使用) |
|
|
|
|
|
|
|
|
|
|
|
|
## 3. 构建步骤
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 配置
|
|
|
|
|
|
cmake -B build -DSOFTBUS_WITH_OPCUA=ON
|
|
|
|
|
|
|
|
|
|
|
|
# 编译全部目标
|
|
|
|
|
|
cmake --build build
|
|
|
|
|
|
|
|
|
|
|
|
# 仅编译守护进程(自动构建依赖)
|
|
|
|
|
|
cmake --build build --target softbus_daemon
|
|
|
|
|
|
|
|
|
|
|
|
# 仅编译边缘代理
|
|
|
|
|
|
cmake --build build --target softbus_edge
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3.1 输出目录
|
|
|
|
|
|
|
|
|
|
|
|
| 类型 | 路径 |
|
|
|
|
|
|
|------|------|
|
|
|
|
|
|
| 可执行文件 | `build/bin/` |
|
|
|
|
|
|
| 静态库 | `build/lib/` |
|
|
|
|
|
|
| 插件动态库 | `build/lib/` |
|
|
|
|
|
|
|
|
|
|
|
|
### 3.2 构建目标一览
|
|
|
|
|
|
|
|
|
|
|
|
| Target | 类型 | 输出 |
|
|
|
|
|
|
|--------|------|------|
|
|
|
|
|
|
| `softbus_core` | STATIC | `libsoftbus_core.a` |
|
|
|
|
|
|
| `softbus_api` | STATIC | `libsoftbus_api.a` |
|
|
|
|
|
|
| `softbus_transport` | STATIC | `libsoftbus_transport.a` |
|
|
|
|
|
|
| `softbus_opcua` | STATIC | `libsoftbus_opcua.a` |
|
|
|
|
|
|
| `protocol_modbus` | SHARED | `libprotocol_modbus.so` |
|
|
|
|
|
|
| `protocol_canopen` | SHARED | `libprotocol_canopen.so` |
|
|
|
|
|
|
| `softbus_edge` | EXECUTABLE | `softbus_edge` |
|
|
|
|
|
|
| `softbus_daemon` | EXECUTABLE | `softbus_daemon` |
|
|
|
|
|
|
|
|
|
|
|
|
## 4. CMake 模块
|
|
|
|
|
|
|
|
|
|
|
|
| 文件 | 职责 |
|
|
|
|
|
|
|------|------|
|
|
|
|
|
|
| `cmake/SoftbusPackage.cmake` | 包宏:`softbus_package`、`softbus_export_include`、`softbus_add_plugin` |
|
|
|
|
|
|
| `cmake/SoftbusPlatform.cmake` | 平台检测、线程、可选 DBus/UDEV/ZMQ、`softbus_apply_*` |
|
|
|
|
|
|
| `cmake/SoftbusThirdParty.cmake` | 第三方依赖:open62541 vendor + FetchContent(json/asio) |
|
|
|
|
|
|
|
|
|
|
|
|
## 5. 配置文件
|
|
|
|
|
|
|
|
|
|
|
|
### 5.1 daemon_profile.json
|
|
|
|
|
|
|
|
|
|
|
|
守护进程运行时配置:
|
|
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"opcua": {
|
|
|
|
|
|
"port": 4840,
|
|
|
|
|
|
"applicationName": "SoftBusDaemon"
|
|
|
|
|
|
},
|
|
|
|
|
|
"uplink": {
|
|
|
|
|
|
"listenHost": "127.0.0.1",
|
|
|
|
|
|
"listenPort": 9000
|
|
|
|
|
|
},
|
|
|
|
|
|
"plugins": {
|
|
|
|
|
|
"modbus": "protocol_modbus",
|
|
|
|
|
|
"canopen": "protocol_canopen"
|
|
|
|
|
|
},
|
|
|
|
|
|
"security": {
|
|
|
|
|
|
"tlsEnabled": false,
|
|
|
|
|
|
"certPath": "",
|
|
|
|
|
|
"keyPath": ""
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
| 字段 | 类型 | 默认值 | 说明 |
|
|
|
|
|
|
|------|------|--------|------|
|
|
|
|
|
|
| `opcua.port` | integer | 4840 | OPC UA 监听端口 |
|
|
|
|
|
|
| `opcua.applicationName` | string | SoftBusDaemon | OPC UA 应用名称 |
|
|
|
|
|
|
| `uplink.listenHost` | string | 127.0.0.1 | 上行 TCP 监听地址 |
|
|
|
|
|
|
| `uplink.listenPort` | integer | 9000 | 上行 TCP 监听端口 |
|
|
|
|
|
|
| `plugins.modbus` | string | protocol_modbus | Modbus 插件库名 |
|
|
|
|
|
|
| `plugins.canopen` | string | protocol_canopen | CANopen 插件库名 |
|
|
|
|
|
|
| `security.tlsEnabled` | boolean | false | TLS 开关(Phase 1 未实现) |
|
|
|
|
|
|
| `security.certPath` | string | "" | 证书路径 |
|
|
|
|
|
|
| `security.keyPath` | string | "" | 私钥路径 |
|
|
|
|
|
|
|
|
|
|
|
|
### 5.2 softbus_model.json
|
|
|
|
|
|
|
|
|
|
|
|
对象模型与 OPC UA 地址空间定义:
|
|
|
|
|
|
|
|
|
|
|
|
```json
|
|
|
|
|
|
{
|
|
|
|
|
|
"site": "DemoSite",
|
|
|
|
|
|
"system": "DemoSystem",
|
|
|
|
|
|
"asset": "DemoAsset",
|
|
|
|
|
|
"devices": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"stableDeviceKey": "SimModbusDevice",
|
|
|
|
|
|
"protocol": "modbus",
|
|
|
|
|
|
"points": [
|
|
|
|
|
|
{
|
|
|
|
|
|
"name": "Temperature",
|
|
|
|
|
|
"register": 40001,
|
|
|
|
|
|
"domain": "Process"
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
}
|
|
|
|
|
|
]
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
| 字段 | 类型 | 说明 |
|
|
|
|
|
|
|------|------|------|
|
|
|
|
|
|
| `site` | string | 站点名(OPC UA Site 节点) |
|
|
|
|
|
|
| `system` | string | 系统名 |
|
|
|
|
|
|
| `asset` | string | 资产名 |
|
|
|
|
|
|
| `devices[].stableDeviceKey` | string | 设备稳定标识(OPC UA Device 节点) |
|
|
|
|
|
|
| `devices[].protocol` | string | 协议标签 |
|
|
|
|
|
|
| `devices[].points[].name` | string | 测点名(OPC UA Variable 节点) |
|
|
|
|
|
|
| `devices[].points[].register` | integer | 寄存器地址 |
|
|
|
|
|
|
| `devices[].points[].domain` | string | 数据域 |
|
|
|
|
|
|
|
|
|
|
|
|
### 5.3 ua_model.xml
|
|
|
|
|
|
|
|
|
|
|
|
Phase 2 静态 NodeSet2 XML 占位文件,Phase 1 不使用。守护进程通过 `UaAddressSpaceBuilder` 从 JSON 动态构建地址空间。
|
|
|
|
|
|
|
|
|
|
|
|
## 6. 运行指南
|
|
|
|
|
|
|
|
|
|
|
|
### 6.1 双进程启动
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 终端 1:启动守护进程
|
|
|
|
|
|
./build/bin/softbus_daemon \
|
|
|
|
|
|
--config config/daemon_profile.json \
|
|
|
|
|
|
--model config/softbus_model.json
|
|
|
|
|
|
|
|
|
|
|
|
# 终端 2:启动边缘代理
|
|
|
|
|
|
./build/bin/softbus_edge --daemon 127.0.0.1:9000
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 6.2 自测模式
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
./build/bin/softbus_daemon --self-test
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
启动后自动向边缘发送一次写命令,验证 OPC UA Method → TCP 下行链路。
|
|
|
|
|
|
|
|
|
|
|
|
### 6.3 OPC UA 客户端验证
|
|
|
|
|
|
|
|
|
|
|
|
1. 使用 UaExpert 或其他 OPC UA 客户端
|
|
|
|
|
|
2. 连接 `opc.tcp://localhost:4840`
|
|
|
|
|
|
3. 浏览地址空间:
|
|
|
|
|
|
- `Objects → DemoSite → ... → Temperature`(读 Variable 值)
|
|
|
|
|
|
- `Objects → SoftBusControl → ExecuteCommand`(调用 Method)
|
|
|
|
|
|
|
|
|
|
|
|
### 6.4 CLI 参数汇总
|
|
|
|
|
|
|
|
|
|
|
|
**softbus_daemon:**
|
|
|
|
|
|
|
|
|
|
|
|
| 参数 | 默认值 |
|
|
|
|
|
|
|------|--------|
|
|
|
|
|
|
| `--config` | `config/daemon_profile.json` |
|
|
|
|
|
|
| `--model` | `config/softbus_model.json` |
|
|
|
|
|
|
| `--self-test` | 关闭 |
|
|
|
|
|
|
|
|
|
|
|
|
**softbus_edge:**
|
|
|
|
|
|
|
|
|
|
|
|
| 参数 | 默认值 |
|
|
|
|
|
|
|------|--------|
|
|
|
|
|
|
| `--daemon` | `127.0.0.1:9000` |
|
|
|
|
|
|
| `--object-ref` | `DemoSite/DemoSystem/DemoAsset/SimModbusDevice/Temperature` |
|
|
|
|
|
|
|
|
|
|
|
|
## 7. 平台支持
|
|
|
|
|
|
|
|
|
|
|
|
| 平台 | 状态 | 备注 |
|
|
|
|
|
|
|------|------|------|
|
|
|
|
|
|
| Linux | 支持 | 主要开发与测试平台 |
|
|
|
|
|
|
| Windows | 支持 | 插件扩展名 `.dll`,路径解析适配 |
|
|
|
|
|
|
| macOS | 未测试 | 理论可编译 |
|
|
|
|
|
|
|
|
|
|
|
|
平台检测由 `cmake/SoftbusPlatform.cmake` 完成,定义 `SOFTBUS_PLATFORM_LINUX` / `SOFTBUS_PLATFORM_WINDOWS` 等宏。
|
|
|
|
|
|
|
|
|
|
|
|
## 8. 故障排查
|
|
|
|
|
|
|
|
|
|
|
|
| 现象 | 可能原因 | 处理 |
|
|
|
|
|
|
|------|----------|------|
|
2026-06-11 18:06:39 +08:00
|
|
|
|
| 守护进程启动失败:plugin load | 插件 .so 不在搜索路径 | 确认 `config/lib/protocol_modbus.so` 或 `build/lib/libprotocol_modbus.so` 存在 |
|
2026-06-09 17:27:24 +08:00
|
|
|
|
| OPC UA 连接拒绝 | 端口被占用或 OPC UA 未启用 | 检查 4840 端口;确认 `SOFTBUS_WITH_OPCUA=ON` |
|
|
|
|
|
|
| Variable 值不更新 | 边缘未连接或 objectRef 不匹配 | 确认 edge 运行且 sourceId 与模型路径一致 |
|
|
|
|
|
|
| Method 调用失败 | JSON 格式错误或 objectRef 无效 | 检查入参 JSON 与五层路径 |
|
|
|
|
|
|
|
|
|
|
|
|
## 9. 项目目录结构
|
|
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
softbus_OPC/
|
|
|
|
|
|
├── CMakeLists.txt # 工作区根 CMake
|
|
|
|
|
|
├── cmake/ # CMake 模块
|
|
|
|
|
|
│ ├── SoftbusPackage.cmake
|
|
|
|
|
|
│ ├── SoftbusPlatform.cmake
|
|
|
|
|
|
│ └── SoftbusThirdParty.cmake
|
|
|
|
|
|
├── config/ # 运行时配置
|
|
|
|
|
|
│ ├── daemon_profile.json
|
|
|
|
|
|
│ ├── softbus_model.json
|
|
|
|
|
|
│ └── ua_model.xml
|
|
|
|
|
|
├── docs/ # 项目文档(本目录)
|
|
|
|
|
|
├── src/
|
|
|
|
|
|
│ ├── softbus_core/ # L0 内核
|
|
|
|
|
|
│ ├── softbus_api/ # L1 契约
|
|
|
|
|
|
│ ├── softbus_transport/ # L2 传输
|
|
|
|
|
|
│ ├── softbus_opcua/ # L2 OPC UA
|
|
|
|
|
|
│ ├── softbus_daemon/ # L3 守护进程
|
|
|
|
|
|
│ ├── softbus_edge/ # L3 边缘代理
|
|
|
|
|
|
│ └── plugins/ # L2 协议插件
|
|
|
|
|
|
│ ├── protocol_modbus/
|
|
|
|
|
|
│ └── protocol_canopen/
|
|
|
|
|
|
└── build/ # 构建输出(gitignore)
|
|
|
|
|
|
```
|