Когда вы sweep один или несколько параметров, вы изменяете их значения между запусками симуляции, и сравниваете и анализируете данные о выходном сигнале из каждого запуска. Используйте параметр, развертывающийся, чтобы настроить параметры управления, оценить неизвестные параметры модели и протестировать робастность алгоритма управления путем учета неопределенности в реальной системе.
Можно развернуть значения параметров блоков или значения переменных рабочей области, которые вы используете, чтобы установить значения параметров. Используйте вкладку Parameters на Model Data Editor (на вкладке Modeling, нажмите Model Data Editor), Property Inspector (на вкладке Modeling, под Design, нажмите Property Inspector), командная строка или скрипты, чтобы изменить значения параметров между запусками симуляции.
Если вы хотите неоднократно изменить значение параметров блоков, рассмотрите создание переменной в рабочей области. Можно использовать Model Explorer или программируемые команды, чтобы изменить значение переменной вместо того, чтобы определить местоположение или идентифицировать блок в модели. Кроме того, несколько функций и продуктов, которые упрощают оптимизацию параметров управления, оценку и развертку, требуют, чтобы вы установили значения параметров блоков путем создания переменных рабочей области.
Чтобы изучить, как управлять значениями параметров во время итеративного процесса создания модели, смотрите Мелодию и Эксперимент со Значениями Параметров блоков.
Для основной информации о доступе и устанавливании значений параметров блоков, когда вы проектируете модель, смотрите Установленные Значения Параметров блоков. Для основной информации о программно симуляции модели, такой как при помощи скрипта, смотрите Симуляции Запуска Программно.
В этом примере показано, как изменить значение параметров блоков между несколькими программируемыми запусками симуляции. Используйте этот метод, чтобы определить оптимальное значение параметров путем сравнения данных о выходном сигнале каждого запуска.
Модель sldemo_absbrake
в качестве примера использует блок Constant, чтобы задать заданное значение промаха для антиблокировочной тормозной системы. Симулируйте модель с двумя различными заданными значениями промаха, 0.24 и 0.25, и сравните выходную скорость колеса каждой запущенной симуляции.
Чтобы сохранить заданное значение, создайте переменную в базовом рабочем пространстве. Этот метод позволяет вам присвоить понятное имя к значению.
Откройте модель в качестве примера.
open_system('sldemo_absbrake');
На вкладке Modeling нажмите Model Data Editor.
В Model Data Editor выберите вкладку Signals.
Установите представление Change выпадающий список на Instrumentation
. Столбец Данных логов показывает что сигналы yout
(который является виртуальной шиной), и slp
сконфигурированы для логгирования. Когда вы симулируете модель, можно собрать и позже смотреть значения этих сигналов при помощи Инспектора Данных моделирования.
В Model Data Editor выберите вкладку Parameters. Установите представление Change на Design
.
В модели блок Constant выбор, пометил Desired relative slip
. Model Data Editor подсвечивает строку, которая соответствует параметру Постоянного значения блока.
Используйте Столбец значений, чтобы установить значение параметров на relSlip
.
При редактировании значения, рядом с relSlip
, кликните по кнопке действий (с тремя вертикальными точками) и выберите Create.
В диалоговом окне Create New Data, установленном Значении к 0.2
и нажмите Create. Переменная, значением которой является 0.2
, появляется в базовом рабочем пространстве. Модель теперь получает относительное заданное значение промаха от этой переменной.
В качестве альтернативы можно использовать эти команды в командной строке, чтобы создать переменную и сконфигурировать блок:
relSlip = 0.2; set_param('sldemo_absbrake/Desired relative slip','Value','relSlip')
В командной строке создайте массив, чтобы сохранить два значения экспериментирования для относительного заданного значения промаха, 0.24
и 0.25
.
relSlip_vals = [0.24 0.25];
Создайте Simulink.SimulationInput
объект для каждой симуляции, которую вы хотите запустить (в этом случае, два). Храните объекты в переменной единого массива, simIn
. Используйте setVariable
метод каждого объекта идентифицировать каждое из двух значений экспериментирования.
for i = 1:length(relSlip_vals) simIn(i) = Simulink.SimulationInput('sldemo_absbrake'); simIn(i) = setVariable(simIn(i),'relSlip',relSlip_vals(i)); end
Используйте sim
функция, чтобы симулировать модель. Опционально, сохраните выход в переменной под названием simOutputs
.
simOutputs = sim(simIn);
[29-Jan-2020 22:38:06] Running simulations... [29-Jan-2020 22:38:08] Completed 1 of 2 simulation runs [29-Jan-2020 22:38:08] Completed 2 of 2 simulation runs
Потоки модели регистрируемые сигналы, yout
и slp
, Инспектору Данных моделирования. Можно просмотреть данные сигнала в Инспекторе Данных моделирования.
Сравните выходные данные двух последних запусков симуляции.
runIDs = Simulink.sdi.getAllRunIDs(); runResult = Simulink.sdi.compareRuns(runIDs(end-1), runIDs(end));
Постройте различие между значениями Ww
сигнал (который является элементом сигнала виртуальной шины yout
) путем определения результата индексируют 1
.
signalResult = getResultByIndex(runResult,1); plot(signalResult.Diff);
Simulink.SimulationInput
ОбъектыКогда вы запишете скрипт, чтобы запустить много симуляций, создайте массив Simulink.SimulationInput
объекты (один объект для каждой симуляции, которую вы хотите запустить). Используйте setVariable
и setBlockParameter
методы каждого объекта идентифицировать значения параметров, чтобы использовать в соответствующей запущенной симуляции. С этим методом вы избегаете необходимости использовать set_param
функция, чтобы изменить значения параметров блоков и команды присвоения, чтобы изменить значения переменных рабочей области между запусками симуляции.
Для получения дополнительной информации об использовании Simulink.SimulationInput
объекты запустить несколько симуляций, смотрите sim
.
Если вы используете нескалярные переменные, переменные структуры или Simulink.Parameter
объекты установить значения параметров блоков, используйте setVariable
метод каждого Simulink.SimulationInput
объект. Обратитесь к примерам в таблице.
Сценарий | Пример |
---|---|
Переменная MATLAB®, myArray , чье значение является массивом. Вы хотите установить третий элемент в массиве (принимающий индексацию на основе одну). | setVariable(simIn,'myArray(3)',15.23) |
Переменная MATLAB, myStruct , это имеет поле под названием field1 . | setVariable(simIn,'myStruct.field1',15.23) |
Объект параметра, myParam , чей Value свойство является скаляром. | setVariable(simIn,'myParam.Value',15.23) |
Объект параметра, myArrayParam , чей Value свойство является массивом. Вы хотите установить третий элемент в массиве. | setVariable(simIn,'myArrayParam.Value(3)',15.23) |
Объект параметра, myStructParam , чей Value свойство является структурой. Структура имеет поле под названием field1 . | setVariable(simIn,'myStructParam.Value.field1',15.23) |
Если вы используете рабочее пространство модели, чтобы сохранить переменные, когда вы используете setVariable
метод Simulink.SimulationInput
объект изменить значение переменных, используйте Workspace
парный аргумент, чтобы идентифицировать содержание модели:
setVariable(simIn,'myVar',15.23,'Workspace','myModel')
Каждая симуляция, запущенная во время развертки параметра, производит выходные параметры, такие как значения сигналов от блоков Outport и от регистрируемых сигналов.
Можно получить эти выходные параметры в переменных и объектах для более позднего анализа. Для получения дополнительной информации смотрите Данные моделирования Экспорта.
Чтобы визуализировать выходные данные симуляции, таким образом, можно сравнить эффект каждого значения параметров, смотрите, Решают, Как Визуализировать Данные моделирования.
Выполнять много симуляций, что каждое использование различные значения параметров, можно использовать ускоренные режимы симуляции. Для больших моделей ускоренные симуляции занимают меньше времени, чтобы выполниться, чем нормальные симуляции. Если у вас также есть Parallel Computing Toolbox™, можно использовать несколько ядер процессора, чтобы одновременно выполнить симуляции. Используйте аргументы sim
и parsim
функции.
Чтобы улучшить скорость симуляции вашей модели при помощи ускоренных симуляций и других методов, смотрите, Оптимизируют Производительность. Для примеров и большей информации, смотрите Запуск Несколько Симуляций.
Если у вас есть Simulink® Test™, можно подтвердить, что модель все еще удовлетворяет требования, когда вы используете различные значения параметров. Переопределения параметра и тестовые итерации позволяют вам установить различные значения параметров для каждого теста. Для получения дополнительной информации смотрите Переопределения Параметра (Simulink Test) и Тестовые Итерации (Simulink Test).
Если у вас есть Simulink Design Optimization™, можно оценить значения параметра модели так, чтобы симуляция, выходные параметры тесно соответствуют данным, которые вы измеряете в реальном мире. Используйте этот метод, чтобы оценить реальные значения параметров в plant model, который представляет динамику реальной системы, когда вы не можете непосредственно измерить значения. Эта оценка улучшает точность модели объекта управления. Для получения дополнительной информации смотрите Оценочные Параметры от Результатов измерений (Simulink Design Optimization).
Если у вас есть Simulink Control Design™, можно использовать PID Tuner, чтобы настроить параметры блока PID Controller. Для получения дополнительной информации смотрите Настройку ПИД-регулятора в Simulink (Simulink Control Design).
Если у вас есть Simulink Design Optimization, можно оптимизировать значения параметров управления так, чтобы симуляция, выходные параметры удовлетворяют требования ответа, которые вы задаете. Для получения дополнительной информации смотрите Оптимизацию Проекта, чтобы Удовлетворить Требования Переходного процесса (графический интерфейс пользователя) (Simulink Design Optimization).