- 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
155 lines
6.5 KiB
Markdown
155 lines
6.5 KiB
Markdown
# eqpm — 设备点检与状态管理
|
||
|
||
## 概述
|
||
|
||
eqpm(**Eq**uipment **P**oint-inspection **M**anagement / 设备点检管理)是 EIS 系统中的设备预测性维护和实时状态监控服务。它做两件事:
|
||
|
||
1. **预测性维护** — 根据生产累计指标(处理重量、长度或经过天数),计算设备何时需要检修,预测下次检修日期
|
||
2. **实时状态监控** — 解码遥测二进制数据,跟踪报警信息,将设备状态推送到 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 天满的那天 |
|
||
|
||
**工作流程**:
|
||
|
||
1. **`update_data()`** — 从 FV_PDI 视图读取每日钢卷产量(长度、重量),写入共享内存环形缓冲区(10年,3650天)
|
||
2. **`update_slope()`** — 计算 3 日滑动平均的日产量(`length_slope_`、`weight_slope_`),用于外推预测
|
||
3. **`update_repair()`** — 从 DB2 加载设备规则配置,针对每条有规则类型的设备计算累计值和下次检修日期
|
||
4. **`update_db2()`** — 将计算结果写回 DB2 `T_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.)
|