Импорт компонента 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 — это мощный инструмент для интеграции разнородных моделей без необходимости их полного переписывания, но с компромиссом в виде управляемой синхронизации и потенциальных ошибок дискретизации.