# zinit — 数据库初始化服务 ## 概述 zinit(**Z**ero **Init** / 零初始化)是 EIS 系统中的 **数据库→共享内存 初始化服务**。它在系统启动时从关系数据库加载静态配置表、参数常量和遥测地址映射到共享内存,供所有 PACE 组件直接访问;运行时接收遥测数据并缓存到共享内存。 ## 进程架构 ``` 启动时 ┌──────────────────────────────────────────┐ │ zinit │ │ │ │ ZInitICEI 构造 │ │ │ │ │ ├→ InitMag::LoadTable() │ │ │ └→ DB2表 → DB2Mem → 共享内存 │ │ │ ├─ T_LOV_FDAAITEM (遥测项目录) │ │ │ ├─ T_LOV_TAB1/TAB2 (映射表) │ │ │ ├─ T_TIME_SET (时间设置) │ │ │ └─ T_PDO_CFG (PDO配置) │ │ │ │ │ └→ InitMag::LoadConstant() │ │ └→ T_LOV_PARAM → GLB_VAR.gbconst│ │ ├─ 各段速度标签名 │ │ ├─ 各段运行状态标签名 │ │ ├─ 事件范围 (START/END) │ │ └─ IHDB 查询间隔等 │ │ │ └──────────────────────────────────────────┘ 运行时 ┌──────────────────────────────────────────┐ │ ICE SendDataShort(eventNo, seq) │ │ │ │ │ ├→ CacheMag::CacheTele() │ │ │ └─ 原始数据 → 共享内存缓存 │ │ │ │ │ ├→ eventNo 1010/1012: │ │ │ CacheMag::ConvertTele() │ │ │ └─ 地址映射处理(位提取等) │ │ │ │ │ └→ eventNo 99999: │ │ InitMag::LoadTable() 重新加载 │ │ │ └──────────────────────────────────────────┘ ``` ## 核心模块 ### InitMag — 静态数据加载 | 方法 | 功能 | |------|------| | `LoadTable()` | 从数据库表加载遥测项目录、时间设置、PDO 配置到共享内存,使用 `DB2Mem` 模板 | | `LoadConstant()` | 从 `T_LOV_PARAM` 表加载系统参数到全局变量 `GLB_VAR.gbconst` | **加载的关键参数**: - 各工艺段(EIS/ENT/ACD/AXT/TCM)的速度标签名和运行状态标签名 - 事件号范围(`EVENT_EIS_START/END`) - IHDB 查询间隔(`EIS_QIHD_INTERVAL_TIME`) - 编码器参数、卷材尺寸限制、焊缝跟踪范围、剪切位置等 ### CacheMag — 运行时遥测缓存 | 方法 | 功能 | |------|------| | `CacheTele(eventNo, seq)` | 原始二进制数据写入共享内存环形缓冲区 | | `ConvertTele(eventNo, seq)` | 根据地址映射解析分解遥测数据(位提取/类型转换) | ## ICE 接口 | 方法 | 说明 | |------|------| | `SendDataShort(eventNo, seq)` | eventNo 1010/1012: 转换遥测;eventNo 99999: 重新加载配置 | | `SendDataLong` | 未实现 | | `TimeNotify` | 未实现 | ## 共享内存架构 所有数据通过 `GlobMem` 管理的命名共享内存区域存取: | 数据类型 | 内存结构 | 用途 | |----------|----------|------| | 数据库表 | `DB2Mem` | 关系表 → 固定大小内存区域 | | PLC 遥测 | `CMemTable` | 运行时原始数据环形缓冲 | | 全局变量 | `GLB_VAR` | 系统参数常量 | ## 源文件 ``` src/zinit/ ├── zinit.cpp # PACE 组件入口 ├── ZInitICEI.cpp # ICE servant:初始化触发 + 运行时缓存 ├── InitMag.cpp # 数据库→共享内存加载器 └── CacheMag.cpp # 地址映射构建 + 遥测转换 ```