- 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
5.6 KiB
5.6 KiB
RICS — 规则信息集中服务
概述
RICS(Rule 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}),对每种算法:
alg_handle(algId)— 从 DB2T_RULE_CFG读取该算法类型下的所有规则配置exp_handle()— 按算法 ID 解析ruleParamJSON,提取表达式字符串、参数、阈值等get_json_by_algid()— 将所有规则组装为{columns: [...], data: [[...]]}的表格 JSONwrite_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.)