Engee 文档
Notebook

放电-电池充电

该示例演示了额定电压为300V、容量为100Ah的电池模型的仿真。 如果要模拟,此演示示例将作为起点:

*SNE积累的子系统
*电池充电控制单元(BMS)
*电动汽车牵引锂离子电池

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

模型的一般视图

该模型基于电池库块(https://engee.com/helpcenter/stable/fmod-electricity-sources/battery.html )。 除了电端口之外,电池单元还具有用于模拟热效应的热端口。 在开发控制系统时考虑到它们是很重要的,因为随着温度的临界升高,可能会发生热加速,自燃或爆炸。 如您所见,该模型由位于不同物理区域的多个网络组成—热和电。

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]:

在仿真过程中,如果负载电流方向相反,电池不仅会放电,还会充电。 这种行为发生在SNE在平滑负载波动时的操作期间或在电动车辆的加速和制动期间。

电池电压从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文件导入工作区。 仿真结果被导入到脚本中,并使用绘图库中的交互式图形在给定的时间间隔内可视化。