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