Engee 文档
Notebook

线性电路瞬态分析

**工作的目的:**在Engee程序中对包含多个电能存储设备的线性电路进行研究。

工作内容:

*为给定的电路创建一个方程组;
*开发用于计算电路支路中的电流和电容元件上的压降的程序;
*以图形依赖关系的形式呈现程序计算的结果;
*在Engee中创建电路模型;
*将仿真结果与开发程序的计算结果进行比较。

恩吉和差异化。jl软件包用作用于求解方程组的软件。 计算使用ode45方法进行,这是第4(5th)阶的一步显式Runge-Kutta方法。
下面是一个计算线性电路的例子.:

scheme_1.png

1. 差异化的应用。jl套件

包[DifferentialEquations.jl](https://diffeq.sciml.ai/stable /)提供了大量的各种类型的微分方程的优化良好的求解器:
-常微分方程
-微分代数方程
-随机微分方程
-具有延迟参数的微分方程
-具有延迟参数的随机微分方程
-具有参数不确定性的微分方程
-和其他人。

In [ ]:
using .DifferentialEquations, .Plots

2. 求解微分方程

一般程序如下:

1. 设置功能

``'茱莉亚
f(u,p,t)
f(du,u,p,t)


哪里 `u` -变量, `p` -方程参数, `du` -衍生品 $dy/dt$. 

**2. 定义任务** 

``'茱莉亚
prob=ODEProblem(f,u0,tspan)
prob=ODEProblem(f,u0,tspan,p)

哪里 u0 -初始条件, tspan -估计时间间隔()

3. 数值解

``'茱莉亚
sol=solve(prob,alg;kwargs)


哪里 `alg` -数值算法, `kwargs` -其他参数。 

例如,对于熟悉MATLAB/Python/R的用户,有标准库方法的翻译。:

*ode23→BS3()
*ode45/dopri5→DP5(),尽管在大多数情况下Tsit5()更有效
*ode23s→Rosenbrock23(),尽管在大多数情况下Rodas4()更有效

你可以在[документации](https://docs.sciml.ai/DiffEqDocs/stable/solvers/ode_solve/#Translations-from-MATLAB/Python/R).


**4. 结果分析**

``'茱莉亚
溶胶(t)
情节(sol)

函数使用的地方 plot 情节。jl包。 使用其他图形包时

``'茱莉亚
情节(sol.t,sol')


3. 用于计算电路的程序

描述电路的微分方程组:

system_3.png 其中Uc1、Uc2是通过求解方程可以找到的电容两端的电压 equation.png

为了使方程组对于站在微分符号下的未知量是可解的,有必要根据所需参数来表达不含电感的分支的电流。 为此,使用基尔霍夫定律,我们制定了耦合方程(1.2)和补充(1.1):

system_2.png
In [ ]:
# Ввод параметров электрической цепи
R1 = 10.0
R2 = 15.0
R3 = 20.0
R4 = 10.0
f  = 50.0
C1 = 10e-6
C2 = 30e-6
L1 = 15e-3
L2 = 20e-3

# Определение дифференциальной системы
function circuit!(du, u, p, t)
    U, R1, R2, R3, R4, C1, C2, L1, L2 = p
    Uc1, Uc2, i1, i4 = u
    
    # Алгебраические уравнения связи
    i2 = (u[1] + u[2] + (u[3] - u[4]) * R4) / (R2 + R4)
    i3 = u[3] - i2
    i5 = i3 - u[4]
    
    # Дифференциальные уравнения
    du[1] = i3 / C1
    du[2] = i5 / C2
    du[3] = 1 / L1 * (U(t) - i2 * R2 - u[3] * R1)
    du[4] = 1 / L2 * (u[2] + i5 * R4 - u[4] * R3)

end

# Начальные условия для u
u0 = [0.0, 0.0 , 0.0, 0.0]  

# Диапазон времени для расчета, пусть будет два периода промышленной частоты 50 Гц
tspan = (0.0, 0.04) 

# Задание параметров
U(t) = 100 * sin(2 * π * f * t)
params = (U, R1, R2, R3, R4, C1, C2, L1, L2)

# Создание объекта ODEProblem с передачей параметров
prob = ODEProblem(circuit!, u0, tspan, params)

# Решение дифференциальных уравнений
sol = solve(prob, Tsit5());

# Построение графиков
plot(sol, label = ["Uc1(t)" "Uc2(t)" "i1(t)" "i4(t)"], layout = 4)
Out[0]:

4. 计算结果与仿真结果的比较

让我们加载位于 /user/start/examples/power_systems/lab_work/lab_work.engee.

image.png
In [ ]:
modelName = "lab_work";
model = modelName in [m.name for m in engee.get_all_models()] ? engee.open( modelName ) : engee.load( "$(@__DIR__)/$(modelName).engee");

让我们运行模拟:

In [ ]:
results = engee.run( modelName );

让我们为模型的输出变量(那些标记为记录信号的变量)提供方便的名称:

In [ ]:
t = results["i1"].time;
i1 = results["i1"].value;
i4 = results["i4"].value;
Uc1 = results["Uc1"].value;
Uc2 = results["Uc2"].value;

让我们根据仿真结果构建图表。:

In [ ]:
plot(t, [Uc1 Uc2 i1 i4], label = ["Uc1_sim" "Uc2_sim" "i1_sim" "i4_sim"], layout = 4)
Out[0]:

让我们在一个图形上显示仿真结果和计算结果。:

In [ ]:
plot(t, [Uc1 Uc2 i1 i4], label = ["Uc1_sim" "Uc2_sim" "i1_sim" "i4_sim"], layout = 4)
plot!(sol, label = ["Uc1" "Uc2" "i1" "i4"], layout = 4)
Out[0]:

工作结论:在工作过程中,编制了代数微分方程组,开发了计算电容电路元件支路电流和电压降的程序,显示了电流和电压随时间变化规律的图形依赖性。 将Engee建模的结果与开发的计算程序的结果进行比较。 一般来说,实验室工作提出了一个包含几个电能存储设备的电路的分析。