Export Model as FMU with Constant Periodic Clocks
This example shows how to export a Simulink® model, with fixed-step solver, as a standalone cosimulation FMU that is compatible with FMI 3.0 standards and contains constant periodic clocks. During export of a model as FMU, Simulink registers unique discrete periodic sample rates specified in root inport and outport blocks as constant periodic clocks within the FMU. Root inport and outport blocks can also inherit their sample time information.
In the first section of this example, an FMU with constant periodic clocks specified for its interfaces is generated from a Simulink model. In the second section, the FMU is imported back into Simulink for simulation.
Generate FMU with Constant Periodic Clocks
Open the model_pwm
model. This model generates a PWM signal based on the specified duty cycle and frequency. For more information about this model, see Implement Block Algorithms Using MATLAB System Object and MATLAB System Block.
model_for_export = 'model_pwm';
open_system(model_for_export);
This model has a base sample rate of 1e-4 second. The sample time of the root inport ports are specified as inherited. The model has two outports. The first is set to inherit its sample time information and the second has a specified sample time of 0.01 second and offset of 0.005 second. All sample times are specified by setting the value of Sample time field within the execution tab of the inport block dialog.
Update the model and check the registered unique discrete periodic sample rates for the model in the timing legend and to see the blocks annotated with its registered sample times. After updating the model, press Ctrl + J to view the timing legend.
Use the exportToFMU
function with ConstantPeriodicClock
argument set to on
to generate the FMU with clocks. Clock variables are only supported for cosimulation FMUs compatible with FMI 3.0 standards.
exportToFMU(model_for_export,'FMIVersion','3.0','FMUType','CS',... 'ConstantPeriodicClock','on');
Setting System Target to FMU 'Co-Simulation' for model 'model_pwm'. Setting Hardware Implementation > Device Type to 'MATLAB Host' for model 'model_pwm'. ### 'GenerateReport' is disabled for 'Co-Simulation' FMU Export. ### 'GenerateComments' is disabled for 'Co-Simulation' FMU Export. Build Summary Top model targets: Model Build Reason Status Build Duration ============================================================================================================ model_pwm Information cache folder or artifacts were missing. Code generated and compiled. 0h 0m 28.084s 1 of 1 models built (0 models already up to date) Build duration: 0h 0m 30.59s ### Model was successfully exported to 'Co-Simulation' FMU: '/tmp/Bdoc24b_2725827_1537762/tp4c9e9c2a/simulinkcompiler-ex93290521/model_pwm.fmu'.
The modelDescription.xml
file of the generated will FMU contain a Clock
element defining a clock variable for each identified unique discrete periodic sample rate.
Import and Simulate FMU with Clocks
Open the sim_pwm
model that imports the FMU into Simulink and specifies a duty cycle and frequency. Update the model and check the timing legend to see that the FMU registers the clock variables as block sample rates.
model_for_sim = 'sim_pwm'; open_system(model_for_sim); set_param(model_for_sim,'SimulationCommand','Update');
You must enable event mode for the imported FMU to observe the effect of clock variables. To do so, on the FMU Import block dialog, in the Simulation tab, select Enable event mode option.
Simulate the sim_pwm
model. Observe that the output of the FMU depends on the specified sample rate and offset in the outports. The output value for the second outport is updated according to the specified interval of 0.01 second with an offset of 0.005 second.
result = sim(model_for_sim); figurePlot = figure(1); plot(result.yout{1}.Values,'g','LineWidth',1.5) hold on plot(result.yout{2}.Values,'r','LineWidth',1.5) hold on grid minor legend('PWM Signal - No Offset', 'PWM Signal - With Offset')