# SoftBus OPC SoftBus OPC 是 SoftBus 工业数据总线的 **Phase 1 原型**:边缘代理采集现场数据,守护进程经协议插件解析后映射到 OPC UA 地址空间,供北向客户端读写与控制。 更完整的架构与模块说明见 [docs/README.md](docs/README.md)。 ## 环境要求 | 依赖 | 说明 | |------|------| | CMake ≥ 3.16 | 构建系统 | | C++17 编译器 | GCC / Clang / MSVC | | Git | 首次配置时通过 FetchContent 拉取 nlohmann_json、asio | | Python 3 | open62541 构建时代码生成(系统自带即可) | | pkg-config(Linux,可选) | 用于检测 libdbus-1 | | libdbus-1(Linux,可选) | 未安装时 DBus IPC 自动禁用 | | libudev(Linux,可选) | 未安装时 udev 设备监控使用 stub | | libzmq(可选) | 仅当开启 `SOFTBUS_WITH_ZMQ=ON` 时需要 | - **open62541 v1.4.6**:已 vendor 至 `third_party/open62541/`,离线可直接构建 OPC UA - **nlohmann_json、standalone asio**:首次配置时由 CMake FetchContent 自动下载 ## 构建 在项目根目录执行: ```bash 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 # 边缘代理(Mock Modbus 采集) 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/` 子目录。 ## 运行 **请在项目根目录下启动**,以便正确加载 `config/` 下的配置文件与 `config/lib/` 中的协议插件(亦兼容 `build/lib/`)。 ### 1. 启动守护进程 ```bash ./build/bin/softbus_daemon \ --config config/daemon_profile.json \ --point-table config/point_table.json ``` 命令行参数: | 参数 | 默认值 | 说明 | |------|--------|------| | `--config ` | `config/daemon_profile.json` | 守护进程运行配置 | | `--point-table ` | `config/point_table.json` | 点表(含 ValveOpening 等) | | `--model ` | 同 `--point-table` | 兼容旧参数名 | | `--self-test` | — | 启动后自动下发一条 ExecuteCommand 写值测试 | 守护进程启动后会: - 在 **TCP 9000**(`config/daemon_profile.json` → `uplink.listenPort`)监听边缘上行连接 - 在 **OPC UA 4840**(`opcua.port`)暴露地址空间 ### 2. 启动边缘代理(另开终端) ```bash ./build/bin/softbus_edge --daemon 127.0.0.1:9000 ``` 命令行参数: | 参数 | 默认值 | 说明 | |------|--------|------| | `--daemon ` | `127.0.0.1:9000` | 守护进程 uplink 地址 | | `--object-ref ` | `DemoSite/DemoSystem/DemoAsset/SimModbusDevice/Temperature` | Mock 采集点位对象引用 | 边缘代理会周期性产生模拟 Modbus 温度数据,经 TCP JSON(UplinkWire)发送至守护进程,最终更新 OPC UA Variable。 ### 3. 连接 OPC UA 客户端 使用 UaExpert、opcua-client 等工具连接: ``` opc.tcp://localhost:4840 ``` 应用名称默认为 `SoftBusDaemon`(可在配置文件中修改)。 ## 配置说明 `config/daemon_profile.json` 控制守护进程行为: ```json { "opcua": { "port": 4840, "applicationName": "SoftBusDaemon" }, "uplink": { "listenHost": "127.0.0.1", "listenPort": 9000 }, "plugins": { "modbus": "protocol_modbus", "canopen": "protocol_canopen" } } ``` `config/point_table.json` 定义设备/点位/主题/OPC UA 映射,由 `softbus_registry` 加载并驱动 OPC UA 地址空间与控制闭环。 ## 典型联调流程 ```bash # 终端 1:守护进程 ./build/bin/softbus_daemon # 终端 2:边缘代理 ./build/bin/softbus_edge # 终端 3(可选):自检模式,自动触发写命令 ./build/bin/softbus_daemon --self-test ``` 按 `Ctrl+C` 停止各进程。 ## 项目结构 ``` 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/README.md) | 文档索引与快速开始 | | [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) | 分层架构与模块依赖 |