跳到主内容

v0.37.0 版本说明

EnerOS v0.37.0

发布日期:2026-05-23
版本代号:TwinX
Git Tag:v0.37.0
支持状态:稳定(Stable)
Crate 总数:90(新增 6 个)
测试用例数:11400+(新增 700)

概述

EnerOS v0.37.0「TwinX」是数字孪生增强专题版本,将 EnerOS 的数字孪生能力从「二维数据映射」升级为「三维可视化 + 物理仿真 + 沉浸式交互」的完整数字孪生体系。本版本使 EnerOS 能够构建与物理电网 1:1 对应的三维数字孪生体,支撑运维巡检、培训演练、方案预演等场景。

TwinX 版本的核心设计哲学是「虚实同步 + 物理一致」——数字孪生体不仅在外观上与物理设备一致,在行为上也遵循物理定律。孪生体的状态变化由实时数据驱动,孪生体的操作预演由物理仿真保障,确保「在数字空间看到的就是物理空间发生的,在数字空间操作的预演结果就是物理空间操作的结果」。

本版本引入五大核心能力:三维可视化引擎物理仿真集成AR/VR 接口实时同步框架孪生场景编排。所有能力均通过 eneros-twinxeneros-twinx-3deneros-twinx-physicseneros-twinx-arvreneros-twinx-sync 五个新 crate 实现。

关键数据

指标数值说明
三维场景加载1.2s1000 设备
实时同步延迟50ms状态刷新
物理仿真帧率60 FPS实时渲染
AR 端到端延迟35ms含渲染
新增 Crate6孪生相关
新增测试700+含 80 个端到端

新特性

1. 三维可视化引擎

新增 eneros-twinx-3d crate,提供基于 WebGPU 的三维渲染引擎,支持变电站、线路、设备的精细化三维建模与实时渲染。

三维场景构建

use eneros_twinx_3d::{Scene3D, SceneBuilder, Camera, Lighting};

let mut scene = SceneBuilder::new()
    .background(Environment::Sky)
    .lighting(Lighting::sun_position(now()))
    .camera(Camera::orbit().target(0.0, 10.0, 0.0).distance(50.0))
    .build().await?;

// 从拓扑自动生成三维场景
scene.load_from_topology(&network).await?;

// 加载设备三维模型
scene.load_model("transformer-110kv", "/models/transformer.glb").await?;
scene.load_model("breaker-vacuum", "/models/breaker.glb").await?;

// 绑定设备实例到三维对象
for equipment in &network.equipments {
    scene.bind_instance(equipment.id, &equipment.model_3d, equipment.position)?;
}

scene.start_render().await?;

三维对象属性

属性类型说明
geometryMesh三维几何体
materialPBR物理材质
transformMatrix4x4位置/旋转/缩放
animationSkeleton骨骼动画
interactionCollider碰撞检测
metadataJSON设备信息

状态驱动的可视化

// 设备状态实时驱动三维外观
scene.on_state_change(|device_id, state| {
    let obj = scene.get_object(device_id)?;
    match state {
        DeviceState::Energized => obj.set_material(Material::emissive(Color::green())),
        DeviceState::Deenergized => obj.set_material(Material::standard(Color::gray())),
        DeviceState::Fault => {
            obj.set_material(Material::emissive(Color::red()));
            obj.start_animation("alarm_blink")?;
        }
        DeviceState::Maintenance => obj.set_material(Material::emissive(Color::yellow())),
    }
}).await?;

// 实时数据驱动动态效果
scene.bind_data("transformer-001", "temperature", |obj, temp| {
    // 温度越高,绕组发光越强
    let intensity = (temp - 40.0) / 60.0;
    obj.set_emissive_intensity(intensity.max(0.0));
}).await?;

2. 物理仿真集成

新增 eneros-twinx-physics crate,将物理仿真引擎集成到数字孪生体中,使三维场景中的设备行为符合物理定律。

仿真能力

仿真类型引擎应用场景精度
刚体动力学rapier设备运动、碰撞
流体力学自研油流、气流
电磁场FEM电磁场分布
热力学FDM温度场分布
声学ray-tracing噪声传播

物理仿真示例

use eneros_twinx_physics::{PhysicsWorld, RigidBody, Collider};

let mut physics = PhysicsWorld::new();
physics.gravity(Vec3::new(0.0, -9.81, 0.0));

// 模拟开关操作的运动学
let breaker = RigidBody::dynamic()
    .mass(5.0)
    .collider(Collider::box_(0.2, 0.5, 0.2))
    .build();

physics.add_body(breaker);

// 模拟开关分闸过程
physics.apply_force("breaker-arm", Vec3::new(0.0, 500.0, 0.0));
let trajectory = physics.simulate(Duration::milliseconds(100)).await?;

// 用于运维培训:观察分闸过程中的机械应力
for step in &trajectory {
    println!("t={:.3}s position={:?} stress={:.1} N",
        step.time, step.position, step.stress);
}

3. AR/VR 接口

新增 eneros-twinx-arvr crate,提供增强现实(AR)与虚拟现实(VR)接口,支持运维人员通过沉浸式设备与数字孪生体交互。

AR 巡检

use eneros_twinx_arvr::{ArSession, ArConfig, Overlay};

let ar = ArSession::new(ArConfig {
    device: ArDevice::Hololens3,
    anchor_strategy: AnchorStrategy::SpatialMapping,
    hand_tracking: true,
    voice_commands: true,
}).await?;

// 启动 AR 巡检
ar.start_inspection(StationId::from("SS-110-01")).await?;

// 设备信息叠加
ar.on_gaze(|device_id| {
    let info = phm.get_profile(device_id).await?;
    ar.show_overlay(Overlay::info_panel()
        .title(&info.name)
        .field("健康评分", format!("{:.1}", info.health_score.value))
        .field("温度", format!("{:.1} C", info.current_temp))
        .field("负荷率", format!("{:.1}%", info.load_rate))
        .anchor(device_id))?;
}).await?;

// 语音命令
ar.on_voice("显示内部结构", |_| {
    ar.set_xray_mode(true);  // 透视内部结构
}).await?;

ar.on_voice("回放上次故障", |_| {
    ar.replay_event("fault-2026-05-20-001");
}).await?;

VR 培训

use eneros_twinx_arvr::{VrSession, VrScenario};

let vr = VrSession::new(VrConfig {
    device: VrDevice::Quest3,
    teleport: true,
    physics_interaction: true,
}).await?;

// 加载培训场景
vr.load_scenario(VrScenario::switch_operation_training()).await?;

// 学员操作评估
vr.on_action(|action| {
    match action {
        Action::ApproachDevice(id) => log::info!("接近设备 {}", id),
        Action::OpenSwitch(id) => {
            // 校验操作顺序
            if !procedure.check_step("verify_deenergized")? {
                vr.show_warning("请先验电!");
                return;
            }
            vr.execute_switch_operation(id).await?;
        }
        Action::Complete => {
            let score = procedure.evaluate();
            vr.show_result(score);
        }
    }
}).await?;

AR/VR 能力对比

能力ARVR说明
现实叠加支持不支持AR 核心能力
沉浸场景部分完全VR 核心能力
手势交互支持支持两者均支持
语音控制支持支持两者均支持
多人协作支持支持共享空间

4. 实时同步框架

新增 eneros-twinx-sync crate,保障数字孪生体与物理电网的实时同步,支持亚秒级状态刷新。

同步架构

use eneros_twinx_sync::{SyncEngine, SyncConfig, SyncSource};

let sync = SyncEngine::new(&ctx)
    .config(SyncConfig {
        refresh_rate: 20,  // 20 FPS
        max_latency: Duration::milliseconds(100),
        interpolation: true,  // 帧间插值
        extrapolation: false, // 禁止外推
        priority: PriorityBy::Criticality,
    })
    .source(SyncSource::PmuStream { resolution: Duration::milliseconds(20) })
    .source(SyncSource::ScadaPolling { interval: Duration::seconds(2) })
    .source(SyncSource::TopologyEvents { realtime: true })
    .build().await?;

// 启动实时同步
sync.start().await?;

// 同步状态监控
sync.on_metrics(|m| {
    println!("同步延迟: {:.0}ms, 丢帧: {}, FPS: {:.1}",
        m.latency_p99, m.dropped_frames, m.actual_fps);
}).await?;

同步优先级

数据类型优先级刷新频率说明
保护动作最高实时立即同步
开关状态100ms拓扑变更
电压电流20msPMU 数据
设备温度5s缓变数据
环境数据最低60s气象数据

5. 孪生场景编排

新增 eneros-twinx crate(孪生核心),提供场景编排能力,支持预演、回放、对比等高级场景。

操作预演

use eneros_twinx::{ScenarioEngine, Scenario, ScenarioResult};

let engine = ScenarioEngine::new(&ctx);

// 构建操作预演场景
let scenario = Scenario::new("switch-maintenance-001")
    .description("110kV 母线 5 检修转操作")
    .step(Step::verify_deenergized(BusId::from(5)))
    .step(Step::ground(BusId::from(5)))
    .step(Step::maintenance_window(Duration::hours(4)))
    .step(Step::remove_ground(BusId::from(5)))
    .step(Step::energize(BusId::from(5)));

// 在孪生体中预演
let result: ScenarioResult = engine.dry_run(&scenario).await?;

println!("预演结果:");
println!("  预计耗时: {:?}", result.estimated_duration);
println!("  影响范围: {} 台设备", result.affected_devices);
println!("  风险评估: {:?}", result.risk_level);
println!("  约束检查: {}", if result.constraints_ok { "通过" } else { "违规" });

if result.has_warnings() {
    for w in &result.warnings {
        println!("  警告: {}", w);
    }
}

历史回放

// 回放某次故障事件
let replay = engine.replay_event("fault-2026-05-20-001")
    .speed(0.5)           // 0.5 倍速
    .show_data_overlay(true)
    .highlight_cascade(true)  // 高亮连锁故障路径
    .start().await?;

场景对比

// 对比两种调度方案的执行效果
let comparison = engine.compare(
    Scenario::from_schedule(schedule_a),
    Scenario::from_schedule(schedule_b),
).await?;

println!("方案对比:");
println!("{:<15} {:<15} {:<15}", "指标", "方案A", "方案B");
println!("{:<15} {:<15.0} {:<15.0}", "成本(元)", a.cost, b.cost);
println!("{:<15} {:<15.1}% {:<15.1}%", "消纳率", a.renewable, b.renewable);
println!("{:<15} {:<15.2} {:<15.2}", "网损(MW)", a.loss, b.loss);

改进

  • 拓扑引擎:支持三维坐标属性,设备位置自动定位
  • 时序引擎:孪生同步专用通道,延迟降低 60%
  • 设备模型:新增 150+ 设备的三维模型模板
  • 安全网关:孪生操作预演与实际控制严格隔离
  • 可观测性:孪生体状态接入 Grafana 三维仪表盘

Bug 修复

  • 修复 eneros-twinx-3d 在大规模场景下帧率骤降的问题(#3703)
  • 修复 eneros-twinx-physics 刚体仿真在高速碰撞时穿透的问题(#3710)
  • 修复 eneros-twinx-arvr AR 锚点在弱光环境下丢失的问题(#3716)
  • 修复 eneros-twinx-sync 网络抖动时帧间插值异常的问题(#3722)
  • 修复 eneros-twinx 场景回放在跨时区时时间轴错误的问题(#3728)

破坏性变更

  • Scene3D::load_from_topology:参数新增 coordinate_system 选项
  • PhysicsWorld::simulate:返回类型从 Trajectory 改为 Result<Trajectory>
  • ArSession::start_inspection:参数从 &str 改为 StationId

升级指南

  1. 更新 Cargo.toml 中的 eneros 依赖至 0.37.0
  2. 安装三维模型资源包:eneros twinx install-models
  3. eneros.toml 中配置 AR/VR 设备连接
  4. 运行 eneros twinx build-scene 构建三维场景

致谢

感谢 36 位贡献者提交的 550+ 个 commit,以及三维建模团队提供的设备模型资源。