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