- 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.9 KiB
3.9 KiB
zcache — 数据缓存与转换服务
概述
zcache 是 EIS 系统中的 实时数据缓存与转换中枢。它从多个数据源接收原始二进制 PLC 遥测数据,按电文地址映射将原始数据解码为标准化浮点数组,存入共享内存环形缓冲区,供下游服务(eqpalg、zhd 等)直接读取。
进程架构
rcv / zprx / zsub
│
│ ICE SendDataShort(eventNo, rawPLCData)
▼
┌──────────────────────────────────────────┐
│ zcache │
│ │
│ ZcacheICEI::SendDataShort() │
│ │ │
│ ├→ CacheTele(eventNo, seq) │
│ │ └─ 原始字节 → CMemFix<PLC_DATA> │
│ │ 按事件号环形缓存(TEL_CACHE_SIZE=10) │
│ │ │
│ ├→ ConvertTele(eventNo, seq) │
│ │ └─ mv_tele 地址映射 │
│ │ ├─ NORMAL模式: 值×factor │
│ │ └─ BINARY模式: 位提取 │
│ │ → TELTMP 暂存缓冲区 │
│ │ │
│ └→ eventNo==1003: │
│ PutTempTelInCache() │
│ └─ TELTMP → m_mapfix 批量刷新 │
│ │
└──────────────┬───────────────────────────┘
│
▼
共享内存 (GlobMem)
│
┌────────────┼────────────┐
▼ ▼ ▼
eqpalg zhd ztrk
(实时监控) (历史存储) (物料跟踪)
核心职责
1. 数据缓存
- 将到达的原始二进制遥测数据按事件号存入
CMemFix<PLC_DATA>环形缓冲区 - 每个事件号保留最近 10 条消息
2. 数据转换 (ConvertTele)
根据从 T_LOV_FDAAITEM 构建的地址映射表,将原始二进制数据解码:
| 转换模式 | 处理方式 |
|---|---|
| NORMAL(普通数值) | 读取源值 × 转换因子 → 目标缓冲区 |
| BINARY(位提取) | 右移指定位 → 与 1 进行 AND 运算 → 布尔/整型 |
支持的数据类型: float(浮点)、int(整型)、short(短整型)、bool(布尔)
3. 暂存与批量刷新
eventNo==1003触发批量刷新:将暂存区TELTMP的全部数据写入各事件号的环形缓冲区m_mapfix
数据来源
| 来源服务 | 调用方式 | 数据内容 |
|---|---|---|
| rcv | ICE SendDataShort(eventNo, seq) |
L1 二进制遥测电文 |
| zprx | ICE SendDataShort(eventNo, seq) |
转发的事件 2000-2010 数据 |
数据消费
下游服务不通过 ICE 调用 zcache,而是直接读取共享内存中的 PLC_DATA 缓冲区:
| 消费者 | 读取内容 |
|---|---|
| eqpalg | GlobaltemSharedMemory::cache_data() 从 PLC_DATA 读取实时值 |
| zhd | 从共享内存读取快照写入 iHyperDB |
| ztrk | 读取区域跟踪数据 |
ICE 接口
| 方法 | 说明 |
|---|---|
SendDataShort(eventNo, seq) |
核心入口: 缓存 + 转换 raw 数据。eventNo=1002 跳过;eventNo<2000 做转换;eventNo≥2000 仅缓存 |
SendDataLong |
未实现 |
TimeNotify |
未实现 |
源文件
src/zcache/
├── zcache.cpp # PACE 组件入口
├── ZcacheICEI.cpp # ICE servant: SendDataShort 入口
└── CacheMag.cpp # 核心: 地址映射、数据缓存、类型转换