Engee 文档
Notebook

放电 - 给电池充电

本示例演示模拟标称电压为 300 V、容量为 100 A∙h 的电池模型。如果您想进行模拟,本演示示例可作为起点:

  • 一个 LESS 存储子系统
  • 电池单元充电管理系统 (BMS)
  • 电动汽车的牵引锂离子电池

该模型使用真实的直流链路负载曲线,该曲线由电动汽车的动态驾驶周期决定。总模拟时间为 3600 秒。

模型概览

hv_battery.png

电池与真实的直流链路负载曲线相连,并通过 "从工作区 "模块 (https://engee.com/helpcenter/stable/base-lib-sources/from-workspace.html) 进行模拟。该模块将负载曲线图作为 i = f(t) 信号传输到模型中的受控电流源。

使用软件控制实现模型运行:

加载导入电流时间相关性所需的库:

In [ ]:
Pkg.add(["MAT"])
In [ ]:
using DataFrames
using MAT
gr()
Out[0]:
Plots.GRBackend()

读取 mat 文件并将其转换为工作区数组(WorkspaceArray),以便在 From Workspace 块中使用:

In [ ]:
vars = matread("I_dc_discharge.mat");
data = vars["array"];
t = data[:,1];
current = data[:,2];
df = DataFrame(time=t, value=current);
I_dc = WorkspaceArray(string(rand()), df);
In [ ]:
vars = matread("I_dc_discharge.mat");
data = vars["array"];
t = data[:,1];
current = data[:,2];
df = DataFrame(time=t, value=current);
I_dc = WorkspaceArray(string(rand()), df);

加载模型

In [ ]:
model_name = "HV_battery"
model_name in [m.name for m in engee.get_all_models()] ? engee.open(model_name) : engee.load( "$(@__DIR__)/$(model_name).engee");

运行已加载的模型

In [ ]:
results = engee.run(model_name)
Out[0]:
Dict{String, DataFrame} with 4 entries:
  "Напряжение, В"          => 360001×2 DataFrame…
  "Температура батареи,°C" => 360001×2 DataFrame…
  "Ток, А"                 => 360001×2 DataFrame…
  "Заряд батареи, %"       => 360001×2 DataFrame

建模结果

导入模拟结果

In [ ]:
simulation_time = results["Напряжение, В"].time;
i = results["Ток, А"].value;
v = results["Напряжение, В"].value;
temperature = results["Температура батареи,°C"].value;
charge = results["Заряд батареи, %"].value;

电池充电时间间隔为 0 至 500 秒:

In [ ]:
plot(simulation_time[1:50000], charge[1:50000])
plot!(title = "Заряд батареи, %", ylabel = "Заряд батареи, %", xlabel="Время, c")
Out[0]:

按 0 至 500 秒的时间间隔计算负载电流:

In [ ]:
plot(simulation_time[1:50000], i[1:50000])
plot!(title = "Ток, А", ylabel = "Ток, А", xlabel="Время, c")
Out[0]:

在模拟过程中,如果负载电流反向,电池不仅会放电,还会充电。当 LESS 起作用以平滑负载波动或电动汽车加速和减速时,就会出现这种情况。

0 至 500 秒时间间隔内的电池电压:

In [ ]:
plot(simulation_time[1:50000], v[1:50000])
plot!(title = "Напряжение, В", ylabel = "Напряжение, В", xlabel="Время, c")
Out[0]:

0 至 500 秒时间间隔内的电池温度:

In [ ]:
plot(simulation_time[1:50000], temperature[1:50000])
plot!(title = "Tемпература,°C", ylabel = "Tемпература,°C", xlabel="Время, c")
Out[0]:

结论

在本示例中,我们使用工具来指挥一个模拟持续时间为 1 小时的电池模型。电池负载曲线从 mat 文件导入工作区。仿真结果被导入脚本,并使用交互式 Plots 库图表对给定时间间隔进行可视化。