exponenta event banner

Пример - библиотека основных пользовательских блоков

Начало

В данном примере описывается, как создать собственную библиотеку пользовательских блоков на основе файлов компонентов. В ней используется примерная библиотека моделей конденсаторов. Библиотека использует электрический домен Simscape™ Foundation и определяет три простых компонента. Дополнительные сведения, включая добавление нескольких уровней иерархии, добавление новых доменов и настройку внешнего вида библиотеки, см. в разделе История успеха - электрохимическая библиотека.

Библиотека примеров создается на вашем пути так, что она легко исполнима. Однако рекомендуется скопировать исходные файлы в новый каталог, для которого у вас есть разрешение на запись, и добавить этот каталог в путь MATLAB ®. Это позволит внести изменения и перестроить библиотеку под себя. Исходные файлы для библиотеки примеров находятся в следующем каталоге пакета :

matlabroot/toolbox/physmod/simscape/simscapedemos/+Capacitors

где matlabroot - корневой каталог MATLAB на компьютере, возвращаемый путем ввода

matlabroot

в окне команд MATLAB.

После копирования файлов измените имя каталога +Capacitors на другое имя, например +MyCapacitors, чтобы ваша копия библиотеки создавалась с уникальным именем.

Построение пользовательской библиотеки

Для построения библиотеки введите

ssc_build MyCapacitors

в окне команд MATLAB. Если здание из +MyCapacitors каталог пакета, вы можете опустить аргумент и тип просто

ssc_build

По завершении построения откройте созданную библиотеку, введя

MyCapacitors_lib

Дополнительные сведения о процессе построения библиотеки см. в разделе Создание пользовательских библиотек блоков.

Добавление блока

Чтобы добавить блок, запишите соответствующий файл компонента и поместите его в каталог пакета. Например, блок идеального конденсатора в MyCapacitors_lib производится библиотекой IdealCapacitor.ssc файл. Откройте этот файл в редакторе MATLAB и проверьте его содержимое.

component IdealCapacitor
% Ideal Capacitor
% Models an ideal (lossless) capacitor. The output current I is related
% to the input voltage V by I = C*dV/dt where C is the capacitance.

% Copyright 2008-2017 The MathWorks, Inc.

    nodes
        p = foundation.electrical.electrical; % +:top
        n = foundation.electrical.electrical; % -:bottom
    end

    parameters
        C = { 1, 'F' }; % Capacitance
    end

    variables
        i = { 0, 'A'   }; % Current
        v = {value = { 0, 'V' }, priority = priority.high}; % Voltage drop
    end

    branches
        i : p.i -> n.i; % Through variable i from node p to node n
    end

    equations
        assert(C > 0)
        v == p.v-n.v; % Across variable v from p to n
        i == C*v.der; % Capacitor equation
    end

end

Сначала рассмотрим элементы файла компонента, влияющие на внешний вид блока. Дважды щелкните по блоку Ideal Capacitor в окне MyCapacitors_lib для открытия диалогового окна и сравнения значка блока и диалогового окна с содержимым IdealCapacitor.ssc файл. Название блока Ideal Capacitor взято из комментария на строке 2. Комментарии к строкам 3 и 4 затем используются для заполнения описания блока в диалоговом окне. Порты блока определяются секцией узлов. Выражения комментариев в конце каждой строки определяют метку порта и местоположение. Аналогично в разделе параметров комментарии используются для определения имен параметров в диалоговом окне блока. Дополнительные сведения см. в разделе Настройка имени и внешнего вида блока.

Также обратите внимание, что в разделе уравнений имеется утверждение, гарантирующее, что значение емкости всегда больше нуля. Это является хорошей практикой для обеспечения того, чтобы компонент не использовался вне области действия. В блоках библиотеки Simscape Foundation при необходимости выполняются такие проверки.

Добавление узла к компоненту

В данном примере библиотеки есть два дополнительных компонента, которые можно использовать для моделирования ultracapacitor. Эти компоненты являются эволюциями идеального конденсатора. Рекомендуется постепенно создавать модели компонентов, добавляя и тестируя дополнительные элементы по мере их добавления.

Идеальный Ultracapacitor

Ультраконденсаторы, как предполагает их название, являются конденсаторами с очень высоким значением ёмкости. Соотношение между напряжением и зарядом не является постоянным, в отличие от идеального конденсатора. Предположим, что в спецификации производителя представлен график емкости как функции напряжения, и что емкость увеличивается приблизительно линейно с напряжением от 1 фарада при нулевых вольтах до 1,5 фарада при напряжении 2,5 вольта. Если напряжение емкости обозначено v, то емкость может быть аппроксимирована как:

C = 1 + 0 ,2· v

Для конденсатора ток i и напряжение v связаны стандартным уравнением

i = Cdvdt

и, следовательно,

i = (C0 + Cv· v) dvdt

где C0 = 1 и Cv = 0,2. Это уравнение реализуется следующей строкой в разделе уравнений файла Simscape IdealUltraCapacitor.ssc:

i == (C0 + Cv*v)*v.der;

Для того, чтобы программное обеспечение Simscape интерпретировало это уравнение, переменные (v и i) и параметры (C0 и Cv) должен быть определен в разделе объявления. Дополнительные сведения см. в разделах Объявление переменных компонентов и Объявление параметров компонентов.

Добавление компонента с внутренней переменной

Реализация некоторых уравнений компонентов требует использования внутренних переменных. Пример - при реализации ультраконденсатора с резистивными потерями. Существуют два резистивных члена, эффективное последовательное сопротивление R и сопротивление Rd саморазрядки. Из-за топологии невозможно непосредственно выразить уравнения конденсатора в терминах сквозных и поперечных переменных i и v.

Ultracapacitor с резистивными потерями

Этот блок реализуется файлом компонента LossyUltraCapacitor.ssc. Откройте этот файл в редакторе MATLAB и проверьте его содержимое.

component LossyUltraCapacitor
% Lossy Ultracapacitor
% Models an ultracapacitor with resistive losses. The capacitance C
% depends on the voltage V according to C = C0 + V*dC/dV. A
% self-discharge resistance is included in parallel with the capacitor,
% and an equivalent series resistance in series with the capacitor.

% Copyright 2008-2017 The MathWorks, Inc.

    nodes
        p = foundation.electrical.electrical; % +:top
        n = foundation.electrical.electrical; % -:bottom
    end

    parameters
        C0 = { 1, 'F' };    % Nominal capacitance C0 at V=0
        Cv = { 0.2, 'F/V'}; % Rate of change of C with voltage V
        R = {2, 'Ohm' };    % Effective series resistance
        Rd = {500, 'Ohm' }; % Self-discharge resistance
    end

    variables
        i = { 0, 'A'   }; % Current
        vc = {value = { 0, 'V' }, priority = priority.high}; % Capacitor voltage
    end

    branches
        i : p.i -> n.i; % Through variable i from node p to node n
    end

    equations
        assert(C0 > 0)
        assert(R > 0)
        assert(Rd > 0)
        let
            v = p.v-n.v; % Across variable v from p to n
        in
            i == (C0 + Cv*vc)*vc.der + vc/Rd; % Equation 1
            v == vc + i*R;                    % Equation 2
        end
    end

end

Дополнительная переменная используется для обозначения напряжения на конденсаторе, vc. Затем уравнения могут быть выражены в терминах v, i и vc с использованием законов Кирхгофа о токе и напряжении. Суммирование токов на конденсаторе + узле даёт первое уравнение Симскейпа:

i == (C0 + Cv*vc)*vc.der + vc/Rd;

Суммирование напряжений даёт второе уравнение Симскейпа:

v == vc + i*R;

В качестве проверки количество уравнений, необходимых для компонента, используемого в одной соединённой сети, задается суммой числа портов плюс количество внутренних переменных минус один. Это не обязательно верно для всех компонентов (например, одно исключение - масса), но в целом это хорошее правило большого пальца. Здесь это дает 2 + 1 - 1 = 2.

В файле Simscape начальное условие (начальное напряжение в этом примере) применяется к переменной vc с priority = priority.high, потому что это дифференциальная переменная. В этом случае vc легко идентифицируется как дифференциальная переменная, поскольку она имеет der к нему применен оператор (дифференциатор).

Настройка значка блока

Блоки конденсаторов в библиотеке примеров MyCapacitors_lib с ними связаны значки.

При построении библиотеки, если в каталоге имеется файл изображения с тем же именем, что и файл компонента Simscape, используется для определения значка блока. Например, блок идеального конденсатора, определяемый IdealCapacitor.ssc использует IdealCapacitor.jpg для определения значка блока. Если файл изображения не включен, то вместо значка блок отображает свое имя. Дополнительные сведения см. в разделе Настройка значка блока.