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

Раздел 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 имеет логический тип.

Раздел 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, заменяет значение, заданное для того участника в разделе объявления. Для полного примера компонента с помощью этого подхода смотрите Варианты Компонента — Тепловой Резистор.

Похожие темы