Engee 文档
Notebook

电动汽车通过 WLTC 循环的运动建模

本例将演示电动汽车在 WLTC 驾驶循环中的行驶建模。车辆、电气和机械系统的参数遵循日产聆风等电动汽车的特性。

参数和模型结构描述

电动车辆的运动及其惯性由电动车辆块描述。该程序块的左端口接收来自两对车轮的合力,这两对车轮与变速箱和电动马达相连,可转换并产生扭矩。该程序块还计算空气阻力。

模型的主要参数如下

| 块名称 | 基本参数 | 块名称 | 基本参数 | 块名称 | 基本参数 | 块名称 | 基本参数 | ----------- | ----------- | | 电动汽车 | 重量 1000 千克 | 电池 | 电池电压 390 V | 电机 | 恒定扭矩 4 Nm/A | 车轮半径 0.32 米 | 差速器齿比 0.5 | 空气阻力系数 | 0.28 | 0.28

模型示意图:

electrocar_disc_brake_drive_mod_1_1739965487918.png

块状电动车

子系统电动汽车示意图:

electrocar_disc_brake_drive_mod_1_1740063224412_2.png

该子系统中的空气阻力由公式确定:

$$F_d = \frac{1}{2} C_x \rho S v^2,$$

其中 $Cx$ - 阻力系数,$\rho$ - 空气密度,$кг/м^3$,$S$ - 中段面积(物体垂直于运动方向的最大横截面积),$м^2$,$v$ - 电动汽车的速度。

电动汽车**子系统中定义的主要参数:

image_2.png

子系统驱动程序方案:

electrocar_disc_brake_drive_mod_1_1740063684238.png

驱动子系统是一个控制系统,为电动汽车的制动器和电动马达等执行器生成控制信号。电动机由前轴电动机后轴电动机块表示,制动器由制动系统块表示。添加**块计算设定速度和测量速度之间的不匹配信号,然后将其输入生成控制信号的 PID 控制器。

制动系统子系统图:

electrocar_disc_brake_drive_mod_1_1740068897907.png

子系统由 4 个制动盘组成。端口 P 的输入信号决定制动系统的压力,端口 S 将制动扭矩传递到每个车轮。

WLTC 单元

WLTC 块是一个 From Workspace 块,用于接收从模型回调转换成 XLSX 格式的 WLTC 驱动循环数据。

定义加载和运行模型的函数:

In [ ]:
function start_model_engee()
    try
        engee.close("electric_vehicle_performance", force=true) # закрытие модели 
        catch err # в случае, если нет модели, которую нужно закрыть и engee.close() не выполняется, то будет выполнена её загрузка после catch
            m = engee.load("$(@__DIR__)/electric_vehicle_performance.engee") # загрузка модели
        end;

    try
        engee.run(m) # запуск модели
        catch err # в случае, если модель не загружена и engee.run() не выполняется, то будут выполнены две нижние строки после catch
            m = engee.load("$(@__DIR__)/electric_vehicle_performance.engee") # загрузка модели
            engee.run(m) # запуск модели
        end
end
Out[0]:
start_model_engee (generic function with 1 method)

运行模拟

In [ ]:
start_model_engee() # запуск симуляции с помощью специальной функции, реализованной выше
Out[0]:
SimulationResult(
    "Крутящий момент электродвигателя" => WorkspaceArray("electric_vehicle_performance/Расчёт мощности/Крутящий момент электродвигателя"),
    "Скорость в км/ч" => WorkspaceArray("electric_vehicle_performance/Электромобиль/Скорость в км/ч"),
    "Мощность электродвигателя, кВт" => WorkspaceArray("electric_vehicle_performance/Расчёт мощности/Мощность электродвигателя, кВт"),
    "WLTC.1" => WorkspaceArray("electric_vehicle_performance/WLTC.1"),
    "Тормозной момент, Н*м" => WorkspaceArray("electric_vehicle_performance/Тормозная система/Тормозной момент, Н*м"),
    "Частота вращения электродвигателя" => WorkspaceArray("electric_vehicle_performance/Расчёт мощности/Частота вращения электродвигателя"),
    "Перемещение в км" => WorkspaceArray("electric_vehicle_performance/Электромобиль/Перемещение в км"),
    "Сила сопротивления воздуха" => WorkspaceArray("electric_vehicle_performance/Электромобиль/Сила сопротивления воздуха"),
    "Заряд батареи" => WorkspaceArray("electric_vehicle_performance/Заряд батареи"),
    "From-2.1" => WorkspaceArray("electric_vehicle_performance/From-2.1"),
    "Сила со стороны трансмиссии" => WorkspaceArray("electric_vehicle_performance/Электромобиль/Сила со стороны трансмиссии")
)

将模拟过程中获得的信号从 simout 写入变量(数据量很大,整个过程可能需要 4 分钟):

In [ ]:
t = simout["electric_vehicle_performance/Электромобиль/Скорость в км/ч"].time[:]; # время
T = simout["electric_vehicle_performance/Расчёт мощности/Крутящий момент электродвигателя"].value[:]; # крутящий момент электродвигателя
speed = simout["electric_vehicle_performance/Электромобиль/Скорость в км/ч"].value[:]; # скорость автомобиля
forces_left = simout["electric_vehicle_performance/Электромобиль/Сила со стороны трансмиссии"].value[:]; # силы, действующие на автомобиль со стороны трансмиссии 
forces_right = simout["electric_vehicle_performance/Электромобиль/Сила сопротивления воздуха"].value[:]; # силы, действующие на автомобиль со стороны окружающей среды
w = simout["electric_vehicle_performance/Расчёт мощности/Частота вращения электродвигателя"].value[:]; # частота вращения электродвигателя
q = simout["electric_vehicle_performance/Заряд батареи"].value[:]; # заряд батареи
P = simout["electric_vehicle_performance/Расчёт мощности/Мощность электродвигателя, кВт"].value[:]; # мощность электродвигателя
WLTC1 = simout["electric_vehicle_performance/WLTC.1"].value[:]; # цикл WLTC
pos = simout["electric_vehicle_performance/Электромобиль/Перемещение в км"].value[:]; # перемещение электромобиля
;

模拟结果可视化

启动图库绘制图表:

In [ ]:
using Plots
gr()
Out[0]:
Plots.GRBackend()

绘制作用在电动汽车上的力及其速度的图形:

In [ ]:
p1 = plot(t, forces_left, label="Усилие от трансмиссии, Н", linewidth=2)
p2 = plot(t, forces_right, label="Сопротивление воздуха, Н", linewidth=2, linecolor=2)
p3 = plot(t, speed, label="Скорость, км/ч", linewidth=2, linecolor=3)
plot(p1, p2, p3, layout=(3,1))
Out[0]:

通过分析力图,我们可以得出结论:在行驶周期中,高速阶段的能耗最大。这是因为作用在电动汽车上的空气阻力与速度的平方成正比。

绘制电动机的扭矩、速度和功率图:

In [ ]:
p1 = plot(t, T, label="Крутящий момент, Н*м", linewidth=2)
p2 = plot(t, (w * 9.55), label="Частота вращения, об/мин", linewidth=2, linecolor=2)
p3 = plot(t, (T .* w ./1000), label="Мощность, кВт", linewidth=2, linecolor=3)
plot(p1, p2, p3, layout=(3,1))
Out[0]:

当车辆加速时,扭矩减小,电动机的速度增加。随着速度的变化,空气阻力增大,电动机产生的机械功率也随之增大。

电动机的功率用公式计算: $$P = \frac {M*w}{1000}, $$

其中$M$ 是扭矩(单位:$Н \cdot м$ ),$w$ 是速度(单位:$\frac {рад}{с}$ )。

测量速度和设定速度的图表:

In [ ]:
plot(t, speed, label="Измеренная скорость, км/ч", linewidth=2)
plot!(t, WLTC1, label="Заданная скорость, км/ч", linewidth=2)
Out[0]:

该图显示电动汽车在微小偏差的情况下保持了设定速度。这些偏差可以通过微调驱动块中的控制来减少。

电动车辆移动和电池电量图表:

In [ ]:
p1 = plot(t, pos, label="Перемещение электромобиля, км", linewidth=2)
p2 = plot(t, (q * 0.0002777777777778), label="Заряд батареи, А*ч", linewidth=2)
plot(p1, p2, layout=(2,1))
Out[0]:

通过分析电池电量和电动汽车行驶里程的图表,可以计算出行驶一段路程所消耗的能量:

In [ ]:
println("Энергия, затраченная на один ездовой цикл: ", round(maximum(q * 0.000277) - minimum(q * 0.000277), digits=3), " А*ч")
Энергия, затраченная на один ездовой цикл: 20.83 А*ч

通过简单的计算,就可以估算出电动汽车在电池充满电后的行驶里程:

In [ ]:
total_tange = maximum(q * 0.000277) / (maximum(q * 0.000277) - minimum(q * 0.000277)) * maximum(pos)
println("Запас хода электромобиля: ", round(total_tange, digits=3), " км")
println("Удельный расход энергии: ", maximum(q * 0.000277) / total_tange, " А*ч/км")
Запас хода электромобиля: 111.33 км
Удельный расход энергии: 0.9136257264575948 А*ч/км

结论

本示例演示了电动汽车在 WLTC 驾驶循环中的行驶建模。已经进行了性能计算,特别是行驶里程和具体能耗。可以通过进一步设置模块参数和调整控制器来完善模型。其他行驶循环也可载入从工作区块,用于评估电动汽车在不同条件下的性能。