Это тематическое исследование исследует более усовершенствованные темы создания пользовательских библиотек Simscape™. Это пользуется библиотекой в качестве примера для моделирования электрохимических систем. Библиотека вводит новую электрохимическую область и задает все основные компоненты, требуемые создавать электрохимические модели, включая электрохимическую ссылку, через и через датчики, источники и междоменный компонент. Пример иллюстрирует некоторые существенные функции моделирования Физических сетей, такие как выбор переменных Through и Across и как мощность преобразована между областями. Мы предлагаем, чтобы вы работали через предыдущий раздел, Тематическое исследование — Основная Библиотека Пользовательского блока, перед рассмотрением этого более усовершенствованного примера.
Библиотека в качестве примера приезжает созданная и в ваш путь так, чтобы это было с готовностью исполняемо. Однако рекомендуется, чтобы вы скопировали исходные файлы в новую директорию, для которой вы имеете разрешение записи и добавляете что директория в ваш путь MATLAB®. Это позволит вам вносить изменения и восстанавливать библиотеку для себя. Исходные файлы для библиотеки в качестве примера находятся в следующей директории пакета:
matlabroot/toolbox/physmod/simscape/simscapedemos/+ElectroChem
где matlabroot
корневой каталог MATLAB на вашей машине, как возвращено путем ввода
matlabroot
в окне Команды MATLAB.
После копирования файлов измените имя каталога +ElectroChem
к другому имени, например, +MyElectroChem
, так, чтобы ваша копия библиотеки создала с уникальным именем.
Чтобы создать библиотеку, ввести
ssc_build MyElectroChem
в Окне Команды MATLAB. При создании из +MyElectroChem
директория пакета, можно не использовать аргумент и ввести только
ssc_build
Когда сборка завершится, откройте сгенерированную библиотеку путем ввода
MyElectroChem_lib
Для получения дополнительной информации о процессе сборки библиотеки смотрите Библиотеки Пользовательского блока Создания.
Программное обеспечение Simscape идет с несколькими областями Основы, такими как поступательное механическое устройство, вращательное механическое устройство, электрическое, гидравлическое, и так далее. Где возможно, используйте эти предопределенные области. Например, при создании новых электрических компонентов, используйте Основу электрический доменный foundation.electrical.electrical
. Это гарантирует, что ваши компоненты могут быть соединены со стандартными блоками Simscape.
Как пример приложения, требующего сложения новой области, рассмотрите батарею, где базовые уравнения включают и электрические и химические процессы [1].
Электрохимическая батарея, управляющая активной нагрузкой R
Две полуячейки разделяются мембраной, которая предотвращает ионы, текущие между ячейками, и следовательно электроны текут из твердого ведущего анода к платиновому катоду. Две реакции полуячейки:
Текущие результаты в оксидируемом выводе и уменьшаемое железо, с полной реакцией, данной:
Химическая реакция может быть смоделирована с помощью сетевых концепций переменных Through и Across (для получения дополнительной информации смотрите Основные принципы Моделирования Физических сетей). Переменная Through представляет поток, и переменная Across представляет усилие. При выборе переменных Through и Across необходимо использовать единицы СИ, и продукт этих двух переменных обычно выбирается, чтобы иметь модули степени.
В электрохимических реакциях очевидным выбором для переменной Through является молярная скорость потока жидкости из ионов, измеренных в единицах СИ mol/s. Соответствующая переменная Across называется химическим потенциалом и должна иметь модули J/mol, чтобы гарантировать, что продукт переменных Through и Across имеет модули степени, J/s. Химическим потенциалом или свободной энергией Гибба на молекулярную массу дают:
где μ0 является стандартным химическим потенциалом состояния, R является совершенной газовой константой, T является температурой, и a является действием. В общем случае действие может быть функцией многих различных параметров, включая концентрацию, температуру и давление. Здесь это принято, что действие пропорционально молярной концентрации, заданной как количество молей раствора, разделенного на массу растворителя.
Чтобы видеть электрохимическое доменное определение, откройте файл Simscape +MyElectroChem/ElectroChem.ssc
.
domain ElectroChem % Electrochemical Domain % Define through and across variables for the electrochemical domain % Copyright 2008-2014 The MathWorks, Inc. variables % Chemical potential mu = { 1.0 'J/mol' }; end variables(Balancing = true) % Molar flow ndot = { 1.0 'mol/s' }; end end
Молярная основная размерность и модуль предопределены в модульном реестре Simscape. Если бы это не было, то вы, возможно, добавили его с:
pm_adddimension('mole','mol')
Это - хорошая практика, чтобы структурировать библиотеку путем добавления иерархии. Для этого можно подразделить директорию пакета на подкаталоги, каждое имя подкаталога начиная с +
символ. Если вы смотрите на +MyElectroChem
директория, вы будете видеть, что она имеет подкаталоги +Elements
, +Sensors
, и +Sources
. Откройте библиотеку путем ввода MyElectroChem_lib
, и вы будете видеть три соответствующих подбиблиотеки.
Физическая сеть должна иметь ссылочный блок, против которого измеряются переменные Across. Так, например, библиотека Foundation содержит блок Electrical Reference для электрической области, блок Mechanical Rotational Reference для вращательной механической области, и так далее. Электрохимический нулевой химический потенциал задан файлом компонента +MyElectroChem/+Elements/Reference.ssc
.
component Reference % Chemical Reference % Port A is a zero chemical potential reference port. % Copyright 2008-2016 The MathWorks, Inc. nodes A = ElectroChem.ElectroChem; % A:top end connections connect(A, *); end end
Компонент имеет один электрохимический порт, названный A, расположенным наверху значка блока.
Компонент использует связь с неявным ссылочным узлом:
connect(A, *);
Для получения дополнительной информации о связях компонента и неявном ссылочном синтаксисе узла, смотрите Связи с Неявным Ссылочным Узлом.
Идеал Через источник вводит постоянное значение для переменной Across независимо от значения переменной Through. В электрической области это соответствует Исходному блоку напряжения постоянного тока в библиотеке Foundation. В библиотеке в качестве примера, файл компонента +MyElectroChem/+Sources/ChemPotentialSource.ssc
реализует эквивалентный источник для химической области.
component ChemPotentialSource % Constant Potential Source % Provides a constant chemical potential between ports A and B. % Copyright 2008-2013 The MathWorks, Inc. nodes A = ElectroChem.ElectroChem; % A:top B = ElectroChem.ElectroChem; % B:bottom end parameters mu0 = {0, 'J/mol'}; % Chemical potential end variables(Access=private) ndot = { 0, 'mol/s' }; % Molar flow rate end branches ndot: A.ndot -> B.ndot; % Through variable ndot from node A to node B end equations let mu = A.mu - B.mu; % Across variable from A to B in mu == mu0; end end end
Двойным из идеала Через источник является идеал Через источник, который обеспечивает переменную Through к некоторому установленному значению независимо от значения переменной Across. В электрической области это соответствует Исходному блоку постоянного тока в библиотеке Foundation. В библиотеке в качестве примера не реализован этот источник.
Каждая область требует и Через и Через блок измерения. В библиотеке в качестве примера, файл компонента +MyElectroChem/+Sensors/SensorThrough.ssc
реализует молярный датчик скорости потока жидкости.
component SensorThrough % Molar Flow Sensor % Returns the value of the molar flow between the A and the B port % to the physical signal port PS. % Copyright 2008-2013 The MathWorks, Inc. nodes A = ElectroChem.ElectroChem; % A:top B = ElectroChem.ElectroChem; % B:bottom end outputs out = { 0, 'mol/s' }; % PS:top end variables(Access=private) ndot = { 0, 'mol/s' }; % Molar flow rate end branches ndot: A.ndot -> B.ndot; % Through variable ndot from node A to node B end equations let mu = A.mu - B.mu; % Across variable from A to B in mu == 0; % No potential drop out == ndot; % Equate value of molar flow to PS output end end end
Скорость потока жидкости представлена как Физический сигнал, который может затем в свою очередь быть передан Simulink через блок PS-Simulink Converter. branches
разделите и let
оператор в разделе define уравнения отношение между переменными Through и Across для датчика. В этом случае идеальный датчик потока имеет нулевое потенциальное отбрасывание, которое является mu
== 0, где mu
химический потенциал. Второе уравнение присваивает значение переменной Through к Physical Signal выход.
Файл компонента +MyElectroChem/+Sensors/SensorAcross.ssc
реализует химический потенциальный датчик.
component SensorAcross % Chemical Potential Sensor % Returns the value of the chemical potential across the A and B ports % to the physical signal port PS. % Copyright 2008-2013 The MathWorks, Inc. nodes A = ElectroChem.ElectroChem; % A:top B = ElectroChem.ElectroChem; % B:bottom end outputs out = { 0, 'J/mol' }; % PS:top end variables(Access=private) ndot = { 0, 'mol/s' }; % Molar flow rate end branches ndot: A.ndot -> B.ndot; % Through variable ndot from node A to node B end equations let mu = A.mu - B.mu; % Across variable from A to B in ndot == 0; % Draws no molar flow out == mu; % Equate value of chemical potential difference to PS output end end end
Химический потенциал представлен как Физический сигнал, который может затем в свою очередь быть передан Simulink через блок PS-Simulink Converter. branches
разделите и let
оператор в разделе define уравнения отношение между переменными Through и Across для датчика. В этом случае идеальный химический потенциальный датчик не чертит потока, который является ndot
== 0, где ndot
скорость потока жидкости. Второе уравнение присваивает значение переменной Across к Physical Signal выход.
Создав измерение и ссылочные блоки, следующий шаг должен создать блоки, которые задают поведенческие отношения между переменными Through и Across. В электрической области, например, такие компоненты являются резистором, конденсатором и индуктором.
Как пример основного электрохимического компонента, рассмотрите химическое сокращение или оксидирование иона, который может считаться электрохимическим эквивалентом нелинейного конденсатора. Уравнения определения в терминах переменных Through и Across ν и μ:
где n является количеством родинок иона, C0 является стандартной концентрацией 1 молекулярной массы/кг, и M является массой раствора.
Чтобы видеть реализацию этих уравнений, откройте файл +MyElectroChem/+Elements/ChemEnergyStore.ssc
.
component ChemEnergyStore % Chemical Energy Store :1 :fixed % Represents a solution of dissolved ions. The port A presents the % chemical potential defined by mu0 + log(n/(C0*M))*R*T where mu0 is the % standard state oxidizing potential, n is the number of moles of the ion, % C0 is the standard concentration of 1 mol/kg, M is the mass of solvent, % R is the universal gas constant, and T is the temperature. % Copyright 2008-2015 The MathWorks, Inc. nodes A = ElectroChem.ElectroChem; % A:top end parameters mu0 = {-7.42e+04, 'J/mol'}; % Standard state oxidizing potential m_solvent = {1, 'kg'}; % Mass of solvent T = {300, 'K'}; % Temperature end parameters (Access=private) R = {8.314472, '(J/K)/mol'}; % Universal gas constant C0 = {1, 'mol/kg'}; % Standard concentration n1 = {1e-10, 'mol'}; % Minimum number of moles end variables ndot = { 0, 'mol/s' }; % Molar flow rate n = {value = { 0.01, 'mol' }, priority = priority.high}; % Quantity of ions end branches ndot : A.ndot -> *; % Through variable ndot end equations n.der == ndot; if n > n1 A.mu == mu0 + log(n/(C0*m_solvent))*R*T; else A.mu == mu0 + (log(n1/(C0*m_solvent)) + n/n1 - 1)*R*T; end end end
Этот компонент вводит две функции языка Simscape, еще не использованные в блоках, на которые посмотрели до сих пор. Это:
Использование условного оператора в разделе уравнения. Это требуется, чтобы предотвращать взятие логарифма нуля. Следовательно, если молярная концентрация меньше заданного уровня n1
, затем операнд функции логарифма ограничивается. Без этой защиты решатель мог встревожить значение n
обнулять или меньше.
Определение частных параметров, которые могут использоваться в разделе уравнения. Здесь Универсальная Газовая константа (R
) и стандартная концентрация (C0
) заданы как частные параметры. Их значения могли одинаково хорошо использоваться непосредственно в уравнениях, но это будет уменьшать удобочитаемость определения. Точно так же нижний предел на молярной концентрации n1
также задан как частный параметр, но, возможно, одинаково хорошо был отсоединен пользователю.
Междоменные блоки позволяют обмен энергией между областями. Например, блок Rotational Electromechanical Converter в библиотеке Foundation преобразует между электрической и вращательной механической энергией. Чтобы связать два набора переменных Through и Across, два уравнения требуются. Первое прибывает из базового физического закона и второго от подведения итогов степеней от этих двух областей в конвертер, который должен составить нуль.
Как пример взаимодействующего через интерфейс компонента, рассмотрите электрохимическую полуячейку. Химическая молярная скорость потока жидкости и электрический ток связаны законом Фарадея, который требует что:
где ν является молярной скоростью потока жидкости, i является током, z является количеством электронов на ион, и F является Постоянная Фарадея. Второе уравнение прибывает из приравнивания электрических и химических степеней:
который может быть переписан как:
Это - Уравнение Нернста, записанное в терминах химической разности потенциалов, (μ2 – μ1). Эти химически-электрические уравнения конвертера реализованы файлом компонента +MyElectroChem/+Elements/Chem2Elec.ssc
.
component Chem2Elec % Chemical to Electrical Converter % Converts chemical energy into electrical energy (and vice-versa) % assuming no losses. The electrical current flow i is related to the % molar flow of electrons ndot by i = -ndot*z*F where F is the Faraday % constant and z is the number of exchanged electrons. % Copyright 2008-2017 The MathWorks, Inc. nodes p = foundation.electrical.electrical; % +:top n = foundation.electrical.electrical; % -:top A = ElectroChem.ElectroChem; % A:bottom B = ElectroChem.ElectroChem; % B:bottom end parameters z = {1, '1'}; % Number of exchanged electrons end parameters(Access=private) F = {9.6485309e4, 'C/mol'}; % Faraday constant end variables i = { 0, 'A' }; % Current ndot = { 0, 'mol/s' }; % Molar flow rate end branches i : p.i -> n.i; % Through variable i from node p to node n ndot: A.ndot -> B.ndot; % Through variable ndot from node A to node B end equations let k = 1/(z*F); v = p.v - n.v; % Across variable v from p to n mu = A.mu - B.mu; % Across variable mu from A to B in v == k*mu; % From equating power ndot == -k*i; % Balance electrons (Faraday's Law) end end end
Отметьте использование let-in-end
конструкция в уравнениях компонента. Средний срок k объявляется как
Это затем используется в обоих уравнениях в пункте выражения, который следует.
Этот компонент имеет четыре порта, но только два уравнения. Это вызвано тем, что компонент соединяет интерфейсом с двумя различными физическими сетями. Каждая из сетей имеет два порта и одно уравнение, таким образом удовлетворяя требованию для n –1 уравнение, где n является количеством портов. В случае междоменного компонента эти два уравнения связываются, таким образом, задавая взаимодействие между двумя физическими областями.
Постоянная Фарадея является скрытым параметром, потому что это - физическая константа, которые блокируют пользователей, не должен был бы изменяться. Поэтому это не появится в диалоговом окне блока, сгенерированном из файла компонента.
Библиотека может быть настроена с помощью lib.m
файлы. lib.m
файл, расположенный в директории пакета верхнего уровня, может использоваться, чтобы добавить аннотации. Имя модели библиотеки верхнего уровня создается автоматически во время процесса сборки на основе имени пакета верхнего уровня как
, но можно добавить более описательное имя в библиотеку верхнего уровня как аннотация. Например, открытый package
_lib+MyElectroChem/lib.m
в редакторе MATLAB. Следующая линия аннотирует библиотеку верхнего уровня своим именем:
libInfo.Annotation = sprintf('Example Electrochemical Library')
В электрохимическом примере библиотеки, lib.m
файлы также помещаются в каждую директорию подпакета, чтобы настроить имя и внешний вид соответствующих подбиблиотек. Например, открытый +MyElectroChem/+Sensors/lib.m
в редакторе MATLAB. Следующая линия заставляет подбиблиотеку быть названной Electrochemical Sensors
:
libInfo.Name = 'Electrochemical Sensors';
В отсутствие lib.m
файл, библиотеку назвали бы в честь имени подпакета, то есть, Sensors
. Для получения дополнительной информации смотрите Конфигурационные файлы Библиотеки.
Элемент батареи с Пользовательским Электрохимическим Доменным примером пользуется электрохимической библиотекой, чтобы смоделировать ведущую железную батарею. Смотрите справку в качестве примера для получения дополнительной информации.
[1] Pêcheux, F., Б. Аллард, К. Лаллеман, А. Вэчукс и Х. Морель. “Моделирование и Симуляция Систем Мультидисциплины с помощью Графов связей и VHDL-AMS”. Международная конференция по вопросам Моделирования Графа связей и Симуляции (ICBGM). Новый Орлеан, США, 23-27 января 2005.