- RICS_readme.md: Rule information centralized display service - eqpm_readme.md: Equipment predictive maintenance & status monitoring - dsm_readme.md: Data save manager for historical data archiving - eqpalg_readme.md: Corrected architecture, data flow, variable system, thread model, and inter-process relationships
6.5 KiB
6.5 KiB
eqpm — 设备点检与状态管理
概述
eqpm(Equipment Point-inspection Management / 设备点检管理)是 EIS 系统中的设备预测性维护和实时状态监控服务。它做两件事:
- 预测性维护 — 根据生产累计指标(处理重量、长度或经过天数),计算设备何时需要检修,预测下次检修日期
- 实时状态监控 — 解码遥测二进制数据,跟踪报警信息,将设备状态推送到 Memcached 供仪表盘使用
进程架构
eqpm 作为单个 PACE 平台组件运行,注册 ICE 端点 "baosight/eqpm"。
┌──────────────────────────┐
│ eqpm 进程 │
│ │
ICE TimeNotify ──→│ 事件0 → update_repair() │──→ DB2 T_EQP_REPAIR
ICE SendData ────→│ 事件1 → 状态写入 │──→ Memcached
(1002/99999) │ 事件2 → update_alarm() │──→ DB2
│ 事件3 → update_coil() │
│ │
共享内存 ────────→│ EqpmAlg::update_data() │──→ 产量环形缓冲区
(FV_PDI) │ │
└──────────────────────────┘
ICE 接口
| 方法 | 事件号 | 说明 |
|---|---|---|
SendDataShort |
99999 | 触发 update_repair() 刷新检修计划 |
SendDataShort |
1002 | 解码机组状态二进制遥测数据 |
SendDataLong |
— | 未实现 |
TimeNotify |
0 | 更新检修计划 |
TimeNotify |
1 | 获取状态 JSON 写入 Memcached(key: "unit_status") |
TimeNotify |
2 | 更新报警信息 |
TimeNotify |
3 | 更新钢卷信息 |
核心模块
1. EqpmAlg — 预测性维护引擎
负责设备点检计划的计算。核心数据结构:
EqpRule {
int rule_type; // 0=无 1=重量(吨) 2=长度(千米) 3=时间(天)
double data; // 自上次检修后的累计值
TimePoint repair_date; // 上次检修日期
TimePoint repair_plan; // 预测下次检修日期
}
三种检修规则类型:
| rule_type | 名称 | 计算方式 |
|---|---|---|
| 1 | 基于重量 | 从 FV_PDI 累计每日重量(吨),超阈值触发检修,按日均重量外推未来日期 |
| 2 | 基于长度 | 从 FV_PDI 累计每日长度(千米),超阈值触发检修,按日均长度外推未来日期 |
| 3 | 基于时间 | 按日历天数计算,距上次检修超过 interval 天后预测在 interval 天满的那天 |
工作流程:
update_data()— 从 FV_PDI 视图读取每日钢卷产量(长度、重量),写入共享内存环形缓冲区(10年,3650天)update_slope()— 计算 3 日滑动平均的日产量(length_slope_、weight_slope_),用于外推预测update_repair()— 从 DB2 加载设备规则配置,针对每条有规则类型的设备计算累计值和下次检修日期update_db2()— 将计算结果写回 DB2T_EQP_REPAIR表
产量数据流:
FV_PDI (钢卷视图) → EqpmAlg::update_data()
│
▼
EqpmRecord 共享内存 (环形缓冲区)
/users/dsc/shm/EqpmRecord_boost.mmap
│
▼
update_slope() → 日均产量
│
▼
update_rule_data() → 预测检修日期
2. EqpStatus — 实时状态监控
解析来自 PLC 的二进制遥测数据,转换为结构化 JSON。
解码的数据组:
| 数据组 | 内容 |
|---|---|
status_data |
泵状态、液位、温度、速度等 25 个数值测点 |
tension |
张力数据(2组 × 12个值) |
cpc |
CPC 对中数据(3组 × 10个值,含位掩码处理) |
TR |
运输辊道数据(钢卷ID + 5个数值,含时间格式转换) |
POR |
卷取机数据(入口/出口共2组,钢卷ID + 4个数值) |
报警跟踪(update_alarm_info()):
- 查询 DB2 视图
FV_RESULT_JOIN_EQPID,统计最近 3 天的报警 isAlarm = 0: 无报警;isAlarm = 1: 有新报警(statuscode=100);isAlarm = 2: 仅跟踪报警(statuscode=200)
钢卷信息(update_coil_info()):
- 从 DB2
FV_DSC_PDI_DATA读取当前生产中的钢卷数据(最多4条) - 每条包含:入口外径、出口外径、厚度、宽度、重量、长度、钢种等9个字段
3. 共享内存环形缓冲区(EqpmRecord)
- 路径:
/users/dsc/shm/EqpmRecord_boost.mmap(500MB) - 结构:
Map<int, EqpmRecord>,天偏移量为 key,存储每日重量和长度 - 容量: 3650天(10年)
- 元数据:
TimeRecord记录有效时间范围和日均产量
目录结构
eqpm/
├── eqpm.cc/h # 进程入口
├── eqpm_icei.cc/h # ICE 接口(处理事件和定时回调)
├── eqpm_alg.cc/h # 预测性维护算法
├── eqp_status.cc/h # 实时状态监控、遥测解码
├── EqpmRecord.h # 共享内存环形缓冲区定义
├── utility.cc/h # 时间工具(时区感知、UTC+8)
├── jsonReader.hpp # JSON 文件读取工具
├── rule_info.h # 规则信息结构体(暂未使用)
├── table_struct/ # DB2 表结构
│ ├── fv_pdi.h # 卷材产量视图
│ ├── t_eqp_data.h # 设备规则配置
│ ├── t_eqp_repair.h # 检修记录(输出)
│ ├── FV_RESULT_JOIN_EQPID.h # 报警信息视图
│ └── FV_DSC_PDI_DATA.h # 钢卷信息视图
├── json/ # JSON 模板与配置
│ ├── eqp_status.json # 输出模板
│ ├── eqp_status_config.json # 遥测解码映射
│ └── eqpm.json # 测试用 MQ 消息
└── CMakeLists.txt
与其它进程的关系
| 进程 | 关系 |
|---|---|
| eqpalg | eqpalg 产生设备报警 → eqpm 查询 FV_RESULT_JOIN_EQPID 获取报警统计 |
| RICS | 同系统内独立模块,RICS 做规则配置展示 |
| dsm | 同系统内独立模块,dsm 做规则数据归档 |
| 前端页面 | eqpm 将实时状态和检修计划写入 Memcached 供前端读取 |
作者
- Cat (null.null.null@qq.com)
- 宝信软件(Baosight Co. Ltd.)