- 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
267 lines
15 KiB
Markdown
267 lines
15 KiB
Markdown
# 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.)
|