eis/dsm/dsm_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

6.2 KiB
Raw Permalink Blame History

dsm — 数据存储管理

概述

dsmData Save Manager / 数据存储管理)是 EIS 系统中的历史数据归档服务。它的核心职责是:

  • 周期性从 iHyperDB 工业历史数据库查询指定规则的历史数据
  • 将查询到的数据(标签值 + 时间戳)保存为 JSON 文件在磁盘上
  • 按规则 ID 和日期组织文件,区分正常数据和报警数据

进程架构

dsm 作为单个 PACE 平台组件运行,注册 ICE 端点 "baosight/dsm"。它被动接收其他进程推送的规则 ID 列表,然后定时从 iHyperDB 拉取数据归档。

  eqpalg / 其它进程
       │
       │ ICE SendDataShort(99999, {"ruleid": [...]})
       ▼
  ┌──────────────────────────────────────────┐
  │              dsm 进程                     │
  │                                           │
  │  dsmICEI::SendDataShort(99999)            │
  │       │                                   │
  │       ▼                                   │
  │  DsmAlg::dispose()  → need_ruleid_        │
  │                                           │
  │  dsmICEI::TimeNotify()                    │
  │       │                                   │
  │       ▼                                   │
  │  DsmAlg::timed_task()                     │
  │       │                                   │
  │       ├→ dsm_handle(ruleid)               │
  │       │    ├─ 读共享内存 ZONE10 获取配置    │
  │       │    ├─ DataQuery → iHyperDB 查询    │
  │       │    └─ save_json_file() → 写磁盘    │
  │       │                                   │
  └───────┼───────────────────────────────────┘
          │
          ▼
  /dscdata/RuleNormData/<ruleid>/<yyyy-mm-dd>.json   (正常数据)
  /dscdata/RuleAlertData/<ruleid>/<yyyy-mm-dd>.json  (报警数据)

ICE 接口

方法 事件号 说明
SendDataShort 99999 接收规则 ID 列表,解析 JSON {"ruleid": [...]} 存入 need_ruleid_
SendDataLong 未实现
TimeNotify 定时触发 timed_task(),处理所有待处理的规则

定时器根据 config/config.json 中的 CronTab 配置触发(默认每分钟第 18、19 秒各执行一次)。

核心模块

1. DsmAlg — 数据归档调度

方法 说明
dispose(event_no, seq) 解析 ICE 消息中的 JSON提取 ruleid 数组存入 need_ruleid_
timed_task() 遍历 need_ruleid_,调用 dsm_handle() 处理每个规则
dsm_handle(ruleid) 核心归档逻辑(见下)

dsm_handle() 工作流程

  1. 从共享内存 ZONE10 读取该 ruleidDataInfo(含 start/end/tags/data_type
  2. 根据 data_type 确定输出目录:
    • flag=0/dscdata/RuleNormData/(正常数据)
    • flag=1/dscdata/RuleAlertData/(报警数据)
  3. 构建文件路径:<root>/<ruleid>/<yyyy-mm-dd>.json
  4. 如果文件已存在则跳过(防止重复写入)
  5. 调用 DataQuery 从 iHyperDB 拉取数据
  6. 调用 UtilityTools::save_json_file() 写入磁盘

2. DataQuery — iHyperDB 查询

通过 mix_cc::ihd API 查询工业历史数据库:

  • 输入: 标签名称列表 + 时间范围
  • 输出: JSON 对象,每个标签对应一个 vector<double> 值数组,外加 "time" 时间戳数组(毫秒 epoch
  • 连接: config.json 中配置的 10.3.226.3:5673

3. 共享内存 ZONE10

  • 区名: "ZONE10"
  • 结构: CMemMap<string, DataInfo>
  • 容量: 最多 5000 条规则
  • DataInfo 字段:
    • start / end: 时间范围epoch 毫秒)
    • tags: 最多 30 个标签名,每个 50 字符
    • flag: 0=正常数据1=报警数据

4. 定时调度

根据 config/config.jsonICE CronTab 每整分钟的第 18 秒第 19 秒触发 TimeNotify。ICE 代理列表包含 "baosight/ProxyTest""baosight/pyml"

数据流

 其他进程推送 ruleId
       │
       ▼
 dsm.process 维护 need_ruleid_ 列表
       │
       │ (每分钟两次)
       ▼
 共享内存 ZONE10 → 读取 DataInfo (start/end/tags/flag)
       │
       ▼
 iHyperDB 查询 → Eigen Matrix → JSON 转换
       │
       ▼
 /dscdata/
   ├── RuleNormData/<ruleid>/YYYY-MM-DD.json
   └── RuleAlertData/<ruleid>/YYYY-MM-DD.json

与其它进程的关系

进程 关系
eqpalg eqpalg 产生报警和规则统计,写入共享内存 ZONE10dsm 据此归档历史数据eqpalg-mon 的 TimeNotify(5) 定期向 dsm 发送 ruleId JSON
RICS 独立模块RICS 做规则配置展示,不直接交互
eqpm 独立模块eqpm 做设备点检管理,不直接交互

dsm 本质上是 eqpalg 的数据归档下游 — eqpalg 负责检测和报警dsm 负责将相关规则的原始数据拉取保存到磁盘,供后续离线分析和问题追溯使用。

目录结构

dsm/
├── dsm.cc/h               # 进程入口
├── dsm_icei.cc/h          # ICE 接口
├── dsm_alg.cc/h           # 数据归档调度
├── data_query.cc/h        # iHyperDB 数据查询
├── utility.cc/h           # 时间/文件系统工具
├── public.h               # DataInfo / DsmMapConfig 数据结构
├── table_struct/          # DB2 表结构(当前未直接使用)
│   ├── fv_pdi.h
│   ├── t_eqp_data.h
│   └── t_eqp_repair.h
├── json/                  # 测试/模板数据
│   ├── norm_info.json
│   └── eqp_status.json
└── CMakeLists.txt

配置文件(项目级)

文件 用途
config/config.json DB2 凭据、IHDB 连接参数、共享内存路径、样本目录、CronTab 调度
config/dsfconfig.json DSF 数据源订阅配置(服务器 10.64.3.20:1234
config/zone.cfg 共享内存区域定义(含 ZONE10

作者