Блок Switch в библиотеке Simscape™ Foundation реализует переключатель, которым управляет внешний физический сигнал. Блок использует if-else
оператор. Если внешний физический сигнал в порту управления больше порога, то переключатель закрывается, в противном случае переключатель открыт.
Эти реализации в качестве примера переключатель с гистерезисом применились к переключающемуся пороговому уровню. Гистерезис действует, чтобы предотвратить быстрое побочное переключение, когда управляющий сигнал является шумным.
Переключатель имеет два отличных рабочих режима, показанные в схеме. Если внешний физический сигнал в порту управления больше верхнего порога, то переключатель закрывается. Если сигнал ниже, чем более низкий порог, переключатель открыт.
Следующий компонент реализует логику в схеме при помощи графика режима.
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
разделите, который перечисляет все применимые уравнения. transitions
раздел задает переходы между рабочими режимами, на основе условий предиката:
Переходы переключателя от CLOSED
к OPEN
когда управляющий сигнал падает ниже более низкого порога, T_open
.
Переходы переключателя от OPEN
к CLOSED
когда управляющий сигнал повышается выше верхнего порога, T_closed
.
initial
раздел задает начальный рабочий режим, на основе условия предиката:
Если предикат верен (то есть, значение параметров Initial Mode меньше чем или равно 0), то OPEN
режим активен в начале симуляции.
Если предикат не верен, то CLOSED
режим (первый режим перечислен в modes
разделите), активно в начале симуляции.
Параметр 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
верный раздел. Поэтому в начале симуляции переключатель открыт и никакие электрические токи через резистор R1. Когда значение управляющего сигнала достигает 0.5 (значение параметров Upper threshold), завершения переключателя и ток посредством ветви, на основе других значений параметров, 1 А. Когда управляющий сигнал падает ниже 0 (значение параметров Lower threshold), переключатель открывается.
Теперь измените значение параметров Initial Mode в Switch is closed
и симулируйте модель. Перечисляемое значение оценивает к 1, условие предиката в initial
раздел более не верен, и поэтому первый режим, перечисленный в modes
раздел активен. В начале симуляции закрывается переключатель, и это остается закрытым, пока управляющий сигнал не падает ниже 0.