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

Синхронный двигатель с постоянными магнитами

В данном примере будут продемонстрированы модели синхронного двигателя с постоянными магнитами (СДПМ) в генераторном режиме, созданные в Engee (модель motor_pmsm.engee) и в Simulink (модель motor_pmsm.slx). Будет показан процесс запуска моделей из среды разработки скрипта с помощью командного управления и сравнение результатов моделирования. В симуляции скорость вращения вала СДПМ постоянная.

Общий вид моделей

Модель Engee:

motor_pmsm_engee_2.png

Модель Simulink:

motor_pmsm_2.png

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

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

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

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

model_name = "motor_pmsm"
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 4 entries:
  "i_c" => 100001×2 DataFrame…
  "i_b" => 100001×2 DataFrame…
  "w"   => 100001×2 DataFrame…
  "i_a" => 100001×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;
w = results["w"].value;

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

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

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

interactive-scripts/images/power_systems_demo_motor_pmsm/0f0b0d2e9ae2f2deb833509d4eb82d9c2f855036

Вывод графика зависимости скорости вращения вала от времени:

plot(t, w, label="Скорость вращения вала")
plot!(title = "Результаты моделирования в Engee", ylabel = "Скорость вращения, об/мин", xlabel="Время, c")

interactive-scripts/images/power_systems_demo_motor_pmsm/f90537c705344491ee6db74397f26a1c2f786f5c

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

mat"bdclose all;";
mat"load_system('motor_pmsm');";
mat"warning('off','all');";
mat"out = sim('motor_pmsm');";
mat"close_system('motor_pmsm',0);";
inary

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

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_w = mat"out.yout(:,4)";
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_motor_pmsm/9f601b6bf1ac65d599577a4daed98f3f3bcf8cc1

plot(ssc_time, ssc_w, label="Скорость вращения вала")
plot!(title = "Результаты моделирования в Simulink", ylabel = "Скорость вращения, об/мин", xlabel="Время, c")

interactive-scripts/images/power_systems_demo_motor_pmsm/03c96d8a827c1270de1f9ab269a45e357d11c91b

Сравним результаты моделирования в 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_motor_pmsm/a9a36f40eb8d1bc438fc4b0f2cc0793a7689e0e9

plot(t, w, label="Скорость вращения вала")
plot!(ylabel = "Скорость вращения, об/мин", xlabel="Время, c")
plot!(title = "Сравнение скорости вращения вала Engee и Simulink")
plot!(ssc_time, ssc_w, label="Скорость вращения вала (Simulink)")

interactive-scripts/images/power_systems_demo_motor_pmsm/c734169b493bfe960b59e02f3d34ea395be4cfae

Выводы

В данном примере были использованы инструменты для командного управления моделью, в связи с чем из скрипта были запущены модели Engee и Simulink. Результаты симуляций были импортированы в скрипт, визуализированы, с помощью интерактивных графиков библиотеки Plots, а также проанализированы. Визуальный анализ результатов показал, что модели электромашин, созданные как в Engee, так и в Simulink, идентичны.

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