Синхронный двигатель с постоянными магнитами
В данном примере будут продемонстрированы модели синхронного двигателя с постоянными магнитами (СДПМ) в генераторном режиме, созданные в Engee (модель motor_pmsm.engee) и в Simulink (модель motor_pmsm.slx). Будет показан процесс запуска моделей из среды разработки скрипта с помощью командного управления и сравнение результатов моделирования. В симуляции скорость вращения вала СДПМ постоянная.
Реализация запуска модели с помощью программного управления
Загрузка нужных библиотек и подготовка ядра 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")
Вывод графика зависимости скорости вращения вала от времени:
plot(t, w, label="Скорость вращения вала")
plot!(title = "Результаты моделирования в Engee", ylabel = "Скорость вращения, об/мин", xlabel="Время, c")
Запуск модели 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")
plot(ssc_time, ssc_w, label="Скорость вращения вала")
plot!(title = "Результаты моделирования в Simulink", ylabel = "Скорость вращения, об/мин", xlabel="Время, c")
Сравним результаты моделирования в 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")
plot(t, w, label="Скорость вращения вала")
plot!(ylabel = "Скорость вращения, об/мин", xlabel="Время, c")
plot!(title = "Сравнение скорости вращения вала Engee и Simulink")
plot!(ssc_time, ssc_w, label="Скорость вращения вала (Simulink)")
Выводы
В данном примере были использованы инструменты для командного управления моделью, в связи с чем из скрипта были запущены модели Engee и Simulink. Результаты симуляций были импортированы в скрипт, визуализированы, с помощью интерактивных графиков библиотеки Plots, а также проанализированы. Визуальный анализ результатов показал, что модели электромашин, созданные как в Engee, так и в Simulink, идентичны.