Настройка имени и внешнего вида блока

Отображение блоков по умолчанию

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

В следующем примере показан файл компонента с именем spring.ssc, и результирующие библиотечные блоки и диалоговое окно.

component spring
  nodes
    r = foundation.mechanical.rotational.rotational;
    c = foundation.mechanical.rotational.rotational;
  end
  parameters
    k = { 10, 'N*m/rad' };
  end
  variables
    theta = { 0, 'rad' };
    t = { 0, 'N*m' };
    w = { 0, 'rad/s' };
  end
  branches
    t : r.t -> c.t;
  end
  equations
    assert(k>0)
    w == r.w - c.w;
    t == k * theta;
    w == theta.der;
  end
end

Если вы кликните Source code ссылку, spring.ssc откроется файл в MATLAB® Окно редактора.

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

Настройка имени блока

Чтобы предоставить более описательное имя для блока, чем имя файла компонента, поместите его в отдельную строку с комментариями чуть ниже component декларация. Начнем строку с комментариями с % символ. Все содержимое этой линии, следуя % символ, интерпретируется как имя блока и отображается точно так же в значке блока и в верхней части диалогового окна блока.

Для примера, если у вас есть следующий файл компонента:

component spring
%Rotational Spring
...
end

это результирующие значок блока и диалоговое окно:

Опишите назначение блока

В предыдущем разделе описывается, как строка с комментариями сразу после component объявление интерпретируется как имя блока. Любые дополнительные комментарии ниже этой линии интерпретируются как описание блока. Вы можете иметь несколько линии с комментариями к описанию. Каждая линия должна содержать не более 80 символов и начинаться с % символ. Все содержимое комментариев к описанию появится в диалоговом окне блока и в браузере библиотек.

Для примера, если у вас есть следующий файл компонента:

component spring
%Rotational Spring
% This block implements a simple rotational spring.
...
end

это получившееся диалоговое окно блока:

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

% end of one paragraph
% 
% beginning of the next paragraph

Задайте значимые имена для параметров блоков и переменных

Вы можете задать имя параметров блоков, способ его отображения в диалоговом окне блока, как комментарий сразу после объявления параметра. Он может располагаться на той же линии или на отдельной линии. Комментарий должен начинаться со % символ.

Для примера, если у вас есть следующий файл компонента:

component spring
%Rotational Spring
% This block implements a simple rotational spring.
...
 parameters
    k = { 10, 'N*m/rad' }; % Spring rate
 end
...
end

это получившееся диалоговое окно блока:

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

Для примера, если у вас есть следующий файл компонента:

component spring
%Rotational Spring
% This block implements a simple rotational spring.
...
  variables
    theta = { value = { 0 , 'rad' }, priority = priority.high }; % Deformation
    t = { 0, 'N*m' };   % Torque
    w = { 0, 'rad/s' }; % Angular velocity
  end
...
end

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

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

По умолчанию пользовательский блок, сгенерированный из компонента, имеет все параметры компонента с ExternalAccess=modify в порядке объявления на одной вкладке, названной Parameters. Если есть переменные с ExternalAccess=modifyдиалоговое окно блока также содержит отдельную вкладку Variables. Точно так же в Property Inspector параметры и переменные перечислены в порядке объявления в двух отдельных узлах дерева, Parameters и Variables.

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

UILayout аннотация позволяет вам задать заголовочные группы параметров компонента, порядок этих групп и порядок параметров в каждой группе. При развертывании компонента в качестве пользовательского блока Simscape эти группы переводятся на диалоговые вкладки (и в узлы дерева Property Inspector).

Синтаксис аннотации размещения блоков:

  annotations
    UILayout = [UIGroup("Title 1",p1,p2)
                UIGroup("Title 2",p3)]
  end

Применяются следующие правила:

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

  • UILayout аннотация должна содержать непустой массив UIGroup конструкции. Порядок групп определяет порядок расположения диалоговых вкладок.

  • Каждый UIGroup конструкция должна включать строку заголовка и непустого списка , разделенного запятыми параметров компонента. Титульная строка служит заголовком вкладки диалогового окна, и перечисленные параметры появляются на этой вкладке в порядке списка.

  • Параметры компонента с ExternalAccess=modify не отображается ни в одной из групп в конце первой вкладки в порядке объявления.

  • Параметр не может принадлежать более чем одной группе. Включение одного и того же параметра в несколько групп приводит к ошибке.

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

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

  • Создайте несколько вкладок в диалоговом окне блока. Для этого задайте несколько групп параметров. Каждая группа отображается на отдельной вкладке.

  • Измените порядок параметров в диалоговом окне блока по сравнению с порядком объявления. Для этого задайте одну группу параметров, названную "Parameters", и перечислите параметры компонента в желаемом порядке.

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

Настройка имен и местоположений портов Блока

Блочные порты, как сохраняющие, так и Физический сигнал, основаны на узлах, входах и выходах, определенных в файле компонента. Метка порта по умолчанию соответствует имени узла, входа или выхода, как указано в блоке объявления. Расположение по умолчанию всех портов находится в левой части значка блока. Порты расположены равноудаленно вдоль стороны блока.

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

  • Используйте отдельные элементы управления для меток портов и местоположений. Это рекомендуемый способ, поскольку он обеспечивает большую гибкость. Задайте метки портов с помощью комментариев, непосредственно следующих за узлом, входным или выходным объявлением, аналогично указанию значимых имен для параметров и переменных. Определите сторону порта отдельно, используя annotations раздел в файле компонента. Дополнительные сведения см. в разделах Настройка меток портов на значке блока и Управление расположениями портов с помощью аннотаций.

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

Настройка меток портов на значке блока

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

  nodes
    p = foundation.electrical.electrical; % +
    n = foundation.electrical.electrical; % -  
  end

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

  inputs
     PS; %
  end

Управление расположением портов с помощью аннотаций

Используйте annotations раздел в файле компонента для определения местоположения портов. Для примера:

  nodes
    H = foundation.thermal.thermal;
    p = foundation.electrical.electrical; % +
    n = foundation.electrical.electrical; % -
  end
  annotations
    H : Side = top;
    p : Side = left;
    n : Side = right;
  end

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

  • Можно использовать Side аннотации для узлов, входов и выходов.

  • Атрибуты представителей должны быть однозначно определены. Поэтому вы не можете использовать тот же идентификатор представителя в левой части Side аннотации более одного раза.

    nodes
        p = foundation.electrical.electrical; 
        n = foundation.electrical.electrical; 
    end
    annotations
         [p, n] : Side = left;
         n : Side = right;   % error: multiple definitions for 'Side' of port 'n'
    end
    

    Если вы задаете другие места для одного и того же порта с помощью как аннотаций, так и комментариев, расположение в annotations раздел имеет приоритет.

    outputs
      o = {0, 'V'}; %o:right
    end
    annotations
       o : Side = top;  % annotation takes precedence, so port will be located on the top
    end
    
  • Можно использовать один и тот же идентификатор представителя несколько раз, чтобы объявить различные атрибуты аннотации.

    nodes
        n1 = foundation.electrical.electrical;
        n2 = foundation.electrical.electrical;
        n3 = foundation.electrical.electrical;
    end
    annotations
        [n1, n2] : ExternalAccess = none;
        [n2, n3] : Side = right;
    end
    
  • Точно так же можно объявить различные атрибуты аннотации для того же идентификатора представителя в одном операторе.

    nodes
        n1 = foundation.electrical.electrical;
        n2 = foundation.electrical.electrical;
        n3 = foundation.electrical.electrical;
    end
    annotations
        [n1, n2] : ExternalAccess = none, Side = top;
        n3 : Side = right;
    end
    
  • Вы не можете условно переключать стороны порта, то есть включать Side аннотации в ветвях условного оператора.

    parameters
        thermal_effects = false; % Model thermal effects?
    end
    nodes (ExternalAccess=none)
       H = foundation.thermal.thermal; 
    end
    if thermal_effects 
      % Expose thermal port
        annotations
           H : ExternalAccess = modify;
           H : Side = bottom; % error: cannot have 'Side' annotations inside conditional sections
        end
    end
    

    Чтобы разместить условно видимый порт на определенной стороне блока (для примера, на нижней), используйте следующий синтаксис:

    parameters
        thermal_effects = false; % Model thermal effects?
    end
    nodes (ExternalAccess=none)
       H = foundation.thermal.thermal; 
    end
    annotations
       H : Side = bottom; 
    end
    if thermal_effects 
      % Expose thermal port
        annotations
           H : ExternalAccess = modify;
        end
    end
    

Использование комментариев для управления местоположениями портов

Примечание

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

Можно также использовать комментарий, который сразу же следует за узлом, входным или выходным объявлением, чтобы задать и метку порта, и местоположение. Комментарий может быть в одной линии или в отдельной линии. Комментарий должен начинаться со % символ и быть форматированным label:location, где label - строка, соответствующая имени входного порта в блоке, и location является одной из следующих строк: left, right, top, bottom. Вы можете найти все порты либо на одной стороне блока, либо на двух противоположных сторонах, например, слева и справа, либо сверху и снизу. Если требуется сохранить местоположение порта по умолчанию (на левой оси), это местоположение можно исключить.

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

    r = foundation.mechanical.rotational.rotational; % :top

Если вы задаете пустую строку комментария после объявления узла, ввода или вывода, соответствующий порт не будет помечен и будет расположен на левой стороне значка блока.

Ниже приведены примеры объявлений узлов и полученных значков блоков.

СинтаксисЗначок блока

nodes
   r = foundation.mechanical.rotational.rotational; 
   c = foundation.mechanical.rotational.rotational; 
end 

nodes
   r = foundation.mechanical.rotational.rotational; % rod
   c = foundation.mechanical.rotational.rotational; % case
end 

nodes
   r = foundation.mechanical.rotational.rotational; 
   c = foundation.mechanical.rotational.rotational; % c:right
end 

nodes
   r = foundation.mechanical.rotational.rotational; % rod
   c = foundation.mechanical.rotational.rotational; % case:right
end 

nodes
   r = foundation.mechanical.rotational.rotational; % rod
   c = foundation.mechanical.rotational.rotational; % :right
end 

nodes
   r = foundation.mechanical.rotational.rotational; % 
   c = foundation.mechanical.rotational.rotational; % case:right
end 

Настройка значка блока

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

Существует два способа задать значок пользовательского блока:

  • Явное использование annotations раздел в файле компонента. Это рекомендуемый способ, поскольку он обеспечивает большую гибкость. Можно хранить файлы изображений в отдельной папке и задавать относительные пути для значков блоков. Можно также задать условные пользовательские значки для различных вариантов блока. Для получения дополнительной информации см. раздел «Использование аннотаций».

  • Неявно использование соглашений об именовании файлов. Этот метод удобен, если вы отправляете полные пакеты библиотеки клиентам. Дополнительные сведения см. в разделе Использование соглашений об именовании файлов.

Использование аннотаций

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

  annotations
    Icon = 'custom_spring.jpg';
  end

Имя файла может включать относительный путь из папки, содержащей файл компонента, в папку, содержащую файл изображения, например:

  annotations
    Icon = '../../block_icons/custom_spring.jpg';
  end

The 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

Использование соглашений об именовании файлов

Вместо явного задания значка пользовательского блока с помощью annotations раздел можно сделать неявно, поместив файл изображения с таким же именем, как и компонент, в папку, содержащую файл компонента.

Этот метод удобен, если вы отправляете полные пакеты библиотеки клиентам. Для примера, если подпакет, содержащий файл компонента spring.ssc также содержит файл с именем spring.jpgзатем этот файл изображений автоматически используется для значка, представляющего этот блок в пользовательской библиотеке.

Неявные правила использования пользовательских значков блоков:

  1. Если на annotations раздел явным образом не задает пользовательское изображение значка, или если это изображение не найдено, программа просматривает в папке, содержащей файл компонента, файл изображения с таким же именем, как и компонент.

  2. Если существует несколько файлов изображений с одним и тем же именем, форматы имеют приоритет в порядке, указанном в Поддерживаемые Форматы Файлов. Для примера, если подпакет содержит оба spring.jpg и spring.bmp, spring.jpg - изображение, которое появится в пользовательской библиотеке.

Поддерживаемые форматы файлов

Для пользовательских значков блоков поддерживаются следующие форматы файлов изображений:

  • svg

  • jpg

  • bmp

  • png

Внимание

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

Тип изображения должен быть изображением RGB (truecolor), сохраненным как m-by- n-by-3 массив данных. Для получения дополнительной информации см. RGB (Truecolor) Изображения.

Задание свойств масштабирования и поворота значка пользовательского блока

Когда вы используете файл изображения для представления компонента в библиотеке пользовательских блоков, следующий синтаксис файла компонента позволяет вам задать свойства масштабирования и поворота файла изображения:

component name
% [ CustomName [ : scale [ : rotation ] ] ] 
...

где

name

Имя компонента

CustomName

Настраиваемое имя блока, заданное как описано в разделе «Настройка имени блока». Удаляются начальные и конечные белые пространства.

scale

Скалярное число, например 2.0, который задает требуемое масштабирование значка блока. Когда файл изображения используется в качестве значка блока, по умолчанию его самый короткий размер составляет 40 пикселей с сохраненным соотношением сторон изображения. Для примера, если ваше пользовательское изображение сохранено в .jpg файл 80x120 пикселей, тогда размер значка блока по умолчанию будет 40x60 пикселей. Если вы задаете шкалу 0.5, тогда размер значка блока составит 20x30 пикселей.

Вы не можете задать выражения MATLAB для шкалы, просто числа.

rotation

Определяет, поворачивается ли значок блока вместе с блоком:

  • rotates означает, что значок вращается при повороте блока. Это поведение по умолчанию.

  • fixed означает, что порты вращаются при повороте блока, но значок всегда остается в ориентации по умолчанию.

Для примера, следующий синтаксис

component spring
% Rotational Spring : 0.5 : fixed

задает, что размер изображения пружины масштабируется до половины размера по умолчанию и всегда остается в ориентации по умолчанию, независимо от поворота блока.

См. также

Похожие темы