В этом примере показано, как опция RSim -i генератора кода позволяет использовать MAT-файл в качестве источника входных данных для блоков Inport для быстрого моделирования. Данные в таком MAT-файле могут быть представлены в следующих форматах:
Одна переменная, определяющая матрицу времени/входных данных с двойными значениями.
Переменная, определяющая структуру, использующую комбинацию типов данных Simulink ®.
Несколько переменных, каждая из которых определяет структуру, использующую комбинацию типов данных Simulink ®.
Эта гибкость хорошо подходит для приложений, для которых необходимо выполнять моделирование по диапазону входных данных, хранящихся в различных файлах данных. В этом примере объясняется, как использовать эту функцию.
Для быстрого выполнения нескольких симуляций в среде Simulink рекомендуется использовать ускоритель, а не RSim. Смотрите раздел Что такое ускорение?.
Откройте модель и сохраните копию в доступном для записи расположении. Затем откройте приложение Simulink Coder. Задайте для параметра конфигурации модели * System target file значение rsim.tlc.
Для получения дополнительной информации о том, как сделать это графически и настроить другие параметры конфигурации модели, относящиеся к целевому файлу системы RSim, см. здесь.
mdlName = 'rtwdemo_rsim_i'; open_system(mdlName); cs = getActiveConfigSet(mdlName); cs.switchTarget('rsim.tlc',[]);
Использование RSim -i , необходимо правильно настроить каждый блок Inport. Для просмотра свойств блока ввода дважды щелкните его. По умолчанию блоки Inport наследуют свои свойства от дочерних блоков. Перед импортом данных из внешних MAT-файлов необходимо задать параметры каждого блока Inport, соответствующие данным в MAT-файле. В большинстве случаев необходимо установить следующие параметры блока Inport:
Интерполяция данных
Размеры порта
Тип данных
Тип сигнала
Для получения дополнительной информации об этих параметрах нажмите кнопку «Справка». В этом примере модель включает три блока 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'); end
Для ввода In1 и In2, выбирается интерполяция. Для ввода In3интерполяция очищается.
Для ввода In1 и In3, для размера порта установлено значение 2. Для ввода In2, для размера порта установлено значение 1.
Для ввода In1, In2, и In3, тип данных: double и тип сигнала real.
Создайте исполняемый файл для модели. В процессе построения вычисляется структурная контрольная сумма, которая встраивается в создаваемую исполняемую программу. Эта контрольная сумма используется для проверки совместимости набора параметров, переданного исполняемой программе, с программой.
evalc('slbuild(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]);

На этом рисунке показаны входные сигналы.
Как правило, 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;
MAT-файл rsim_i_matrix.mat содержит одну переменную var_matrix в формате матрицы TU.
Одна переменная в формате структуры
Для этого формата переменная должна содержать два поля: время и сигналы. Если для одного из блоков Inport задан параметр блока Interpolate data, поле времени переменной не должно быть пустым вектором, а ширина сигналов должна равняться общей ширине блоков 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;
MAT-файл rsim_i_single_struct.mat содержит одну переменную var_single_struct в struct формат.
Несколько переменных в структурном формате
Для этого формата число переменных равно количеству блоков 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;
MAT-файл rsim_i_multi_struct.mat содержит три переменные Inb1, Inb2, и Inb3 в struct формат. Используйте save с помощью команды -append для сохранения порядка переменных в создаваемом MAT-файле.
Для моделирования в пакетном режиме можно использовать параметры RSim -i. Подготовьте различные MAT-файлы и запустите с ними исполняемый файл программы RSim.
В этой части примера показаны три графика. На каждом графике отображаются результаты моделирования для MAT-файла с различным переменным форматом. Модель компилируется один раз.
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
close_system(mdlName, 0);