exponenta event banner

Определение условной видимости элементов компонента

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

При определении вариантов компонентов с помощью условных объявлений некоторые параметры, переменные или порты могут использоваться в одном варианте блока, но не в других. Например, имеется компонент, моделирующий гидравлические трубопроводы с круговым и некруглым поперечным сечением. Для круговой трубы необходимо указать ее внутренний диаметр. Для некруглой трубы необходимо указать ее гидравлический диаметр и площадь поперечного сечения трубы. Теперь вы можете использовать annotations для управления видимостью этих параметров в диалоговом окне блока:

component MyPipe
  parameters
    circular  = true;             % Circular pipe?
    d_in      = { 0.01, 'm' };    % Pipe internal diameter
    area      = { 1e-4, 'm^2' };  % Noncircular pipe cross-sectional area
    D_h       = { 1.12e-2, 'm' }; % Noncircular pipe hydraulic diameter
  end
  if circular 
  % Hide inapplicable parameters
    annotations
       [area, D_h] : ExternalAccess=none;
    end
    equations
       % first set of equations, for circular pipe 
    end
  else
  % Hide inapplicable parameter
    annotations
       d_in : ExternalAccess=none;
    end
    equations
       % second set of equations, for noncircular pipe 
    end
  end
  [...] % other parameters, variables, branches, equations
end

Аналогично другим типам условных объявлений, предикат условной аннотации должен быть параметрическим выражением, которое вычисляется как true или false. Однако существует дополнительное ограничение на то, что все параметры, используемые в предикате условной аннотации, должны быть либо логическими, либо перечисленными. В этом примере circular параметр имеет тип logical.

annotations позволяет управлять видимостью следующих элементов компонента:

  • Параметры

  • Переменные

  • Узлы

  • Исходные данные

  • Продукция

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

component MyPipe
  parameters
    thermal_variant = false; % Model thermal effects?
  end
  if thermal_variant 
  % Use icon with additional thermal port
    annotations
       Icon = 'pipe_thermal.jpg';
    end
  else
  % Use regular icon, with two fluid ports
    annotations
       Icon = 'pipe.jpg';
    end
  end
  [...] % Other parameters, variables, nodes, branches, equations
end

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

Правила и ограничения

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

Атрибуты элемента должны быть уникально определены, что означает, что один и тот же элемент не может быть объявлен более одного раза с различными значениями одного и того же атрибута. Единственным исключением из этого правила является использование ExternalAccess атрибут в annotations раздел. Можно объявить элемент компонента с определенным значением ExternalAccess, а затем укажите другое ExternalAccess значение атрибута в annotations раздел, например:

component MyPipe
  parameters
    circular  = true;             % Circular pipe?
  end
  parameters(ExternalAccess=none)
    d_in      = { 0.01, 'm' };    % Pipe internal diameter
  [...]
  end
  if circular 
  % Expose pipe diameter
    annotations
       d_in : ExternalAccess=modify;
    end
  [...] 

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

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