Skip to content

A curated list of Functional Mock-up Interface (FMI) libraries, tools and resources.

Notifications You must be signed in to change notification settings

traversaro/awesome-fmi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

80 Commits
 
 
 
 

Repository files navigation

Awesome FMI Awesome

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]
  • qFMU - Generate standard LTI system FMUs through CLI [BSD]

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]
  • Dymola - A modeling and simulation environment for Modelica, with full support for FMI. [Commercial]
  • 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]
  • fmu-viewer - A simple FMU viewer in the browser

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.
  • Modelica:
    • Dymola - support for FMI 3.0 is available, including arrays, terminals, icons, event mode and early return.
  • Python:
    • fmpy - support for FMI 3.0 is available.
  • Julia:
    • FMI.jl - experimental support for FMI 3.0 is work in progress
  • Simulink:
  • Formal models

Community

Contribute

Contributions are welcome! Read the contribution guidelines first.

License

CC0

Releases

No releases published

Packages

No packages published