# zdsf — DSF 数据流订阅接收器 ## 概述 zdsf 是 EIS 系统中的 **DSF(Data Stream Framework)数据流订阅接收器**。它通过宝信 DSF SDK(`libdsfapi`)连接到 DSF 服务器,以命名标签方式订阅实时数据(支持指定采样频率),接收后按遥测配置组装数据并通过 ICE 转发。 ## 进程架构 ``` DSF 服务器 (tcp, 主/备) │ │ DSF SDK 订阅回调 ▼ ┌──────────────────────────────────────────┐ │ zdsf │ │ │ │ DsfInit() │ │ │ │ │ ├→ 从 config/dsfconfig.json 读取配置 │ │ ├→ DRSdkConnectParam 初始化连接 │ │ ├→ 读数据库 BinaryTele 遥测配置 │ │ ├→ 订阅标签 (tag 或 struct 模式) │ │ └→ 注册回调 (采样频率 ms) │ │ │ │ recvCallBack(tagNames, tagValues) │ │ │ │ │ ├→ tag模式: 顺序拷贝值到缓冲区 │ │ ├→ struct模式: 按名称匹配 │ │ ├→ ReBuild 重建遥测结构 │ │ ├→ ICE 转发到配置的代理 │ │ └→ eventNo=1002: 额外转发到 eqpm │ │ │ └──────────────────────────────────────────┘ ``` ## 核心特性 ### 命名标签订阅 与 zsub(基于地址的订阅)不同,zdsf 支持**按标签名订阅**,更加灵活: - **tag 模式**: 按 FDA item 名映射到 DSF 标签名 - **struct 模式**: 从 JSON 配置数组中读取变量名列表 ### 采样频率控制 支持配置订阅的采样频率(毫秒级),实现按需采样,避免不必要的数据洪流。 ### 回调处理 数据到达时通过 DSF SDK 回调 `recvCallBack()` 处理,使用 `mutex` 保证线程安全。 ## 订阅配置 从 `$CRGS/config/dsfconfig.json` 读取,按服务名 `sub_node[service_name]` 索引: ```json { "server": { "ip": "10.64.3.20", "port": 1234, "timeout": 5000, "threadpool": 10, "heartbeat": 60 }, "sub_node": { "zdsf": { "mode": "tag", "frequency_ms": 100, "tags": ["tag1", "tag2", "..."] } } } ``` ## 与其它接收器对比 | 方面 | zsub | zudp | zdsf | |------|------|------|------| | 协议 | TCP 订阅 | UDP 广播 | DSF SDK | | 寻址方式 | 地址电文 | IP:Port | 命名标签 | | 数据解析 | 解析信号名/值 | 不解析 | 按标签名匹配 | | 采样频率 | 服务端推送 | 服务端推送 | 客户端可配置 | | 灵活性 | 中 | 低 | 高 | ## ICE 接口 | 方法 | 说明 | |------|------| | `Init` | DSF 连接初始化 | | `regist` | 标签订阅注册 | | `recvCallBack` | DSF 数据回调 | ## 现场适用场景 zdsf 适用于**已部署 DSF 数据平台的现代化现场**,通过命名标签灵活订阅所需数据,支持精确的采样频率控制,无需解析复杂的电文协议。 ## 源文件 ``` src/zdsf/ ├── dsf.cpp # PACE 组件入口 └── DsfRcv.cpp # DSF 初始化、标签订阅、回调处理 ```