Fact-checked by Grok 2 weeks ago

Functional Mock-up Interface

The Functional Mock-up Interface (FMI) is a and that defines a tool-independent container format and application programming interface (API) for exchanging dynamic simulation models, primarily using XML descriptions, C source code, and compiled binaries packaged in a file known as a Functional Mock-up Unit (FMU). It supports two main functionalities: model exchange, where an FMU encapsulates a complete model including its differential equations for simulation in another tool, and co-simulation, which allows distributed execution of coupled subsystems across different environments while handling communication between them. Developed to address challenges in simulating complex cyber-physical systems, FMI facilitates seamless integration of models from diverse tools without reliance on vendor-specific formats, making it essential for industries like automotive, , and . FMI originated from the European ITEA2 MODELISAR project, which ran from July 2008 to December 2011 and involved 29 partners including Daimler AG, Bosch, and Dassault Systèmes, with the goal of improving methods for designing vehicle systems and embedded software. The project's efforts culminated in the release of FMI version 1.0 in 2010, coordinated initially by Daimler and focused on establishing a unified interface for model sharing and simulation. Following MODELISAR, development transitioned to the Modelica Association Project (MAP) FMI in 2011, an open collaboration managed by the Modelica Association with steering from industry leaders like Siemens, AVL List, and Bosch. This ongoing project uses a transparent process involving GitHub for specifications, biweekly design meetings, and annual workshops to evolve the standard. The standard has progressed through key versions to enhance robustness and applicability. , released in 2014, introduced improvements such as support for intermediate variable updates during co-simulation and better handling of model variability. , launched in 2022 with minor updates culminating in 3.0.2 on November 27, 2024, added advanced features including clock-based event handling for precise timing, terminals for grouping variables with graphical icons, support for types and runtime-variable arrays, and a "scheduled execution" mode for integrating with external schedulers in systems. These enhancements address limitations in prior versions, such as asynchronous communication workarounds, and expand use cases to include digital twins, virtual electronic control units (vECUs), and hybrid simulation setups. FMI's adoption has been widespread, with over 260 compatible tools listed by the Modelica Association as of 2025, including from , from , and Amesim from , spanning commercial, open-source, and academic environments. Its impact is particularly notable in system-level simulations for multi-domain , where it reduces time by enabling model across organizational boundaries, as evidenced by its integration in projects at for beyond-tool-border simulations and in standards like ASAM XIL-MA for measurement and calibration. Complementary layered standards, such as the System Structure and Parameterization () from , further extend FMI for composing complex model hierarchies.

Introduction

Definition and Purpose

The (FMI) is a free and that defines a and an for exchanging models between different tools, utilizing a combination of XML files for model description, binary libraries, and C functions for runtime execution, all packaged in a file known as a Functional Mock-up Unit (FMU). This enables the tool-independent transfer and integration of models, allowing simulations to be conducted across diverse software environments without proprietary dependencies. The primary purposes of FMI are to facilitate model exchange, where a black-box model is exported from one tool and imported into another for simulation using the importing tool's solver, and co-simulation, where multiple models from different tools are coupled and executed in parallel, exchanging data at discrete communication points to simulate complex systems. These capabilities address the challenges of integrating subsystems in multi-domain applications, such as cyber-physical systems. Key benefits of FMI include enhanced across simulation tools from over 230 vendors, reducing by promoting processor- and platform-independent model reuse, and supporting multi-physics simulations that span domains like mechanical, electrical, and thermal systems. The FMU serves as the core component, encapsulating the model's XML-based description (including variables, dependencies, and structure), the via standardized C functions (e.g., for setting and getting variable values), and the compiled binaries required for execution, ensuring seamless portability and encapsulation of dynamic behavior. Later versions, such as 3.0, build on this foundation with enhancements for broader applicability.

History and Development

The of the Functional Mock-up Interface (FMI) began in within the , a European Union-funded initiative under the ITEA2 program designed to advance the design of vehicle systems and through standardized simulation practices. This , which ran from July to December 2011, involved 29 partners primarily from the automotive sector, including major companies such as Daimler, , , and , along with tool vendors like and AVL List. Funded by national research agencies including Germany's BMBF, France's DGCIS, and Sweden's VINNOVA, MODELISAR addressed the growing need for interoperable model to enable collaborative in cyber-physical systems, particularly in automotive applications. The 's emphasis on replacing physical prototypes with digital functional mock-ups drove the creation of FMI as a tool-independent standard for sharing dynamic simulation models. The initial release, FMI 1.0, was published in 2010 and provided capabilities for both model exchange and co-simulation, allowing models to be imported into different simulation environments without proprietary tool dependencies. Following the conclusion of MODELISAR, responsibility for FMI's evolution transferred to the Modelica Association, where it has been maintained as a dedicated project with contributions from a steering committee and working groups comprising tool vendors, OEMs, and research institutions. This organizational structure has facilitated broad industry adoption, with over 230 tools now supporting the standard across automotive, aerospace, and energy sectors. The key motivation remained the standardization of model reuse to streamline multi-domain simulations, reducing development costs and time in integrated system testing like model-in-the-loop (MiL) and hardware-in-the-loop (HiL). FMI 2.0, released on July 25, 2014, expanded the standard by enhancing co-simulation support, introducing intermediate variable handling for more efficient data exchange, and adding event handling mechanisms to better manage discrete events in simulations. These improvements addressed limitations in earlier versions, enabling more robust integration of heterogeneous models from suppliers and OEMs in workflows. In 2022, FMI 3.0 marked a significant advancement, incorporating features such as terminals for grouping variables with graphical icons, clock-based event handling for precise timing, support for types and runtime-variable arrays, and a scheduled execution mode for integrating with external schedulers in systems. A minor maintenance update, FMI 3.0.2, was issued on November 27, 2024, providing clarifications and bug fixes without introducing new functionality. These updates reflect ongoing collaboration involving more than 100 contributing organizations, extending FMI's applicability to emerging areas like virtual ECUs and digital twins in and beyond.

Core Concepts

The FMI Approach

The Functional Mock-up Interface (FMI) embodies a tool-agnostic philosophy, enabling the export of models as self-contained Functional Mock-up Units (FMUs) that can be imported and executed in any compliant simulator without requiring access to the underlying or tool-specific details. This approach promotes across diverse environments by standardizing the packaging and interaction of models, ensuring processor and operating system independence while supporting deployment on platforms ranging from personal computers to hardware-in-the-loop systems and embedded controllers. At its core, an FMU serves as a portable structured as a archive, encapsulating essential components such as the modelDescription.xml file—which outlines variables, parameters, dependencies, and model capabilities—along with platform-specific binaries in compiled C code (e.g., dynamic link libraries) and optional elements like schematics, , or tabular data. This structure allows multiple instances of the same FMU to coexist and supports nesting of FMUs within others, facilitating modular model composition without exposing proprietary implementation details. The interface principles of FMI revolve around defining input and output variables through the XML description, complemented by a standardized set of functions for model setup, advancement, and termination, thereby accommodating both continuous-time and discrete-event . These principles emphasize minimal runtime overhead through efficient mechanisms, such as caching and batch variable updates, while hiding internal structures to maintain encapsulation. FMI supports varying levels of , ranging from basic passing between static components to the full of dynamic behaviors in coupled simulations, with distinctions between model (transferring the model for integration into a single solver) and co-simulation (federating independently solved subsystems).

Architecture

The Functional Mock-up Interface (FMI) employs a standardized file structure for Functional Mock-up Units (FMUs), which serve as portable containers for dynamic models. An FMU is packaged as a archive that includes a mandatory modelDescription.xml file at the root, along with platform-specific binary libraries (such as .dll for Windows, .so for , or .dylib for macOS), optional C for custom compilation, and additional files like or data tables. The modelDescription.xml file provides a comprehensive description of the model's interface, including exposed variables, their types, and interdependencies, ensuring interoperability across tools without requiring access to the model's internal implementation. Variables within the FMU are defined in the modelDescription.xml using an XML schema that specifies their data types—such as Float64 for real numbers, Int32 for integers, Boolean, String, Binary, and Clock—with support for scalar values or arrays stored in row-major order. Each variable includes attributes for causality, which indicates the direction of information flow (e.g., input for externally driven values, output for computed results, parameter for configurable constants, local for internal computations, or independent for elements like time), and variability, which describes temporal behavior (e.g., constant for unchanging values, fixed or tunable for parameters adjustable at setup, discrete for event-driven updates, continuous for smooth time dependence, or clocked for synchronized events). Enumerations are handled as strings with defined literals, while dependencies between variables are captured to inform efficient evaluation orders during simulation. The FMI architecture exposes the model through a C application programming interface (API), defined in header files like FMI3.h, which allows importers to interact with the FMU without recompiling the model. Core functions include fmi3Instantiate for creating an instance of the FMU, fmi3SetupExperiment for configuring experiment parameters such as start time, stop time, and tolerance, fmi3EnterInitializationMode and fmi3ExitInitializationMode for preparing and finalizing the model state, and fmi3DoStep for advancing time in co-simulation scenarios. Variable access is facilitated by type-specific getters and setters, such as fmi3GetFloat64/fmi3SetFloat64 for real variables, fmi3GetBoolean/fmi3SetBoolean for booleans, and similar pairs for integers, strings, binaries, and clocks; additional functions like fmi3GetFMUState and fmi3SetFMUState enable state serialization for rollback or reuse. Platform detection is handled via fmi3GetTypesPlatform, which returns a string identifier for the FMU's compilation environment. These functions support both model exchange and co-simulation modes, with optional extensions for scheduled execution via fmi3ActivateModelPartition. Key elements of the XML schema in modelDescription.xml further structure the model's metadata. The <UnitDefinitions> section defines physical units (e.g., meters per second as <Unit name="m/s">), which can be referenced by variables for dimensional consistency. <TypeDefinitions> allows custom type aliases, such as enumerations or structured floats with start/end values and quantities. The <DefaultExperiment> element specifies default simulation settings, including startTime, stopTime, and tolerance for numerical solvers. Variable dependencies are detailed in the <ModelStructure> element, using <Output> and <Derivative> tags to list known outputs and their influencing inputs, along with <Unknown> for undetermined relations, enabling dependency graph analysis for parallel evaluation. To ensure platform independence, FMUs include binaries compiled for major operating systems (Windows, , macOS) and architectures (32-bit and 64-bit), identified by folder names like win64 or linuxx86_64 within the archive. If binaries are unavailable for a target platform, importers can compile the provided source code using standard tools, minimizing reliance on proprietary libraries or OS-specific services. This approach promotes broad portability while documenting any runtime requirements, such as or floating-point precision. Error handling in the FMI API relies on status codes returned by all functions, providing a standardized way to diagnose issues without halting execution unnecessarily. The codes include fmi3OK for successful operations where outputs are fully defined, fmi3Warning for non-critical issues allowing continuation, fmi3Discard for failed calls where the FMU state remains unchanged and outputs are undefined (permitting recovery), fmi3Error for recoverable errors requiring simulation termination unless a prior state is restored, and fmi3Fatal for irreparable failures corrupting all instances. These statuses, combined with optional string-based logging via fmi3GetString, facilitate robust integration and debugging.

Operational Modes

Model Exchange

In the Model Exchange mode of the Functional Mock-up Interface (FMI), a model is exported as a black-box Functional Mock-up Unit (FMU), allowing the importing environment to solve the model's equations using its own numerical solver. This mode targets systems described by ordinary differential equations (ODEs), differential algebraic equations (DAEs), discrete equations, or hybrid combinations thereof, encompassing continuous-time dynamics with algebraic constraints, discrete-time updates, and event handling such as time events, state events, and step events. The FMU encapsulates the model's structure and behavior without an embedded solver, providing simulator independence for integrating models from diverse tools into a unified simulation environment. The simulation process begins with the importer instantiating the FMU via the fmi3InstantiateModelExchange function, followed by entering initialization mode with fmi3EnterInitializationMode to set parameters, initial states, and other setup values. Once initialized via fmi3ExitInitializationMode, the importer advances the simulation by entering continuous-time mode using fmi3EnterContinuousTimeMode, where it queries the FMU for continuous states with fmi3GetContinuousStates and their derivatives via fmi3GetContinuousStateDerivatives to integrate the system forward in time. For event handling, the importer calls fmi3EnterEventMode and uses functions like fmi3UpdateDiscreteStates to manage discrete updates and fmi3GetEventIndicator to detect state events, ensuring all variables remain internal to the FMU without external inputs beyond initialization parameters during . The process concludes with termination using fmi3Terminate, allowing the importer full control over time stepping and event resolution. This mode supports continuous-time models formulated as DAEs in semi-explicit index-1 form, where the importer's solver resolves algebraic loops iteratively, as well as purely discrete models driven by clocked events and hybrid models blending both paradigms through event transitions. Key advantages include complete flexibility in selecting the importer's solver algorithms—such as variable-step or fixed-step integrators—without requiring a dedicated for , and efficient selective evaluation of model variables or partial derivatives via calls like fmi3GetDirectionalDerivative to support advanced numerical methods. These features enable minimal runtime overhead through output caching and vectorized data exchanges, promoting scalability for complex systems. However, Model Exchange demands that the model be fully specified at export, though FMI 3.0 supports structural changes via structural parameters and allows setting input variables during in appropriate modes, enabling interactive and adaptive scenarios. It also imposes computational demands on algebraic loop resolution and does not natively support features like multi-body or , requiring the importer to handle such extensions externally. Additionally, dependency information in the FMU may not fully capture array resizes or dynamic parameter impacts, potentially complicating efficient solving. Specific to this mode, the FMU's modelDescription.xml file includes a <ModelExchange> to indicate , alongside <ModelVariables> for defining types, causalities (e.g., internal states), and clock dependencies for elements, but excludes ports beyond those used in setup. The <ModelStructure> element encodes interdependencies via dependency graphs, aiding the importer in detecting algebraic loops and optimizing evaluation orders without revealing internal equations. Capability flags in the XML, such as support for continuous states or directional derivatives, further guide the importer's integration strategy.

Co-Simulation

Co-simulation in the Functional Mock-up Interface (FMI) enables the integration of multiple Functional Mock-up Units (FMUs) as slave components, each advancing its internal state independently while communicating with a responsible for overall time and coordination. In this mode, FMUs encapsulate subsystem models with their own solvers, allowing distributed simulation of complex systems where the master orchestrates interactions at discrete communication points to ensure consistency across the coupled environment. The process begins with the providing to each slave FMU and specifying a communication time step, after which it invokes the fmi2DoStep (or fmi3DoStep in later versions) function to advance the slave's . Slaves then compute their internal dynamics over the interval, return updated outputs to the , and approximate input values for the subsequent interval, facilitating data exchange without exposing internal solver details. This master-slave interaction supports the of heterogeneous models, such as and electrical subsystems, in a tool-independent manner. Key features of FMI co-simulation include support for both fixed and variable step sizes, allowing adaptation to model or computational demands. It accommodates weak , where approximations occur at communication points for efficiency, and strong , involving iterative exchanges for higher in tightly interconnected systems. Additionally, event detection across FMUs is handled through indicators that signal discrete changes, enabling synchronized responses to s like state transitions in hybrid models. Starting with FMI , enhancements improved accuracy by introducing intermediate variable updates, which permit mid-step data exchanges to refine approximations without full recomputation. mechanisms, using functions like fmi2SetFMUState, allow the master to revert and retry steps for better numerical precision, particularly in variable-step scenarios. These additions addressed limitations in earlier versions by enabling more flexible state management during coupled executions. FMI 3.0 further advanced co-simulation with capabilities via the earlyReturn flag in fmi3DoStep, enabling termination of a step if fails, and improved scheduling through clock-based mechanisms for precise event timing in applications. These features facilitate robust of large-scale, distributed simulations, such as in cyber-physical systems. Despite these advancements, co-simulation faces challenges in maintaining , particularly with variable step sizes and in weak coupling, which can amplify errors in stiff systems. Handling algebraic loops across FMUs requires iterative solvers at the master level, as direct dependencies may necessitate checks to avoid or in coupled algebraic constraints.

Standards and Specifications

Versions and Evolution

The FMI 3.0 specification, released on May 10, 2022, introduced several key enhancements to support advanced simulation scenarios, including clock mechanisms for handling discrete events and synchronizing variable changes across functional mock-up units (FMUs). These clocks enable predictable scheduling in synchronous clocked simulations and event-driven interactions in co-simulation modes. Additionally, variable scoping was refined through attributes distinguishing local and global visibility in the model description XML, allowing better management of dependencies and access restrictions. Intermediate sections in the XML schema facilitate partial updates by defining intermediate variables accessible between communication points in co-simulation, particularly for continuous-time variables. Asynchronous co-simulation features, such as event mode and early return from step functions, were added to accommodate embedded systems requiring non-blocking execution and event handling. New functions like fmi3GetNumberOfVariableDependencies and fmi3GetVariableDependencies were introduced to query runtime dependency counts and kinds (e.g., independent, constant, or tunable) for variables, which may vary with structural parameters or array sizes. Following the 3.0 release, FMI 3.0.1 was issued on July 10, 2023, as a maintenance update providing minor clarifications and bug fixes without introducing new features. It specifically addressed ambiguities in variable dependencies. FMUs compliant with FMI 3.0 remain fully compatible with 3.0.1. Subsequently, FMI 3.0.2, released on November 27, 2024, further refined these aspects through additional clarifications and fixes, enhancing validation for better compliance checking and improving platform support for greater independence across operating systems and processors via standardized C/C++ sources. Like its predecessor, it maintains full with prior 3.0-series FMUs. Backward compatibility is ensured through explicit version detection mechanisms in FMUs, such as the fmiVersion attribute in the model description XML, which allows importers to identify and handle the specification version dynamically. Minor updates like 3.0.1 and 3.0.2 are designed to be fully interoperable with 3.0, while major version increments may introduce breaking changes. Migration guidance for exporters and importers is provided in the official implementers' guide, offering best practices for updating tools to leverage new dependency queries and event handling without disrupting existing workflows. Looking ahead, ongoing developments emphasize with cloud-based environments to enable scalable, distributed model execution, as explored in recent on simulation-as-a-service architectures. Efforts also include AI-enhanced techniques for model reduction to optimize large-scale FMU performance. By 2025, FMI adoption has surpassed 230 compliant tools and libraries, reflecting widespread for model exchange and co-simulation. Notable examples include / for importing and exporting FMUs in design, for multi-domain physical modeling, and for system-level simulations across versions 1.0 to 3.0.

Licensing

The Functional Mock-up Interface (FMI) standard is provided under open licenses that promote broad accessibility and adoption. The specification document itself is licensed under the Creative Commons Attribution-ShareAlike 4.0 International (CC-BY-SA 4.0) license, which permits free use, sharing, adaptation, and distribution for any purpose, including commercial applications, as long as appropriate credit is given to the original authors and any derivative works are shared under the same license terms. This licensing approach has been consistent since the early versions of the standard, originating from the MODELISAR project, and continues to apply to FMI 3.0 and later releases. Accompanying source materials, including the XML schema files and C header files essential for implementing the interface, are released under the 2-Clause BSD . This permissive license allows implementers to freely use, modify, and distribute these files in both open-source and without royalties or mandatory disclosure of modifications, provided the original and are retained. The scope of these licenses covers the core standard artifacts—the specification text, schemas, and headers—but does not impose restrictions on the creation, export, or usage of Functional Mock-up Units (FMUs). Binaries embedded within FMUs, however, remain subject to the licensing terms of the specific tools or vendors that generate them. While the licensing framework has remained stable, FMI 3.0 explicitly reaffirms the CC-BY-SA 4.0 for the documentation and BSD for code components, ensuring compatibility with prior versions without substantive changes to the terms. To contribute to the standard, participants must sign a (CLA) with the Association, which sublicenses to the organization for maintenance and distribution. For compliance, tools claiming to be "FMI-compliant" must fully adhere to the specification's requirements, but the Modelica Association does not endorse or certify specific implementations. This open licensing model facilitates widespread adoption by enabling integration into commercial products without legal barriers, in contrast to simulation interfaces that often require paid licenses or restrict redistribution.

System Structure and Parameterization (SSP)

The System Structure and Parameterization () standard serves as a companion to the Functional Mock-up Interface (FMI) by providing a tool-independent format for describing, packaging, and exchanging system structures along with their parameterization. Released in version 1.0 on March 5, 2019, SSP defines an XML-based to specify system topology, including connections between components such as FMUs, parameters, and initial values, enabling the composition of complex simulation models without reliance on proprietary tools. , released on December 20, 2024, extends this foundation to support more advanced system designs while maintaining backward compatibility with earlier versions. At the core of SSP is the SystemStructure.xml file, which encapsulates key elements for model composition. The Component element represents instances of FMUs or other model entities, defining their properties and interfaces. Connector elements specify signal interfaces, such as inputs, outputs, or parameters, to link components logically. Element declarations allow for the representation of subsystems or atomic parts within the hierarchy, while Scenario elements outline complete simulation setups, including execution parameters and variability options. These structures are packaged in a ZIP archive, facilitating portable exchange of entire parameterized systems. SSP integrates seamlessly with FMI by referencing FMU files via URIs within its XML descriptions, allowing direct instantiation of FMU-based models in a tool-agnostic manner. This enables the creation of hierarchical models where subsystems can nest FMUs, and supports variability through multiple parameter sets for different simulation contexts. In , enhancements include native support for FMI 3.0 clock mechanisms to handle event-driven simulations, parameterized connections that allow dynamic signal mappings based on variables, and XML schemas for validation to ensure compliance during import and export. These features build on FMI's co-simulation capabilities for runtime execution without altering the underlying model exchange semantics. Common use cases for SSP involve automating workflows in large-scale simulations, such as assembling models from multiple FMUs for automotive testing, where entire systems can be exported from one tool and imported into another for parameterization and execution. This promotes in industries like and energy, reducing setup time for complex, multi-domain systems. SSP was developed under the Modelica Association Project SSP, a collaborative effort involving over 30 member organizations, and continues to be maintained by this group to ensure open standardization.

Applications and Integration

Implementation Examples

A common implementation example involves exporting a simple mass-spring-damper model from Modelica using Dymola to create an FMU compliant with FMI 2.0 for model exchange. In Dymola, the model is first built using the Modelica Standard Library components, such as a mass block connected to a spring-damper element, with inputs for external forces and outputs for position and velocity. To export, the user selects the Simulation tab, clicks the Translate menu arrow, and chooses FMU for Model Exchange, specifying FMI version 2.0 and the target platform; this generates a ZIP file containing the model description XML, binaries, and C source code for integration into an external solver. The resulting FMU's modelDescription.xml file defines the model's variables, including states like and . For a linear mass-spring-damper, the XML snippet under <ModelVariables> might appear as follows, where and are declared as continuous real variables with initial values and units:
xml
<ScalarVariable name="position" causality="local" variability="continuous">
  <Real start="0.0" unit="m"/>
</ScalarVariable>
<ScalarVariable name="velocity" causality="local" variability="continuous">
  <Real start="0.0" unit="m/s" derivative="0"/>  <!-- References position index -->
</ScalarVariable>
This structure allows an importer to provide derivatives and solve the ordinary differential equations externally. For co-simulation, an example integrates two FMUs representing coupled mechanical subsystems using the library PyFMI, which supports FMI 2.0. Consider exporting a direct model (outputting , , and acceleration) and an inverse model (outputting ) from , then loading them in via load_fmu('directInertia.fmu') and load_fmu('inverseInertia.fmu'). The models are connected by setting outputs as inputs (e.g., torque from inverse to direct), and a simulation object is created with options like step size and linear correction for . The master loop advances time using fmi2DoStep calls at a fixed communication step of 0.01 seconds, iterating until the end time while exchanging data at each step to simulate the coupled rotation. In /, importing an FMU follows a straightforward to simulate coupled systems. The FMU is added from the Library Browser under User-Defined Functions, and the .fmu file is specified in the parameters dialog, automatically detecting the (e.g., model exchange) and FMI version. Parameters, such as spring or initial conditions, are set via the 's Parameter tab, overriding XML defaults (e.g., entering a real value for a parameter); inputs and outputs are connected to other for coupling, like linking an electrical to a mechanical plant FMU. The simulation is run using the toolbar, with results visualized in scopes showing coupled behavior, such as oscillating position from the mechanical response driving electrical current. For FMI 3.0, an example involves importing an FMU into to leverage new features like clock-based event handling. The is similar to FMI 2.0: add the FMU , specify the .fmu file supporting FMI 3.0, and connect inputs/outputs. Simulink detects the version and supports advanced types such as or terminals for grouped variables. This enables simulations of hybrid systems, such as integrating a model with real-time clocks for precise event timing in control systems. As of December 2024, documentation and tools fully support FMI 3.0 import and export. Debugging FMU implementations often begins with validation using the FMU Check web application, which unpacks the FMU, verifies XML compliance, checks binary executability, and tests basic functions like fmi2GetTypesPlatform against the declared platform. For platform mismatches, such as a Windows FMU on Linux, users must re-export the source code version from the originating tool (e.g., Dymola with C source enabled) and recompile binaries using compatible toolchains, ensuring the modelIdentifier and fmiTypesPlatform attributes match the target environment to avoid runtime errors during fmi2Instantiate. A real-world application demonstrates FMU in automotive system simulation, where models from multiple vendors form a environment for testing an electronic stability program () . An FMU exported from (, FMI 2.0) and a FMU from SimulationX (ITI, FMI 2.0) replace native components in dSPACE's Automotive Simulation Models, coupled with the and vehicle dynamics. The setup simulates braking on a slippery in VEOS software, comparing scenarios with on (stable stop) versus off (skid), validating multi-vendor for hardware-in-the-loop testing. In the energy sector, FMUs are used for battery modeling, as in the BattGenie platform, where FMI-compliant models of lithium-ion cells are exported for across tools. This supports consistent sharing of electrochemical models without exposing details, facilitating applications in design and grid storage as of April 2025.

Comparisons with Other Technologies

The Functional Mock-up Interface (FMI) differs from Simulink S-Functions in its and . While S-Functions provide a mechanism for integrating custom code into / environments, FMI offers a tool-independent that enables model exchange and co-simulation across diverse tools without . FMI natively supports co-simulation through its for coupled solvers, whereas S-Functions often require custom wrappers or additional development to achieve similar multi-tool . In contrast to the (HLA), which is designed for large-scale, distributed simulations in and applications, FMI focuses on component-level model exchange and co-simulation for offline and use cases. HLA excels in federated, network-based environments with management via a runtime infrastructure, but it introduces higher complexity and overhead for non- scenarios; FMI, being lighter and simpler, is better suited for integrating subsystem models in a master-slave co-simulation setup without the need for distributed federation protocols. These differences make FMI preferable for modular, tool-agnostic workflows, while HLA remains dominant for synchronized, distributed systems. The August 2025 release of the FMI Layered Standard for Network Communication extends FMI's capabilities for distributed simulations over networks, bridging some gaps with HLA by enabling networked co-simulation in automotive and without full overhead. This layered approach builds on FMI 3.0, allowing FMUs to communicate via protocols like TCP/IP for real-time applications. Compared to 's scripting capabilities, which allow interactive model manipulation and simulation control through or interfaces, FMI facilitates secure model sharing via pre-compiled binaries or C code without exposing source code. scripting enables dynamic parameterization and execution but typically requires sharing model source files for reproducibility across environments, potentially compromising ; FMI's encapsulated Functional Mock-up Units (FMUs) address this by bundling compiled executables with metadata, supporting seamless import/export between tools like and others. FMI's strengths lie in its broad industry adoption, as evidenced by integration in tools such as for multidomain system simulation and MapleSim for symbolic modeling workflows. However, a limitation is the potential overhead in file size for smaller models, where FMUs are typically larger than equivalent native binaries due to the inclusion of XML files describing model structure and variables. This XML component, while essential for , can increase storage requirements by incorporating not present in pure formats.

Accompanying Standards and Recommendations

The co-simulation mode of the Functional Mock-up Interface (FMI-CS) supports applications and systems by defining interfaces for coupling tools in distributed environments, enabling synchronized execution of models with fixed time steps suitable for hardware-in-the-loop testing. These features emphasize deterministic communication and data exchange to meet timing constraints in contexts, such as automotive systems. The eFMI standard, an extension of FMI for embedded systems, facilitates the deployment of functional mock-up units (FMUs) in resource-constrained environments by specifying formats for model-to-code transformation and runtime integration, currently available as the 1.0.0 Beta 1 candidate-draft released in July 2024, with the first stable release in development. This draft outlines workflows from physical modeling to , including for microcontrollers while preserving FMI semantics. Recommendations from the Modelica Association Project include best practices for FMU validation and testing, as detailed in the FMI 3.0 Implementers' Guide, which advises using reference FMUs for import validation and compliance checkers to verify interface adherence. The FMILibrary, a C implementation supporting FMI versions 1.0 to 3.0, serves as a testing suite for simulating and validating FMUs across platforms, ensuring portability and correctness in co-simulation scenarios. The FMUComplianceChecker tool, which supports FMI 1.0 and 2.0 (now archived and no longer maintained), automates tests for model exchange and co-simulation FMUs, including fixed-step simulations and event handling verification. For FMI 3.0, validation should follow the Implementers' Guide recommendations. FMI integrates with SysML for by enabling the mapping of architectural models to executable simulations, where SysML diagrams define system interfaces that are synchronized with FMU inputs and outputs during co-simulation. This synchronization supports hybrid synchronous-asynchronous workflows, allowing SysML to orchestrate FMI-based components for cyber-physical system design. Industry recommendations, such as VDI 2206 for the design of mechatronic systems, complement FMI by providing a procedural for integrating models into multidisciplinary processes, emphasizing iterative validation of coupled mechanical, electrical, and software elements. For in automotive applications, FMI supports compliance paths through verifiable model exchange and co-, enabling and via standardized FMUs in safety-critical workflows. Emerging integrations include FMI with the (ROS) for simulations, where FMUs are wrapped as ROS 2 nodes to enable co-simulation of physical models alongside robotic control algorithms in Gazebo environments. This approach facilitates digital twins in by combining FMI's model fidelity with ROS's middleware for real-time sensor-actuator interactions. SSP serves as a direct companion standard to FMI, defining system-level and parameterization for assembling FMUs into larger architectures.

References

  1. [1]
    Functional Mock-up Interface
    The Functional Mock-up Interface (FMI) is a free standard for exchanging dynamic simulation models using XML, binaries, and C code.Specification 3.0 · Tools · Specification 3.0.2 · Specification 3.0.1
  2. [2]
  3. [3]
    About - Functional Mock-up Interface
    MODELISAR had 29 partners and started in July 2008 and finished, after extension, in December 2011. FMI 1.0 was one of the results of MODELISAR. MODELISAR ...Missing: history | Show results with:history
  4. [4]
    What is FMI? | Modelon
    What is the Functional Mock-up Interface (FMI)? FMI is an open standard for exchanging dynamical simulation models between different tools in a standardized ...
  5. [5]
    Tools - Functional Mock-up Interface
    A complete tool for modeling and simulation of integrated and complex systems for use within automotive, aerospace, robotics, process and other applications.<|control11|><|separator|>
  6. [6]
    Bosch Research I Functional Mock-up Interface (FMI) 3.0
    Jun 9, 2022 · FMI has been a home run in establishing itself as the de facto industry standard for model exchange and co-simulation on the system level.
  7. [7]
    Functional Mock-up Interface Specification - FMI Standard
    Jul 10, 2023 · The Functional Mock-up Interface (FMI) is a free standard that defines a container and an interface to exchange dynamic models using a combination of XML files ...
  8. [8]
    ITEA 4 · Project · 07006 MODELISAR
    The purpose of MODELISAR is to introduce functional mock-up (FMU), a next generation of methods, standards and tools to support collaborative design.
  9. [9]
    [PDF] Model Exchange 1.0.1 - FMI standard
    The FMI functions are used (called) by a simulator to create one or more instances of the FMU, called models, and to run these models, typically ...
  10. [10]
    [PDF] Functional Mock-up Interface for Model Exchange and Co-Simulation
    Jul 25, 2014 · The FMI development was initiated by Daimler AG with the goal to improve the exchange of simulation models between suppliers and OEMs. As of ...
  11. [11]
    Release of FMI 3.0 - Functional Mock-up Interface
    May 10, 2022 · FMI version 3.0, now released by the Modelica Association, is a major milestone for the standard with new features that enable the use of FMI in important new ...
  12. [12]
    FMI 2.0.5 and FMI 3.0.2 released - Functional Mock-up Interface
    Nov 27, 2024 · The FMI Project and the Modelica Association are happy to announce the release of FMI 2.0.5 and FMI 3.0.2. Both are maintenance releases with clarifications ...
  13. [13]
    FMI 3 standard - Functional Mock-up Interface Specification
    May 10, 2022 · With FMI 3.0, virtual electronic control units (vECUs) can be exported as FMUs in a more natural way. Concrete features to support vECU export ...Introduction · Common Concepts · FMI for Model Exchange · FMI for Co-Simulation
  14. [14]
  15. [15]
  16. [16]
  17. [17]
  18. [18]
  19. [19]
  20. [20]
  21. [21]
  22. [22]
    Implicit co-simulation methods: Stability and convergence analysis ...
    Aug 9, 2025 · The analysis of the numerical stability of co-simulation methods with algebraic constraints is subject of this manuscript.
  23. [23]
    [PDF] FMI-based Co-Simulation of Hybrid Closed-loop Control System ...
    The closed-loop nature of such control systems poses a fundamental challenge for FMI-based co- simulation, where algebraic loops are only poorly understood.
  24. [24]
    (PDF) The FMI 3.0 Standard Interface for Clocked and Scheduled ...
    Oct 13, 2025 · The FMI 3.0 standard supports two kinds of clock-based simulations: Synchronous Clocked Simulation to ensure predictable systems scheduling with ...
  25. [25]
  26. [26]
  27. [27]
    [PDF] The Functional Mock-up Interface 3.0 - New Features Enabling New ...
    Sep 24, 2021 · FMI 3.0 introduces new features for advanced co-simulation, vECUs, scheduled execution, better data types, and new interface types like Co- ...
  28. [28]
    FMI 3.0.1 released - Functional Mock-up Interface
    FMUs created according to FMI 3.0.1 are valid FMUs according to FMI 3.0 and vice versa. The FMI 3.0.1 specification can be found at https://fmi-standard.org/ ...
  29. [29]
  30. [30]
  31. [31]
    FMI 3.0 Implementers' Guide
    Jul 29, 2025 · This document provides best practice recommendations to implementers of FMI, focusing on FMI 3.0, derived from the industrial experience of the Smart SE ...
  32. [32]
    Literature - Functional Mock-up Interface
    Tutorial: Functional Mockup Interface 2.0 and HiL Applications (16 presentations from FMI design group members, OEMs, suppliers, and tool vendors)
  33. [33]
    [PDF] STANDARDIZATION FOR HIGHLY AUTOMATED DRIVING - ASAM eV
    SSP fully supports the use of FMI for components, but is not restricted to FMI components. ... Before its transfer to ASAM, the OpenDRIVE specifica tion was not ...
  34. [34]
    FMI Toolbox - Third-Party Products & Services - MATLAB & Simulink
    FMI Toolbox enables integration and exchange of models developed in a variety of modeling tools into the MATLAB and Simulink environments.
  35. [35]
    Evolution of Functional Mock-up Interface (FMI) Features in ...
    Jul 17, 2025 · Overview of features aligned with the Functional Mock-up Interface (FMI) standard released over the years in Simcenter Amesim, ...Missing: history | Show results with:history
  36. [36]
    None
    ### Summary of License Text from https://raw.githubusercontent.com/modelica/fmi-standard/master/LICENSE.txt
  37. [37]
    Fact Sheet: Functional Mockup Interface (FMI) - prostep ivip
    Functional Mock-up Interface (fmi-standard.org). Version / Release state. FMI 3.0. Release date. 2022-05-10. Application scope. Describe system behaviour of ...
  38. [38]
    [PDF] Specification for System Structure and Parameterization
    Jul 25, 2022 · The XML schema files that accompany this document are available under the BSD 2-Clause license. (http://www.opensource.org/licenses/bsd-license.
  39. [39]
    System Structure and Parameterization - SSP Standard
    Dec 20, 2024 · It is licensed under the CC-BY-SA (Creative Commons Attribution-Sharealike 4.0 International) license, which is the license used by Wikipedia.
  40. [40]
    Home - System Structure and Parameterization
    System Structure and Parameterization (SSP) is a tool independent standard to define complete systems consisting of one or more component models.Specification 2.0 · News from the SSP Project · Literature · Tools
  41. [41]
    Exporting Dymola model to FMU for calibration - Claytex
    Jul 15, 2016 · To generate FMU we go to the Simulation tab in Dymola and click on the menu arrow to the right of Translate icon and choose FMU. 1.2. A pop up ...
  42. [42]
    [PDF] Input Smoothing for Faster Co-Simulation using FMI
    We split the model at the connection between the mass compo- nent and the spring-damper component. Then we export each submodel into an FMU. From the mass FMU, ...
  43. [43]
    Co-simulation using the open-source Python package PyFMI
    In order to work with the FMUs from Python, we first need to import the capability from the PyFMI package and then invoke the method load_fmu to load the FMUs ...
  44. [44]
    Import FMUs - MATLAB & Simulink - MathWorks
    Example, Description. Import Co-Simulation FMU into Simulink. This model shows how to use the FMU block to load an FMU file that supports Co-Simulation mode.
  45. [45]
    Validate your FMUs - Functional Mock-up Interface
    FMUs can be validated using FMU Check (web app), FMPy (Python package), Reference FMUs with fmusim, and FMI-VDM-Model (Java library).Missing: fmiCheck | Show results with:fmiCheck
  46. [46]
    FMI for PC-Based Simulation - VEOS - dSPACE
    This use case example demonstrates how Functional Mock-up Units (FMUs) from different vendors can be integrated to form one simulation application.Missing: multiple | Show results with:multiple
  47. [47]
    [PDF] The Functional Mockup Interface for Tool independent Exchange of ...
    FMI can already be used with several Modelica tools, Simulink, multi- body and other tools. FMI is maintained and further developed: Unification and ...
  48. [48]
    Distributed hybrid simulation using the HLA and the Functional Mock ...
    High Level Architecture (HLA) and Functional Mock-up Interface (FMI) are two simulation interoperability standards. The HLA is older, well established and ...
  49. [49]
    Functional Mock-up Interface - FMI — OpenModelica User's Guide ...
    FMI Import allows to use an FMU, generated according to the FMI for Model Exchange 2.0 standard, as a component in a Modelica model. This can be useful if the ...Missing: mass- spring- Dymola
  50. [50]
    MapleSim Connector for FMI - Maplesoft
    The MapleSim Connector for FMI allows you to share high-fidelity, multidomain models created in MapleSim with other modeling tools.
  51. [51]
    [PDF] Functional Mock-up Interface for Co-Simulation MODELICA ...
    Oct 12, 2010 · The Functional Mock-up Interface (FMI) defines an interface standard for coupling simulation tools in co-simulation, a technique for coupled ...Missing: early | Show results with:early<|separator|>
  52. [52]
    [PDF] FMI for Co-Simulation of Embedded Control Software
    FMI was initiated by the automotive industry and released in a version 1.0 in 2010 followed by a 2.0 version in 2014. This paper does not explain the stan ...
  53. [53]
    Functional Mock-Up Interface for embedded systems (eFMI)
    Feb 22, 2021 · When an eFMI is packed as FMU, an FMU wrapper is added to a selected code representation. Software development tools should be able to provide ...
  54. [54]
    [PDF] Functional Mock-upUp Interface for Embedded - eFMI®
    This document specifies the eFMI (FMI for embedded systems standard) with references to the FMI (Functional. Mock-upUp Interface) standard (https://fmi-standard ...
  55. [55]
    FMI Compliance Checker for validation of FMUs 1.0 and 2.0 - GitHub
    Oct 17, 2023 · for model exchange FMUs test whether the FMU can be simulated with explicit (forward) Euler method. fixed step size is used; no iterations for ...Missing: Association Project guidelines best practices Library
  56. [56]
    A SysML-FMI Integrated Framework for Hybrid Synchronous ...
    Oct 31, 2025 · The key to simulation architecture modeling is the transformation and mapping between heterogeneous models. First, based on the FMI interface ...Missing: synchronization | Show results with:synchronization
  57. [57]
    [PDF] Integration of SysML V2, FMI, and PyFMI for Enhanced System ...
    Sep 12, 2024 · The integration framework provides a methodological approach that supports improved data management and process synchronization in simulations,.
  58. [58]
    Development of mechatronic and cyber-physical systems - VDI
    VDI/VDE 2206 applies to all tasks in the development of cyber-physical mechatronic systems (CPMS) and serves as a logical framework.Missing: FMI | Show results with:FMI
  59. [59]
    VDI 2206- A New Guideline for the Design of Mechatronic Systems
    Dec 1, 2002 · The design is developed under a centralized tool framework with dependency conditions allowing traceability capabilities in multiple ...
  60. [60]
    boschresearch/fmi_adapter: Integrating functional mock-up ... - GitHub
    This repository provides the fmi_adapter package for wrapping functional mockup units (FMUs) for co-simulation of physical models into ROS 2 nodes.
  61. [61]
    A model-based approach for co-simulation-driven digital twins in ...
    Oct 28, 2025 · The Robot Operating System (ROS) has been widely used to achieve DT ... FMI co-simulations that can be used to realise DTs in robotics.