RNG 改动日志
日期:2026-05-13
范围:TestProject/RNG/ 全部改动
目标:将硬编码的信号→数据源映射重构为 JSON 配置驱动的参数化模型架构
概览
| 类别 |
数量 |
| 新增文件 |
20 |
| 修改文件 |
5 |
| 删除文件 |
1 |
| 总行数变化 |
+955 / -244 |
新增文件
| 文件 |
职责 |
json/rng_models.json |
17 个预定义模型模板 |
model/IModel.h |
模型基类接口(evaluate / evaluateBool / linkPeers / reset) |
model/ConstantModel.h |
固定值 y = c |
model/NormalModel.h |
正态分布 y = μ + σ·N(0,1) |
model/LinearModel.h |
线性变化 y = k·t + b,支持 period_ms 周期取模 |
model/SineModel.h |
正弦波 y = A·sin(ω·t + φ) + offset |
model/UniformModel.h |
均匀随机 y = center ± delta |
model/SpikeModel.h |
随机毛刺注入(概率 × 幅值) |
model/DriftModel.h |
线性漂移 y = base + rate·t,支持 period_ms 周期取模 |
model/CsvReplayModel.h |
CSV 历史数据模拟量回放 |
model/BoolRandomModel.h |
概率随机布尔 |
model/BoolToggleModel.h |
固定周期翻转布尔 |
model/BoolCsvModel.h |
CSV 历史数据布尔回放 |
model/ValvePairModel.h |
阀动作→到位传感器时序仿真(四态状态机) |
model/NotModel.h |
布尔量取反包装器(! 前缀) |
model/CompositeModel.h |
base + noise 组合模型(+ 前缀) |
model/ModelRegistry.h |
工厂注册表声明(单例、模型注册、tables[1] 解析) |
model/ModelRegistry.cc |
工厂注册表实现(JSON 加载、12 种模式注册、语法解析、valve_pair 关联) |
README.md |
完整项目文档 |
修改文件
| 文件 |
改动内容 |
Generator.h |
新增 ModelRegistry& registry 引用成员 |
Generator.cc |
删除 ~150 行硬编码 if-else 链和 10 个全局 CSV 变量;替换为三遍扫描(创建→链接→求值) |
RNG.cc |
启动时加载 rng_models.json,带 try-catch 保护 |
CMakeLists.txt |
新增 aux_source_directory(./model MODEL_DIR) |
read_csv.hpp |
修复:is_same_v 加 std:: 前缀;std::exit(1) 改为 throw std::runtime_error;移除重复 #pragma once |
删除文件
| 文件 |
原因 |
BaseData.h |
仅被旧 Generator.cc 使用,重构后无引用 |
同时修改的外部文件
| 文件 |
改动 |
原因 |
RandT.h (TestProject/RNG/) |
sqrt(sigma) → sigma |
修正标准差语义:参数含义从方差改为标准差 |
架构变更
旧架构
RNG_icei → Generator::wtite_in_shm()
├─ if (item == "BR1_1_V_act") → 硬编码 CSV 列
├─ else if (item == "BR2_2_I_act") → 硬编码 CSV 列
├─ ... 150+ 行 strcmp 链
└─ else → RandT::RandT(-0.01, 0.01)
新架构
rng_models.json ──────────┐
├─ ModelRegistry → 12 个 IModel 子类
DB2 T_LOV_FDAAITEM ──────┘ │
tables[1] 字段 │ getOrCreate(spec, defaultVal, itemName)
▼
RNG_icei → Generator::wtite_in_shm()
├─ Pass 1: 创建模型实例 (per signal key)
├─ Pass 2: 链接 valve_pair → 动作信号
└─ Pass 3: model->evaluate(t) / evaluateBool(t)
tables[1] 语法
| 格式 |
含义 |
模型名 |
引用 JSON 中的模型模板 |
csv:文件:列号 |
内联 CSV 数据回放 |
基模型+噪声模型 |
组合模型 |
pair模型:动作模型 |
阀到位传感器引用动作信号 |
!模型引用 |
布尔量取反 |
空 / default |
默认 normal_tiny |
可复用设计
新增模型只需三步,不改现有代码:
- 创建
model/NewModel.h,继承 IModel,实现 evaluate() 或 evaluateBool()
- 在
ModelRegistry.cc 构造函数中加一行 registerMode(...)
- 在
rng_models.json 中添加模板(可选)