- 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
4.1 KiB
4.1 KiB
zsub — FDA TCP 订阅数据接收器
概述
zsub 是 EIS 系统中的 FDA(现场数据采集)TCP 订阅数据接收器。它通过 TCP 连接到 FDA 服务器,发送包含所有信号地址的订阅电文,然后持续接收实时信号数据包,解析后存入共享内存并转发给下游服务。
这是 EIS 系统获取 PLC 实时数据的主要通道之一。
进程架构
FDA 服务器 (TCP 8089)
│
│ TCP 订阅 + 持续数据推送
▼
┌──────────────────────────────────────────┐
│ zsub │
│ │
│ SubscribeFDA 线程 │
│ │ │
│ ├→ TCP 连接 (zsub.server:8089) │
│ ├→ 发送订阅电文 (含所有信号地址) │
│ └→ recv() 循环 │
│ └→ AssembleMsg() 包拼装 │
│ └→ 推入 gb_qtcache (线程安全队列) │
│ │
│ HandleMessage 线程 │
│ │ │
│ ├→ 从 gb_qtcache 取消息 │
│ ├→ SplitSignalName() — 解析<Signal> │
│ ├→ SplitSignal() — 解析数据值+时间戳 │
│ ├→ CheckCache() — 找最小缓存深度 │
│ ├→ AssembleTeles() — 标签→遥测项映射 │
│ │ ├─ NORMAL: 直接赋值浮点数 │
│ │ └─ BINARY: 从整数中提取位 │
│ └→ MessageSend() │
│ ├→ 共享内存 FDA_DATA 缓存 │
│ └→ ICE 转发到 zprx/znode │
│ │
└──────────────────────────────────────────┘
数据协议
信号定义解析 (SplitSignalName)
FDA 数据包中使用 XML 风格的信号定义:
<Module name="酸洗段">
<Signal name="C308_ACD_SPEED_ACT" item="ACD_SPEED" no="1234"/>
...
</Module>
解析结果存入 mp_tagid(item名→item编号)和 mp_addr(索引→地址结构)。
数据值解析 (SplitSignal)
每个数据包包含浮点值数组和时间偏移,按地址索引存入 mp_tagdat(tag名→值列表)。
信号组装 (AssembleTeles)
根据数据库 T_LOV_FDAAITEM 配置的地址模式,将原始标签值映射到遥测项:
- NORMAL 模式: 直接取浮点值
- BINARY 模式: 从整数值中按位提取
断线检测
如果前 3 个值为 -1,判定为 PLC/FDA 断线,丢弃数据不转发。
多实例支持
根据进程名长度确定事件号:若 name() > 4 字符,eventNo = 2000 + atoi(id),支持多个实例(zsub1→2001, zsub2→2002...)
ICE 代理
| 目标 | 条件 | 用途 |
|---|---|---|
baosight/zprx |
eventNo=2016 | 代理转发 |
baosight/znode |
eventNo=2000 | 节点数据 |
baosight/ztrk/zmtr/zmc |
eventNo=1000 | 跟踪数据 |
baosight/ptg |
eventNo=2007 | 报警转发 |
ICE 接口
| 方法 | 说明 |
|---|---|
SendDataShort |
空操作(zsub 是纯数据接收端) |
SendDataLong |
空操作 |
TimeNotify |
空操作 |
现场适用场景
zsub 是冷轧/热轧生产线的 FDA 数据接收器,适用于现场已部署 FDA 服务器,通过 TCP 订阅方式获取 PLC 数据的场景。接收的信号包括:轧制力、张力、厚度、温度、压力、速度、设备状态位等。
源文件
src/zsub/
├── zsub.cpp # PACE 组件入口
├── zsubICEI.cpp # ICE servant
├── SubscribeFDA.cpp # TCP 订阅线程
├── HandleMessage.cpp # 主消息处理线程(信号解析、缓存、转发)
└── HandleMessage008.cpp # 事件 008 专用处理器(温度转换、模型预测值等)