Main Content

Use Multi-Instance FMU for Simultaneous Simulations

This example demonstrates how to generate and simulate an Functional Mock Up Unit (FMU) compatible with multi-instantiation in Simulink®. You can export Simulink models with fixed-step solvers to standalone FMUs, which can be reused in multiple instances in Simulink. This enables the FMU to be used within For Each Subsystems in Simulink for simultaneous simulations.

In the first section of this example, a multi-instantiable FMU is generated from a Simulink model. In the second section, this FMU is imported back to Simulink and used within a For Each subsystem for simultaneous simulations with different input signals.

Generate Multi-Instance FMU

Open the suspensionModel_halfCar model. This is a simplified mathematical model of a vehicle's front and rear suspension system which can be used to study it's ride characteristics. The two inputs to this model are the pitch moment induced due to the vehicle's acceleration and the change in the road height that it travels on. For more information about this model, see Automotive Suspension.

suspension_model = 'suspensionModel_halfCar';
suspensionModel_data;
open_system(suspension_model);

Use the exportToFMU function with supportMultiInstance argument set to on to export this model as an FMU compatible with multi-instantiation.

exportToFMU(suspension_model,'FMUType','CS','FMIVersion','3.0','SupportMultiInstance','on');
Setting System Target to FMU 'Co-Simulation' for model 'suspensionModel_halfCar'.
Setting Hardware Implementation > Device Type to 'MATLAB Host' for model 'suspensionModel_halfCar'.
### 'GenerateComments' is disabled for 'Co-Simulation' FMU Export.
### 'CodeInterfacePackaging' is disabled for 'Co-Simulation' FMU Export.
### 'MultiInstanceErrorCode' is disabled for 'Co-Simulation' FMU Export.

Build Summary

Top model targets:

Model                    Build Reason                                         Status                        Build Duration
==========================================================================================================================
suspensionModel_halfCar  Information cache folder or artifacts were missing.  Code generated and compiled.  0h 0m 13.492s 

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 14.04s
### Model was successfully exported to 'Co-Simulation' FMU: '/tmp/Bdoc24b_2704207_649653/tpe0d556fd/simulinkcompiler-ex33808161/suspensionModel_halfCar.fmu'.

You can also use the FMU Export dialog to generate the FMU. In to the Simulation tab on the Simulink toolstrip, click drop-down button for Save. Select Standalone FMU.... to open the FMU Export dialog. Open the Advanced tab within the dialog and select the Support multiple instantiation per process check box. Click Create to generate the FMU.

In the generated FMU, the canBeInstantiatedOnlyOncePerProcess flag in the modelDescription.xml file is set to false.

Import and Simulate FMU in a For Each Subsystem

Open the suspension_simulation model that imports the FMU into Simulink and implements it within a For Each Subsystem. The suspension model is simultaneously given three different road profiles as input. You can use For Each subsystem to perform simultaneous simulations for various FMU inputs or parameters. For more information about For Each Subsystem, see Repeat an Algorithm Using a For-Each Subsystem

suspension_model_sim = 'suspension_simulation.slx';
open_system(suspension_model_sim);

Simulate the model and observe the system response for the three different road profiles.

sim(suspension_model_sim);
open_system('suspension_simulation/Scope');

See Also

Related Topics