exponenta event banner

Использование файлов MAT для передачи данных в блоки ввода для быстрого моделирования

В этом примере показано, как опция 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]);

Figure contains an axes. The axes contains 5 objects of type line.

На этом рисунке показаны входные сигналы.

Подготовка файла MAT

Как правило, 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 и результатов графика

Для моделирования в пакетном режиме можно использовать параметры 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

Figure contains 3 axes. Axes 1 contains 3 objects of type line. Axes 2 contains 3 objects of type line. Axes 3 contains 3 objects of type line.

close_system(mdlName, 0);