eis/EIS_README.md

267 lines
15 KiB
Markdown
Raw Normal View History

# 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.