AnyMath 文档
Notebook

模拟电池的放电和充电循环

本示例演示了如何在恒流和恒压下使用电池充放电算法。 CC-CV单元在10小时内对电池进行充电和放电。 初始电荷电平为0.3。 在充电期间,电流保持恒定,直到电池电压达到其最大值并且电流减小到0。 放电过程中使用直流电。

模型图:

battery_cccv--1735019739092.png

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

In [ ]:
function start_model_engee()
    try
        engee.close("battery_cccv", force=true) # 关闭模型
        catch err # 如果没有模型关闭和engee。close()不执行,它将在catch之后加载。
            m = engee.load("$(@__DIR__)/battery_cccv.engee") # 加载模型
        end;

    try
        engee.run(m) # 启动模型
        catch err # 如果模型没有加载和engee。run()不执行,catch后最下面的两行将被执行。
            m = engee.load("$(@__DIR__)/battery_cccv.engee") # 加载模型
            engee.run(m) # 启动模型
        end
end
Out[0]:
start_model_engee (generic function with 1 method)

运行模拟

In [ ]:
try
    start_model_engee() # 使用上面实现的特殊功能运行仿真
    catch err
    end;

变量的输出 simout:

In [ ]:
simout
Out[0]:
SimulationResult(
    "电池_cccv/电压" => WorkspaceArray("电池_cccv/电压"),
    "电池_cccv/电流" => WorkspaceArray("电池_cccv/电流"),
    "电池_cccv/温度" => WorkspaceArray("电池_cccv/温度")
)

记录从simout到变量的电压、电流和温度信号:

In [ ]:
res = collect(simout)
V = collect(res[1])
I = collect(res[2])
T = collect(res[3])
Out[0]:
36001×2 DataFrame
35976 rows omitted
Rowtimevalue
Float64Float64
10.0298.15
21.0298.139
32.0298.128
43.0298.118
54.0298.107
65.0298.096
76.0298.086
87.0298.075
98.0298.065
109.0298.054
1110.0298.044
1211.0298.034
1312.0298.024
⋮⋮⋮
3599035989.0296.816
3599135990.0296.816
3599235991.0296.817
3599335992.0296.817
3599435993.0296.817
3599535994.0296.818
3599635995.0296.818
3599735996.0296.818
3599835997.0296.819
3599935998.0296.819
3600035999.0296.819
3600136000.0296.82

模拟结果的可视化

In [ ]:
using Plots
In [ ]:
plot(V[:,1], V[:,2], label="电压,V", linewidth=2, title="电池电压")
Out[0]:
In [ ]:
plot(I[:,1], I[:,2], label="电流,A", linewidth=2, title="放电/充电电流")
Out[0]:
In [ ]:
plot(T[:,1], T[:,2], label="电池温度", linewidth=2, title="电池温度")
Out[0]: