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