В этом примере показано, как генератор кода RSim-i опция позволяет вам использовать MAT-файл в качестве источника входных данных для блоков Inport для быстрых симуляций. Данные в таком MAT-файле могут быть представлены в следующих форматах:
Одна переменная, которая задает матрицу времени/входных данных двойных значений.
Одна переменная, которая задает структуру, которая использует комбинацию типов данных Simulink®.
Несколько переменных, каждый задающий структуру, которая использует комбинацию типов данных Simulink®.
Эта гибкость предоставляет себя хорошо приложениям, для которых необходимо запустить симуляции в области значений входных данных, сохраненных в различных файлах данных. Этот пример объясняет, как использовать эту функцию.
Чтобы быстро запустить несколько симуляций в окружении Simulink, рассмотрите использование быстрого акселератора вместо RSim. Смотрите то, Что Ускорение? (Simulink).
Откройте модель и сохраните копию в перезаписываемое местоположение. Затем откройте приложение Simulink Coder. Установите параметр конфигурации модели *Системный конечный файл к rsim.tlc
.
Для получения дополнительной информации о выполнении этого графически и подготовке другие параметры конфигурации модели относятся к системному конечному файлу 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
Создайте исполняемый файл для модели. Во время процесса сборки структурная контрольная сумма вычисляется и встраивается в сгенерированную исполняемую программу. Эта контрольная сумма используется, чтобы проверять, что набор параметра, переданный исполняемой программе, совместим с программой.
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('This figure displays the input signals.');
This figure displays the input signals.
Обычно можно создать MAT-файл из переменной рабочей области. RSim-i опция поддерживает три формата файла данных:
Одна переменная в матричном формате 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.
Одна переменная в формате структуры
Для этого формата переменная должна содержать два поля: время и сигналы. Если вы устанавливаете параметры блоков, Интерполируют данные для одного из блоков 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.
Несколько переменных в формате структуры
Для этого формата количество переменных равняется количеству блоков 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. 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. The model is compiled only once.