Модель ЛЭП с двухсторонним питанием и отключением трехфазного КЗ
В этом примере мы рассмотрим линию с двухсторонним питанием, на которой происходит трехфазное короткое замыкание с последующим отключением (модель 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")
Вывод графика зависимости мгновенных значений напряжения от времени:
plot(t, [v_a v_b v_c], label=["Напряжение фазы А" "Напряжение фазы В" "Напряжение фазы С"])
plot!(title = "Результаты моделирования в Engee", ylabel = "Мгновенное значение напряжения, В", xlabel="Время, c")
Запуск модели 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")
plot(ssc_time , [ssc_v_a ssc_v_b ssc_v_c], label=["Напряжение фазы А" "Напряжение фазы В" "Напряжение фазы С"])
plot!(title = "Результаты моделирования в Simulink", ylabel = "Мгновенное значение напряжения, В", xlabel="Время, c")
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")
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")
# 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);