- 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
6.2 KiB
6.2 KiB
dsm — 数据存储管理
概述
dsm(Data 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() 工作流程:
- 从共享内存
ZONE10读取该ruleid的DataInfo(含 start/end/tags/data_type) - 根据
data_type确定输出目录:flag=0→/dscdata/RuleNormData/(正常数据)flag=1→/dscdata/RuleAlertData/(报警数据)
- 构建文件路径:
<root>/<ruleid>/<yyyy-mm-dd>.json - 如果文件已存在则跳过(防止重复写入)
- 调用
DataQuery从 iHyperDB 拉取数据 - 调用
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 产生报警和规则统计,写入共享内存 ZONE10,dsm 据此归档历史数据;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.)