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

161 lines
6.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# dsm — 数据存储管理
## 概述
dsm**D**ata **S**ave **M**anager / 数据存储管理)是 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` 读取该 `ruleid``DataInfo`(含 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.json`ICE 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 |
## 作者
- Cat (null.null.null@qq.com)
- 宝信软件Baosight Co. Ltd.