Когда вы sweep один или несколько параметров, вы изменяете их значения между запусками симуляции, и сравниваете и анализируете данные выходного сигнала из каждого запуска. Используйте свипинг параметров, чтобы настроить параметры управления, оценить неизвестные параметры модели и проверить робастность алгоритма управления с учетом неопределенности в реальной системе.
Можно сдвинуть параметры блоков значения или значения переменных рабочей области, которые вы используете, чтобы задать значения параметров. Используйте вкладку Parameters в Model Data Editor (на вкладке Modeling, нажмите Model Data Editor), Property Inspector (на вкладке Modeling, под Design, нажмите Property Inspector), командную строку или скрипты, чтобы изменить значения параметров между запусками симуляции.
Если необходимо неоднократно изменять значение параметров блоков, рассмотрите создание переменной в рабочей области. Можно использовать Model Explorer или программные команды, чтобы изменить значение переменной вместо определения местоположения или идентификации блока в модели. Кроме того, несколько функции и продуктов, которые облегчают оптимизацию параметров управления, оценку и развертку, требуют, чтобы вы задавали значения блочных параметров путем создания переменных рабочей области.
Чтобы узнать, как манипулировать значениями параметров во время итерационного процесса создания модели, смотрите Tune и Experiment with Параметры Блоков Values.
Для получения основной информации о доступе и настройке значений параметров блоков при проектировании модели, смотрите Задать Параметры блоков значения. Для получения основной информации о программном симуляции модели, например, при помощи скрипта, смотрите Запуск Симуляций Программно.
Этот пример показов, как изменить значение параметров блоков между несколькими программными запусками симуляции. Используйте этот метод для определения оптимального значения параметров путем сравнения данных выходного сигнала каждого запуска.
Пример модели ex_sldemo_absbrake
использует блок Constant, чтобы задать уставку скольжения для антиблокировочной системы торможения. Симулируйте модель с двумя различными значениями уставки скольжения, 0,24 и 0,25, и сравните скорость выходного колеса каждого запуска симуляции.
Чтобы сохранить значение уставки, создайте переменную в базовом рабочем пространстве. Этот метод позволяет вам присвоить значимое имя значению.
Откройте пример модели.
open_system('ex_sldemo_absbrake');
На вкладке Моделирование (Modeling) щелкните Редактор данных модели (Model Data Editor).
В Model Data Editor выберите вкладку Сигналы.
Установите выпадающий список Изменить представление на Instrumentation
. Столбец Log Data показывает, что сигналы yout
(который является виртуальной шиной) и slp
настроены для логгирования. Когда вы моделируете модель, можно собрать и позже просмотреть значения этих сигналов с помощью Данных моделирования Inspector.
В Model Data Editor выберите вкладку Параметры. Установите представление Change на Design
.
В модели выберите маркированный блок Constant Desired relative slip
. В Model Data Editor подсвечивается строка, которая соответствует параметру Constant значения блока.
Используйте столбец Value, чтобы задать значение параметров relSlip
.
Во время редактирования значения рядом с relSlip
, нажмите кнопку действия (с тремя вертикальными точками) и выберите Create.
В диалоговом окне «Создание новых данных» установите значение 0.2
и нажмите «Создать». Переменная, значение которой 0.2
, появляется в базовом рабочем пространстве. Модель теперь получает относительную уставку скольжения от этой переменной.
Также можно использовать эти команды в командной строке, чтобы создать переменную и сконфигурировать блок:
relSlip = 0.2; set_param('ex_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('ex_sldemo_absbrake'); simIn(i) = setVariable(simIn(i),'relSlip',relSlip_vals(i)); end
Используйте sim
функция для симуляции модели. При необходимости сохраните выход в переменной с именем simOutputs
.
simOutputs = sim(simIn);
[27-Jan-2021 13:04:15] Running simulations... [27-Jan-2021 13:04:17] Completed 1 of 2 simulation runs [27-Jan-2021 13:04:17] Completed 2 of 2 simulation runs
Модель потокует записанные сигналы, yout
и slp
, инспектору Данных моделирования. Можно просмотреть данные сигнала в Данные моделирования Inspector.
Сравните выходные данные двух последних запусков симуляции.
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).