- EIS_README.md: Overall project architecture, data flow, service inventory - zmqp/zmqc_readme: ActiveMQ producer/consumer bridging ICE - zcache_readme: Data cache hub with address mapping and type conversion - zhd_readme: Real-time snapshot persistence to iHyperDB - zinit_readme: DB2-to-shared-memory initialization service - zsub/zudp/zdsf/rcv_readme: Data receiver layer for different on-site protocols
3.5 KiB
3.5 KiB
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] 索引:
{
"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 初始化、标签订阅、回调处理