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

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

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

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

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

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

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

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

Если для параметров блоков значения задано простое числовое выражение, можно создать переменную для этого выражения в Model Data Editor (на вкладке Modeling нажмите Model Data Editor). Щелкните в правой части камеры, которая соответствует значению, затем выберите Create variable. В диалоговом окне «Создание новых данных» задайте имя и расположение новой переменной, затем нажмите 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. Объекты параметра позволяют вам задавать физические единицы измерения и пользовательскую документацию, а также другие характеристики.

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

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

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

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

Общий метод

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

  • Интерактивно - Например, с помощью Model Data Editor или Model Explorer, предшествуйте выражению со знаком equals, =. Рисунок показывает, как задать выражение 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. На вкладке Parameters Model Data Editor активируйте кнопку 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 диалогового окна Свойства модели выберите 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.

    A 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.

    A 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.

Похожие темы