В этом примере показано, как использовать аннотации и перечисления размещения блоков для улучшения удобства использования пользовательского блока.
Следующий исходный код для DCMotorWithTabs компонент включает блоки объявлений для узлов и пользовательских параметров, а также логику управления и аннотации. Исходный код в этом примере не включает разделы кода, которые не влияют на отображение диалогового окна блока, такие как другие объявления, промежуточные соединения, ветви и уравнения.
component DCMotorWithTabs
% DC Motor
% This block represents the electrical and torque characteristics of a
% DC motor.
%
% When a positive current flows from the electrical + to - ports, a
% positive torque acts from the mechanical C to R ports. Motor torque
% direction can be changed by altering the sign of the back-emf
% constant.
nodes
p = foundation.electrical.electrical; % +:top
n = foundation.electrical.electrical; % -:bottom
R = foundation.mechanical.rotational.rotational; % R:top
C = foundation.mechanical.rotational.rotational; % C:bottom
end
parameters
Ra = {3.9, 'Ohm'}; % Armature resistance
La = {12e-6, 'H'}; % Armature inductance
Kv = {0.072e-3, 'V/rpm'}; % Back-emf constant
J = {0.01, 'g*cm^2'}; % Rotor inertia
lam = {0, 'N*m/(rad/s)'}; % Rotor damping
speed0 = {0, 'rpm'}; % Initial rotor speed
i_noload = {0, 'A'}; % No-load current
V_i_noload = {1.5, 'V'}; % DC supply voltage when measuring no-load current
end
% Rotor damping control parameter
parameters
r_damp = damping.direct; % Rotor damping parameterization
end
% Conditional parameter visibility for Rotor damping parameterization
if r_damp == damping.direct
annotations
[i_noload,V_i_noload]: ExternalAccess=none;
end
else
annotations
[lam]: ExternalAccess=none;
end
end
annotations
UILayout = [UIGroup("Electrical Torque",Ra,La,Kv,r_damp,i_noload,V_i_noload)
UIGroup("Mechanical",J,lam,speed0)]
end
% Declarations with (ExternalAccess=none), branches, intermediates, equations
end
The UILayout аннотация задает две группы, Electrical Torque и Mechanical, каждый со списком параметров. Когда вы генерируете блок из DCMotorWithTabs компонент, каждый UIGroup становится вкладкой в диалоговом окне блока, титульная строка служит заголовком вкладки, и эти параметры появляются на этой вкладке в перечисленном порядке.
В сложение, DCMotorWithTabs компонент предоставляет два метода определения демпфирования ротора:
Непосредственно, используя параметр Rotor damping
Путем определения текущих значений без нагрузки вместо этого, используя два других параметров: No-load current и DC supply voltage when measuring no-load current
The if оператор в источнике компонента задает логику управления для условной видимости параметра, в зависимости от выбранного значения параметра управления, r_damp (<reservedrangesplaceholder1>). Параметр control использует перечисление, которое расположено в отдельном файле, damping.m:
classdef damping < int32 enumeration direct (0) derived (1) end methods(Static) function map = displayText() map = containers.Map; map('direct') = 'By damping value'; map('derived') = 'By no-load current'; end end end
Этот файл перечисления может быть расположен или в той же папке, что и файл компонента, или в MATLAB® путь. Для получения дополнительной информации см. раздел «Задание отображаемых строк для представителей перечисления».
В получившемся блоке диалоговом окне параметр Rotor damping parameterization имеет раскрывающийся список значений:
By damping value
By no-load current
By damping value является значением по умолчанию.
Когда вы генерируете блок из DCMotorWithTabs компонент, диалоговое окно блока имеет две вкладки:


Если вы устанавливаете параметр Rotor damping parameterization равным By no-load currentна вкладке Electrical Torque появляются два дополнительных параметра, а параметр Rotor damping на вкладке Mechanical скрыт.


Обратите внимание, что на вкладке Electrical Torque параметры No-load current и DC supply voltage when measuring no-load current появляются ниже параметра Rotor damping parameterization, даже если они были объявлены ранее, в отдельном блоке объявления. Если бы компонент не использовал аннотацию размещения блока, вы могли бы добиться того же эффекта, изменив порядок объявления параметра, но это бы сместилось от читаемости кода.