В этом примере показано, как можно использовать аннотацию компоновки блока и перечисления для улучшения удобства использования пользовательского блока.
Следующий исходный код для 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 компонент обеспечивает два способа задания демпфирования ротора:
Непосредственно с использованием параметра демпфирования ротора
Путем задания значений тока холостого хода, используя два других параметра: ток холостого хода и напряжение питания постоянного тока при измерении тока холостого хода
if оператор в источнике компонента определяет логику управления для видимости условного параметра в зависимости от выбранного значения параметра управления, r_damp(Параметризация демпфирования ротора). Управляющий параметр использует перечисление, расположенное в отдельном файле. 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 ®. Дополнительные сведения см. в разделе Задание отображаемых строк для элементов перечисления.
В диалоговом окне результирующего блока параметр параметризации демпфирования ротора имеет выпадающий список значений:
By damping value
By no-load current
By damping value является значением по умолчанию.
При создании блока из DCMotorWithTabs , диалоговое окно блока имеет две вкладки:


Если для параметра параметризации демпфирования ротора задано значение By no-load currentна вкладке Электрический крутящий момент (Electrical Torque) появятся два дополнительных параметра, а параметр демпфирования ротора на вкладке Механический (Mechanical) будет скрыт.


Обратите внимание, что на вкладке Электрический крутящий момент (Electrical Torque) параметры Ток холостого хода (No-load current) и Напряжение постоянного тока при измерении тока холостого хода (DC) отображаются под параметром параметризации демпфирования ротора, даже если они были объявлены ранее, в отдельном блоке объявления. Если бы компонент не использовал аннотацию компоновки блока, можно было бы добиться того же эффекта, изменив порядок объявления параметра, но это уменьшило бы читаемость кода.