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

Конвертор модели Simulink

В этом примере наглядно и пошагово рассматривается процесс преобразования модели Simulink в модель Engee.

Введение

Это простейший пример работы конвертора моделей Engee. Он показывает работоспособность инструмент и даёт пошаговую инструкцию для работы. Конвертор может работать и с более сложными моделями, например AB-фильтром. Этот пример более сложен для восприятия и начала работы с конвертором.

1. Модель Simulink

Получаем путь примера

In [ ]:
example_path = @__DIR__ 
Out[0]:
"/user/convert_model"

Проверяем содержимое директории

In [ ]:
readdir(example_path)
Out[0]:
2-element Vector{String}:
 "convert_model.ngscript"
 "test_source.slx"

Получаем путь исходной модели simulink

In [ ]:
simulink_model_name = "test_source"
simulink_model_path = joinpath(example_path, simulink_model_name*".slx")
Out[0]:
"/user/convert_model/test_source.slx"

Откроем исходную модель, рассмотрим её содержимое и запомним настройки модели и блоков.

image.png

2. Конвертация модели в скрипт

Задаём путь скрипта, который хотим получить

In [ ]:
jl_script_name = "convert_script"
jl_script_path = joinpath(example_path, jl_script_name*".jl")
Out[0]:
"/user/convert_model/convert_script.jl"

Далее генерируем скрипт с функциями программного управления для создания новой модели Engee. Генерация скрипта происходит автоматически при помощи функции engee.convert_model().

In [ ]:
engee.convert_model(simulink_model_path, jl_script_path);
[ Info: Generated conversion script: /user/convert_model/convert_script.jl
Warning: detected a stack overflow; program state may be corrupted, so further execution might be unreliable.

Снова проверяем содержимое директории, чтобы убедиться, что появился ожидаемый скрипт Julia.

In [ ]:
readdir(example_path)
Out[0]:
3-element Vector{String}:
 "convert_model.ngscript"
 "convert_script.jl"
 "test_source.slx"

3. Создание модели из скрипта

Теперь достаточно выполнить полученный скрипт:

In [ ]:
include(jl_script_path)

После выполнения скрипта проверим содержимое директории примера: теперь она пополнилась новым файлом - файлом модели Engee.

In [ ]:
list = readdir(example_path)
Out[0]:
4-element Vector{String}:
 "convert_model.ngscript"
 "convert_script.jl"
 "test_source.engee"
 "test_source.slx"

Откроем полученную модель - для этого примера в списке файлов файл модели третий, поэтому list[3]

In [ ]:
engee.open(list[3])
Out[0]:
System(
    name: root,
    id: 91bb9bf0-b57b-4f01-af39-601b0524749b,
    path: test_source
)

Получаем модель с содержимым, которое ранее мы видели в исходной модели Simulink.

image.png

4. Моделирование

Выполним эту модель, чтобы убедиться, что она рабочая:

In [ ]:
engee.run(engee.gcm())

Ячейка выполняется успешно, а в строке состояния отображается ожидаемый статус модели:

image.png

Следовательно, модель была сконвертирована без проблем.

Заключение

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