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

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

Используя переменную, чтобы установить значение параметров блоков также позволяет:

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

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

Для основной информации об устанавливании значений параметров блоков смотрите Установленные Значения Параметров блоков.

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

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

Если значение параметров блоков установлено к простому числовому выражению, можно создать переменную для того выражения в Model Data Editor (на вкладке Modeling, нажмите Model Data Editor). Щелкните в правой стороне ячейки, которая соответствует значению, затем выберите Create variable. В диалоговом окне Create New Data, набор название и местоположение для новой переменной, затем нажимают Create. Ячейка теперь отображает новую переменную.

Можно также создать переменную, чтобы представлять константу, которая используется в нескольких выражениях. Модель 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. Используйте столбец Value, чтобы заменить литеральный номер 14.6 с myParam. Выполните замену для обоих параметров.

  6. В поле Filter contents введите myParam.

  7. При редактировании значения одного из параметров кликните по кнопке действий и выберите Create.

  8. В диалоговом окне Create New Data, набор Value к 14.6 и нажмите Create.

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

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

Задайте постоянную систему

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

Установите значение переменных при помощи математического выражения

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

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

  • Модель Explicitly алгебраические зависимости между данными о параметре. Когда вы изменяете значения независимых данных, вы не должны помнить настраивать значения зависимых данных.

Общий метод

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

  • В интерактивном режиме — Например, с 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 kg/m2

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

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

    sldemo_metro

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

  3. Чтобы препятствовать тому, чтобы коллбэк перезаписал изменения, которые вы вносите в переменные для этого примера, удаляют код коллбэка.

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

  4. В модели, на вкладке Modeling, нажимают Model Data Editor.

  5. На вкладке Model Data Editor Parameters активируйте кнопку Change scope.

    Блоки, которые используют переменные, находятся в подсистемах, таким образом, необходимо сконфигурировать Model Data Editor, чтобы показать данные в подсистемах.

  6. Нажмите кнопку Show/refresh additional information.

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

  7. В поле Filter contents введите J.

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

    Simulink преобразует J к Simulink.Parameter объект.

  9. В столбце Value, установленном значение объекта параметра к =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).

Управляйте осциллографом значений параметров

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

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

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

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

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

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

Для получения информации о подсистемах смотрите Subsystem. Для получения информации о маскировании смотрите Основы маскирования.

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

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

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

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

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

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

    K = 27;

  3. В браузере Рабочей области щелкните правой кнопкой по переменной и выберите Save As.

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

  4. В диалоговом окне, набор Save as type к MATLAB Script. Установите File name на loadvar и нажмите Save.

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

  5. В модели, на вкладке Modeling, выбирают Model Settings> Model Properties.

  6. Во вкладке Callbacks диалогового окна Model Properties выберите PreLoadFcn как коллбэк, который вы хотите задать. В панели Model pre-load function введите loadvar и нажмите OK.

  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.

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

Когда вы используете переменные, чтобы установить значения параметров блоков, вы храните переменные в словаре данных или рабочей области. Можно использовать командную строку, Model Explorer, и Model Data Editor, чтобы создать, переместить, скопировать, и отредактировать переменные. Можно также определить, где переменная используется в модели, перечислите все переменные, которые использует модель, и перечислите все переменные, которые не использует модель. Для получения дополнительной информации смотрите, Создают, Редактирование, и Управляют Переменными Рабочей области.

Упакуйте общие данные точек по оси Х и данные таблицы для интерполяционных таблиц

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

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

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

Когда вы совместно используете автономную интерполяционную таблицу, вы используете всю таблицу и устанавливаете точки останова данные вместе в нескольких блоках n-D Lookup Table. Хранить эти данные в Simulink.LookupTable объект:

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

    myLUTObj = Simulink.LookupTable;

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

  3. Используйте свойства объекта сконфигурировать уникальное имя для типа структуры в сгенерированном коде. В диалоговом окне свойства, под Struct Type definition, задают Name.

  4. В блоках n-D Lookup Table, набор Data specification к Lookup table object.

  5. Справа от Data specification, набор 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 объекты, набор Specification к Reference. Задайте имена Simulink.Breakpoint объекты.

  4. В блоках Interpolation Using Prelookup, набор Specification к Lookup table object. Установите Name на имя Simulink.LookupTable объект.

    В блоках Prelookup, набор Specification к Breakpoint object. Установите Name на имя Simulink.Breakpoint объект.

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

  1. Откройте модель в качестве примера.

  2. В диалоговом окне блока Prelookup, набор Specification к Breakpoint object. Установите Name на sharedBkpts.

  3. Нажмите кнопку рядом со значением параметра Name. Выберите Create Variable.

  4. В диалоговом окне Create New Data, набор Value к Simulink.Breakpoint и нажмите Create.

    Simulink.Breakpoint объект появляется в базовом рабочем пространстве.

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

  6. В диалоговом окне блока Prelookup нажмите OK.

  7. В диалоговом окне блока Prelookup1, набор Specification к Breakpoint object. Установите Name на sharedBkpts.

  8. В диалоговом окне блока Interpolation Using Prelookup, набор Specification к Lookup table object. Установите Name на dataForFirstTable.

  9. Нажмите кнопку рядом со значением параметра Name. Выберите Create Variable.

  10. В диалоговом окне Create New Data, набор Value к Simulink.LookupTable и нажмите Create.

    Simulink.LookupTable объект появляется в базовом рабочем пространстве.

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

  12. Установите Specification на Reference.

  13. В таблице под Specification, набор Name к sharedBkpts и нажмите OK.

  14. В диалоговом окне блока Interpolation Using Prelookup нажмите OK.

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

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

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

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

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

Похожие темы