В этом примере показано, как можно использовать аннотацию блочного расположения и перечисления, чтобы улучшить удобство пользования пользовательского блока.
Следующий исходный код для 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
UILayout аннотация задает две группы, Electrical Torque и Mechanical, каждый со списком параметров. Когда вы генерируете блок из DCMotorWithTabs компонент, каждый UIGroup становится вкладкой в диалоговом окне блока, строка заголовка служит заголовком вкладки, и эти параметры появляются на той вкладке в перечисленном порядке.
Кроме того, DCMotorWithTabs компонент предоставляет два метода, чтобы задать затухание ротора:
Непосредственно, с помощью параметра Rotor damping
Путем определения текущих значений без загрузок вместо этого, использования двух других параметров: No-load current и DC supply voltage when measuring no-load current
if оператор в источнике компонента задает управляющую логику для условной видимости параметра, в зависимости от выбранного значения параметра управления, r_damp (Rotor damping parameterization). Параметр управления использует перечисление, которое расположено в отдельном файле, 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, даже при том, что они были объявлены ранее в отдельном блоке объявлений. Если компонент не использовал аннотацию блочного расположения, вы, возможно, достигли того же эффекта путем изменения порядка объявления параметра, но это умалит удобочитаемость кода.