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