Пример примера - Basic Custom Block Library

Начало

Этот пример объясняет, как создать свою собственную библиотеку пользовательских блоков на основе файлов компонентов. Он использует библиотеку примеров моделей конденсаторов. Библиотека использует электрическую область 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

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

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

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

В этой библиотеке примеров существуют два дополнительных компонента, которые могут использоваться для моделирования суперконденсаторов. Эти компоненты являются эволюциями Идеального Конденсатора. Рекомендуется пошагово создавать модели компонента, добавляя и тестируя дополнительные функции по мере их добавления.

Идеальный суперконденсатор

Суперконденсаторы, как следует из их имени, являются конденсаторами с очень высоким значением емкости. Зависимость между напряжением и зарядом не является постоянной, в отличие от идеального конденсатора. Предположим, что лист данных производителя дает график емкости как функцию напряжения, и что емкость увеличивается приблизительно линейно с напряжением от 1 farad при нуле В до 1,5 farad, когда напряжение составляет 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.

Суперконденсатор с резистивными потерями

Этот блок реализован файлом компонента 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, используя законы тока и напряжения Кирхгофа. Суммирование токов в узле конденсатор + приводит к первому уравнению Simscape:

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

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

v == vc + i*R;

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

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

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

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

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