exponenta event banner

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

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

При создании пользовательского блока из файла 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

Если щелкнуть ссылку Исходный код, 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

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

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

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

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

итоговая вкладка «Переменные» диалогового окна блока выглядит следующим образом:

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

По умолчанию пользовательский блок, созданный из компонента, имеет все параметры компонента с ExternalAccess=modify в порядке объявления на одной вкладке с названием «Параметры». При наличии переменных с ExternalAccess=modifyдиалоговое окно блока также содержит отдельную вкладку «Переменные». Аналогично, в инспекторе свойств параметры и переменные перечисляются в порядке объявления в двух отдельных узлах дерева, «Параметры» и «Переменные».

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

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

Синтаксис аннотации компоновки блока:

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

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

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

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

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

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

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

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

Аннотация компоновки блока используется для:

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

  • Измените порядок параметров в диалоговом окне блока по сравнению с порядком объявления. Для этого определите одну группу параметров под названием "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

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около-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

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

См. также

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