eis/RICS/RICS_readme.md

121 lines
5.6 KiB
Markdown
Raw Permalink Normal View History

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