eis/TestProject/RNG/CHANGELOG.md

4.1 KiB
Raw Blame History

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_vstd:: 前缀;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

可复用设计

新增模型只需三步,不改现有代码:

  1. 创建 model/NewModel.h,继承 IModel,实现 evaluate()evaluateBool()
  2. ModelRegistry.cc 构造函数中加一行 registerMode(...)
  3. rng_models.json 中添加模板(可选)