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

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