eis/EIS_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

267 lines
15 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# EIS — 设备智能监控系统
## 概述
EIS**E**quipment **I**ntelligence **S**ystem / 设备智能系统)是一个面向冷轧机组的工业设备状态监控与预测性维护平台。系统基于宝信 PACE 分布式框架构建,通过 ZeroC ICE 中间件实现进程间通信,以 ActiveMQ 连接外部系统使用共享内存内存映射文件作为实时数据总线iHyperDB 作为历史数据存储DB2 作为配置与结果数据库。
## 系统架构
```
┌──────────────────────┐
│ 外部系统 / Web UI │
└──────┬───────┬───────┘
│ │
ActiveMQ Memcached
│ │
┌──────────────────────────────┼───────┼──────────────────────────┐
│ ICE 消息总线 │
│ │ │
│ ┌───────────────────────────┴───────────────────────────────┐ │
│ │ 数据接收层 │ │
│ │ zsub (TCP订阅) zudp (UDP) zdsf (DSF) rcv (L1电文) │ │
│ └───────────────────────────┬───────────────────────────────┘ │
│ │ │
│ 共享内存 (GlobMem) │
│ │ │
│ ┌───────────────────────────┴───────────────────────────────┐ │
│ │ 数据处理与缓存层 │ │
│ │ zcache (缓存转换) zinit (DB→内存初始化) │ │
│ └───────────────────────────┬───────────────────────────────┘ │
│ │ │
│ ┌───────────────┬───────────┴───────────┬───────────────────┐ │
│ │ │ │ │ │
│ ▼ ▼ ▼ │ │
│ ┌─────────┐ ┌─────────┐ ┌──────────┐ │ │
│ │ eqpalg │ │ zhd │ │ eqpm │ │ │
│ │ 设备算法 │ │ 实时历史 │ │ 设备点检 │ │ │
│ │ 监控引擎 │ │ 数据存储 │ │ 状态管理 │ │ │
│ └────┬────┘ └────┬────┘ └────┬─────┘ │ │
│ │ │ │ │ │
│ ├─────┬─────┘ │ │ │
│ │ │ │ │ │
│ ▼ ▼ │ │ │
│ ┌────────┐ ┌────────┐ │ │ │
│ │ dsm │ │ RICS │ │ │ │
│ │数据归档│ │规则展示│ │ │ │
│ └────────┘ └────────┘ │ │ │
│ │ │ │
│ ┌────────────────────────────────────┴───────────────────┐ │
│ │ 消息中间件层 │ │
│ │ zmqp (生产者) ←── ICE ──→ zmqc (消费者) │ │
│ │ ↓ ↑ │ │
│ │ ActiveMQ ──── 外部系统 ──── ActiveMQ │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└───────────────────────────────────────────────────────────────┘
```
## 数据流全景
```
PLC/传感器 (L1)
├──→ FDA 服务器 ──TCP──→ zsub ──→ 共享内存 FDA_DATA
├──→ UDP 广播 ──UDP──→ zudp ──→ 共享内存 PLC_DATA
├──→ DSF 服务器 ──SDK──→ zdsf ──→ ICE 转发
└──→ L1 电文 ──ICE──→ rcv ──→ zcache / ztrk / zmtr
zcache (缓存)
地址映射 + 类型转换
共享内存 PLC_DATA
┌─────────────────────┼─────────────────────┐
▼ ▼ ▼
eqpalg (mon) zhd (快照) ztrk/zmtr
实时报警监控 iHyperDB 持久化 物料跟踪
├──→ 报警 → AlarmPoster
│ ├──→ DB2 T_RULE_RESULT
│ ├──→ zmqp → ActiveMQ Topic
│ └──→ CMemQueue
├──→ 统计累积 → RuleStatShm
│ └──→ eqpalg (cron) → DAA::STA → DB2
└──→ 页面数据 → Memcached (RICS 读 DB2 配置)
eqpalg (task): 按需从 iHyperDB 拉取历史数据 → 拟合/统计 → DB2
dsm: ZONE10 → iHyperDB 查询 → JSON 文件归档
eqpm: 产量累积 → 预测检修日期 → Memcached 设备状态
```
## 服务清单
### 设备监控层eqpalg 体系)
| 服务 | 目录 | 职责 |
|------|------|------|
| **eqpalg-mon** | `eqpalg/` | 实时监控引擎:从共享内存读 PLC 数据,每 20ms 执行规则表达式,产出报警 |
| **eqpalg-cron** | `eqpalg/` | 定时学习引擎:从 RuleStatShm 读取统计累积,计算置信区间并写回 DB2 |
| **eqpalg-task** | `eqpalg/` | 单次执行引擎:按需从 iHyperDB 拉历史数据,做拟合/统计/回测 |
| **RICS** | `RICS/` | 规则信息展示服务:读 DB2 规则配置,格式化为 JSON 写入 Memcached |
| **dsm** | `dsm/` | 数据存储管理:从共享内存 ZONE10 读配置,查 iHyperDB归档为 JSON 文件 |
| **eqpm** | `eqpm/` | 设备点检管理:产量累积计算 + 检修日期预测 + 实时状态遥测解码 |
### 数据接收层(根据现场选用)
| 服务 | 目录 | 协议 | 适用场景 |
|------|------|------|----------|
| **zsub** | `src/zsub/` | TCP 订阅 | FDA 服务器已部署,标准 PLC 数据采集 |
| **zudp** | `src/zudp/` | UDP 广播 | 低延迟/广播式数据源 |
| **zdsf** | `src/zdsf/` | DSF SDK | DSF 数据平台,按命名标签订阅 |
| **rcv** | `src/rcv/` | ICE (iXcomTCP2) | L1 电文路由分发,通用入口 |
### 数据处理层
| 服务 | 目录 | 职责 |
|------|------|------|
| **zcache** | `src/zcache/` | 数据缓存中枢:原始二进制 → 地址映射 → 标准化浮点 → 共享内存环形缓冲 |
| **zhd** | `src/zhd/` | 实时历史数据:共享内存快照 → iHyperDB 批量写入(含自动标签创建) |
| **zinit** | `src/zinit/` | 数据库初始化:启动时从 DB2 加载配置表/参数到共享内存,运行时缓存遥测 |
### 消息中间件层
| 服务 | 目录 | 角色 | 传输方向 |
|------|------|------|----------|
| **zmqp** | `src/zmqp/` | ActiveMQ 生产者 | ICE → ActiveMQ Topic报警/计算结果→外部) |
| **zmqc** | `src/zmqc/` | ActiveMQ 消费者 | ActiveMQ Queue → ICE外部指令→内部服务 |
### 公共库
| 库 | 目录 | 用途 |
|----|------|------|
| `libbase` | `src/base/` | 基础工具位操作、文件流、时间、ping |
| `libglob` | `src/glob/` | 全局服务BinaryTele 编解码、ConnectionMag DB连接、ProxyMag ICE代理 |
| `libzlib` | `src/zlib/` | 共享内存管理MemFix/MemTable/DB2Mem、MemCachedClient、MemVar 全局变量) |
| `libproxy` | `src/proxy/` | ICE 接口定义MessageICE、CallBackICE |
| `libdao` | `src/dao/` | 数据访问对象DBMag、MatStructDBAX |
| `libdbax` | `src/dbax/` | 数据库表访问扩展 |
| `libcold` | `src/cold/` | 冷轧业务对象MatUnit、RollMachine、RollTele |
| `libcda` | `src/cda/` | 通用数据访问(报警日志、钢卷数据、调度数据) |
| `libzcus` | `src/zcus/` | 定制工具IHDB 读取、规则报警、REST API |
| `mix_cc` | `mix_cc/` | 表达式引擎、SQL DSL、iHyperDB API 封装、JSON、共享内存模板 |
## 关键技术栈
| 层级 | 技术 |
|------|------|
| 分布式框架 | Baosight PACE / iPlature |
| 进程间通信 | ZeroC Ice 3.7 |
| 外部消息 | Apache ActiveMQ-CPP 3.9 |
| 实时数据 | 共享内存Boost Memory-Mapped File、GlobMem |
| 缓存 | Memcached (libmemcached) |
| 历史数据库 | iHyperDB (HD3 API) |
| 关系数据库 | DB2 (通过 SQLAPI++) |
| 数值计算 | Eigen3、Armadillo、dlib、mlpack、GSL |
| JSON | nlohmann/json |
| 日志 | log4cplus |
| C++ 标准 | C++11 / C++17 / C++20各模块不同 |
## 工程目录结构
```
code/
├── EIS_README.md # 本文件
├── config/ # 全局配置文件
│ ├── config.json # DB2/IHDB/SHM/CronTab 配置
│ ├── dsfconfig.json # DSF 数据订阅配置
│ ├── zone.cfg # 共享内存区域定义
│ └── crgs.cfg # 配置注册系统
├── cmake_include/ # CMake 公共模块
├── inc/ # 全局头文件
│ ├── common/ # 公共定义L2Event、Macro
│ ├── glob/ # 全局服务头文件
│ ├── proxy/ # ICE 接口头文件
│ ├── zlib/ # 共享内存库头文件
│ ├── zcache/ # 各服务头文件
│ ├── ...
│ └── dbinc/ # DB2 表结构头文件
├── lib/ # 预编译库 (.a)
├── src/ # 基础服务源码
│ ├── base/ # libbase
│ ├── glob/ # libglob
│ ├── zlib/ # libzlib
│ ├── proxy/ # libproxy
│ ├── dao/ # libdao
│ ├── dbax/ # libdbax
│ ├── cold/ # libcold
│ ├── cda/ # libcda
│ ├── zcus/ # libzcus
│ ├── zsub/ # FDA TCP 订阅接收器
│ ├── zudp/ # UDP 接收器
│ ├── zdsf/ # DSF 接收器
│ ├── rcv/ # L1 电文路由
│ ├── zcache/ # 数据缓存中枢
│ ├── zhd/ # 实时历史数据
│ ├── zinit/ # 数据库初始化
│ ├── zmqp/ # ActiveMQ 生产者
│ ├── zmqc/ # ActiveMQ 消费者
│ └── ... # 其他辅助服务
├── eqpalg/ # 设备算法监控引擎
├── RICS/ # 规则信息展示服务
├── dsm/ # 数据存储管理
├── eqpm/ # 设备点检管理
├── mix_cc/ # 表达式引擎 / SQL DSL / 工具库
├── third_party/ # 第三方库
├── py/ # Python 辅助脚本
├── script/ # Shell 脚本
└── TestProject/ # 测试项目
```
## 现场部署模式
根据不同的现场情况,系统支持灵活部署:
### 标准部署FDA
```
zsub (TCP订阅FDA) → zcache → eqpalg + zhd
zinit (启动时加载DB配置)
```
### DSF 部署
```
zdsf (DSF标签订阅) → ICE → zcache → eqpalg + zhd
```
### UDP 广播部署
```
zudp (UDP接收) → 共享内存/ICE → zcache → eqpalg + zhd
```
### L1 电文部署
```
rcv (L1电文路由) → zcache/ztrk/zmtr → eqpalg + zhd
```
数据接收层可根据现场已有基础设施**任选一种或组合使用**,上层 eqpalg/zhd 等消费端不感知数据来源差异。
## 各服务 README 索引
| 服务 | README |
|------|--------|
| eqpalg | [eqpalg/eqpalg_readme.md](eqpalg/eqpalg_readme.md) |
| RICS | [RICS/RICS_readme.md](RICS/RICS_readme.md) |
| eqpm | [eqpm/eqpm_readme.md](eqpm/eqpm_readme.md) |
| dsm | [dsm/dsm_readme.md](dsm/dsm_readme.md) |
| zmqp | [src/zmqp/zmqp_readme.md](src/zmqp/zmqp_readme.md) |
| zmqc | [src/zmqc/zmqc_readme.md](src/zmqc/zmqc_readme.md) |
| zcache | [src/zcache/zcache_readme.md](src/zcache/zcache_readme.md) |
| zhd | [src/zhd/zhd_readme.md](src/zhd/zhd_readme.md) |
| zinit | [src/zinit/zinit_readme.md](src/zinit/zinit_readme.md) |
| zsub | [src/zsub/zsub_readme.md](src/zsub/zsub_readme.md) |
| zudp | [src/zudp/zudp_readme.md](src/zudp/zudp_readme.md) |
| zdsf | [src/zdsf/zdsf_readme.md](src/zdsf/zdsf_readme.md) |
| rcv | [src/rcv/rcv_readme.md](src/rcv/rcv_readme.md) |
## 作者
- Cat (null.null.null@qq.com)
- 宝信软件Baosight Co. Ltd.