exponenta event banner

Программно запустить моделирование

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

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

  • С помощью кнопки запуска

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

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

set_param(mdl,'SimulationCommand','Stop')Стоп

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

sim Моделирование команд

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

Задать пары «имя-значение параметра»

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

Моделирование 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')

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 функция.

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 и 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, который находит блоки области в модели и открывает их на переднем плане при моделировании модели. Сохраните сценарий в текущей папке.

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

См. также

| | | |

Связанные темы