eis/eqpm/eqpm_readme.md
Huamonarch bd7e93ae68 Add READMEs for RICS, eqpm, dsm and update eqpalg README with corrections
- 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
2026-05-09 11:46:17 +08:00

155 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 写入 Memcachedkey: `"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.