Объявление переменных компонента

Сквозные и межкомпонентные переменные

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

В следующем примере инициализируется переменная Through t (крутящий момент) при 0 Н * м:

variables
    t = {0,'N*m'};
end

Примечание

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

Переменные внутреннего компонента

Можно также объявить внутреннюю переменную компонента как значение с модулем. Можно использовать такие внутренние переменные во всем файле компонента, например, в equations раздел или в декларациях промежуточных терминов. Переменные компонента также используются в процессе инициализации модели, как описано в Переменном приоритете для Инициализации Модели.

Следующий пример объявляет и инициализирует три переменные:

variables
    f = {0,'N'};   % Force
    v = {0,'m/s'}; % Velocity
    x = {0,'m'};   % Spring deformation
end

Сила и скорость являются компонентными переменными Through и Across, позже будут соединены с доменными переменными Through и Across с помощью branches раздел. Деформация пружины является внутренней переменной компонента, которая используется для инициализации модели.

Можно объявить переменные внутреннего компонента целого числа или вещественные как переменные события путем установки Event=true атрибут. Для получения дополнительной информации см. раздел Переменные события.

Переменный приоритет для инициализации модели

Когда вы генерируете пользовательский Simscape™ блок из файла компонента, на вкладке Variables этого блока будут перечислены все общие переменные, указанные в базовом файле компонента, а также приоритет инициализации, целевое начальное значение и модуль каждой переменной. Пользователь блока может изменить приоритет переменной и цель, до симуляции, чтобы повлиять на инициализацию модели. Для получения дополнительной информации см. Раздел «Инициализация переменной».

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

Примечание

Для переменных с модулями измерения температуры существует дополнительный фактор о том, применять ли линейное или аффинное преобразование, когда пользователь блока меняет модуль на вкладке Variables диалогового окна блока. Используйте Conversion атрибут так же, как и для параметров блоков. Для получения дополнительной информации смотрите Модули параметра.

В большинстве случаев достаточно объявить переменную так же, как значение с модулем, опуская ее приоритет, что эквивалентно priority = priority.none. Пользователь блока может задать приоритет переменной, при необходимости, на вкладке Variables диалогового окна блока перед симуляцией.

Однако в некоторых случаях установка переменной определенного приоритета по умолчанию необходима для правильной операции компонента. Чтобы задать высокий или низкий приоритет по умолчанию для переменной компонента, объявите переменную как массив полей. Например, следующее объявление инициализирует переменную x (деформация пружины) в виде 0 мм, с высоким приоритетом:

variables
    x = {value = {0,'m'},priority = priority.high}; % Spring deformation
end

В этом случае переменная Spring deformation появится на вкладке Variables диалогового окна блока с приоритетом по умолчанию High и целевое значение по умолчанию и единичные 0 mm, но пользователь блока может изменить приоритет переменной и цель как обычно.

Если вы хотите, чтобы переменная всегда имела высокий приоритет инициализации, не позволяя пользователю блока изменять ее, объявите переменную частной:

variables(Access=private)
  x = {value = {0,'m'},priority = priority.high};
end

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

Если вы хотите, чтобы переменная всегда имела определенный приоритет инициализации, такой как High, но позвольте пользователю блока задать целевое значение, объявить переменную частной и связать ее с параметром инициализации:

parameters
  p = {0,'m'}; % Initial deformation
end
variables(Access=private)
  x = {value = p,priority = priority.high}; 
end

В этом случае значение параметра Initial deformation, заданное пользователем блока, присваивается в качестве начальной цели переменной x, с высоким приоритетом инициализации. В зависимости от результатов решения, эта цель может быть или не может быть удовлетворена, когда решатель вычисляет начальные условия для симуляции. Для получения дополнительной информации см. «Расчет начальных условий».

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

Переменные Области значений инициализации

При объявлении переменной можно задать минимальное и максимально допустимое значения для её инициализации, например:

variables
  x = {value={0,'deg'},priority=priority.high,imin={0,'deg'},imax={360,'deg'}};
end

Когда существует несколько решений инициализации, этот синтаксис позволяет вам направить решатель к предпочтительному решению. Для получения дополнительной информации см. Раздел «Инициализация переменной уровня блоков» Если заданная область не может быть удовлетворен во время инициализации, решатель выдает ошибку.

Решатель пытается удовлетворить область значений инициализации для переменной независимо от того, является ли его приоритет инициализации высоким, низким или нет. Рекомендуется, чтобы вы использовали priority атрибут скупо. Значение приоритета по умолчанию, priority.none (что эквивалентно исключению priority атрибут полностью), подходит в большинстве случаев. Пользователь блока может изменять значение переменного приоритета, при необходимости, на вкладке Variables диалогового окна блока перед симуляцией. Однако пользователь блока не имеет контроля над областью значений инициализации переменной. Только автор блока может задать приемлемые минимальное и максимальное значения для инициализации переменной в файле компонента как для непрерывных, так и для переменных события.

Инициализация по умолчанию область значений (-inf,inf). Поэтому вам не нужно задавать оба значения, чтобы задать область значений, этого достаточно, чтобы задать только imin или imax. Для примера используйте этот синтаксис, чтобы ограничить температуру положительными значениями:

variables
  T = {value={293.15,'K'},imin={0,'K'}};
end

Когда вы задаете imin или imax, эти значения определяют открытую область значений.

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

Номинальное значение и модуль для переменной

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

Каждая модель имеет базовую таблицу номинальных пар «значение-единица». В целом все переменные в модели масштабируются на основе номинального значения, соответствующего их физической единице измерения. Можно переопределить это масштабирование для переменного индивидуума в файле компонента, задав номинальное значение и модуль как атрибут объявления переменной.

variables
    x = {value = {value,'unit'},nominal = {value,'unit'}}; 
end

Когда вы генерируете пользовательский блок Simscape из файла компонента, номинальное значение и модуль образуют nominal атрибут объявления преобразуется в значения по умолчанию для параметров блоков x_nominal и x_nominal_unit (где x - имя переменной).

Для примера это объявление переменной:

variables
    i = {value = {0,'A'},nominal = {1,'mA'}}; % Current
end

задает следующие значения по умолчанию для параметров блоков:

  • i_nominal_value, со значением '1'

  • i_nominal_unit, со значением 'mA'

и выглядит так в Property Inspector.

Примечание

Рекомендуется, чтобы вы использовали nominal атрибут скупо. Номинальные значения по умолчанию, которые поступают из таблицы единиц измерения модели, подходят в большинстве случаев. Пользователь блока может также изменить номинальные значения и модули для отдельных блоков с помощью Property Inspector или set_param и get_param функций, при необходимости. Для получения дополнительной информации смотрите Изменение номинальных значений для основной переменной.

Похожие примеры

Подробнее о