В этом тематическом исследовании рассматриваются более продвинутые темы создания пользовательских библиотек Simscape™. Он использует библиотеку примеров для моделирования электрохимических систем. Библиотека представляет новую электрохимическую область и определяет все основные компоненты, необходимые для создания электрохимических моделей, включая электрохимическую ссылку, через датчики, источники и кросс-доменный компонент и между ними. Пример иллюстрирует некоторые характерные функции моделирования физических сетей, такие как выбор переменных Through и Across и то, как степень преобразуется между областями. Мы предлагаем вам работать с предыдущим разделом, Case Study - Basic Custom Block Library, прежде чем смотреть на этот более продвинутый пример.
Библиотека примеров создается и на вашем пути так, чтобы она была легко исполняемой. Однако рекомендуется скопировать исходные файлы в новую директорию, для которого у вас есть разрешение на запись, и добавить эту директорию в MATLAB® путь. Это позволит вносить изменения и перестраивать библиотеку под себя. Исходные файлы для библиотеки примеров находятся в следующей директории пакетов:
matlabroot/toolbox/physmod/simscape/simscapedemos/+ElectroChem
где matlabroot
- корневая директория MATLAB на вашем компьютере, возвращенный путем ввода
matlabroot
в Командном Окне MATLAB.
После копирования файлов измените имя директории +ElectroChem
к другому имени, например +MyElectroChem
, так что ваша копия библиотеки строится с уникальным именем.
Чтобы создать библиотеку, введите
ssc_build MyElectroChem
в Командном Окне MATLAB. Если здание из +MyElectroChem
упаковать директорию, можно опустить аргумент и ввести просто
ssc_build
Когда сборка завершится, откройте сгенерированную библиотеку, введя
MyElectroChem_lib
Дополнительные сведения о процессе сборки библиотеки см. в разделе Создание пользовательских библиотек блоков.
Программное обеспечение Simscape поставляется с несколькими областями Foundation, такими как механический поступательный, механический вращательный, электрический, гидравлический и так далее. Где это возможно, используйте эти предопределённые области. Для примера при создании новых электрических компонентов используйте электрическую область Foundation foundation.electrical.electrical
. Это гарантирует, что ваши компоненты могут быть подключены к стандартным блокам Simscape.
В качестве примера приложения, требующего сложения новой области, рассмотрим батарею, где базовые уравнения включают как электрические, так и химические процессы [1].
Электрохимическая батарея, приводящая в действие резистивную нагрузку R
Две полукамеры разделены мембраной, которая препятствует течению ионов между камерами, и, следовательно, электроны текут от твердого свинцового анода к платиновому катоду. Две полуклеточные реакции:
Ток приводит к окислению свинца и восстановлению железа, при этом общая реакция определяется:
Химическая реакция может быть смоделирована с помощью сетевых концепций переменных Through и Across (для получения дополнительной информации см. «Основные принципы моделирования физических сетей»). Переменная Through представляет поток, а переменная Across - усилие. При выборе переменных Through и Across следует использовать модули СИ, и продукт двух переменных обычно выбирается так, чтобы иметь модули степени.
В электрохимических реакциях очевидным выбором для переменной Through является молярная скорость потока жидкости ионов, измеренных в модулях СИ моль/с. Соответствующая переменная 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 обеспечивает постоянное значение для переменной Across независимо от значения переменной Through. В электрической области это соответствует блоку DC Voltage Source в библиотеке 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
Двойственный идеальный источник Across является идеальным источником Through, который поддерживает переменную Through к некоторому заданному значению независимо от значения переменной Across. В электрической области это соответствует блоку DC Current Source в библиотеке Foundation. В библиотеке примеров этот источник не реализован.
Каждый домен требует блока Through и Across измерения. В библиотеке примеров файл компонента +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. The branches
раздел и let
оператор в разделе уравнения задает отношение между переменными Through и Across для датчика. В этом случае идеальный датчик потока имеет нулевое падение потенциала, то есть mu
= = 0, где mu
- химический потенциал. Второе уравнение присваивает значение переменной Through выходу Физического сигнала.
Файл компонента +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. The branches
раздел и let
оператор в разделе уравнения задает отношение между переменными Through и Across для датчика. В этом случае идеальный датчик химического потенциала не потребляет потока, то есть ndot
= = 0, где ndot
- скорость потока жидкости. Второе уравнение присваивает значение переменной Across выходу Физического сигнала.
Создав блоки измерений и ссылок, следующий шаг - создать блоки, которые определяют поведенческие отношения между переменными 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
также определяется как частный параметр, но в равной степени может быть доступен пользователю.
Кросс-доменные блоки допускают обмен энергией между областями. Для примера, блок Вращательный Электромеханический Преобразователь в библиотеке Foundation преобразует между электрической и вращательной механической энергией. Чтобы связать два набора переменных Through и Across, требуются два уравнения. Первый происходит от базового физического закона, а второй от суммирования степеней от двух областей в конвертер, который должен быть равен нулю.
В качестве примера сопрягающего компонента рассмотрим электрохимическую полукамеру. Химическая молярная скорость потока жидкости и электрический ток связаны законом Фарадея, который требует, чтобы:
where - молярная скорость потока жидкости, 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
файлы. A 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
. Дополнительные сведения см. в разделе Файлы строения библиотеки.
Пример Элемент Батареи с Custom Electrochemical Domain использует электрохимическую библиотеку, чтобы смоделировать свинцовую батарею. Для получения дополнительной информации см. справку по примеру.
[1] P, F., B. Allard, C. Lallement, A. Vachoux и H. Morel. Моделирование и симуляция многопрофильных систем с использованием Bond Graphs и VHDL-AMS. Международная конференция по моделированию и симуляции графика облигаций (ICBGM). Нью-Орлеан, США, 23-27 января 2005 года.