EIS — 设备智能监控系统
概述
EIS(Equipment Intelligence System / 设备智能系统)是一个面向冷轧机组的工业设备状态监控与预测性维护平台。系统基于宝信 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 索引
作者