EnerOS v0.23.0 版本说明
发布日期:2025-08-03 版本代号:Analysis Git Tag:v0.23.0 支持状态:稳定(Stable) Crate 总数:56(新增 4 个) 测试用例数:7100+(新增 500+)
概述
EnerOS v0.23.0「Analysis」是电网分析工具专项版本,为调度员与智能体提供完整的电网分析能力。电力系统运行需要持续进行安全评估:N-1 校验确保任一元件故障后系统仍能稳定运行,短路计算为保护整定提供依据,暂态稳定分析评估大扰动后的系统动态行为,小信号分析揭示系统在小扰动下的振荡特性。v0.23.0 将这些分析工具从独立软件下沉为内核服务,Agent 可通过系统调用直接调用。
本版本引入了四大核心分析能力:N-1 校验(N-1 Contingency Verification)、短路计算(Short Circuit Calculation)、暂态稳定分析(Transient Stability Analysis)、小信号分析(Small Signal Analysis),并统一为 eneros-analysis 工具集,支持并行计算与增量分析。
设计哲学上,v0.23.0 践行「分析即服务」——所有分析能力以内核服务形式提供,Agent 无需自行实现分析算法,通过系统调用即可获取结果。分析结果以结构化报告形式返回,便于 Agent 进一步决策。
关键数据
| 指标 | 数值 | 说明 |
|---|---|---|
| N-1 校验(IEEE 118) | 1.2s | 118 个故障 |
| N-1 校验(1000 节点) | 8.5s | 1500 个故障 |
| 短路计算(三相) | 15ms | 单故障 |
| 暂态稳定(10s 仿真) | 350ms | 100 节点 |
| 小信号分析(1000 节点) | 280ms | 全特征值 |
| 新增 Crate | 4 | 分析相关 |
| 新增测试 | 500+ | 含 IEEE 标准算例 |
新特性
1. 电网分析工具集
引入 eneros-analysis Crate,统一封装电网分析能力,提供一致的服务接口。
服务接口
use eneros_analysis::{AnalysisService, AnalysisRequest, AnalysisResult};
let service = AnalysisService::new(&network);
// 统一调用入口
let result: AnalysisResult = service.analyze(AnalysisRequest::N1 {
contingencies: ContingencySet::all_elements(),
check: Check::all(),
}).await?;
// 结果结构化
match result {
AnalysisResult::N1(report) => {
println!("通过率: {:.1}%", report.pass_rate());
for v in report.violations() {
println!("越限: {}", v);
}
}
_ => unreachable!(),
}
分析能力清单
| 分析类型 | 用途 | 计算复杂度 | 并行度 |
|---|---|---|---|
| N-1 校验 | 静态安全评估 | O(n) | 高 |
| N-2 校验 | 严重故障评估 | O(n²) | 高 |
| 短路计算 | 保护整定 | O(1) | 中 |
| 暂态稳定 | 动态安全评估 | O(t×n) | 中 |
| 小信号分析 | 振荡分析 | O(n³) | 低 |
| 谐波分析 | 电能质量 | O(n log n) | 中 |
2. N-1 校验
引入 eneros-analysis-n1 Crate,提供 N-1 静态安全校验。对系统中每个元件(线路、变压器、发电机)逐一假设故障,校验故障后系统是否满足所有约束。
基础用法
use eneros_analysis_n1::{N1Verifier, Contingency, Check};
let verifier = N1Verifier::new(&network)
.parallelism(8) // 8 路并行
.incremental(true); // 增量分析
// 校验所有线路 N-1
let report = verifier.verify(
Contingency::all_lines(),
Check::all(), // 电压 + 热稳定 + 备用
).await?;
for case in report.failed_cases() {
println!("故障 {}: {} 越限 {:.1}%",
case.contingency, case.violation_type, case.severity);
}
增量分析
// 仅分析受拓扑变化影响的故障
let delta = verifier.verify_delta(
TopologyChange::SwitchOpened(switch_id),
).await?;
println!("受影响故障: {}", delta.affected_count);
println!("新增越限: {}", delta.new_violations.len());
N-1 校验结果
| 故障类型 | 总数 | 通过 | 越限 | 通过率 |
|---|---|---|---|---|
| 线路故障 | 186 | 182 | 4 | 97.8% |
| 变压器故障 | 32 | 32 | 0 | 100% |
| 发电机故障 | 24 | 23 | 1 | 95.8% |
| 母线故障 | 12 | 11 | 1 | 91.7% |
3. 短路计算
引入 eneros-analysis-shortcircuit Crate,提供短路电流计算。支持三相短路、两相短路、单相接地、两相接地四种故障类型,遵循 IEC 60909 标准。
故障计算
use eneros_analysis_shortcircuit::{ShortCircuit, FaultType, FaultLocation};
let sc = ShortCircuit::new(&network)
.method(Method::IEC60909)
.voltage_level(VoltageLevel::All);
// 计算母线 42 处三相短路
let result = sc.calculate(
FaultLocation::Bus(42),
FaultType::ThreePhase,
).await?;
println!("短路电流: {:.2} kA", result.current_kA);
println!("短路容量: {:.1} MVA", result.mva);
println!("峰值电流: {:.2} kA", result.peak_kA);
扫描计算
// 全网短路扫描
let scan = sc.scan_all(FaultType::ThreePhase).await?;
for bus in scan.high_current_buses(threshold_kA: 20.0) {
println!("母线 {}: {:.2} kA", bus.id, bus.current_kA);
}
短路计算参数
| 故障类型 | 对称分量 | 计算方法 | 标准 |
|---|---|---|---|
| 三相短路 | 正序 | 等值电路 | IEC 60909 |
| 两相短路 | 正序+负序 | 等值电路 | IEC 60909 |
| 单相接地 | 正+负+零序 | 等值电路 | IEC 60909 |
| 两相接地 | 正+负+零序 | 等值电路 | IEC 60909 |
4. 暂态稳定分析
引入 eneros-analysis-transient Crate,提供暂态稳定分析。基于时域仿真,模拟大扰动(如三相短路)后系统的动态行为,评估发电机能否保持同步。
时域仿真
use eneros_analysis_transient::{TransientSimulator, Disturbance, Solver};
let simulator = TransientSimulator::new(&network)
.solver(Solver::Rk45) // Runge-Kutta 自适应
.time_step(Duration::milliseconds(1))
.duration(Duration::seconds(10));
// 模拟三相短路故障
let disturbance = Disturbance::Fault {
location: BusId::from(42),
type: FaultType::ThreePhase,
start: Duration::milliseconds(0),
clear: Duration::milliseconds(100), // 100ms 切除
};
let result = simulator.run(disturbance).await?;
println!("最大功角差: {:.1}°", result.max_angle_diff());
println!("稳定判定: {}", if result.is_stable() { "稳定" } else { "失稳" });
功角曲线
// 获取发电机功角曲线
for gen in result.generators() {
let curve = result.angle_curve(gen);
println!("{}: 最大角 {:.1}°, 终值 {:.1}°",
gen.name, curve.max(), curve.last());
}
暂态稳定指标
| 指标 | 阈值 | 判定 |
|---|---|---|
| 最大功角差 | < 180° | 稳定 |
| 频率偏差 | < 0.5 Hz | 稳定 |
| 电压跌落 | > 0.0 pu | 稳定 |
| 阻尼比 | > 0.05 | 良好 |
5. 小信号分析
引入 eneros-analysis-smallsignal Crate,提供小信号稳定分析。通过线性化系统方程,计算特征值与参与因子,评估系统在小扰动下的振荡特性。
特征值分析
use eneros_analysis_smallsignal::{SmallSignal, EigenAnalysis};
let ss = SmallSignal::new(&network)
.operating_point(¤t_state);
// 计算全特征值
let eigen: EigenAnalysis = ss.eigenvalues().await?;
for ev in eigen.oscillatory_modes() {
println!("频率: {:.2} Hz, 阻尼比: {:.2}%, 特征值: {:.4}",
ev.frequency_hz, ev.damping_ratio * 100.0, ev.value);
}
参与因子
// 识别振荡模式的相关发电机
for mode in eigen.low_damping_modes(threshold: 0.05) {
let participants = mode.participants().top(3);
println!("振荡模式 {:.2} Hz:", mode.frequency_hz);
for p in participants {
println!(" {}: 参与度 {:.2f}", p.generator, p.factor);
}
}
小信号分析结果
| 模式 | 频率(Hz) | 阻尼比(%) | 类型 | 评估 |
|---|---|---|---|---|
| 1 | 0.75 | 8.2 | 区域间 | 良好 |
| 2 | 1.23 | 5.1 | 本地 | 良好 |
| 3 | 0.92 | 3.2 | 区域间 | 警戒 |
| 4 | 1.85 | 12.5 | 本地 | 良好 |
| 5 | 0.65 | 2.1 | 区域间 | 警告 |
改进
- 并行计算:N-1 校验支持多线程并行,8 核下加速 6.5 倍
- 增量分析:N-1 校验支持增量更新,拓扑小变化时仅计算受影响部分
- 结果缓存:相同工况下的分析结果按指纹缓存,重复查询从秒级降至毫秒级
- 报告导出:分析结果支持 CSV、JSON、PDF 三种格式导出
Bug 修复
- 修复
eneros-analysis-n1在电气岛分裂后校验结果错误的问题(#2308) - 修复
eneros-analysis-shortcircuit零序网络构建错误的问题(#2312) - 修复
eneros-analysis-transient在大步长下数值发散的问题(#2317) - 修复
eneros-analysis-smallsignal特征值排序不稳定的问题(#2322)
破坏性变更
AnalysisService::analyze:参数从&AnalysisRequest改为AnalysisRequest(所有权转移)N1Report:字段cases重命名为contingency_cases,提供更清晰语义
升级指南
- 执行
cargo update -p eneros-analysis - 更新
AnalysisService::analyze调用以适配所有权转移 - 将
N1Report.cases字段访问更新为contingency_cases - 参考
docs/migration/v0.23.0.md获取详细迁移步骤