В этом примере показов, как опция генератора кода RSim -i позволяет вам использовать MAT-файл в качестве источника входных данных для блоков Inport для быстрых симуляций. Данные в таком MAT-файле могут быть представлены в следующих форматах:
Одна переменная, которая задает матрицу времени/входных данных с двойными значениями.
Одна переменная, которая задает структуру, которая использует комбинацию типов данных Simulink ®.
Несколько переменных, каждая из которых определяет структуру, которая использует комбинацию типов данных Simulink ®.
Эта гибкость хорошо поддается приложениям, для которых вы должны запустить симуляции в области значений входных данных, хранящихся в разных файлах данных. Этот пример объясняет, как использовать эту функцию.
Чтобы быстро запустить несколько симуляций в окружение Simulink, рассмотрите использование быстрого ускорителя вместо RSim. Смотрите, что такое ускорение?.
Откройте модель и сохраните копию в месте с возможностью записи. Затем откройте приложение Simulink Coder. Установите параметр конфигурации модели * Системный целевой файл на rsim.tlc
.
Для получения дополнительной информации об этом графически и настройке других параметров конфигурации модели относятся к целевому файлу системы RSim, смотрите здесь.
mdlName = 'rtwdemo_rsim_i'; open_system(mdlName); cs = getActiveConfigSet(mdlName); cs.switchTarget('rsim.tlc',[]);
Как использовать -i RSim
опция, необходимо правильно сконфигурировать каждый блок Inport. Можно дважды кликнуть блок 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 matrix. Использовать этот формат можно только в том случае, если входные порты в модели имеют совпадающий тип данных.
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.
Одна переменная в формате структуры
Для этого формата переменная должна содержать два поля: время и сигналы. Если вы устанавливаете параметрам блоков Interpolate данные для одного из блоков 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;
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);