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

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

Для интерактивного моделирования можно использовать set_param и get_param. С set_param и get_ param, можно проверить состояние рабочего моделирования, управлять как моделирование при помощи блочных обратных вызовов.

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

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

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

simOut = sim('vdp','SimulationMode','normal','AbsTol','1e-5',...
            'SaveState','on','StateSaveName','xout',...
            'SaveOutput','on','OutputSaveName','yout',...
 'SaveFormat', 'Dataset');
outputs = simOut.get('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, который содержит все моделирование выходные параметры (регистрируемое время, состояния и сигналы). Функция sim не возвращает значения моделирования к рабочей области.

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

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

Включите тайм-ауты моделирования

Если при запуске несколько моделирований в цикле и используете решатель переменного шага, рассматриваете использование 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:

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]

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

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

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

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

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.

Управляйте и проверьте состояние моделирования

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

Запустите моделирование.

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

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

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

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

Когда вы используете set_param, чтобы приостановить или остановить моделирование, команды являются запросами на такие действия, и моделирование сразу не выполняет их. Можно использовать set_param, чтобы запустить моделирование после команды остановки и продолжить моделирование после команды "пауза". 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, который находит блоки Осциллографа в вашей модели и открывает их на переднем плане, когда вы моделируете модель. Сохраните скрипт в текущей папке.

% 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')

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

| | | |

Похожие темы

Была ли эта тема полезной?