Запустите симуляции программно

Можно симулировать модель программно двумя способами:

  • Через sim команда.

  • Через кнопку Run

При выполнении симуляций с sim команда, вы используете командную строку, чтобы выполнить операции на вашей симуляции. Выполнение симуляций с кнопкой Run подразумевает, что можно взаимодействовать с симуляцией с помощью Simulink® Пользовательский интерфейс, чтобы выполнить любые другие дополнительные операции. Следующая таблица разрабатывает различия между этими двумя подходами.

ДействияНеинтерактивная симуляция (sim Симуляции команды)Интерактивная симуляция (симуляции кнопки Run)
Допустимый уровень взаимодействияНизкоВысоко
Запустите симуляциюsim команда Run/set_param(mdl,'SimulationCommand','Start')
Остановка симуляцииCtrl-C на командной строке

set_param(mdl,'SimulationCommand','Stop')остановка

Приостановка симуляцииНетДа. set_param(mdl,'SimulationCommand','Pause') приостановка
Подсказка MATLAB, доступная, в то время как симуляция запускаетсяНетДа
Осциллографы обновляются, в то время как симуляция запускаетсяДа, кроме быстрого режима AcceleratorДа
Степпер симуляцииНетДа, кроме быстрого режима Accelerator
Условное выражение делает паузуНетДа, кроме быстрой модели акселератора
Отображения значения порта, доступные, в то время как симуляция запускается?НетДа
Следующая симуляция поддержекДаДа
Поддержки TimeOut опцияДа Нет
Обработка ошибокИсключение MATLAB, если CaptureErrors включенСообщаемый диагностическому средству просмотра

sim Симуляции команды

Можно программно симулировать модель с sim функция при помощи заданных методов, чтобы задать значения параметров. В дополнение к симуляции модели можно использовать sim команда, чтобы включить тайм-аут симуляции, зафиксируйте ошибки симуляции и метаданные симуляции доступа, когда ваша симуляция будет завершена.

Задайте пары "имя-значение" параметра

В этом примере показано, как программно симулировать модель, задав параметры модели как пары "имя-значение".

Симулируйте vdp модель со значениями параметров, заданными как последовательные пары "имя-значение".

simOut = sim('vdp','SimulationMode','normal',...
            'SaveState','on','StateSaveName','xout',...
            'SaveOutput','on','OutputSaveName','yout',...
            'SaveFormat', 'Dataset');
outputs = simOut.yout
outputs = 

  Simulink.SimulationData.Dataset
  Package: Simulink.SimulationData

  Characteristics:
              Name: 'yout'
    Total Elements: 2

  Elements:
    1 : 'x1'
    2 : 'x2'

  -Use get or getElement to access elements by index or name.
  -Use addElement or setElement to add or modify elements.

Вы симулируете модель в Normal режим, задавая абсолютную погрешность для ошибки решателя. sim функция возвращает SimOut, один Simulink.SimulationOutput объект, который содержит всю симуляцию выходные параметры: регистрируемое время, состояния и сигналы.

Постройте значения выходного сигнала против времени.

x1 = (outputs.get('x1').Values);
x2 = (outputs.get('x2').Values);
plot(x1); hold on;
plot(x2);
title('VDP States')
xlabel('Time'); legend('x1','x2')

Plot of the vdp simulation

Включите тайм-ауты симуляции

Если при запуске несколько симуляций в цикле и используете решатель переменного шага, рассматриваете использование sim с timeout параметр. Если по некоторым причинам симуляция будет висеть или будет начинать брать неожиданно маленькие временные шаги, она испытает таймаут. Затем следующая симуляция может запуститься.

N = 100;
simOut = repmat(Simulink.SimulationOutput, N, 1);
for i = 1:N
		simOut(i) = sim('vdp', 'timeout', 1000);
end

Зафиксируйте ошибки симуляции

Если ошибка заставляет вашу симуляцию останавливаться, вы видите ошибку в метаданных симуляции. В этом случае, sim данные моделирования получений в симуляции выводят объект до времени, это сталкивается с ошибкой, позволяя вам сделать некоторую отладку симуляции, не повторно выполняя его. Чтобы активировать эту опцию, используйте CaptureErrors параметр с sim функция.

Другое преимущество этого подхода состоит в том, что ошибка симуляции также не вызывает sim остановиться. Поэтому, если вы используете sim в a for цикл, например, последующие итерации цикла все еще запустятся.

simOut = sim('my_model', 'CaptureErrors', 'on');
simOut.getSimulationMetadata.ExecutionInfo
ans = 

  struct with fields:

               StopEvent: 'DiagnosticError'
         StopEventSource: []
    StopEventDescription: 'Division by zero in 'my_model/Divide''
         ErrorDiagnostic: [1×1 struct]
      WarningDiagnostics: [0×1 struct]

Доступ к метаданным симуляции

Этот пример показывает вам, как получить доступ к метаданным симуляции, если ваша симуляция завершена. Можно запустить любой вид симуляции и получить доступ к ее метаданным.

Этот пример симулирует модель со значениями параметров, задает как пары "имя-значение". Запустите симуляцию.

simOut = sim('vdp','SimulationMode','normal','AbsTol','1e-5',...
            'SaveState','on','StateSaveName','xoutNew',...
            'SaveOutput','on','OutputSaveName','youtNew',...
 'SaveFormat', 'StructureWithTime');

Доступ к ModelInfo свойство, которое имеет основную информацию о модели и решателе.

simOut.getSimulationMetadata.ModelInfo
ans = 

  struct with fields:

                  ModelName: 'vdp'
               ModelVersion: '1.6'
              ModelFilePath: 'C:\MyWork'
                     UserID: 'User'
                MachineName: 'MyMachine'
                   Platform: 'PCWIN64'
    ModelStructuralChecksum: [4×1 uint32]
             SimulationMode: 'normal'
                  StartTime: 0
                   StopTime: 20
                 SolverInfo: [1×1 struct]
            SimulinkVersion: [1×1 struct]
                LoggingInfo: [1×1 struct]

Смотрите информацию о решателе.

simOut.getSimulationMetadata.ModelInfo.SolverInfo
ans = 

  struct with fields:

           Type: 'Variable-Step'
         Solver: 'ode45'
    MaxStepSize: 0.4000

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

simOut.getSimulationMetadata.TimingInfo
ans = 

  struct with fields:

          WallClockTimestampStart: '2016-06-17 10:26:58.433686'
           WallClockTimestampStop: '2016-06-17 10:26:58.620687'
    InitializationElapsedWallTime: 0.1830
         ExecutionElapsedWallTime: 1.0000e-03
       TerminationElapsedWallTime: 0.0030
             TotalElapsedWallTime: 0.1870

Добавьте примечания в свою симуляцию.

simOut=simOut.setUserString('Results from simulation 1 of 10');
simOut.getSimulationMetadata
ans = 

  SimulationMetadata with properties:

        ModelInfo: [1×1 struct]
       TimingInfo: [1×1 struct]
    ExecutionInfo: [1×1 struct]
       UserString: 'Results from simulation 1 of 10'
         UserData: []

Можно также добавить собственные данные с помощью UserData свойство.

Симуляции кнопки Run

Для интерактивной симуляции можно использовать set_param и get_param. С set_param и get_param, можно проверять состояние рабочей симуляции и управлять как моделирование при помощи коллбэков блока.

Управляйте и проверяйте состояние симуляции

В этом примере показано, как использовать set_param управлять состоянием вашей симуляции. set_param позволяет вам обновлять переменные динамически, а также писать переменные регистрации данных в рабочую область.

Запустите симуляцию.

set_param('vdp','SimulationCommand','start')

Когда вы запускаете использование симуляции set_param и 'start' аргумент, необходимо использовать 'stop' аргумент, чтобы остановить его. Не использование 'stop' аргумент заставляет симуляцию останавливаться только однажды его законченный.

Приостановите, продолжите и остановите симуляцию.

set_param('vdp','SimulationCommand','pause')
set_param('vdp','SimulationCommand','continue')
set_param('vdp','SimulationCommand','stop')

Когда вы используете set_param чтобы приостановить или остановить симуляцию, симуляция сразу не выполняет команды. Можно использовать set_param запустить симуляцию после stop команда и продолжать симуляцию после команды "пауза". Simulink сначала завершает непрерываемую работу, такую как шаги решателя и другие команды, которые предшествовали set_param команда. Затем симуляция запускается, делает паузу, продолжается или останавливается, как задано set_param команда.

Проверяйте состояние симуляции.

get_param('vdp','SimulationStatus')

Программное обеспечение возвращает 'stopped', 'initializing', 'running', 'paused', 'compiled', 'updating', 'terminating', или 'external' (используемый с продуктом Simulink Coder™).

Чтобы обновить замененные переменные рабочей области динамически, в то время как симуляция запускается, используйте update команда.

set_param('vdp','SimulationCommand','update')

Запишите все переменные регистрации данных в базовое рабочее пространство.

set_param('vdp','SimulationCommand','WriteDataLogs')

Автоматизируйте задачи симуляции Используя коллбэки

Коллбэк выполняется, когда вы выполняете различные действия со своей моделью, такие как запуск, приостановка или остановка симуляции. Можно использовать коллбэки, чтобы выполнить MATLAB® скрипт или другие команды MATLAB. Для получения дополнительной информации смотрите Коллбэки для Индивидуально настраиваемых Параметров Коллбэка Поведения и Блока Модели.

В этом примере показано, как использовать модель StartFcn коллбэк, чтобы автоматически выполнить код MATLAB перед симуляцией запускается.

Запишите скрипт MATLAB, который находит блоки Scope в вашей модели и открывает их на переднем плане, когда вы симулируете модель. Сохраните скрипт в текущей папке.

% openscopes.m 
% Brings scopes to forefront at beginning of simulation.

blocks = find_system(bdroot,'BlockType','Scope');

% Finds all of the scope blocks in the top level of your
	% model. To find scopes in subsystems, provide the subsystem
	% names. Type help find_system for more on this command.

for i = 1:length(blocks)
  set_param(blocks{i},'Open','on')
end

% Loops through all of the scope blocks and brings them
	% to the forefront.

Установите StartFcn параметр для модели, чтобы вызвать openscopes скрипт.

set_param('my_model','StartFcn','openscopes')

Смотрите также

| | | |

Похожие темы