Документация Engee

Модель ЛЭП с двухсторонним питанием и отключением трехфазного КЗ

В этом примере мы рассмотрим линию с двухсторонним питанием, на которой происходит трехфазное короткое замыкание с последующим отключением (модель power_line_apv.engee в Engee и модель power_line_apv.slx в Simulink). Будет показан процесс запуска моделей из среды разработки скрипта с помощью командного управления и сравнение результатов моделирования.

Реализация запуска модели с помощью программного управления

Загрузка нужных библиотек и подготовка ядра MATLAB для сравнения модели Engee с моделью Simulink:

using Plots
using MATLAB
using DataFrames
using Statistics
plotlyjs();
mat"start_simulink"
mat"p = genpath('/user/start/examples'); addpath(p);"

Загрузка модели:

model_name = "power_line_apv"
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);

Чтение данных о мгновенных значения тока и напряжения на линии:

t = results["i_a"].time;
i_a = results["i_a"].value;
i_b = results["i_b"].value;
i_c = results["i_c"].value;
v_a = results["v_a"].value;
v_b = results["v_b"].value;
v_c = results["v_c"].value;

Загрузка и визуализация данных, полученных в ходе симуляции

Вывод графика зависимости мгновенных значений тока от времени:

plot(t, [i_a i_b i_c], label=["Ток фазы А" "Ток фазы В" "Ток фазы С"])
plot!(title = "Результаты моделирования в Engee", ylabel = "Мгновенное значение тока, А", xlabel="Время, c")

interactive-scripts/images/power_systems_demo_power_line_apv/d886182748b547622234e09b767c5d135d314d95

Вывод графика зависимости мгновенных значений напряжения от времени:

plot(t, [v_a v_b v_c], label=["Напряжение фазы А" "Напряжение фазы В" "Напряжение фазы С"])
plot!(title = "Результаты моделирования в Engee", ylabel = "Мгновенное значение напряжения, В", xlabel="Время, c")

interactive-scripts/images/power_systems_demo_power_line_apv/f2431b899b3d98c31d4d966141e86933de50e04f

Запуск модели Simulink:

mat"bdclose all;";
mat"load_system('power_line_apv');";
mat"warning('off','all');";
mat"out = sim('power_line_apv');";
mat"close_system('power_line_apv',0);";
ssc_time = mat"out.tout(:,1)";
ssc_i_a = mat"out.yout(:,1)";
ssc_i_b = mat"out.yout(:,2)";
ssc_i_c = mat"out.yout(:,3)";
ssc_v_a = mat"out.yout(:,4)";
ssc_v_b = mat"out.yout(:,5)";
ssc_v_c = mat"out.yout(:,6)";
plot(ssc_time , [ssc_i_a ssc_i_b ssc_i_c], label=["Ток фазы А" "Ток фазы В" "Ток фазы С"])
plot!(title = "Результаты моделирования в Simulink", ylabel = "Мгновенное значение тока, А", xlabel="Время, c")

interactive-scripts/images/power_systems_demo_power_line_apv/68eebf72d3be720ee35a5ea47420a6da96b06188

plot(ssc_time , [ssc_v_a ssc_v_b ssc_v_c], label=["Напряжение фазы А" "Напряжение фазы В" "Напряжение фазы С"])
plot!(title = "Результаты моделирования в Simulink", ylabel = "Мгновенное значение напряжения, В", xlabel="Время, c")

interactive-scripts/images/power_systems_demo_power_line_apv/7b5044bfa352c9b18d941652910f3dcd8fe98d06

plot(t, [i_a i_b i_c], label=["Ток фазы А" "Ток фазы В" "Ток фазы С"])
plot!(title = "Сравнение мгновенных значений тока Engee и Simulink")
plot!(ssc_time , [ssc_i_a ssc_i_b ssc_i_c], label=["Ток фазы А (Simulink)" "Ток фазы В (Simulink)" "Ток фазы С (Simulink)"])
plot!(ylabel = "Мгновенное значение тока, А", xlabel="Время, c")

interactive-scripts/images/power_systems_demo_power_line_apv/3b99ad95e69f77e04523f9269bd9bff7c96a25f1

plot(t, [v_a v_b v_c], label=["Напряжение фазы А" "Напряжение фазы В" "Напряжение фазы С"])
plot!(title = "Сравнение мгновенных значений Напряжения Engee и Simulink")
plot!(ssc_time , [ssc_v_a ssc_v_b ssc_v_c], label=["Напряжение фазы А (Simulink)" "Напряжение фазы В (Simulink)" "Напряжение фазы С (Simulink)"])
plot!(ylabel = "Мгновенное значение Напряжения, В", xlabel="Время, c")

interactive-scripts/images/power_systems_demo_power_line_apv/7669cc19b2c1c3b604abec5c8e7ed81082060f6c

# abs_tol = Ia_sim_i - Ia_en_i;
# mean_tol = abs(mean(abs_tol));
# rel_tol = (Ia_sim_i - Ia_en_i)./Ia_sim_i;
# mean_tol_rel = abs(mean(filter(!isnan,rel_tol)));
# println("Средняя абсолютная погрешность вычислений тока фазы А: ", mean_tol);
# println("Средняя относительная погрешность вычислений тока фазы А, %: ", mean_tol_rel*100);
# abs_tol = Ib_sim_i - Ib_en_i;
# mean_tol = abs(mean(abs_tol));
# rel_tol = (Ib_sim_i - Ib_en_i)./Ib_sim_i;
# mean_tol_rel = abs(mean(filter(!isnan,rel_tol)));
# println("Средняя абсолютная погрешность вычислений тока фазы B: ", mean_tol);
# println("Средняя относительная погрешность вычислений тока фазы B, %: ", mean_tol_rel*100);
# abs_tol = Ic_sim_i - Ic_en_i;
# mean_tol = abs(mean(abs_tol));
# rel_tol = (Ic_sim_i - Ic_en_i)./Ic_sim_i;
# mean_tol_rel = abs(mean(filter(!isnan,rel_tol)));
# println("Средняя абсолютная погрешность вычислений тока фазы C: ", mean_tol);
# println("Средняя относительная погрешность вычислений тока фазы C, %: ", mean_tol_rel*100);

Блоки, использованные в примере