Можно симулировать модель программно двумя способами:
Через sim команда.
Через кнопку Run
При выполнении симуляций с sim команда, вы используете командную строку, чтобы выполнить операции на вашей симуляции. Выполнение симуляций с кнопкой Run подразумевает, что можно взаимодействовать с симуляцией с помощью Simulink® UI, чтобы выполнить любые другие дополнительные операции. Следующая таблица разрабатывает различия между этими двумя подходами.
| Действия | sim Симуляции команды | Симуляции кнопки Run |
| Допустимый уровень взаимодействия | Низко | Высоко |
| Запустите симуляцию | sim команда | set_param(mdl,'SimulationCommand','Start') запущенный |
| Остановка симуляции | Ctrl-C на командной строке |
|
| Приостановка симуляции | Нет | Да. set_param(mdl,'SimulationCommand','Pause') приостановка |
| Подсказка MATLAB, доступная, в то время как симуляция запускается | Нет | Да |
| Осциллографы обновляются, в то время как симуляция запускается | Да, кроме быстрого режима Accelerator | Да |
| Степпер симуляции | Нет | Да, кроме быстрой модели акселератора) |
| Условное выражение делает паузу | Нет | Да, кроме быстрой модели акселератора) |
| Отображения значения порта, доступные, в то время как симуляция запускается? | Нет | Да |
| Следующая симуляция поддержек | Да | Да |
Поддержки 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')

Если при запуске несколько симуляций в цикле и используете решатель переменного шага, рассматриваете использование 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 в a 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.getSimulationMetadataans =
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, который находит блоки 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')
getSimulationMetadata | setUserData | setUserString | Simulink.SimulationMetadata | Simulink.SimulationOutput