eis/src/zcache/zcache_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

3.9 KiB
Raw Blame History

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       # 核心: 地址映射、数据缓存、类型转换