Этот пример объясняет, как создать свою собственную библиотеку пользовательских блоков на основе файлов компонентов. Он использует библиотеку примеров моделей конденсаторов. Библиотека использует электрическую область 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, то емкость может быть аппроксимирована как:
Для конденсатора i тока и v напряжения связаны стандартным уравнением
и, следовательно,
где 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
для определения значка блока. Если файл изображения не включен, блок отображает его имя вместо значка. Для получения дополнительной информации см. раздел «Настройка значка блока».