このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
Use MAT-Files to Feed Data to Inport Blocks for Rapid Simulations
Use the code generator RSim -i option to specify a MAT-file as the input data source for Inport blocks for rapid simulations. You can present the data in such a MAT-file in these formats:
One variable that defines a time/input data matrix of double values.
One variable that defines a structure that uses a combination of Simulink® data types.
Multiple variables, each defining a structure that uses a combination of Simulink® data types.
This flexibility lends itself well to applications for which you must run simulations over a range of input data stored in different data files.
Prepare Model
Open your model.
Open the Simulink Coder app.
Set model configuration parameter System target file to
rsim.tlc.
Configure Inport Blocks
To use the RSim -i option, you must configure each Inport block properly. You can double-click an Inport block to view its properties. By default, Inport blocks inherit their properties from downstream blocks. Before you can import data from external MAT-files, you must set the parameters of each Inport block to match the data in the MAT file. In most cases, these parameters of an Inport block must be set:
Interpolate Data
Port Dimensions
Data Type
Signal Type
This example code configures a model that includes three Inport blocks with a requirement that two of the blocks interpolate between data and that the third block not interpolate. The dimension of the Inport blocks are 2, 1, and 2. Signals are real.
for i =1:3
portName =['/In', num2str(i)];
Interp = get_param(strcat(mdlName,portName),'Interpolate');
PortDimension = get_param(strcat(mdlName,portName),'PortDimensions');
DataType = get_param(strcat(mdlName,portName),'OutDataTypeStr');
SignalType = get_param(strcat(mdlName,portName),'SignalType');
endFor inports
In1andIn2, interpolation is selected. For inportIn3, interpolation is cleared.For inports
In1andIn3, port dimension is set to 2. For inportIn2, port dimension is set to 1.For inports
In1,In2, andIn3, data type isdoubleand signal type isreal.
Build Model
Build an executable program for the model. During the build process, a structural checksum is calculated and embedded into the generated executable program. This checksum is used to check that a parameter set passed to the executable program is compatible with the program.
Identify Signals for Data File
After you configure the Inport block, prepare the data file based on the Inport blocks.
For example:
t=(0:0.01:2*pi)'; s1 = [2*sin(t) 2*cos(t)]; s2 = sin(2*t); s3 = [0.5*sin(3*t) 0.5*cos(3*t)]; figure; plot(t, [s1 s2 s3]);
Prepare MAT-File
You can create the MAT-file from a workspace variable. The RSim -i option supports three data file formats:
One variable in TU matrix format of doubles
One variable in structure format
Multiple variables in structure format
One variable in TU matrix format of doubles
For this format, the first column is the time vector and the remaining columns are input vectors. The number of columns in the TU matrix equals the sum of the dimensions of the root Inport blocks plus 1. This MATLAB® code generates a MAT-file containing one variable var_matrix in TU matrix format. You can use this format only if the input ports in the model have the same data type.
t=(0:0.1:2*pi)'; Ina1 = [2*sin(t) 2*cos(t)]; Ina2 = sin(2*t); Ina3 = [0.5*sin(3*t) 0.5*cos(3*t)]; var_matrix = [t Ina1 Ina2 Ina3]; save rapidsim_matrix.mat var_matrix;
MAT-file rapidsim_matrix.mat contains one variable var_matrix in TU matrix format.
One Variable in Structure Format
For this format, the variable must contain two fields: time and signals. If you set the block parameter Interpolate data for one of the Inport blocks, the time field of the variable must not be an empty vector and the width of the signals must equal the total width of the Inport blocks. This code generates a MAT-file that contains one variable var_matrix in signal variable structure format. This format is more flexible than the TU matrix format because it can support input ports with different data types.
t= (0:0.1:2*pi)';
var_single_struct.time = t;
var_single_struct.signals(1).values(:,1) = 2*sin(t);
var_single_struct.signals(1).values(:,2) = 2*cos(t);
var_single_struct.signals(2).values = sin(2*t);
var_single_struct.signals(3).values(:,1) = 0.5*sin(3*t) ;
var_single_struct.signals(3).values(:,2) = 0.5*cos(3*t) ;
v=[var_single_struct.signals(1).values var_single_struct.signals(2).values ...
var_single_struct.signals(3).values ];
save rapidsim_single_struct.mat var_single_struct;MAT-file rapidsim_single_struct.mat contains one variable var_single_struct in struct format.
Multiple Variables in Structure Format
For this format, the number of variables equals the number of Inport blocks. Different variables can have different time vectors. This code generates a MAT-file that contains multiple variables, each in structure format. This is the most flexible format because it allows each Inport block to have its own time vector.
t= (0:0.1:2*pi)'; Inb1.time = t; Inb1.signals.values(:,1) = 2*sin(t); Inb1.signals.values(:,2) = 2*cos(t); t= (0:0.2:2*pi)'; Inb2.time = t; Inb2.signals.values(:,1) = sin(2*t); t= (0:0.1:2*pi)'; Inb3.time = t; Inb3.signals.values(:,1) = 0.5*sin(3*t); Inb3.signals.values(:,2) = 0.5*cos(3*t); save rapidsim_multi_struct.mat Inb1; save rapidsim_multi_struct.mat Inb2 -append; save rapidsim_multi_struct.mat Inb3 -append;
MAT-file rapidsim_multi_struct.mat contains three variables Inb1, Inb2, and Inb3 in struct format. Use the save command with the -append option to preserve the order of variables in the generated MAT-file.
Run RSim Simulations and Plot Results
You can use RSim -i options for batch mode simulation. Prepare different MAT-files and run the RSim program executable with them. This example displays three plots. Each plot shows simulation results for a MAT-file with a different variable format. The model is compiled once.
figure
fileName = ({'rapidsim_matrix', 'rapidsim_single_struct', 'rapidsim_multi_struct'});
for i=1:3
% bang out and run a simulation using new parameter data
name = fileName(i);
runstr = ['.', filesep, 'RsimMATFileToInport -i ',char(name),'.mat', ' -v'];
evalc('system(runstr)');
pause(0.5);
% load simulation data into MATLAB for plotting.
load RsimMATFileToInport.mat;
subplot(3,1,i);
axis([0,6, -5, 5]);
plot(rt_tout, rt_yout);
hold on
end
close_system(mdlName, 0);