Блок Switch в библиотеке Simscape™ Foundation реализует переключатель, управляемый внешним физическим сигналом. Блок использует if-else
оператор. Если внешний физический сигнал в порте управления больше порога, то переключатель закрывается, в противном случае переключатель открыт.
Этот пример реализует переключатель с гистерезисом, примененным к пороговому уровню переключения. Гистерезис действует, чтобы предотвратить быстрое ложное переключение, когда сигнал управления шумит.
Переключатель имеет два различных режима работы, показанных на схеме. Если внешний физический сигнал в порте управления больше верхнего порога, переключатель закрывается. Если сигнал ниже нижнего порога, переключатель открыт.
Следующий компонент реализует логику в схеме с помощью графика mode.
component delayed_switch % Switch with Hysteresis inputs u = { 0.0, '1' }; end nodes p = foundation.electrical.electrical; % + n = foundation.electrical.electrical; % -:right end parameters R_closed = { 0.01, 'Ohm' }; % Closed resistance R_closed G_open = { 1e-8, '1/Ohm' }; % Open conductance G_open T_closed = { 0.5, '1' }; % Upper threshold T_open = { 0, '1' }; % Lower threshold InitMode = switching.open; % Initial Mode end variables i = { 0, 'A' }; % Current v = { 0, 'V' }; % Voltage end branches i : p.i -> n.i; end % Validate parameter values equations assert( T_closed >= T_open, 'Upper threshold must be higher than Lower threshold' ); end modecharts(ExternalAccess = observe) m1 = modechart modes mode CLOSED equations v == p.v - n.v; v == i*R_closed; end end mode OPEN equations v == p.v - n.v; v == i/G_open; end end end transitions CLOSED -> OPEN : u < T_open; OPEN -> CLOSED : u > T_closed; end initial OPEN : InitMode <= 0; end end end end
График режимов m1
задает два режима, CLOSED
и OPEN
. Каждый режим имеет equations
раздел, в котором перечислены все применимые уравнения. The transitions
раздел определяет переходы между рабочими режимами на основе предикатных условий:
Переключатель переходит от CLOSED
на OPEN
когда сигнал управления падает ниже нижнего порога, T_open
.
Переключатель переходит от OPEN
на CLOSED
когда сигнал управления поднимается выше верхнего порога, T_closed
.
The initial
раздел задает начальный режим работы на основе предикатного условия:
Если предикат true (то есть Initial Mode значение параметров меньше или равно 0), то OPEN
режим активен в начале симуляции.
Если предикат не равен true, то CLOSED
mode (первый режим, перечисленный в modes
section) активен в начале симуляции.
Примечание
Параметр Initial Mode использует перечисление:
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
Чтобы компонент работал, как описано, этот перечисление должно быть в отдельном switching.m
файл. Файл может быть расположен либо на MATLAB® путь или пакет, импортированный в компонент. В целом перечисления очень полезны в графики режима, потому что они позволяют вам задать дискретный набор допустимых значений параметров. Для получения дополнительной информации см. «Перечисления».
Чтобы проверить правильность поведения компонента, разверните его в Simscape Component блоке. Создайте простую экспериментальную модель, как показано, со всеми блоками, используя значения параметров по умолчанию.
Симулируйте модель со значениями по умолчанию.
Следующий Initial Mode значения параметров Switch is open
. Это перечисленное значение вычисляется как 0, что делает предикат в initial
раздел true. Поэтому в начале симуляции переключатель открыт, и через R1 резистора не течёт ток. Когда значение сигналов управления достигает 0,5 (Upper threshold значения параметров), переключатель закрывается, и ток через ветвь, основанный на других значениях параметров, 1A. Когда сигнал управления падает ниже 0 (Lower threshold значения параметров), переключатель открывается.
Теперь измените значение параметров Initial Mode на Switch is closed
и моделируйте модель. Перечисленное значение оценивается как 1, предикатное условие в initial
раздел больше не является true, и поэтому первый режим, перечисленный в modes
раздел активен. В начале симуляции переключатель закрывается, и он остается закрытым, пока сигнал управления не упадет ниже 0.
initial
| modecharts
| modes
| transitions