Импорт компонента FMU Co-Simulation
Показываем, как использовать блоки FMU Import
чтобы добавлять на холст Engee внешние модели в формате FMU.
Описание модели
Режим Co-Simulation (совместное моделирование) в компонентах FMU (Functional Mock-up Unit) предназначен для объединения нескольких моделей, разработанных в разных инструментах моделирования, в единую систему с синхронизацией по времени.
Такой режим позволяет соединять модели, созданные в разных средах (MATLAB/Simulink, Dymola, OpenModelica и др.), без необходимости переписывать их код.
Каждый FMU работает как "чёрный ящик" со своим решателем (solver).
В этом примере наша "внешняя" модель находится в файле fmuVanDerPol.fmu
, который мы поместим в блок FMU Import, и после настройки получим графики из модели, которая в нем лежит.

Предлагаем изучить файл FMU. Для этого поставим несколько библиотек и вызовем команду info(fmu)
.
Pkg.add( ["FMI"] )
using FMI
fmu = loadFMU( "fmuVanDerPol.fmu" )
info(fmu)
Настройка блока
В этой информации нам нужно найти названия входных, выходных портов и названия параметров, чтобы правильным образом создать интерфейс блока и настроить его.
У этой модели нет входов, есть два выхода (Out1
и Out2
) и есть параметр mu
. Кроме того мы не видим настроек временного шага, которые ждет решатель этой модели.
Мы выяснили эмпирически, что размер расчетного шага этой FMU модели не должен быть ниже
0.1 с
. Глобальный размер шага всей симуляции может быть каким угодно.

Запустим модель на выполнение и построим графики:
model_name = "fmu_co_simulation";
model_name in [m.name for m in engee.get_all_models()] ? engee.open(model_name) : engee.load( "$(@__DIR__)/$(model_name).engee");
res = engee.run( model_name );
plot( res["x"].time, [res["x"].value res["dx"].value], label=["x" "dx"],
lw=3, size=(600,300) )
Когда выбирают Co-Simulation вместо Model Exchange?
Model Exchange (ME) требует единого решателя для всей системы и подходит, если все модели могут работать с одним solver.
Co-Simulation (CS) выбирают, когда:
- модели используют разные решатели,
- есть legacy-код или проприетарные симуляторы,
- требуется распределённое выполнение (например, HIL-тестирование).
Заключение
Co-Simulation FMU — это мощный инструмент для интеграции разнородных моделей без необходимости их полного переписывания, но с компромиссом в виде управляемой синхронизации и потенциальных ошибок дискретизации.