Export Simulink Models to Functional Mock-up Units
Export Simulink® models to functional mockup unit (FMU) that supports co-simulation in FMI version 2.0. To check that the exported block is still a valid Simulink model, you can also direct the software to import the FMU back to a Simulink model as part of the export process.
A writable folder into which to place the exported FMU.
Exported models can have:
Input and output data types:
Tunable parameters which can be model arguments, base workspace, or data dictionary variables.
Unit and description.
Simulink models can be exported to standalone co-Simulation FMU in version 2.0. The generated FMU package contains following files:
You might experience an expected time delay in the exported FMU for co-Simulation mode.
modelDescription.xml file contains interfacing variables
converted from Simulink model:
causality=’input’: converted from root Inport block
causality=’output’: converted from root Outport block
causality=’parameter’: converted from referenced Runtime Tunable Parameters
To generate FMU input and output, define root Inport and Outport blocks in Simulink model. The name of the generated variable is converted from root Inport or
Outport block name, by removing special and blank characters and avoiding duplicates. If
input/output signal carries unit information, it is exported as
attribute of the FMU variable. If the input/output block has a non-empty description
information under Block Properties > General ,
it is exported as
Description attribute of the FMU variable.
The following input and output data types are supported:
double(Real in FMI)
int32(Integer in FMI)
boolean(Boolean in FMI)
string(String in FMI)
If model root Inport or Outport block is a non-virtual bus, individual bus elements
will be expanded to variables using structured naming convention
If model root Inport or Outport block is array or matrix,, individual scalar elements will
be expanded to variables using array naming convention
To export referenced variables as FMU parameter, you can:
Define a variable.
Define a Simulink Parameter object.
Ensure that the variable and the parameter object is directly references by tunable parameters of Simulink blocks. In FMU Export dialog, expand Parameter Details... to configure each parameter. You can:
Unselect Exported option to hide a parameter
Modify Exported Name so the parameter is displayed with a different name on FMU interface. Do not use special characters and duplicate names.
Descriptionof FMU parameter variable by clicking on parameter name, and directly modifying the parameter object
If the FMU parameter is
Simulink.Parameter, click the hyperlink to modify the
Descriptionof the variable.
If FMU parameter is a regular MATLAB variable, clicking the hyperlink opens model explorer. You can convert MATLAB variable to a
Simulink.Parameterso that it can carry
Descriptionof FMU parameter variable cannot be updated directly in FMU Export dialog. You can configure
Descriptionthrough model explorer, double-clicking
Simulink.Parameterin base workspace, etc.
The following parameter data types are supported:
double(Real in FMI)
int32(Integer in FMI)
booleanor logical (Boolean in FMI)
If referenced parameter is a
struct members will be expanded to variables using structured naming
(‘.’). If referenced parameter is array or matrix,
individual scalar elements will be expanded to variables using array naming convention
When a Simulink model with model reference block is exported to FMU, you can also export base workspace variables, model arguments and instance parameters that are promoted from the sub model.
Fixed-step solvers are supported for standalone FMU export. It is recommended to set a fixed fundamental sample time (Solver > Solver details > Fixed-step size) before exporting the model. When simulating the standalone FMU in another environment, communication step-size must be an integral multiple of the fundamental sample time.
FMU Dynamic Library
A generated FMU contains a dynamic library build for the current platform. The default
fmi2TypesPlatform value is used.
All required and optional
fmi2 functions defined by FMI standard
can be invoked. However, the following functions have no operation and return
Functions accessing or serializing
Functions setting or getting input or output derivatives
fmi2DoStepstatus, or cancelling
Function computing directional derivatives of variables
Save Source Code with FMU Export
You can export a Simulink model to FMU along with C source code. You can check Save Source
Code in the Export Model to FMU Co-Simulation window or
use the command
export the model to FMU with C source code.
To export a Simulink model to FMU with C source code, install Simulink Coder™
If the Simulink model contains model references with custom data types or fixed-point
functions, exporting FMU with source code may cause an error due to duplicate header files
_sharedutils folder. Follow instructions on Generate Shared
Utility Code to set the Code Generation >
Interface > Shared Code Placement
parameter to '
Shared Location' and regenerate the FMU.
You can export a Simulink model with a FMU Import blocks as nested standalone FMU. When exporting a nested FMU, Simulink packs all dependent inner FMUs into the resources/ folder of the nested FMU. When the nested FMU is instantiated in a simulation environment, all inner FMUs will share the same callback functions provided by the environment, for example, logger and memory allocation functions.
Specify Additional Files
While exporting a Simulink to a standalone FMU, you can specify additional files to be included in the generated FMU, such as resource, DLL etc. The target locations for these files can be:
<fmuroot>/binaries/<arch>/– dependent DLLs
<fmuroot>/resources/– data files, lookup tables, etc
<fmuroot>/documentation/– user provide their own help content
For an example on specifying additional files while exporting a Simulink model, see Export Simulink Model to Standalone FMU with User Specified Files and Archived Project with Harness Model.
Export Protected Model
You can export a Simulink model that is protected. For an example on exporting protected models, see Export Simulink Model with Protected Model and FMU Import Block to Standalone FMU.
You cannot generate FMU from a Simulink model, due to these limitations:
Variable-step solvers are not supported.
Non-zero simulation start time is not supported.
Simulink models that references external resources (data files,
mfiles) are not supported.
Export a Simulink Model
Use the Export Dialog Box
vdp example using the Simulink toolstrip: Simulation > Save >
Export Model ToStandalone FMU
Open the model
In the Simulink Editor, navigate to Simulation > Save > Standalone FMU.
In Simulink Editor, select Save > Export to > FMU Co-Simulation.
In the export dialog box, specify the path to export the FMU.
By default, Simulink creates the FMU and a harness model with its dependencies stored in a
MATfile. It then packs them into archived project (
.mlproj). You can change the behavior by setting Contents option to Standalone FMU.
Use the Programmatic Interface
vdpexample to an FMU using the default
exportToFMU2CSfunction. This command creates the FMU file
modelName.fmu. By default, the command also creates a Simulink model
modelName_fmu.slx, that contains an FMU Co-Simulation block with the original model. Create this model if you want to check the integrity of the exported FMU.
load_system('vdp') set_param('vdp', 'SolverType', 'Fixed-step') exportToFMU2CS('vdp')
vdpexample to an FMU using the
exportToFMU2CSfunction, but do not create a Simulink model. This command creates the FMU file
load_system('vdp') set_param('vdp', 'SolverType', 'Fixed-step') exportToFMU2CS('vdp','CreateModelAfterGeneratingFMU','off')
vdpexample to an FMU using the
exportToFMU2CSfunction. Create a model for the FMU and use an image of the original model as the block icon. This command creates the FMU file,
modelName.fmuand a Simulink model with an FMU Co-Simulation block whose block icon is the original model.
Examples For Different Workflows
The examples below illustrate how to use FMU export for all different scenarios: