Files
softbus_OPC/docs/softbus_edge.md
2026-06-09 17:27:24 +08:00

3.6 KiB
Raw Blame History

softbus_edge

路径: src/softbus_edge
构建目标: softbus_edgeEXECUTABLE
层级: L3 可执行层

1. 概述

softbus_edge 是边缘代理可执行文件负责设备数据采集ingress、原始包上行egress与下行命令接收。Phase 1 使用 MockModbusIngress 模拟 Modbus 数据,无真实硬件依赖。

2. CONSTRAINTS

  • 边缘代理不得直接操作 OPC UA 或插件解析,仅产生 RawPacket 并发送。
  • ingress 实现须遵循 IIngressPort 接口,便于 Phase 2 替换为真实硬件驱动。
  • 下行命令 Phase 1 仅日志输出,不得假装已写回设备。
  • 边缘代理通过 CLI 参数配置连接地址,不读取 daemon_profile.json

3. 组件架构

main.cpp
  ├── MockModbusIngress (IIngressPort)  ← 入站采集
  ├── UplinkClient (egress)             ← TCP 上行/下行
  ├── DeviceFactory                     ← 运行时设备 ID 生成
  └── DeviceDiscovery                   ← 设备发现Phase 1 stub

4. 核心组件

4.1 IIngressPort — 入站抽象

方法 说明
open() 打开采集通道
close() 关闭采集通道
poll() 轮询,返回 vector<RawPacket>

Phase 1 实现: MockModbusIngress

  • 生成递增的 Modbus RTU 0x03 响应帧
  • 寄存器值按 0.1 缩放(与 ModbusParser 一致)
  • sourceId 使用 CLI 指定的 objectRef

4.2 UplinkClient — 上行客户端

TcpUplinkClient 的薄封装:

方法 说明
connect(host, port) 连接守护进程
sendRawPacket(RawPacket) 发送上行原始包
poll() 轮询接收下行命令
setCommandHandler(handler) 注册命令回调

4.3 DeviceFactory

方法 说明
createRuntimeDevice() 生成 runtime-xxxxxxxx ID

4.4 DeviceDiscoveryPhase 1 stub

方法 说明 Phase 1 行为
discover() 扫描可用设备 返回空列表

5. 主循环

while (running) {
    // 1. 采集
    auto packets = ingress.poll();
    for (auto& packet : packets) {
        uplink.sendRawPacket(packet);
    }

    // 2. 接收命令
    uplink.poll();

    // 3. 平台信号检查
    if (PlatformSignal::interrupted()) break;
}

6. CLI 参数

参数 默认值 说明
--daemon host:port 127.0.0.1:9000 守护进程地址
--object-ref path DemoSite/DemoSystem/DemoAsset/SimModbusDevice/Temperature 模拟数据源对象路径

7. 数据流

7.1 上行

MockModbusIngress.poll()
  → RawPacket(sourceId=objectRef, protocolTag="modbus", payload=Modbus frame)
  → UplinkClient.sendRawPacket()
  → TcpUplinkClient → TCP JSON → Daemon

7.2 下行

Daemon CommandDispatcher
  → TCP JSON → TcpUplinkClient
  → UplinkClient.poll() → commandHandler
  → Phase 1: Logger 输出命令内容

8. 依赖

  • softbus_coreRawPacket, DeviceIdentity, Logger, PlatformSignal
  • softbus_transportTcpUplinkClient, UplinkWire
  • softbus_apiExecuteCommand
  • asio

9. 运行示例

# 确保守护进程已启动
./build/bin/softbus_edge --daemon 127.0.0.1:9000

# 指定自定义对象路径
./build/bin/softbus_edge \
  --daemon 127.0.0.1:9000 \
  --object-ref DemoSite/DemoSystem/DemoAsset/SimModbusDevice/Temperature

10. Phase 2 规划

  • 实现真实 SerialIngress / CanIngress 替换 Mock
  • 下行 ExecuteCommand 写回设备Modbus 写寄存器等)
  • 设备发现与动态注册
  • 支持 SBUP 二进制协议