Язык Simscape™ поддерживает перечисления MATLAB® в:
Параметры компонента
Переменные события и when пункты
Предикаты уравнения
Условные предикаты объявления
Аргументы функции (такие как метод интерполяции в tablelookup)
Графики режима
Вы задаете перечисления с помощью класса перечисления MATLAB. Для получения дополнительной информации смотрите Перечисления.
Класс перечисления должен вывести из int32 введите, например:
classdef offon < int32
enumeration
off (0)
on (1)
end
endСохраните определение класса перечисления в.m файле с тем же именем как класс. Для получения дополнительной информации см. Правила и Ограничения.
Можно затем использовать это перечисление в параметре компонента:
parameters fl_c = offon.off; % Fluid compressibility end
В получившемся диалоговом окне блока параметр Fluid compressibility будет иметь выпадающий список значений, off и on, с off как значение по умолчанию.
При использовании перечислений в параметрах компонента можно задать удобные для пользователя строки, которые будут отображены в диалоговом окне блока вместо идентификаторов члена:
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
Можно затем использовать это перечисление в параметре компонента, например:
parameters r_damp = damping.direct; % Rotor damping parameterization end
В получившемся диалоговом окне блока параметр Rotor damping parameterization имеет выпадающий список значений:
By damping value
By no-load current
By damping value значение по умолчанию.

Для подробного примера использования перечисления со строками отображения в параметре компонента смотрите Использование Усовершенствованные Методы, чтобы Настроить Отображение Блока.
Если класс перечисления выводит из встроенного числового класса, подкласс наследовал упорядоченное расположение и арифметические операции, что можно обратиться к перечислимым именам. Классы перечисления, используемые на языке Simscape, должны вывести из int32 ввод. Поэтому, когда используется в математических выражениях, члены перечисления преобразуют в целые числа согласно заданному значению. Например, Переключатель с Гистерезисным компонентом использует это перечисление:
classdef switching < int32
enumeration
open (0)
closed (1)
end
methods(Static)
function map = displayText()
map = containers.Map;
map('open') = 'Switch is open';
map('closed') = 'Switch is closed';
end
end
endПеречисление используется в объявлении параметра Initial Mode:
parameters
...
InitMode = switching.open; % Initial Mode
end
Затем initial раздел графика режима использует значение параметров Initial Mode в выражении предиката:
initial OPEN : InitMode <= 0; end
Когда значением параметров Initial Mode является Switch is open, соответствующий член перечисления, open (0), оценивает к 0, и предикат верен. Поэтому в начале симуляции переключатель открыт.
С другой стороны, когда значением параметров является Switch is closed, соответствующий член перечисления, closed (1), оценивает к 1, и предикат является ложным. Для получения дополнительной информации смотрите Переключатель с Гистерезисом.
when ПунктыПредыдущие разделы, обсужденные с помощью перечислений, чтобы объявить параметры компонента с дискретным набором приемлемых значений. Однако можно также использовать перечисления, чтобы объявить переменные события, потому что у них также есть дискретный набор значений.
Переменные события являются кусочной константой, то есть, они изменяют значения только в моменты события (при помощи when пункт), и сохраняют их значения постоянными между событиями.
Например:
variables (Event = true)
x = myEnum.a;
end
events
when edge(time > {1.0, 's'})
x = myEnum.b;
end
end
Переключатель с Гистерезисным компонентом показывает пример использования перечислимого параметра в предикате графика режима.
Другая хорошая практика использует перечисленные параметры в условных предикатах объявления к вариантам блока define. Например, у вас может быть два варианта трубопровода, тот, который составляет гидравлические сопротивления только и второе что также сжимаемость жидкости моделей:
component MyPipe
parameters
fl_c = offon.off; % Fluid compressibility
end
[...] % other parameters, variables, branches
if fl_c == offon.off
equations
% first set of equations, resistive properties only
end
else
variables
% additional variable declarations, needed to account for fluid compressibility
end
equations
% second set of equations, including fluid compressibility
end
end
end
В этом примере параметры блоков Fluid compressibility использует offon перечисление:
classdef offon < int32
enumeration
off (0)
on (1)
end
endВ получившемся диалоговом окне блока параметр Fluid compressibility имеет выпадающий список значений, off и on, с off как значение по умолчанию. Если параметр устанавливается на off, первая система уравнений активируется и модели блока только гидравлические сопротивления трубопровода. Если пользователь блока изменяет значение параметра, то else ветвь активируется, и скомпилированная модель включает дополнительные переменные и уравнения, которые рассчитывают сжимаемость жидкости. Для получения дополнительной информации об определении вариантов блока смотрите Задающие Варианты Компонента.
Аналогично, можно использовать перечисленные параметры и переменные события в предикатах уравнения:
parameters
p = myEnum.a;
end
variables
x = 0;
y = 0;
end
equations
if p == myEnum.a
y == x * 100;
elseif p == myEnum.b
y == x * 0.01;
else % (p == myEnum.c)
y == x;
end
end
Другой способ использовать перечисления находится в аргументах функции. Например, tablelookup функция имеет два метода интерполяции, linear и smooth, и три метода экстраполяции, linearсамый близкий, и error.
Библиотека Foundation включает встроенные перечисления, interpolation.m и extrapolation.m:
classdef interpolation < int32
enumeration
linear (1)
smooth (2)
end
methods(Static)
function map = displayText()
map = containers.Map;
map('linear') = 'Linear';
map('smooth') = 'Smooth';
end
end
endclassdef extrapolation < int32
enumeration
linear (1)
nearest (2)
error (3)
end
methods(Static)
function map = displayText()
map = containers.Map;
map('linear') = 'Linear';
map('nearest') = 'Nearest';
map('error') = 'Error';
end
end
endЭти перечисления расположены в директории matlabroot\toolbox\physmod\simscape\library\m\+simscape\+enum.
Можно использовать эти перечисления, чтобы объявить параметры компонента, и затем использовать эти параметры в качестве аргументов функции:
parameters
interp = simscape.enum.interpolation.linear; % Interpolation method
extrap = simscape.enum.extrapolation.linear; % Extrapolation method
end
equations
o == tablelookup(xd, yd, x, interpolation = interp_method, extrapolation = extrap_method);
end
Вместо того, чтобы обеспечить полностью определенные имена, можно использовать import оператор, чтобы уменьшать объем ввода:
import simscape.enum.*
...
parameters
interp = interpolation.linear; % Interpolation method
extrap = extrapolation.linear; % Extrapolation method
end
equations
o == tablelookup(xd, yd, x, interpolation = interp, extrapolation = extrap);
end
Определениями перечисления является глобальная переменная. Вы задаете перечисление однажды, в отдельном файле, и можете затем использовать то же перечисление в нескольких компонентах.
Файл, содержащий определение класса перечисления, должен находиться на пути MATLAB или в директории пакета. Для получения дополнительной информации о директориях пакета, смотрите Организацию Ваших файлов Simscape.
Параметры, которые имеют перечисляемые значения, отмечены как Compile-time только в диалоговых окнах блока.
Подобно перечислениям MATLAB можно задать больше чем один идентификатор для того же целочисленного значения, например:
classdef myColor < int32
enumeration
red (0)
blue (1)
yellow (2)
green (0)
end
endПервый идентификатор в блоке перечисления с данным целочисленным значением является фактическим идентификатором, и последующие идентификаторы являются псевдонимами.
Примечание
Несмотря на то, что несколько идентификаторов с тем же целочисленным значением позволены, рекомендуется, чтобы вы использовали уникальные целочисленные значения в наборе перечисления языка Simscape для лучшей ясности.