Awesome FMI
A curated list of Functional Mock-up Interface (FMI) libraries, tools and resources.
Functional Mock-up Interface (FMI) is a tool independent standard to support both model exchange and co-simulation of dynamic models. See the official FMI website for the official specification and more information about the FMI standard.
Contents
FMI 2
The latest (as of November 2021) stable release of the FMI specification is 2.0.3
, released on 2021-11-17.
You can find the text of the FMI specification 2.0.3 at https://github.com/modelica/fmi-standard/releases/tag/v2.0.3.
Unless noted otherwise, the tools and libraries listed are compatible with FMI 2.
Libraries
Libraries to import, simulate and export FMUs (Functional Mock-up Units) that support FMI 2.
C
- FMI Library - C library for import of FMUs. [BSD]
- FMU SDK - C library for exporting FMUs. [BSD]
C++
- FMI++ - C++ library for import and export of FMUs. [BSD]
- FMI4cpp - FMI 2.0 implementation written in modern C++. [MIT]
Python
- PyFMI - Python package for loading and interacting with FMUs, based on the FMI Library. [LGPL]
- FMPy - Python package for loading and interacting with FMUs. It supports also the latest System Structure and Parameterization (SSP standard). [BSD]
- FMI++ Python Interface - Python interface for the FMI++ library. [BSD, BOOST]
- SimulatorToFMU - Python package that allows to export a memoryless Python-driven simulation program or script as a FMU. [BSD]
- modestpy - Python package for parameter estimation in FMUs. [BSD]
- PythonFMU - Framework for exporting Python code as FMUs. [MIT]
Java
- FMI4j - Java/Kotlin library for dealing with FMUs on the JVM platform. [MIT]
- javaFMI - Java library for import and export of FMUs. [LGPL3]
MATLAB/Simulink
- Simulink FMU Importing/Export a Model as a Tool-Coupling FMU - Out-of-the-box official support for FMU import and export (tool coupling) in Simulink. [Commercial]
- FMI Toolbox for MATLAB/Simulink - Toolbox with support for Simulink FMU Import/Export and MATLAB FMU import. [Commercial]
- matlab-fmu - MATLAB Toolbox for Windows with support for import of FMUs for Model-Exchange and Co-Simulation as well as the export of MATLAB scripts as FMUs for Co-Simulation, based on the FMI++ library. [BSD]
- Simulix - A third-party Simulink tool to generate FMUs from Simulink models using the C-API. [GPL3]
- FMIKit-Simulink - Import and export Functional Mock-up Units with Simulink. [BSD]
Rust
- rust-fmi - A Rust interface to FMUs (Functional Mock-up Units) that follow the FMI Standard. [APACHE2/MIT]
Julia
- FMI.jl - Library which integrates FMI and permits load, instantiate, parameterize and simulate FMUs seamlessly inside the Julia programming language. [MIT]
- FMIFlux.jl - Library which offers the ability to setup NeuralFMUs, put FMUs inside any feed-forward NN topology and get a hybrid model trainable with a standard AD training process. [MIT]
Tools
For the official list of tools that support FMI 2, check http://fmi-standard.org/tools/ .
- λ-Sim - Tool that converts FMU simulation models into REST APIs. [MIT]
- FMIGo! - A set of tools for dealing with the FMI and SSP standards. [MIT]
- FMITerminalBlock - Two way interface between the FMI and IEC 61499-based controllers. [BSD]
- FMU-proxy - Framework that allows Functional Mock-up Units (FMUs) to be accessed through language independent RPC calls and that permits to transform a co-simulation FMU into a proxified version of the same FMU, so that each FMU can run in a separate process. [MIT]
- Unity-FMI-Addon - FMI support for Unity, a cross-platform game engine. [BSD]
- ROS fmi_adapter - FMI support for ROS, a flexible framework for writing robot software. [APACHE2]
- fmi_adapter_ros2 - FMI support for ROS2, the new version of the Robot Operating System. [APACHE2]
FMI 3
FMI 3.0 was recently released. General information on the FMI 3.0 feature list can be found in https://fmi-standard.org/faq/, and the standard text source can be found at https://github.com/modelica/fmi-standard . You can find the latest, automatically generated version of the FMI 3.0 standard at https://fmi-standard.org/docs/3.0-dev/ .
Warning: FMI 3.0 was recently released, and most of the tools listed in the following they support it only in an experimental way. If you want stable tools, use FMI 2 for the time being.
Some of the projects listed in the previous section also support for FMI 3 :
- Examples:
- Reference-FMUs :
3.0
examples FMUs are available, including examples for new co-simulation features such as scheduled co-simulation and early return in co-simulation. - PMSFIT/FMI30TestFMUs : Some examples FMUs based on the FMI 3.0 specification are available, including features such as binary variables.
- Reference-FMUs :
- Python:
- fmpy - support for FMI
3.0
is available.
- fmpy - support for FMI
- Julia:
- FMI.jl - experimental support for FMI
3.0
is work in progress
- FMI.jl - experimental support for FMI
- Simulink:
- FMIKit-Simulink - support for export of FMU
3.0
is available.
- FMIKit-Simulink - support for export of FMU
- Formal models
- FMI-VDM-Model - VDM formal models for the FMI3.0 specification.
Community
- Stack Overflow - Questions related to FMI in Stack Overflow.
- Twitter's FMI Info and News - Unofficial news account about the FMI Standard, FMI usage and FMI tools.
Contribute
Contributions are welcome! Read the contribution guidelines first.