Этот пример показывает, как RSim-i опция в Simulink® Coder™ позволяет вам использовать MAT-файл в качестве источника входных данных для блоков Inport для быстрых симуляций. Данные в таком MAT-файле могут быть представлены в любом из следующих форматов:
Одна переменная, которая задает матрицу времени/входных данных двойных значений.
Одна переменная, которая задает структуру, которая использует комбинацию типов данных Simulink®.
Несколько переменных, каждый задающий структуру, которая использует комбинацию типов данных Simulink®.
Эта гибкость предоставляет себя хорошо приложениям, для которых необходимо запустить симуляции в области значений входных данных, сохраненных в различных файлах данных. Этот пример объясняет, как использовать эту функцию.
Чтобы быстро запустить несколько симуляций в окружении Simulink, рассмотрите использование быстрого акселератора вместо RSim. Смотрите то, Что Ускорение? (Simulink).
Откройте модель и сконфигурируйте ее, чтобы использовать цель Simulink® Coder™ RSim. Для получения дополнительной информации о выполнении этого графически и подготовке другие связанные с целью опции RSim, посмотрите здесь.
mdlName = 'rtwdemo_rsim_i'; open_system(mdlName); cs = getActiveConfigSet(mdlName); cs.switchTarget('rsim.tlc',[]);
Чтобы использовать RSim-i опция, необходимо сконфигурировать каждый блок Inport правильно. Можно дважды кликнуть блок Inport, чтобы просмотреть его свойства. По умолчанию блоки Inport наследовали свои свойства от нисходящих блоков. Прежде чем можно будет импортировать данные из внешних MAT-файлов, необходимо установить параметры каждого блока Inport, чтобы совпадать с данными в файле MAT. В большинстве случаев следующие параметры блока Inport должны быть установлены: Интерполируйте Данные, Размерности Порта, Тип данных и Тип Сигнала. Для получения дополнительной информации об этих параметрах нажмите кнопку Help. В этой модели в качестве примера существуют три блока Inport. Мы хотим, чтобы Inport 1 и Inport 2 интерполировали между данными и Inport 3, чтобы не интерполировать. Размерность блоков Inport равняется 2, 1, и 2, соответственно. Сигналы действительны. Настройки следующие:
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'); s1= sprintf('For inport %s ', portName(2:4)); disp('-----------------------------'); disp(s1); s2= sprintf('The interpolation flag is %s', Interp); disp(s2); s3 = sprintf(' The port dimension is %s', PortDimension); disp(s3); s4 = sprintf(' The data type is %s', DataType); disp(s4); s5 = sprintf(' The signal type is %s\n', SignalType); disp(s5); end
----------------------------- For inport In1 The interpolation flag is on The port dimension is 2 The data type is double The signal type is real ----------------------------- For inport In2 The interpolation flag is on The port dimension is 1 The data type is double The signal type is real ----------------------------- For inport In3 The interpolation flag is off The port dimension is 2 The data type is double The signal type is real
Создайте исполняемый файл RSim для модели. Во время процесса сборки структурная контрольная сумма вычисляется для модели и встраивается в сгенерированный исполняемый файл. Эта контрольная сумма используется, чтобы проверять, что набор параметра, переданный исполняемому файлу, совместим с нею.
evalc('rtwbuild(mdlName)');
Если блок Inport сконфигурирован, файл данных должен быть подготовлен на основе блоков Inport. Следующие данные показывают входные сигналы, которые будут использоваться.
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]);
disp('The following figure displays the input signals.');
The following figure displays the input signals.
Обычно MAT-файл может быть создан из переменной рабочей области. RSim-i опция поддерживает три формата файла данных:
1) MAT-файл содержит одну переменную в матричном формате TU, удваивается. Для этого формата первый столбец является временным вектором, и остальные столбцы являются входными векторами. Количество столбцов в матрице TU равняется сумме размерностей корневых блоков Inport плюс 1. Следующий код MATLAB® генерирует MAT-файл, содержащий одну переменную var_matrix в матричном формате TU. Обратите внимание на то, что можно использовать этот формат, только если входные порты в модели имеют совпадающий тип данных.
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 rsim_i_matrix.mat var_matrix; disp('rsim_i_matrix.mat contains one variable var_matrix in TU matrix format.');
rsim_i_matrix.mat contains one variable var_matrix in TU matrix format.
2) MAT-файл содержит одну переменную в формате структуры. Для этого формата переменная должна содержать названное время и сигналы двух полей. Если один из наборов блока Inport Интерполирует Данные к На, то поле времени переменной не должно быть пустым вектором. Кроме того, ширина сигналов должна равняться общей ширине блоков Inport. Следующий код генерирует MAT-файл, который содержит одну переменную var_matrix в формате структуры переменной сигнала. Этот формат более гибок, чем матричный формат TU, потому что это может поддержать входные порты с различными типами данных.
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 rsim_i_single_struct.mat var_single_struct; disp('rsim_i_single_struct.mat contains one variable var_single_struct in') disp('struct format.');
rsim_i_single_struct.mat contains one variable var_single_struct in struct format.
3) MAT-файл содержит несколько переменных в формате структуры. Для этого формата количество переменных равняется количеству блоков Inport. Различные переменные могут иметь различные временные векторы. Следующий код генерирует MAT-файл, который содержит несколько переменных, каждого в формате структуры. Это - самый гибкий формат, потому что он позволяет каждому блоку Inport иметь свой собственный временной вектор.
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 rsim_i_multi_struct.mat Inb1; save rsim_i_multi_struct.mat Inb2 -append; save rsim_i_multi_struct.mat Inb3 -append; disp('rsim_i_multi_struct.mat contains three variables Inb1\Inb2\Inb3'); disp('in struct format. Note that command save -append option must be'); disp('used to generate the MAT-file to preserve the order of the'); disp('variables in the MAT-file generated. The command:') disp('save rsim_i_multi_struct.mat Inb1 Inb2 Inb3 might not preserve'); disp('the order of the variables in the MAT-file and you should not use it'); disp('to generate the MAT-file.');
rsim_i_multi_struct.mat contains three variables Inb1\Inb2\Inb3 in struct format. Note that command save -append option must be used to generate the MAT-file to preserve the order of the variables in the MAT-file generated. The command: save rsim_i_multi_struct.mat Inb1 Inb2 Inb3 might not preserve the order of the variables in the MAT-file and you should not use it to generate the MAT-file.
RSim-i опции может также использоваться для симуляции пакетного режима. Подготовьте различные MAT-файлы и запустите цель RSim с ними.
figure fileName = ({'rsim_i_matrix', 'rsim_i_single_struct', 'rsim_i_multi_struct'}); for i=1:3 % bang out and run a simulation using new parameter data name = fileName(i); runstr = ['.', filesep, 'rtwdemo_rsim_i -i ',char(name),'.mat', ' -v']; evalc('system(runstr)'); pause(0.5); % load simulation data into MATLAB(R) for plotting. load rtwdemo_rsim_i.mat; subplot(3,1,i); axis([0,6, -5, 5]); plot(rt_tout, rt_yout); hold on end disp('This part of the example illustrates a sequence of 3 plots. Each plot'); disp('shows the simulation results by using input MAT-file with different'); disp('variable format. Notice that the model is compiled only once.'); close_system(mdlName, 0);
This part of the example illustrates a sequence of 3 plots. Each plot shows the simulation results by using input MAT-file with different variable format. Notice that the model is compiled only once.