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

5.6 KiB
Raw Permalink Blame History

RICS — 规则信息集中服务

概述

RICSRule Info Centralized Service是 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

作者