电池的充放电
本示例演示了额定电压为 300 V、容量为 100 A·h 的蓄电池模型的仿真。如果您希望对以下内容进行建模,本演示示例可作为起点:
- 储能子系统
- 电池管理单元(BMS)
- 电动汽车的锂离子动力电池
该模型采用基于电动汽车动态行驶循环确定的、真实的直流支路负载曲线。总仿真时间为3600秒。
模型总览
该模型基于库模块“Battery”(https://engee.com/helpcenter/stable/fmod-electricity-sources/battery.html)。除了电气端口外,“Battery”模块还具有用于模拟热效应的热端口。 在开发控制系统时,必须充分考虑这些因素,因为当温度达到临界值时,可能会发生热失控、自燃或爆炸。如您所见,该模型由位于不同物理域(热域和电域)的多个网络组成。
.png)
电池连接到一个逼真的直流支路负载曲线,该曲线通过“From Workspace”模块(https://engee.com/helpcenter/stable/base-lib-sources/from-workspace.html)进行模拟。 该模块将负载曲线以信号 i = f(t) 的形式传输至可控电流源。
通过软件控制启动模型:
加载所需库以导入电流随时间变化的关系:
Pkg.add(["MAT"])
using DataFrames
using MAT
gr()
读取 mat 文件并将其转换为 WorkspaceArray,以便在 From Workspace 模块中使用:
vars = matread("/user/start/examples/power_systems/HV_battery/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);
加载模型:
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");
运行已加载的模型:
results = engee.run(model_name)
仿真结果
导入仿真结果:
simulation_time = results["电压,V"].time;
i = results["电流,A"].value;
v = results["电压,V"].value;
temperature = results["电池温度,°C"].value;
charge = results["电池电量,%"].value;
0 至 500 秒时间段内的电池电量:
plot(simulation_time[1:50000], charge[1:50000])
plot!(title = "电池电量,%", ylabel = "电池电量,%", xlabel="时间,c")
0 至 500 秒时间段内的负载电流:
plot(simulation_time[1:50000], i[1:50000])
plot!(title = "电流,A", ylabel = "电流,A", xlabel="时间,c")
在仿真过程中,当负载电流方向相反时,电池不仅会放电,还会充电。这种行为常见于储能系统在平滑负载波动时,或电动汽车加速、制动时。
0 至 500 秒时间段内的电池电压:
plot(simulation_time[1:50000], v[1:50000])
plot!(title = "电压,V", ylabel = "电压,V", xlabel="时间,c")
0 至 500 秒时间段内的电池温度:
plot(simulation_time[1:50000], temperature[1:50000])
plot!(title = "温度,°C", ylabel = "温度,°C", xlabel="时间,c")
结论:
在本示例中,使用了用于电池模型命令行控制的工具,仿真时长为1小时。 电池负载曲线是从 mat 文件导入到工作区的。仿真结果被导入到脚本中,并利用 Plots 库的交互式图形对给定的时间段进行了可视化展示。
.png)
.png)
.png)
.png)