Main Content

Run Batch Simulations Without Recompiling Generated Code

This example shows how to run batch simulations without recompiling the generated code. The example modifies input signal data and model parameters by reading data from a MAT-file. In the first part (steps 1-5), ten parameter sets are created from the Simulink® model by changing the transfer function damping factor. The ten parameter sets are saved to a MAT-file, and the RSim executable reads the specified parameter set from the file. In the second part (step 6-7) of this example, five sets of signal data chirps are created with increasingly high frequencies. In both parts, the RSim executable runs the set of simulations and creates output MAT-files containing the specific simulation result. Finally, a composite of runs appears in a MATLAB® figure.

To quickly run multiple simulations in the Simulink environment, consider using rapid accelerator instead of RSim. See What Is Acceleration?.

Step 1. Preparation

Make sure the current directory is writable because this example will be creating files.

[stat, fa] = fileattrib(pwd);
if ~fa.UserWrite
    disp('This script must be run in a writable directory');
    return;
end

Open the model and configure it to use the RSim target. For more information on doing this graphically and setting up other RSim target related options, see Configure a System Target File (Embedded Coder).

mdlName = 'rtwdemo_rsimtf';
open_system(mdlName);
cs = getActiveConfigSet(mdlName);
cs.switchTarget('rsim.tlc',[]);

The MAT-file rsim_tfdata.mat is required in the local directory.

if ~isempty(dir('rsim_tfdata.mat')),
    delete('rsim_tfdata.mat');
end
str1 = fullfile(matlabroot,'toolbox','rtw','rtwdemos','rsimdemos','rsim_tfdata.mat');
str2 = ['copyfile(''', str1, ''',''rsim_tfdata.mat'',''writable'')'];
eval(str2);

Step 2. Build the Model

Build the RSim executable for the model. During the build process, a structural checksum is calculated for the model and embedded into the generated executable. This checksum is used to check that a parameter set passed to the executable is compatible with it.

evalin('base','w = 70;')
evalin('base','theta = 1.0;')
disp('Building compiled RSim simulation.')
slbuild(mdlName);
Building compiled RSim simulation.
### Starting build procedure for: rtwdemo_rsimtf
### Successful completion of build procedure for: rtwdemo_rsimtf

Build Summary

Top model targets built:

Model           Action                        Rebuild Reason                                    
================================================================================================
rtwdemo_rsimtf  Code generated and compiled.  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 11.768s

Step 3. Get the Default Parameter Set and Create 10 Parameters Sets

disp('Creating rtP data files')
for i=1:10
  % Extract current rtP structure using new damping factor.
  [rtpstruct]=evalin('base','rsimgetrtp(''rtwdemo_rsimtf'');');
  savestr = strcat('save params',num2str(i),'.mat rtpstruct');
  eval(savestr);
  evalin('base','theta = theta - .1;');
end
disp('Finished creating parameter data files.')
Creating rtP data files
Finished creating parameter data files.

Step 4. Run 10 RSim Simulations Using New Parameter Sets and Plot the Results

figure
for i=1:10
  % Bang out and run a simulation using new parameter data
  runstr = ['.', filesep, 'rtwdemo_rsimtf -p params',num2str(i),'.mat', ' -v'];
  [status, result] = system(runstr);
  if status ~= 0, error(result); end
  % Load simulation data into MATLAB for plotting.
  load rtwdemo_rsimtf.mat;
  axis([0 1 0 2]);
  plot(rt_tout, rt_yout)
  hold on
end

The plot shows 10 simulations, each using a different damping factor.

Step 5. Set Up a Time Vector and an Initial Frequency Vector

The time vector has 4096 points in the event we want to do windowing and spectral analysis on simulation results.

dt = .001;
nn = [0:1:4095];
t = dt*nn; [m,n] = size(t);
wlo = 1; whi = 4;
omega = [wlo:((whi-wlo)/n):whi - (whi-wlo)/n];

Step 6. Create 5 Sets of Signal Data in MAT Files

Creating .mat files with chirp data.

disp('This part of the example illustrates a sequence of 5 plots. Each')
disp('plot shows an input chirp signal of certain frequency range.')
for i = 1:5
  wlo = whi; whi = 3*whi; % keep increasing frequencies
  omega = [wlo:((whi-wlo)/n):whi - (whi-wlo)/n];
  % In a real application we recommend shaping the chirp using
  % a windowing function (hamming or hanning window, etc.)
  % This example does not use a windowing function.
  u      = sin(omega.*t);
  tudata = [t;u];
  % At each pass, save one more set of tudata to the next
  % .mat file.
  savestr = strcat('save sweep',num2str(i),'.mat tudata');
  eval(savestr);
  % Display each chirp. Note that this is only input data.
  % Simulations have not been run yet.
  plotstr = strcat('subplot(5,1,',num2str(i),');');
  eval(plotstr);
  plot(t,u)
  pause(0.3)
end
This part of the example illustrates a sequence of 5 plots. Each
plot shows an input chirp signal of certain frequency range.

Step 7. Run the RSim Compiled Simulation Using New Signal Data

Replace the original signal data (rsim_tfdata.mat) with the files sweep1.mat, sweep2.mat, and so on.

disp('Starting batch simulations.')
for i = 1:5
  % Bang out and run the next set of data with RSim
  runstr = ['.', filesep, 'rtwdemo_rsimtf -f rsim_tfdata.mat=sweep', ...
            num2str(i),'.mat -v -tf 4.096'];
  [status, result] = system(runstr);
  if status ~= 0, error(result); end
  % Load the data to MATLAB and plot the results.
  load rtwdemo_rsimtf.mat
  plotstr = strcat('subplot(5,1,',num2str(i),');');
  eval(plotstr);
  plot(rt_tout, rt_yout); axis([0 4.1 -3 3]);
end
zoom on
% cleanup
evalin('base','clear w theta')
disp('This part of the example illustrates a sequence of 5 plots. Each plot')
disp('shows the simulation results for the next frequency range. Using the')
disp('mouse, zoom in on each signal to observe signal amplitudes.')
close_system(mdlName, 0);
Starting batch simulations.
This part of the example illustrates a sequence of 5 plots. Each plot
shows the simulation results for the next frequency range. Using the
mouse, zoom in on each signal to observe signal amplitudes.