跳到主内容

v0.23.0 版本说明

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.2s118 个故障
N-1 校验(1000 节点)8.5s1500 个故障
短路计算(三相)15ms单故障
暂态稳定(10s 仿真)350ms100 节点
小信号分析(1000 节点)280ms全特征值
新增 Crate4分析相关
新增测试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 校验结果

故障类型总数通过越限通过率
线路故障186182497.8%
变压器故障32320100%
发电机故障2423195.8%
母线故障1211191.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(&current_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)阻尼比(%)类型评估
10.758.2区域间良好
21.235.1本地良好
30.923.2区域间警戒
41.8512.5本地良好
50.652.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,提供更清晰语义

升级指南

  1. 执行 cargo update -p eneros-analysis
  2. 更新 AnalysisService::analyze 调用以适配所有权转移
  3. N1Report.cases 字段访问更新为 contingency_cases
  4. 参考 docs/migration/v0.23.0.md 获取详细迁移步骤