Когда вы генерируете пользовательский блок из файла компонента 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 файл открывается в окне Editor 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 диалогового окна блока выглядит так:

Блокируйте порты, и сохранение и Физический сигнал, основаны на узлах, входных параметрах и выходных параметрах, заданных в файле компонента. Метка порта по умолчанию соответствует имени узла, входа или выхода, как задано в блоке объявлений. Местоположение по умолчанию всех портов находится на левой стороне значка блока. Порты распространены equidistantly вдоль стороны блока.
Существует два способа управлять меткой порта и местоположением в значке блока:
Используйте отдельные средства управления в метках порта и местоположениях. Это - рекомендуемый путь, потому что он обеспечивает больше гибкости. Задайте метки порта при помощи комментариев сразу после узла, введите или выведите объявление, похожее на определение понятных имен для параметров и переменных. Задайте сторону порта отдельно, при помощи 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 аннотации для узлов, входных параметров и выходных параметров.
Атрибуты члена должны быть исключительно заданы. Поэтому вы не можете использовать то же ID пользователя на левой стороне 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
Можно использовать то же ID пользователя многократно, чтобы объявить различные атрибуты аннотации.
nodes
n1 = foundation.electrical.electrical;
n2 = foundation.electrical.electrical;
n3 = foundation.electrical.electrical;
end
annotations
[n1, n2] : ExternalAccess = none;
[n2, n3] : Side = right;
end
Точно так же можно объявить различные атрибуты аннотации для того же ID пользователя в одном операторе.
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: 'Side' annotations cannot be defined inside a conditional section.
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';
endannotations раздел также позволяет вам задать условные пользовательские значки. Это особенно полезно, если количество портов изменяется для различных вариантов. Например:
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 (истинный цвет) изображение, сохраненное как m- n- 3 массива данных. Для получения дополнительной информации смотрите RGB (Истинный цвет) Изображения (MATLAB).
Когда вы используете файл изображения, чтобы представлять компонент в библиотеке пользовательского блока, следующий синтаксис в файле компонента позволяет вам задать свойства масштабирования и вращения файла изображения:
component name % [ CustomName [ : scale [ : rotation ] ] ] ...
где
| Имя компонента |
| Индивидуально настраиваемое имя блока в виде описанного в Настраивает Имя блока. Удалены начальные и конечные пробелы. |
| Скалярный номер, например, Вы не можете задать выражения MATLAB для шкалы, только числа. |
| Задает, вращается ли значок блока с блоком:
|
Например, следующий синтаксис
component spring % Rotational Spring : 0.5 : fixed
указывает, что пружинный размер изображения масштабируется к половине его размера по умолчанию и всегда остается в его ориентации по умолчанию, независимо от вращения блока.