121 lines
5.6 KiB
Markdown
121 lines
5.6 KiB
Markdown
|
|
# 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.)
|