Files
softbus_OPC/README.md
flower_linux 85bfb5d8ec self control
2026-06-24 16:25:02 +08:00

6.7 KiB
Raw Blame History

SoftBus OPC

SoftBus OPC 是 SoftBus 工业数据总线的 Phase 1 原型:边缘代理采集现场数据,守护进程经协议插件解析后映射到 OPC UA 地址空间,供北向客户端读写与控制。

更完整的架构与模块说明见 docs/README.md

环境要求

依赖 说明
CMake ≥ 3.16 构建系统
C++17 编译器 GCC / Clang / MSVC
Git 首次配置时通过 FetchContent 拉取 nlohmann_json、asio
Python 3 open62541 构建时代码生成(系统自带即可)
pkg-configLinux可选 用于检测 libdbus-1
libdbus-1Linux可选 未安装时 DBus IPC 自动禁用
libudevLinux可选 未安装时 udev 设备监控使用 stub
libzmq可选 仅当开启 SOFTBUS_WITH_ZMQ=ON 时需要
  • open62541 v1.4.6:已 vendor 至 third_party/open62541/,离线可直接构建 OPC UA
  • nlohmann_json、standalone asio:首次配置时由 CMake FetchContent 自动下载

构建

在项目根目录执行:

cmake -B build -DSOFTBUS_WITH_OPCUA=ON
cmake --build build -j$(nproc)

常用 CMake 选项:

选项 默认值 说明
SOFTBUS_WITH_OPCUA ON 启用 OPC UA 服务端open62541
SOFTBUS_WITH_ZMQ OFF 启用 ZeroMQ 传输

构建产物位于:

build/bin/softbus_daemon      # 守护进程(编排 + OPC UA
build/bin/softbus_edge        # 边缘代理Modbus / CAN / Mock
build/lib/protocol_modbus.so  # Modbus 协议插件
build/lib/protocol_canopen.so # CANopen 协议插件

使用 Qt Creator

项目已包含 CMakeLists.txt.user,可直接用 Qt Creator 打开根目录 CMakeLists.txt,选择 Desktop Qt 6.9.2(或其他已配置的 Kit进行构建。构建目录默认为 build/Desktop_Qt_6_9_2-Debug/,可执行文件在其中的 bin/ 子目录。

运行

请在项目根目录下启动softbus_OPC/),以便正确解析 config/ 下的相对路径,并加载 config/lib/build/lib/ 中的协议插件。

启动前检查(可选)

若上次异常退出,可能残留进程占用端口:

pgrep -a softbus
ss -tlnp | grep -E ':9000|:4840'
# 如有残留:
pkill -f softbus_daemon
pkill -f softbus_edge

使用 EMUC SocketCAN 时,确认 emuccan0 已就绪(ip link show emuccan0)。

1. 启动守护进程(终端 1

./build/bin/softbus_daemon \
  --config config/daemon/daemon_profile.json \
  --logical-points config/daemon/logical_points.json \
  --bindings-global config/daemon/bindings_global.json

守护进程参数:

参数 默认值 说明
--config <path> config/daemon/daemon_profile.json 守护进程运行配置OPC UA / uplink / 插件)
--logical-points <path> config/daemon/logical_points.json 逻辑点表OPC UA 地址空间语义)
--bindings-global <path> config/daemon/bindings_global.json 全局绑定(物理点 ↔ 逻辑点 ↔ edgeId
--point-table <path> 兼容旧参数,等同 --logical-points
--self-test 启动后自动下发一条写值测试命令

启动成功后:

  • TCP 9000:监听 edge 上行(uplink.listenPort
  • OPC UA 4840:暴露北向地址空间(opcua.port

2. 启动边缘代理(终端 2

连接真实设备Modbus 串口/TCP、EMUC CAN 等,配置见 config/edge/

./build/bin/softbus_edge --config config/edge/edge.json

无现场设备时,可用 Mock 模式仅验证 uplink / daemon 链路:

./build/bin/softbus_edge --config config/edge/edge.json --mock

边缘代理参数:

参数 默认值 说明
--config <path> config/edge/edge.json edge 主配置edgeId、daemon 地址、物理层文件路径)
--mock 不打开物理通道,周期性上报模拟数据
--object-ref <ref> DemoSite/.../MotorTemperature --mock 时使用的模拟点位

edge.json 中的相对路径(如 physical_channels.json)相对于 config/edge/ 目录解析。

3. 连接 OPC UA 客户端

opc.tcp://localhost:4840

应用名称默认为 SoftBusDaemon(见 config/daemon/daemon_profile.json)。

典型联调流程

# 终端 1daemon
./build/bin/softbus_daemon \
  --config config/daemon/daemon_profile.json \
  --logical-points config/daemon/logical_points.json \
  --bindings-global config/daemon/bindings_global.json

# 终端 2edge真实采集
./build/bin/softbus_edge --config config/edge/edge.json

# 或edge Mock无硬件
./build/bin/softbus_edge --config config/edge/edge.json --mock

daemon 先启、edge 后启。edge 断连后会每 5s 自动重连 daemonuplinkReconnectPeriodMs)。

Ctrl+C 分别停止各进程。

配置说明

config/daemon/daemon_profile.json 控制守护进程行为:

{
  "opcua": { "port": 4840, "applicationName": "SoftBusDaemon" },
  "uplink": { "listenHost": "127.0.0.1", "listenPort": 9000 },
  "plugins": { "modbus": "protocol_modbus", "canopen": "protocol_canopen" }
}

当前推荐配置组合:

文件 作用
config/daemon/logical_points.json 逻辑点与 OPC UA 节点定义
config/daemon/bindings_global.json 物理点绑定与 edge 路由
config/edge/physical_channels.json 物理通道(串口 / TCP / emuccan0 等)
config/edge/physical_devices.json 物理设备与采集点
config/edge/bindings_local.json edge 本地绑定(下行写备用解析)
config/daemon/point_table.json 遗留点表,仅兼容旧启动方式

更完整的 edge 物理层说明见 docs/softbus_edge.md

项目结构

softbus_OPC/
├── CMakeLists.txt          # 顶层 CMake
├── cmake/                  # 平台检测、第三方依赖、打包辅助
├── third_party/            # 固定版本第三方源码open62541
├── config/                 # 运行时配置与对象模型
├── docs/                   # 详细架构与模块文档
└── src/
    ├── softbus_core/       # 共享内核(模型、插件 ABI、日志
    ├── softbus_api/        # ExecuteCommand 控制面契约
    ├── softbus_transport/  # TCP 上行传输
    ├── softbus_opcua/      # OPC UA 服务端
    ├── softbus_daemon/     # 守护进程
    ├── softbus_edge/       # 边缘代理
    └── plugins/            # Modbus / CANopen 协议插件

文档

文档 内容
docs/README.md 文档索引与快速开始
docs/ARCHITECTURE.md 分层架构与模块依赖