При создании пользовательского блока из файла 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, то этот файл изображения автоматически используется для значка, представляющего этот блок в пользовательской библиотеке.
Неявные правила использования значков пользовательских блоков:
Если annotations в разделе явно не указано пользовательское изображение значка, или, если это изображение не найдено, программа ищет в папке, содержащей файл компонента, файл изображения с тем же именем, что и компонент.
При наличии нескольких файлов изображений с одинаковым именем форматы имеют приоритет в порядке, указанном в разделе Поддерживаемые форматы файлов. Например, если подпакет содержит оба spring.jpg и spring.bmp, spring.jpg - это изображение, которое будет отображаться в пользовательской библиотеке.
Для пользовательских значков блоков поддерживаются следующие форматы файлов изображений:
svg
jpg
bmp
png
Внимание
Используя svg формат вместе со стилями линий домена может привести к неожиданным результатам, поскольку стили и цвета линий домена могут распространяться на части значка пользовательского блока. Дополнительные сведения о включении и выключении стилей линий для конкретного домена см. в разделе Стили линий для конкретного домена.
Тип изображения должен быть RGB-изображением (truecolor), сохраненным как mоколо-nмассив данных -by-3. Дополнительные сведения см. в разделе Изображения RGB (Truecolor).
При использовании файла изображения для представления компонента в библиотеке пользовательских блоков следующий синтаксис в файле компонента позволяет задать свойства масштабирования и поворота файла изображения:
component name % [ CustomName [ : scale [ : rotation ] ] ] ...
где
| Имя компонента |
| Имя настраиваемого блока, указанное в разделе Настройка имени блока. Начальные и конечные пробелы удаляются. |
| Скалярное число, например, Нельзя задать выражения MATLAB для масштаба, только числа. |
| Указывает, вращается ли значок блока вместе с блоком:
|
Например, следующий синтаксис
component spring % Rotational Spring : 0.5 : fixed
указывает, что размер изображения пружины масштабируется до половины размера по умолчанию и всегда остается в ориентации по умолчанию, независимо от поворота блока.