Двигатель постоянного тока

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

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

Модель Engee: image.png

Модель Simulink: image.png

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

using Plots
using MATLAB
using CSV
using DataFrames
using Statistics

plotlyjs();

mat"start_simulink"
mat"p = genpath('/user/start/examples'); addpath(p);"

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

modelName = "ssc_dcmotor";
dcmotor_model = modelName in [m.name for m in engee.get_all_models()] ? engee.open( modelName ) : engee.model.load( "$(@__DIR__)/$(modelName).engee");

Запуск загруженной модели:

results = engee.run( modelName )
Dict{String, DataFrame} with 1 entry:
  "omega" => 2001×2 DataFrame…

Результаты моделирования:

W_en_t = results["omega"].time;
W_en_w = results["omega"].value;

Визуализация результатов

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

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

interactive-scripts/images/physmod_demo_dcmotor/ee3caa295c865e84f030179a47e024336cb7d0b6

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

mat"run_test_model('ssc_dcmotor_demo');";

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

W_sim_w = mat"SysOutput.Data";
W_sim_t = mat"SysOutput.Time";
plot(W_sim_t, W_sim_w, legend = false)
plot!(title = "Результаты моделирования в Simulink", ylabel = "Скорость вращения двигателя, об/мин", xlabel="Время, c")

interactive-scripts/images/physmod_demo_dcmotor/d85c62c4d71da9f6a2464a6b9450b8b0b9f01ba2

Сравним результаты моделирования в Engee и Simulink. Для этого сравним значения скорости.

plot(W_en_t , W_en_w, label = "Engee")
plot!(title = "Сравнение результатов моделирования")
plot!(W_sim_t,W_sim_w, label = "Simulink")
plot!(ylabel = "Скорость вращения двигателя, об/мин", xlabel="Время, c")

interactive-scripts/images/physmod_demo_dcmotor/8af0ba7264d7a4185cd850168a0fdb321d740e16

Выводы

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

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

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

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

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