exponenta event banner

Совместное использование и повторное использование значений параметров блока путем создания переменных

Для задания значения параметра блока, например параметра усиления блока усиления, можно использовать числовые переменные, которые создаются и хранятся в рабочих пространствах, таких как базовое рабочее пространство, рабочее пространство модели или словарь данных Simulink ®. Переменную можно использовать для задания нескольких значений параметров в нескольких блоках, включая блоки в различных моделях. Для изменения значений параметров блока необходимо изменить значение переменной в рабочей области.

Использование переменной для задания значения параметра блока также позволяет:

  • Измените значение параметра, не изменяя файл модели (если переменная хранится вне рабочего пространства модели).

  • Идентифицируйте параметр по определенному значимому имени при подметке или настройке значения.

Основные сведения об установке значений параметров блока см. в разделе Установка значений параметров блока.

Повторное использование значений параметров в нескольких блоках и моделях

Можно создать числовую переменную MATLAB ® в рабочей области, например в базовой рабочей области или словаре данных, и использовать ее для указания одного или нескольких значений параметров блока.

Если для параметра блока задано простое числовое выражение, можно создать переменную для этого выражения в редакторе данных модели (на вкладке «Моделирование» нажмите «Редактор данных модели»). Щелкните в правой части ячейки, соответствующей значению, и выберите Создать переменную. В диалоговом окне «Создание новых данных» задайте имя и расположение новой переменной и нажмите кнопку «Создать». Теперь в ячейке отображается новая переменная.

Можно также создать переменную для представления константы, которая используется в нескольких выражениях. Пример модели sldemo_fuelsys представляет собой систему заправки бензинового двигателя. Подсистема в модели, feedforward_fuel_rate, вычисляет потребность двигателя в топливе, используя постоянное число 14.6, который представляет идеальное (стехиометрическое) отношение воздуха к топливу, которое потребляет двигатель. Два блока в подсистеме используют число для установки значений параметров. В этом примере для совместного использования числа между блоками создается переменная с именем myParam.

  1. Откройте модель.

    sldemo_fuelsys

  2. В модели на вкладке Моделирование (Modeling) щелкните Редактор данных модели (Model Data Editor). В Редакторе данных модели (Model Data Editor) проверьте вкладку Параметры (Parameters).

  3. В модели перейдите в подсистему.

    open_system(...
        'sldemo_fuelsys/fuel_rate_control/fuel_calc/feedforward_fuel_rate')

  4. В Редакторе данных модели (Model Data Editor) в поле Содержимое фильтра (Filter contents) введите 14.6.

    Таблица данных содержит две строки, которые соответствуют параметрам Constant value двух блоков Constant в подсистеме.

  5. Используйте столбец «Значение» для замены буквенного числа 14.6 с myParam. Выполните замену обоих параметров.

  6. В поле Содержимое фильтра введите myParam.

  7. При редактировании значения одного из параметров нажмите кнопку действия и выберите Создать.

  8. В диалоговом окне «Создание новых данных» задайте для параметра «Значение» значение 14.6 и нажмите кнопку «Создать».

    Переменная, myParam, появляется в базовой рабочей области.

Поскольку переменная существует в базовой рабочей области, ее можно использовать в нескольких моделях. Однако при завершении сеанса MATLAB содержимое базовой рабочей области будет потеряно. Рассмотрите возможность постоянного сохранения переменной в рабочей области модели или словаре данных.

Определение системной константы

Чтобы определить системную константу, например переменную, представляющую радиус Земли, рекомендуется создать Simulink.Parameter вместо числовой переменной MATLAB. Объекты параметров позволяют определять физические единицы измерения и пользовательскую документацию, а также другие признаки.

Задание значения переменной с помощью математического выражения

Значение переменной можно задать как выражение, включающее литеральные числа и другие переменные. С помощью выражений можно:

  • Выражение значения как отношения между известными физическими константами вместо неидентифицируемого литерального числа.

  • Явно моделируют алгебраические зависимости между данными параметров. При изменении значений независимых данных не требуется изменять значения зависимых данных.

Общая техника

Преобразовать переменную в Simulink.Parameter объект. Затем установите Value свойство объекта с помощью выражения:

  • Интерактивно (Interactively) - например, в Редакторе данных модели (Model Data Editor) или Обозревателе моделей (Model Explorer) перед выражением следует знак равенства, =. На рисунке показано, как задать выражение myVar + myOtherVar.

  • Программно - используйте slexpr , указывая выражение в символьном векторе или строке. Например, чтобы задать значение объекта параметра с именем myParam в выражение myVar + myOtherVar:

    myParam.Value = slexpr('myVar + myOtherVar')

Явно моделирует алгебраическую связь между переменными

Пример sldemo_metro (см. Исследование решателя якобианской структуры модели) моделирует систему из трех идентичных точечных метрономов, подвешенных к движущейся платформе. Блоки в модели используют следующие переменные MATLAB из базовой рабочей области:

  • m - Масса каждого метронома, исходное значение 0,1 кг

  • r - Длина каждого метронома, начальное значение 1,0 м

  • J - Момент инерции каждого метронома, исходное значение 0,1 кг/м2

Эти переменные разделяют алгебраическое соотношение: момент инерции каждой метрономы равен массе, умноженной на квадрат длины. В этом примере эта связь записывается в значение J.

  1. Откройте модель.

    sldemo_metro

  2. Обновите блок-схему. Обратный вызов модели создает переменные в базовой рабочей области.

  3. Для предотвращения перезаписи изменений, вносимых в переменные, в данном примере следует удалить код обратного вызова.

    set_param('sldemo_metro','InitFcn','')

  4. В модели на вкладке Моделирование (Modeling) щелкните Редактор данных модели (Model Data Editor).

  5. На вкладке Параметры редактора данных модели (Model Data Editor Parameters) нажмите кнопку Изменить область (Change scope).

    Блоки, использующие переменные, находятся в подсистемах, поэтому необходимо настроить редактор данных модели для отображения данных в подсистемах.

  6. Нажмите кнопку Показать/обновить дополнительную информацию.

    Таблица данных содержит строки, соответствующие переменным в базовой рабочей области.

  7. В поле Содержимое фильтра введите J.

  8. В таблице данных найдите строку, которая соответствует J. В столбце «Значение» задайте значение переменной как Simulink.Parameter(J).

    Конвертеры Simulink J в Simulink.Parameter объект.

  9. В столбце «Значение» задайте значение объекта параметра, равное =m*r^2.

  10. При необходимости смоделировать модель с различными массами и длинами метрономов. При изменении значений m и r, вы не должны помнить, чтобы исправить значение J.

Ограничения и соображения для других целей моделирования

  • Если выражение содержит данные с фиксированной точкой или данные перечисляемого типа, выражение может работать только с одной переменной или объектом.

  • Невозможно задать тип данных (DataType свойство) объекта параметра, использующего выражение для auto (значение по умолчанию) и задайте для типов данных объектов параметров, отображаемых в выражении, значение, отличное от auto. Например, в выражении J = m*r^2, нельзя задать тип данных J кому auto и типы данных m и r кому single.

    • Сохранить преимущества auto(описано в разделе «Контекстно-зависимая типизация данных») для объекта, использующего выражение, задайте для типов данных объектов в выражении значение auto. Другими словами, используйте auto для всех задействованных объектов. Объекты в выражении получают тот же тип данных, что и объект, использующий выражение.

    • Использование значения, отличного от auto для объекта, который появляется в выражении, задайте для типов данных всех зависимых объектов параметров значение, отличное от auto. Другими словами, не используйте auto для любых задействованных объектов.

      Необходимо использовать один и тот же тип данных для всех объектов, используемых в выражении.

  • При наличии лицензий Simulink Coder™ и Embedded Coder ® можно создать код, инициализирующий глобальную переменную с помощью выражения. Однако генератор кода может сохранить выражение только в том случае, если оно соответствует определенным требованиям. См. раздел Сохранение выражений (Simulink Coder).

Объем контроля значений параметров

Область действия переменной - это набор моделей и блоков, которые могут использовать переменную. Например, переменные, созданные в базовой рабочей области, имеют глобальную область действия, поскольку все блоки во всех открытых моделях могут использовать переменные. Переменные, хранящиеся в рабочей области модели, имеют ограниченную область применения, поскольку только блоки в главной модели могут использовать переменные.

Нельзя создать две переменные с одинаковыми именами в одной области. Управление областью действия переменной позволяет избежать конфликтов имен и установить четкое владение переменной.

В таблице описаны различные способы управления областью действия повторно используемого значения параметра.

ОбъемТехника
Все открытые моделиСоздайте переменную в базовом рабочем пространстве.
Одна или несколько целевых моделейСоздайте переменную в словаре данных. Чтобы повторно использовать переменную в нескольких моделях, создайте словарь ссылки. Смотрите раздел Что такое словарь данных?
Одна модель, включая все подсистемы в моделиСоздайте переменную в рабочем пространстве модели. См. раздел Рабочие пространства модели.
Несколько блоков внутри подсистемы, включая блоки во вложенных подсистемах

Маскируйте подсистему и создайте параметр маски вместо переменной рабочей области.

Чтобы предотвратить использование блоков в подсистеме переменных рабочей области, в диалоговом окне блока подсистемы установите для параметра Разрешить иерархическое разрешение значение None. Этот метод позволяет использовать одно и то же имя для создания переменной в рабочей области и параметра маски в маске подсистемы. Блоки в подсистеме могут использовать только параметр маски.

Сведения о подсистемах см. в разделе Подсистема. Сведения о маскировании см. в разделе Основы маскирования.

Чтобы избежать конфликтов имен при наличии большой модели с большим количеством переменных в одной области действия, рассмотрите возможность объединения переменных в единую структуру. Дополнительные сведения см. в разделе Организация определений связанных параметров блоков в структурах.

Основные сведения о том, как блоки используют указанные имена переменных, см. в разделе Разрешение символов.

Постоянное сохранение переменных рабочей области

Переменные, создаваемые в базовой рабочей области, не сохраняются между сеансами MATLAB. Однако переменные можно хранить в MAT-файле или файле сценария и загружать файл при каждом открытии модели с помощью обратного вызова модели. Обратный вызов модели - это набор команд, которые Simulink выполняет при определенном взаимодействии с моделью, например при открытии модели. При открытии модели можно использовать обратный вызов для загрузки переменных. Используйте этот метод для хранения переменных во время изучения Simulink и экспериментирования с моделями.

  1. В модели, содержащей блок усиления, задайте значение параметра усиления, равное K.

  2. В командной строке создайте переменную K в базовом рабочем пространстве.

    K = 27;

  3. В браузере рабочего пространства щелкните правой кнопкой мыши переменную и выберите «Сохранить как».

    Чтобы сохранить несколько переменных в одном файле, выберите все целевые переменные в браузере рабочей области, а затем щелкните правой кнопкой мыши любую из выбранных переменных.

  4. В диалоговом окне задайте для параметра «Сохранить как тип» значение MATLAB Script. Задать для имени файла значение loadvar и нажмите кнопку «Сохранить».

    Файл сценария loadvar.m отображается в текущей папке. Можно открыть файл для просмотра команды, создающей переменную K.

  5. В модели на вкладке Моделирование (Modeling) выберите Параметры модели (Model Settings) > Свойства модели (Model Properties).

  6. На вкладке «Обратные вызовы» диалогового окна «Свойства модели» выберите PreLoadFcn как обратный вызов, который требуется определить. На панели функции предварительной загрузки модели введите loadvar и нажмите кнопку ОК.

  7. Сохраните модель.

При следующем открытии модели PreloadFcn обратный вызов загружает переменную K в базовое рабочее пространство. Можно также сохранить переменную в MAT-файле, например loadvar.matи установите обратный вызов модели в значение load loadvar.

Сведения о обратных вызовах см. в разделе Обратные вызовы для настраиваемого поведения модели. Чтобы программно определить обратный вызов для загрузки переменных, см. раздел Программно хранить переменные рабочей области для модели.

При сохранении переменных в файле необходимо сохранить изменения, внесенные в переменные во время сеанса MATLAB. Для постоянного хранения переменных модели рекомендуется использовать рабочее пространство модели или словарь данных вместо MAT-файла или файла сценария. Дополнительные сведения о постоянном хранении переменных см. в разделе Определение места хранения переменных и объектов для моделей Simulink.

Программно сохранять переменные рабочей области для модели

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

  1. В командной строке создайте переменную K в базовом рабочем пространстве.

    K = 27;
  2. Сохранить переменную в новом файле сценария с именем loadvar.m.

    matlab.io.saveVariablesToScript('loadvar.m','K')

  3. Задайте обратный вызов модели для загрузки файла сценария.

    set_param('mymodel','PreloadFcn','loadvar')

  4. Сохраните модель.

    save_system('myModel')

Функция matlab.io.saveVariablesToScript сохраняет переменные в файл сценария. Для сохранения переменных в MAT-файле используйте функцию save. Чтобы программно задать свойства модели, такие как обратные вызовы, используйте функцию set_param.

Управление переменными рабочей области и их редактирование

При использовании переменных для задания значений параметров блока переменные сохраняются в рабочей области или словаре данных. Для создания, перемещения, копирования и редактирования переменных можно использовать командную строку, Обозреватель моделей и Редактор данных модели. Можно также определить, где используется переменная в модели, перечислить все переменные, используемые моделью, и перечислить все переменные, которые модель не использует. Дополнительные сведения см. в разделе Создание, редактирование и управление переменными рабочей области.

Общие точки останова пакета и данные таблицы для таблиц подстановки

Чтобы совместно использовать векторы точек останова или данные таблицы между несколькими n-D таблицами подстановки, предварительной подстановкой и интерполяцией с использованием блоков предварительной подстановки, рекомендуется сохранить данные в Simulink.LookupTable и Simulink.Breakpoint объекты вместо переменных MATLAB или Simulink.Parameter объекты. Этот метод улучшает читаемость модели, четко идентифицируя данные как части таблицы подстановки и явно связывая данные точек останова с данными таблицы.

Сохранить автономную таблицу подстановки в Simulink.LookupTable Объект

Автономная таблица поиска состоит из набора данных таблицы и одного или нескольких векторов точек останова. Данные таблицы или векторы точек останова не используются совместно с другими таблицами подстановки.

При совместном использовании автономной таблицы подстановки все данные таблицы и точки останова используются вместе в нескольких n-D блоках таблицы подстановки. Сохранение этих данных в Simulink.LookupTable объект:

  1. Создайте объект в рабочей области или словаре данных. Например, в командной строке введите:

    myLUTObj = Simulink.LookupTable;

  2. Используйте свойства объекта для хранения значений таблицы и данных точек останова.

  3. Используйте свойства объекта для настройки уникального имени типа структуры в созданном коде. В диалоговом окне свойств в разделе «Определение типа структуры» задайте «Имя».

  4. В n-D блоках таблицы поиска задайте для спецификации данных значение Lookup table object.

  5. Справа от спецификации данных задайте Имя (Name) для имени Simulink.LookupTable объект.

Способы создания и настройки Simulink.LookupTable объекты, см. Simulink.LookupTable

Сохранить общие данные в Simulink.LookupTable и Simulink.Breakpoint Объекты

При использовании блоков Prelookup и Interpolation Using Prelookup для более точного управления алгоритмом поиска можно совместно использовать векторы точек останова и наборы данных таблицы. Например, можно совместно использовать вектор точки останова между двумя отдельными наборами данных таблицы. При таком разделении данных точек останова и данных таблицы можно совместно использовать отдельные части таблицы подстановки, а не всю таблицу подстановки.

Для сохранения данных точки останова и таблицы:

  1. Создать Simulink.LookupTable для каждого уникального набора данных таблицы. Создать Simulink.Breakpoint объект для каждого уникального вектора точек останова, включая векторы точек останова, которые не предполагается совместно использовать.

  2. Используйте свойства объектов для хранения значений таблицы и данных точек останова.

  3. Сконфигурируйте Simulink.LookupTable для ссылки на Simulink.Breakpoint объекты для данных точек останова. В Simulink.LookupTable объекты, задайте для параметра «Спецификация» значение Reference. Укажите имена Simulink.Breakpoint объекты.

  4. В блоках интерполяции с использованием Prelookup задайте для параметра «Спецификация» значение Lookup table object. Задать имя для имени Simulink.LookupTable объект.

    В блоках Prelookup установите для параметра «Спецификация» значение Breakpoint object. Задать имя для имени Simulink.Breakpoint объект.

Пример модели fxpdemo_lookup_shared_param содержит два блока Prelookup и два блока интерполяции с использованием Prelookup. Настройте блоки таким образом, чтобы каждая комбинация блока Prelookup и блока Interpolation Using Prelookup представляла собой уникальную таблицу поиска. Разделите вектор точки останова между двумя таблицами подстановки. В этом случае каждая таблица подстановки имеет уникальные данные таблицы, но общие данные точек останова.

  1. Откройте пример модели.

  2. В диалоговом окне «Блок Prelookup» установите для параметра «Спецификация» значение Breakpoint object. Задать для имени значение sharedBkpts.

  3. Нажмите кнопку рядом со значением параметра «Имя». Выберите «Создать переменную».

  4. В диалоговом окне «Создание новых данных» задайте для параметра «Значение» значение Simulink.Breakpoint и нажмите кнопку «Создать».

    A Simulink.Breakpoint появляется в базовой рабочей области.

  5. В диалоговом окне свойств для sharedBkpts, укажите значение в качестве вектора, например, [1 2 3 4 5 6 7 8 9 10]. Нажмите кнопку ОК.

  6. В диалоговом окне «Блок Prelookup» нажмите кнопку «ОК».

  7. В диалоговом окне «Prelookup1 блока» задайте для параметра «Спецификация» значение Breakpoint object. Задать для имени значение sharedBkpts.

  8. В диалоговом окне «Интерполяция с использованием блока предварительного включения» задайте для параметра «Спецификация» значение Lookup table object. Задать для имени значение dataForFirstTable.

  9. Нажмите кнопку рядом со значением параметра «Имя». Выберите «Создать переменную».

  10. В диалоговом окне «Создание новых данных» задайте для параметра «Значение» значение Simulink.LookupTable и нажмите кнопку «Создать».

    A Simulink.LookupTable появляется в базовой рабочей области.

  11. В диалоговом окне свойств для dataForFirstTable, укажите значение в качестве вектора, например, [10 9 8 7 6 5 4 3 2 1].

  12. Задать для спецификации значение Reference.

  13. В таблице в разделе Спецификация (Specification) задайте для параметра Имя (Name) значение sharedBkpts и нажмите кнопку ОК.

  14. В диалоговом окне «Интерполяция с использованием блока Prelookup» нажмите «ОК».

  15. Настройка блока интерполяции с использованием Prelookup1 для использования Simulink.LookupTable объект с именем dataForSecondTable. В диалоговом окне свойств объекта задайте значение в качестве вектора, например: [0 0.5 1 1.5 2 2.5 3 3.5 4 4.5]. Сконфигурируйте объект для ссылки на sharedBkpts для данных точки останова.

Модель теперь представляет две уникальные таблицы подстановки:

  • Комбинация sharedBkpts и dataForFirstTable.

  • Комбинация sharedBkpts и dataForSecondTable.

Эти таблицы поиска используют одни и те же данные точек останова через sharedBkpts.

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