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