跳到主内容

设备模型库

核心能力

设备模型库

EnerOS 内置完整的电力设备模型库,覆盖传输线、变压器、发电机、负荷、FACTS、储能等主要设备类型。模型遵循 IEC 61970 CIM 与 IEEE 标准,所有参数均以原生 Rust 结构体表示,避免运行时反序列化开销。

设备模型库是 EnerOS Power-Native 内核的「字典」:拓扑告诉我们电网如何连接,设备模型告诉我们连接处是什么。潮流计算、保护整定、暂态仿真、约束校验都依赖设备模型提供准确的电气参数。

架构总览

┌─────────────────────────────────────────────────┐
│  应用层:潮流 / 保护 / 暂态 / 规划              │
└───────────────────┬─────────────────────────────┘
                    │ Equipment::get(id)
┌───────────────────┴─────────────────────────────┐
│  eneros-equipment (设备模型库)                  │
│  ┌──────────┐ ┌──────────┐ ┌──────────────┐    │
│  │ 稳态模型 │ │ 暂态模型 │ │ 实时域模型   │    │
│  └──────────┘ └──────────┘ └──────────────┘    │
│  ┌──────────────────────────────────────────┐   │
│  │  CIM / CGMES 互操作层                    │   │
│  └──────────────────────────────────────────┘   │
│  ┌──────────────────────────────────────────┐   │
│  │  版本管理 / 参数校验 / 热替换            │   │
│  └──────────────────────────────────────────┘   │
└─────────────────────────────────────────────────┘

设备模型类型

传输线

支持 Π 型集中参数与分布参数(Bergeron 模型)。

use eneros_equipment::{TransmissionLine, LineModel, LineParams};

let line = TransmissionLine::new(LineParams {
    r: 0.025,        // Ω/km
    x: 0.3,          // Ω/km
    b: 0.015,        // μS/km
    length: 150.0,   // km
    model: LineModel::Pi,
    rating_mva: 500.0,
});

// 切换为分布参数模型(长线路推荐)
let distributed_line = line.with_model(LineModel::Bergeron {
    velocity: 2.9e8, // m/s 行波速度
});

// 计算正序参数
let z = line.series_impedance();     // Ω
let y = line.shunt_admittance();     // S
println!("Z = {:.4} Ω, Y = {:.2e} S", z, y);

LineParams 字段说明

字段类型含义单位
rf64单位长度正序电阻Ω/km
xf64单位长度正序电抗Ω/km
bf64单位长度对地电纳μS/km
lengthf64线路长度km
modelLineModelPi / Bergeron / FrequencyDependent-
rating_mvaf64额定容量MVA
emergency_mvaf64紧急容量MVA
gf64单位长度对地电导(可选)μS/km
zero_r / zero_x / zero_bf64零序参数(可选)Ω/km, μS/km

变压器

支持双绕组、三绕组、自耦变压器及带分接头调节(ULRTC)。

use eneros_equipment::{Transformer, TransformerParams, TapChanger};

let xfmr = Transformer::new(TransformerParams {
    sn_mva: 200.0,
    v_hv_kv: 220.0,
    v_lv_kv: 35.0,
    z_percent: 12.5,
    tap: TapChanger::automatic(0.95, 1.05, 17),
});

// 自耦变压器
let auto = Transformer::autotransformer(TransformerParams {
    sn_mva: 500.0,
    v_hv_kv: 500.0,
    v_lv_kv: 220.0,
    z_percent: 10.0,
    tap: TapChanger::automatic(0.90, 1.10, 25),
});

// 三绕组变压器
let three = Transformer::three_winding(
    ThreeWindingParams {
        s1_mva: 200.0, s2_mva: 200.0, s3_mva: 100.0,
        v1_kv: 220.0, v2_kv: 110.0, v3_kv: 35.0,
        z12_percent: 12.5, z13_percent: 15.0, z23_percent: 8.0,
    },
);

TapChanger 类型

变体含义典型用途
None无分接头配变小变比
Fixed(ratio)固定变比规划计算
Manual(tap_idx, range)手动调节离线分析
Automatic(min, max, steps)自动调压在线运行
OnLoad(tap_idx, range, deadband)有载调压实时控制

发电机

支持同步机六阶模型(IEEE Std 1110)、励磁系统(IEEE Type ST1/AC4A)、调速器(GOV1)与 PSS。

use eneros_equipment::{SynchronousMachine, GenModel, ExciterType, GovernorType, PssType};

let gen = SynchronousMachine::new()
    .model(GenModel::GENROU)
    .rating_mva(600.0)
    .xd(1.8).xq(1.7).xd_prime(0.3).xq_prime(0.55)
    .inertia_h(5.0)
    .damping_d(0.0)
    .exciter(ExciterType::ST1A)
    .governor(GovernorType::GOV1)
    .pss(PssType::PSS2A);

// 计算同步转速与惯性常数
let m = gen.inertia_constant(); // MJ·s/MVA
let sn = gen.rated_speed_rad(); // rad/s (50Hz)
println!("H = {:.2} s, ωn = {:.2} rad/s", m, sn);

GenModel 变体

变体阶数适用场景
GENROU6 阶(凸极)暂态稳定详细建模
GENSAL5 阶(隐极)汽轮机
GENSAE4 阶简化暂态
GENTPF3 阶长期动态
CLASSICAL2 阶(恒暂态电抗后电势)规划级粗算
SC_2_ORDER2 阶短路模型故障计算

负荷模型

支持 ZIP、指数、感应电动机、综合负荷(CLOD)等模型。

use eneros_equipment::{Load, LoadModel};

// ZIP 负荷模型
let zip_load = Load::new(bus_id)
    .model(LoadModel::ZIP {
        a_p: 0.4, b_p: 0.4, c_p: 0.2,
        a_q: 0.5, b_q: 0.3, c_q: 0.2,
    })
    .p_mw(50.0)
    .q_mvar(15.0);

// 指数负荷模型
let exp_load = Load::new(bus_id)
    .model(LoadModel::Exponential { alpha: 1.5, beta: 2.0 })
    .p_mw(30.0)
    .q_mvar(10.0);

// 感应电动机负荷(IEEE 5 阶)
let motor_load = Load::new(bus_id)
    .model(LoadModel::InductionMotor {
        rs: 0.02, xs: 0.10, rr: 0.02, xr: 0.10, xm: 3.5,
        inertia_h: 1.0,
    })
    .p_mw(20.0)
    .q_mvar(5.0);

储能与 FACTS

支持电池储能(BESS)、SVG/STATCOM、TCSC、UPFC 等设备。

use eneros_equipment::{Bess, Statcom, Tcsc, Upfc, StatcomMode};

let bess = Bess::new()
    .capacity_mwh(20.0)
    .power_mw(10.0)
    .soc_range(0.2, 0.9)
    .efficiency_charge(0.95)
    .efficiency_discharge(0.93)
    .degradation_model(DegradationModel::Linear { cycles: 6000 });

let statcom = Statcom::new()
    .rating_mvar(50.0)
    .control_mode(StatcomMode::Voltage(1.0))
    .response_time_ms(20);

let tcsc = Tcsc::new()
    .rating_mvar(200.0)
    .compensation_range(-0.5, 0.5)
    .control_mode(TcscMode::PowerFlow(150.0));

let upfc = Upfc::new()
    .shunt_mvar(100.0)
    .series_mvar(50.0)
    .control_mode(UpfcMode::VoltageAndFlow(1.0, 200.0));

CIM 兼容

设备库与 IEC 61970 CIM 完全互操作,支持 CIM XML / CGMES 导入导出:

use eneros_equipment::cim::{CimImporter, CimExporter, CimProfile};

// 从 CIM XML 导入
let network = CimImporter::new()
    .profile(CimProfile::Eq)  // Equipment
    .from_xml_file("grid.xml")?;

// 从 CGMES 导入(多文件)
let network = CimImporter::new()
    .profile(CimProfile::EqBoundary)
    .from_cgmes_bundle("EQ.xml", "TP.xml", "SV.xml", "SSH.xml")?;

// 导出为 CGMES
let xml = CimExporter::to_cgmes(&network, CimProfile::Eq)?;
std::fs::write("export_eq.xml", xml)?;

// 导出为 CIM JSON
let json = CimExporter::to_json(&network)?;

CIM 兼容性矩阵

CIM 版本导入导出配置文件
IEC 61970-301 v6Core, Topology, Equivalents
CGMES 2.4.15EQ, TP, SV, SSH, DY
CGMES 3.0.0EQ, TP, SV, SSH, DY
OpenFMB 2.0部分Wire, LoadControl

模型版本管理

每个设备模型支持版本化,便于回滚与对比:

use eneros_equipment::Version;

let gen_v1 = gen.with_version(Version::new("v2.3-ieee1110"));
let gen_v2 = gen.with_version(Version::new("v2.4-calibrated"));

// 历史记录
let history = gen.version_history();
for v in &history {
    println!("{}: {} @ {}", v.tag, v.checksum, v.created_at);
}

// 对比两个版本
let diff = gen_v1.diff(&gen_v2)?;
println!("变化的字段: {:?}", diff.changed_fields);

// 回滚到历史版本
gen.rollback_to("v2.3-ieee1110").await?;

参数热替换

支持不停机替换设备参数,常用于在线校准:

use eneros_equipment::HotSwap;

// 替换线路参数(拓扑不变)
HotSwap::replace_line_params(line_id, new_params).await?;

// 替换发电机模型(保持运行状态)
HotSwap::replace_gen_model(gen_id, GenModel::GENSAE).await?;

// 替换后内核自动:
//   1. 失效潮流缓存
//   2. 触发约束重算
//   3. 通知订阅的 Agent

设备参数校验

设备库内置物理一致性校验,防止不合理参数:

use eneros_equipment::Validator;

let report = Validator::new()
    .check_impedance_positive()
    .check_thermal_rating()
    .check_voltage_class()
    .validate(&network)?;

for issue in &report.issues {
    println!("[{:?}] {}: {}", issue.level, issue.element, issue.message);
}

校验项

校验项检查内容等级
impedance_positiveR ≥ 0, X > 0Error
thermal_ratingrating_mva > 0Error
voltage_classbase_kv 与电网一致Error
transformer_ratiotap 在合理范围Warning
generator_capacityS_n ≥ P_maxWarning
load_power_factorcos(φ) ∈ [0, 1]Warning
zero_sequence_consistency零序参数合理Warning

性能指标

操作延迟吞吐
创建传输线模型< 1μs-
创建变压器模型< 2μs-
创建发电机六阶模型< 5μs-
创建负荷模型< 1μs-
创建储能模型< 3μs-
CIM 导入(10000 设备)-< 500ms
CGMES 导出(10000 设备)-< 800ms
设备参数热替换< 100μs-
参数校验(1000 设备)< 50ms-
设备查询(按 ID)< 1μs-

测试环境:4 核 / 8GB / Ubuntu 22.04。

设备覆盖矩阵

设备类型稳态模型暂态模型实时域CIM
传输线Π / 分布参数Bergeron
变压器T 型考虑饱和
同步机PV/PQGENROU/GENSAL
感应机等值阻抗五阶模型部分
储能静态一阶 + SOC部分
FACTS(STATCOM)PF 控制详细部分
FACTS(TCSC)串补一阶部分
FACTS(UPFC)PF + V 控制详细部分
直流输电(LCC/VSC)准稳态详细
断路器开合状态触头动态
避雷器静态伏安详细

配置参数

eneros.toml 中设备库相关配置:

[equipment]
# 默认模型精度:detailed / simplified / auto
default_fidelity = "auto"
# 是否启用参数校验
validate_on_load = true
# 是否启用版本管理
versioning = true
# 最大版本数
max_versions = 32
# CIM 导入严格度:strict / lenient
cim_strictness = "strict"
# 默认线路模型:pi / bergeron / frequency_dependent
default_line_model = "pi"
# 是否允许热替换
hot_swap = true
参数类型默认值说明
default_fidelityenumauto默认模型精度
validate_on_loadbooltrue加载时校验
versioningbooltrue启用版本管理
max_versionsu3232单设备最大版本数
cim_strictnessenumstrictCIM 导入严格度
default_line_modelenumpi默认线路模型
hot_swapbooltrue允许热替换参数

与其他能力的关系

关联能力互动方式
电网拓扑一等公民设备实例即拓扑节点的设备参数
物理约束决策热稳定极限来自设备 rating_mva
实时双执行域实时域使用专用精简模型
数字孪生引擎孪生镜像使用设备模型仿真
安全守卫操作票校验检查设备状态
时序原生操作设备参数变化事件入库
多租户与隔离设备按租户命名空间隔离

相关文档