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

В этом примере показано, как запустить симуляции пакета без перекомпиляции сгенерированного кода. Пример изменяет данные входного сигнала и параметры модели путем считывания данных из 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 файлов с данными щебета.

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.