В следующем примере показан последовательный RLC- компонента, который реализует один резистор, индуктор или конденсатор или последовательную комбинацию этих элементов. Для реализации логики управления компонент использует условные разделы.
import foundation.electrical.electrical; % electrical domain class definition import foundation.electrical.elements.*; % electrical elements component SeriesRLC nodes p = electrical; % +:left n = electrical; % -:right end nodes(Access=protected, ExternalAccess=none) rl = electrical; % internal node between r and l lc = electrical; % internal node between l and c end parameters R = {0, 'Ohm'}; L = {0, 'H'}; C = {inf, 'F'}; end if R > 0 components r = resistor(R=R); end connections connect(p, r.p); connect(r.n, rl); end else connections connect(p, rl); % short circuit p--rl end end if L > 0 components l = inductor(l=L); end connections connect(rl, l.p); connect(l.n, lc); end else connections connect(rl, lc); % short circuit rl--lc end end if value(C, 'F') < inf components c = capacitor(c=C); end connections connect(lc, c.p); connect(c.n, n); end else connections connect(lc, n); % short circuit lc--n end end end
Параметры R, L и C инициализируются таким образом 0
, 0
, и inf
, соответственно. Если пользователь блока задает ненулевое сопротивление, ненулевое сопротивление или конечную емкость, соответствующая ветвь активируется. Активная ветвь объявляет соответствующий компонент представителя и соединяет его последовательно. Каждый из else
предложения коротко замыкают соответствующие узлы.
Внутренние узлы rl
и lc
, которые служат для соединения представителя компонентов, не должны быть доступны извне компонента. Установите их Access
атрибут к protected
или private
. Их ExternalAccess
атрибут none
, так что эти узлы не видны на значке блока.