exponenta event banner

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

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

При объявлении переменных Через (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 and Across), которые позже будут соединены с переменными сквозной и поперечной (Through and Across) областей с помощью branches раздел. Деформация пружины является внутренней переменной компонента, используемой для инициализации модели.

Можно объявить внутренние переменные компонента типа integer или real в качестве переменных события, установив значение Event=true атрибут. Дополнительные сведения см. в разделе Переменные событий.

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

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

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

Примечание

Для переменных с единицами измерения температуры дополнительно рассматривается необходимость применения линейного или аффинного преобразования при изменении пользователем блока единицы измерения на вкладке «Переменные» диалогового окна блока. Используйте Conversion таким же образом, как и для параметров блока. Дополнительные сведения см. в разделе Единицы измерения параметров.

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

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

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

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

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

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

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

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

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

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

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

Диапазон инициализации переменной

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

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

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

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

Диапазон инициализации по умолчанию: (-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'

и выглядит так в Инспекторе свойств.

Примечание

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

Связанные примеры

Подробнее