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