eis/RICS/RICS_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

121 lines
5.6 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.

# RICS — 规则信息集中服务
## 概述
RICS**R**ule **I**nfo **C**entralized **S**ervice是 EIS 系统中的规则配置信息集中展示服务。它**不执行算法**,而是将 DB2 中配置的所有规则解析、格式化为结构化 JSON然后推送到 Memcached 供前端页面和仪表盘使用。
与 eqpalg 不同RICS 不做实时数据监控和报警,它专职负责**规则的配置信息的读取和格式化输出**。
## 进程架构
RICS 作为单个 PACE 平台组件运行,注册 ICE 端点 `"baosight/RICS"`,通过定时器周期性刷新全量规则信息。
```
┌─────────────────────────────────────────────┐
│ RICS 进程 │
│ │
│ TimeNotify() ──→ RICSAlg::timed_task() │
│ │ │
│ ├→ alg_handle(algId) │
│ │ ├─ 读 T_RULE_CFG │
│ │ ├─ 解析 ruleParam │
│ │ └─ exp_handle() │
│ │ │
│ ├→ get_json_by_algid() │
│ │ └─ 格式化为JSON │
│ │ │
│ └→ write_memcaced() │
│ └─ Memcached 写入 │
└─────────────────────────────────────────────┘
```
## ICE 接口
| 方法 | 说明 |
|------|------|
| `SendDataShort(99999, seq)` | 调试/测试入口,调用 `RICS_alg_->dispose()` |
| `SendDataLong(...)` | 复杂数据接口(未实现) |
| `TimeNotify(...)` | 定时触发,调用 `timed_task()` 全量刷新 |
## 核心工作流
### `timed_task()` — 定时刷新
定时触发后,遍历 **15 种算法 ID**`{1,2,3,4,5,6,7,8,12,13,14,15,16,17,18}`),对每种算法:
1. **`alg_handle(algId)`** — 从 DB2 `T_RULE_CFG` 读取该算法类型下的所有规则配置
2. **`exp_handle()`** — 按算法 ID 解析 `ruleParam` JSON提取表达式字符串、参数、阈值等
3. **`get_json_by_algid()`** — 将所有规则组装为 `{columns: [...], data: [[...]]}` 的表格 JSON
4. **`write_memcaced()`** — 以 `"{unitNo}_Alg_{algId}"` 为 key 写入 Memcached
### 算法参数解析 (`exp_handle()`)
针对不同算法 ID 提取不同的参数字段:
| algId | 算法类型 | 表达式数 | 关键参数 |
|-------|----------|---------|----------|
| 1 | 简单报警 | 1 | — |
| 2 | 阈值监控 | 2 | limit_down, limit_up, unit |
| 3 | 动作-反馈(逻辑) | 3 | hold, timeout |
| 4 | 动作-反馈(阈值) | 3 | hold, timeout, limit_down, limit_up |
| 5 | 持续限值 | 2 | hold_time, limit_down, limit_up |
| 6 | 保持时间 | 1 | limit_time(小时) |
| 7 | 出现次数 | 1 | limit_times |
| 8 | 斜率/趋势 | 1 | interval_time, deltaX, diff, CS_AVG_SIZE |
| 12 | 相关性 | 3 | scale, min_len |
| 13 | 相关性+最小长度 | 3 | scale, min_len |
| 14 | 变化率 | 1 | interval_time, deltaX, diff(%), CS_AVG_SIZE |
| 15 | 数据窗口 | 1 | length(100-1000) |
| 16 | 多变量离群 | 2 | detect_mode, limit_warn, limit_error, hold_time |
| 17 | 限幅检查 | 2 | limit_warn, limit_error |
| 18 | 多变量离群v2 | 2 | 同 algId 16 |
### Memcached 输出
- **Key 格式**: `"{unitNo}_Alg_{algId}"`(如 `C308_Alg_1`
- **Value 格式**: `{"columns": [...], "data": [[...]]}`
- 列包含规则ID、规则名称、机组、标签名及中文翻译、表达式、参数等
## 关键技术细节
- **规则配置来源**: DB2 `T_RULE_CFG` 表,其中 `ruleParam` 是 JSON 字符串,包含 tags、before_exec前提条件表达式、function算法参数三大部分
- **中文翻译**: 通过 `BinaryTele` 从共享内存读取 `T_LOV_FDAAITEM` 表,构建 item 名→中文翻译的映射
- **算法 ID 缺失**: 算法 9、10、11 从未在 RICS 中实现展示
## 与 eqpalg 的关系
| 方面 | RICS | eqpalg |
|------|------|--------|
| 职责 | 规则配置展示 | 规则执行与报警 |
| 数据方向 | DB2 → Memcached只读 | 共享内存 → 算法 → 报警 |
| 触发方式 | 定时全量刷新 | mon 持续/cron 定时/task 按需 |
| 输出 | Memcached 中的 JSON | 报警、DB2 统计结果 |
**RICS 是 eqpalg 的"配置展示面"** — 它将 eqpalg 所用到的同一批规则配置(来自 `T_RULE_CFG`)格式化后提供给前端,使得操作人员能看到当前正在运行哪些规则、每个规则的参数和表达式是什么。
## 目录结构
```
RICS/
├── RICS.cc/h # 进程入口,启动 ICE 服务
├── RICS_icei.cc/h # ICE 接口,处理电文和定时触发
├── RICS_alg.cc/h # 核心逻辑规则读取、解析、JSON 输出
├── utility.cc/h # 时间工具函数
├── item2chinese.hpp # 标签名→中文翻译映射
├── public.h # RuleInfo / CfgRuleInfo 数据结构
├── table_struct/ # DB2 表结构映射
│ ├── t_rule_cfg.h # 规则配置表
│ ├── t_eqp_data.h # 设备数据表
│ ├── t_eqp_repair.h # 设备检修表
│ └── fv_pdi.h # 卷材生产数据视图
├── json/ # JSON 模板文件
│ ├── eqp_status.json
│ └── norm_info.json
└── CMakeLists.txt
```
## 作者
- Cat (null.null.null@qq.com)
- 宝信软件Baosight Co. Ltd.