В этом примере показано, как использовать аннотации и перечисления размещения блоков для улучшения удобства использования пользовательского блока.
Следующий исходный код для 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, даже если они были объявлены ранее, в отдельном блоке объявления. Если бы компонент не использовал аннотацию размещения блока, вы могли бы добиться того же эффекта, изменив порядок объявления параметра, но это бы сместилось от читаемости кода.