eis/src/zsub/zsub_readme.md
Huamonarch 09b48b07e5 Add READMEs for all infrastructure services and overall project
- 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
2026-05-09 12:13:00 +08:00

4.1 KiB
Raw Blame History

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_tagiditem名→item编号mp_addr(索引→地址结构)。

数据值解析 (SplitSignal)

每个数据包包含浮点值数组和时间偏移,按地址索引存入 mp_tagdattag名→值列表

信号组装 (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 专用处理器(温度转换、模型预测值等)