设备模型库
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 字段说明
| 字段 | 类型 | 含义 | 单位 |
|---|---|---|---|
| r | f64 | 单位长度正序电阻 | Ω/km |
| x | f64 | 单位长度正序电抗 | Ω/km |
| b | f64 | 单位长度对地电纳 | μS/km |
| length | f64 | 线路长度 | km |
| model | LineModel | Pi / Bergeron / FrequencyDependent | - |
| rating_mva | f64 | 额定容量 | MVA |
| emergency_mva | f64 | 紧急容量 | MVA |
| g | f64 | 单位长度对地电导(可选) | μS/km |
| zero_r / zero_x / zero_b | f64 | 零序参数(可选) | Ω/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 变体
| 变体 | 阶数 | 适用场景 |
|---|---|---|
| GENROU | 6 阶(凸极) | 暂态稳定详细建模 |
| GENSAL | 5 阶(隐极) | 汽轮机 |
| GENSAE | 4 阶 | 简化暂态 |
| GENTPF | 3 阶 | 长期动态 |
| CLASSICAL | 2 阶(恒暂态电抗后电势) | 规划级粗算 |
| SC_2_ORDER | 2 阶短路模型 | 故障计算 |
负荷模型
支持 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 v6 | ✅ | ✅ | Core, Topology, Equivalents |
| CGMES 2.4.15 | ✅ | ✅ | EQ, TP, SV, SSH, DY |
| CGMES 3.0.0 | ✅ | ✅ | EQ, 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_positive | R ≥ 0, X > 0 | Error |
| thermal_rating | rating_mva > 0 | Error |
| voltage_class | base_kv 与电网一致 | Error |
| transformer_ratio | tap 在合理范围 | Warning |
| generator_capacity | S_n ≥ P_max | Warning |
| load_power_factor | cos(φ) ∈ [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/PQ | GENROU/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_fidelity | enum | auto | 默认模型精度 |
| validate_on_load | bool | true | 加载时校验 |
| versioning | bool | true | 启用版本管理 |
| max_versions | u32 | 32 | 单设备最大版本数 |
| cim_strictness | enum | strict | CIM 导入严格度 |
| default_line_model | enum | pi | 默认线路模型 |
| hot_swap | bool | true | 允许热替换参数 |
与其他能力的关系
| 关联能力 | 互动方式 |
|---|---|
| 电网拓扑一等公民 | 设备实例即拓扑节点的设备参数 |
| 物理约束决策 | 热稳定极限来自设备 rating_mva |
| 实时双执行域 | 实时域使用专用精简模型 |
| 数字孪生引擎 | 孪生镜像使用设备模型仿真 |
| 安全守卫 | 操作票校验检查设备状态 |
| 时序原生操作 | 设备参数变化事件入库 |
| 多租户与隔离 | 设备按租户命名空间隔离 |