exponenta event banner

Выполнение пакетного моделирования без повторной компиляции сгенерированного кода

В этом примере показано, как выполнять пакетное моделирование без повторной компиляции созданного кода. Пример изменяет данные входного сигнала и параметры модели путем считывания данных из MAT-файла. В первой части (шаги 1-5) десять наборов параметров создаются из модели Simulink ® путем изменения коэффициента демпфирования передаточной функции. Десять наборов параметров сохраняются в MAT-файле, и исполняемый файл RSim считывает указанный набор параметров из файла. Во второй части (этап 6-7) этого примера создаются пять наборов чирпов данных сигнала с все более высокими частотами. В обеих частях исполняемый файл RSim запускает набор моделирования и создает выходные MAT-файлы, содержащие определенный результат моделирования. Наконец, на рисунке MATLAB ® отображается составная часть прогонов.

Для быстрого выполнения нескольких симуляций в среде Simulink рекомендуется использовать ускоритель, а не RSim. Смотрите раздел Что такое ускорение?.

Шаг 1. Подготовка

Убедитесь, что текущий каталог доступен для записи, поскольку в этом примере будут создаваться файлы.

[stat, fa] = fileattrib(pwd);
if ~fa.UserWrite
    disp('This script must be run in a writable directory');
    return;
end

Откройте модель и настройте ее для использования целевого объекта RSim. Дополнительные сведения о том, как это сделать графически и настроить другие параметры, связанные с целью RSim, см. здесь.

mdlName = 'rtwdemo_rsimtf';
open_system(mdlName);
cs = getActiveConfigSet(mdlName);
cs.switchTarget('rsim.tlc',[]);

В локальном каталоге требуется rsim_tfdata.mat файла MAT.

if ~isempty(dir('rsim_tfdata.mat')),
    delete('rsim_tfdata.mat');
end
str1 = fullfile(matlabroot,'toolbox','rtw','rtwdemos','rsimdemos','rsim_tfdata.mat');
str2 = ['copyfile(''', str1, ''',''rsim_tfdata.mat'',''writable'')'];
eval(str2);

Шаг 2. Построение модели

Создайте исполняемый файл RSim для модели. В процессе построения для модели вычисляется структурная контрольная сумма, которая встраивается в созданный исполняемый файл. Эта контрольная сумма используется для проверки совместимости набора параметров, переданного исполняемому файлу.

evalin('base','w = 70;')
evalin('base','theta = 1.0;')
disp('Building compiled RSim simulation.')
slbuild(mdlName);
Building compiled RSim simulation.
### Starting build procedure for: rtwdemo_rsimtf
### Successful completion of build procedure for: rtwdemo_rsimtf

Build Summary

Top model targets built:

Model           Action                       Rebuild Reason                                    
===============================================================================================
rtwdemo_rsimtf  Code generated and compiled  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 5.8879s

Шаг 3. Получение набора параметров по умолчанию и создание 10 наборов параметров

disp('Creating rtP data files')
for i=1:10
  % Extract current rtP structure using new damping factor.
  [rtpstruct]=evalin('base','rsimgetrtp(''rtwdemo_rsimtf'');');
  savestr = strcat('save params',num2str(i),'.mat rtpstruct');
  eval(savestr);
  evalin('base','theta = theta - .1;');
end
disp('Finished creating parameter data files.')
Creating rtP data files
Finished creating parameter data files.

Шаг 4. Выполнение 10 моделирования RSim с использованием новых наборов параметров и печать результатов

figure
for i=1:10
  % Bang out and run a simulation using new parameter data
  runstr = ['.', filesep, 'rtwdemo_rsimtf -p params',num2str(i),'.mat', ' -v'];
  [status, result] = system(runstr);
  if status ~= 0, error(result); end
  % Load simulation data into MATLAB for plotting.
  load rtwdemo_rsimtf.mat;
  axis([0 1 0 2]);
  plot(rt_tout, rt_yout)
  hold on
end

На графике показано 10 имитаций, каждая из которых использует различный коэффициент демпфирования.

Шаг 5. Настройка вектора времени и начального вектора частоты

Вектор времени имеет 4096 точек в случае, если мы хотим выполнить оконный и спектральный анализ результатов моделирования.

dt = .001;
nn = [0:1:4095];
t = dt*nn; [m,n] = size(t);
wlo = 1; whi = 4;
omega = [wlo:((whi-wlo)/n):whi - (whi-wlo)/n];

Шаг 6. Создание 5 наборов сигнальных данных в файлах MAT

Создание файлов .mat с данными chirp.

disp('This part of the example illustrates a sequence of 5 plots. Each')
disp('plot shows an input chirp signal of certain frequency range.')
for i = 1:5
  wlo = whi; whi = 3*whi; % keep increasing frequencies
  omega = [wlo:((whi-wlo)/n):whi - (whi-wlo)/n];
  % In a real application we recommend shaping the chirp using
  % a windowing function (hamming or hanning window, etc.)
  % This example does not use a windowing function.
  u      = sin(omega.*t);
  tudata = [t;u];
  % At each pass, save one more set of tudata to the next
  % .mat file.
  savestr = strcat('save sweep',num2str(i),'.mat tudata');
  eval(savestr);
  % Display each chirp. Note that this is only input data.
  % Simulations have not been run yet.
  plotstr = strcat('subplot(5,1,',num2str(i),');');
  eval(plotstr);
  plot(t,u)
  pause(0.3)
end
This part of the example illustrates a sequence of 5 plots. Each
plot shows an input chirp signal of certain frequency range.

Шаг 7. Запуск компилированного моделирования RSim с использованием новых данных сигнала

Замените исходные данные сигнала (rsim_tfdata.mat) файлами sweep1.mat, sweep2.mat и т. д.

disp('Starting batch simulations.')
for i = 1:5
  % Bang out and run the next set of data with RSim
  runstr = ['.', filesep, 'rtwdemo_rsimtf -f rsim_tfdata.mat=sweep', ...
            num2str(i),'.mat -v -tf 4.096'];
  [status, result] = system(runstr);
  if status ~= 0, error(result); end
  % Load the data to MATLAB and plot the results.
  load rtwdemo_rsimtf.mat
  plotstr = strcat('subplot(5,1,',num2str(i),');');
  eval(plotstr);
  plot(rt_tout, rt_yout); axis([0 4.1 -3 3]);
end
zoom on
% cleanup
evalin('base','clear w theta')
disp('This part of the example illustrates a sequence of 5 plots. Each plot')
disp('shows the simulation results for the next frequency range. Using the')
disp('mouse, zoom in on each signal to observe signal amplitudes.')
close_system(mdlName, 0);
Starting batch simulations.
This part of the example illustrates a sequence of 5 plots. Each plot
shows the simulation results for the next frequency range. Using the
mouse, zoom in on each signal to observe signal amplitudes.