Skip to content

Functional Mock-up Interface (FMI)🔗

FMI is the execution format that Modelon Impact use for simulation. It's an open standard for exchanging dynamical simulation models between different tools in a standardized format.

An FMU (Functional Mock-up Unit) is a file (with extension .fmu) that contains a simulation model that adheres to the FMI standard.

ME vs CS FMUs🔗

The FMI standard specifies two different kinds of FMUs: Model Exchange (ME) and Co-Simulation (CS).

ME FMUs represent the dynamical systems by differential equations. To simulate the system, the importing tool needs to connect the FMU to a numerical solver. The solver sets the FMU internal state, asks for the state derivatives, and determines the step size and how to compute the state at the next time step.

CS FMUs contain their own numerical solver. The importing tool sets the FMU inputs, asks the FMU to step forward a given time, and reads the FMU output after the step is completed.

FMI 1.0/2.0, What is the difference?🔗

Version 1.0 of the standard was released in 2010. It includes all the basic FMU concepts such as ME and CS FMUs. Version 2.0 was released in 2014. It adds some functionality such as support for directional derivatives and clarifies some ambiguities in the 1.0 standard.


Modelon Impact use the recommended version 2.0

What about binary and source code FMUs?🔗

An FMU file is a zip file that can be opened with a standard zip tool. Normally, the user does not need to know about this since the importing tool will do this behind the scenes before simulation.

The zip file contains an XML file that defines the model structure (variable names, parameters, inputs, outputs, etc.), and at least one implementation of the functions specified in the FMI standard. Most commonly, this takes the form of a binary such as a Windows dll. Binary files can only be run on the platform they are compiled for. Therefore, most FMUs are restricted to run on a single platform such as Windows 64-bit or Linux 32-bit.

The FMU may contain binaries for multiple platforms, or source code so that it can be compiled to a target platform by the user. This is less common, so if you need this functionality make sure to check specifically if your tools support it.

To learn more, sign-up for a course.