Модель энергосистемы c упрощенным синхронным генератором

В этом примере мы рассмотрим синхронный генератор (модель power_ssm.engee) P=20 кВт U= 24кВ, на шины которого подключена базовая нагрузка (P= 10кВт и Q=100 Вар) и коммутируемая нагрузка (P=10 кВт и Q=100 Вар) в момент времени 0.1 (модель power_ssm.engee в Engee и модель power_ssm.slx в Simulink).

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

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

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

model_name = "power_ssm"
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)
Dict{String, DataFrame} with 8 entries:
  "Q"   => 4001×2 DataFrame…
  "i_b" => 4001×2 DataFrame…
  "i_c" => 4001×2 DataFrame…
  "P"   => 4001×2 DataFrame…
  "v_b" => 4001×2 DataFrame…
  "v_a" => 4001×2 DataFrame…
  "i_a" => 4001×2 DataFrame…
  "v_c" => 4001×2 DataFrame…

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

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_ssm/1b2607679f3a495572e49842963dbed3eb6b96c6

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

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

interactive-scripts/images/power_systems_demo_power_ssm/2b31216fd5e94dc018da74d0f8a5a53f1d9fd164

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

mat"bdclose all;";
mat"load_system('power_ssm');";
mat"warning('off','all');";
mat"out = sim('power_ssm');";
mat"close_system('power_ssm',0);";
ssc_time = mat"out.tout(:,1)";
ssc_v_a = mat"out.yout(:,1)";
ssc_v_b = mat"out.yout(:,2)";
ssc_v_c = mat"out.yout(:,3)";
ssc_i_a = mat"out.yout(:,4)";
ssc_i_b = mat"out.yout(:,5)";
ssc_i_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_ssm/80e647f811231742c64f6def33f9eb520e8f1367

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

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_ssm/cc2b2ffe36c60fe22d67bed1b8ee030ebc06ea9a

Сравним результаты моделирования в Engee и Simulink.

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_ssm/60123c2547bc32bcc90dbb39698a3feec24948d3

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_ssm/b8757d044da17273c25efdc2475a6cbdf54eaf70

# abs_tol = i_a - ssc_i_a;
# mean_tol = abs(mean(abs_tol));
# rel_tol = (i_a - ssc_i_a)./ssc_i_a;
# mean_tol_rel = abs(mean(filter(!isnan,rel_tol)));
# println("Средняя абсолютная погрешность вычислений тока фазы А: ", mean_tol);
# println("Средняя относительная погрешность вычислений тока фазы А, %: ", mean_tol_rel*100);
Средняя абсолютная погрешность вычислений тока фазы А: 6.734964784671639e-7
Средняя относительная погрешность вычислений тока фазы А, %: 0.10920943634845798
# abs_tol = i_b - ssc_i_b;
# mean_tol = abs(mean(abs_tol));
# rel_tol = (i_b - ssc_i_b)./ssc_i_b;
# mean_tol_rel = abs(mean(filter(!isnan,rel_tol)));
# println("Средняя абсолютная погрешность вычислений тока фазы B: ", mean_tol);
# println("Средняя относительная погрешность вычислений тока фазы B, %: ", mean_tol_rel*100);
Средняя абсолютная погрешность вычислений тока фазы B: 8.25238416865237e-5
Средняя относительная погрешность вычислений тока фазы B, %: 0.09233474078840595
# abs_tol = i_c - ssc_i_c;
# mean_tol = abs(mean(abs_tol));
# rel_tol = (i_c - ssc_i_c)./ssc_i_c;
# mean_tol_rel = abs(mean(filter(!isnan,rel_tol)));
# println("Средняя абсолютная погрешность вычислений тока фазы C: ", mean_tol);
# println("Средняя относительная погрешность вычислений тока фазы C, %: ", mean_tol_rel*100);
Средняя абсолютная погрешность вычислений тока фазы C: 8.319733816405556e-5
Средняя относительная погрешность вычислений тока фазы C, %: 0.09076029087892955
# abs_tol = v_a - ssc_v_a;
# mean_tol = abs(mean(abs_tol));
# rel_tol = (v_a - ssc_v_a)./ssc_v_a;
# mean_tol_rel = abs(mean(filter(!isnan,rel_tol)));
# println("Средняя абсолютная погрешность вычислений напряжения фазы А: ", mean_tol);
# println("Средняя относительная погрешность вычислений напряжения фазы А, %: ", mean_tol_rel*100);
Средняя абсолютная погрешность вычислений напряжения фазы А: 0.05566316139627767
Средняя относительная погрешность вычислений напряжения фазы А, %: 0.10010201304940256
# abs_tol = v_b - ssc_v_b;
# mean_tol = abs(mean(abs_tol));
# rel_tol = (v_b - ssc_v_b)./ssc_v_b;
# mean_tol_rel = abs(mean(filter(!isnan,rel_tol)));
# println("Средняя абсолютная погрешность вычислений напряжения фазы B: ", mean_tol);
# println("Средняя относительная погрешность вычислений напряжения фазы B, %: ", mean_tol_rel*100);
Средняя абсолютная погрешность вычислений напряжения фазы B: 1.6713649279948302
Средняя относительная погрешность вычислений напряжения фазы B, %: 0.08992756446641215
# abs_tol = v_c - ssc_v_c;
# mean_tol = abs(mean(abs_tol));
# rel_tol = (v_c - ssc_v_c)./ssc_v_c;
# mean_tol_rel = abs(mean(filter(!isnan,rel_tol)));
# println("Средняя абсолютная погрешность вычислений напряения фазы C: ", mean_tol);
# println("Средняя относительная погрешность вычислений напряжения фазы C, %: ", mean_tol_rel*100);
Средняя абсолютная погрешность вычислений напряения фазы C: 1.6157017665756115
Средняя относительная погрешность вычислений напряжения фазы C, %: 0.08920273453748194

Загрузить пример в Engee

Чтобы скачать пример себе в файловый браузер, скопируйте и выполните следующие команды. Пример появится по адресу start/examples в соответствующей папке.

# Проверка наличия директории для примера
if isdir("/user/start/examples/power_systems/power_ssm")
	rm("/user/start/examples/power_systems/power_ssm"; force = true, recursive = true)
end

# Копирование примера на диск Engee
run(`git clone https://git.engee.com/learn-engee/examples/power_systems/power_ssm.git /user/start/examples/power_systems/power_ssm`)

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