В этом примере рассматриваются более сложные темы создания пользовательских библиотек Simscape™. В ней используется библиотека примеров для моделирования электрохимических систем. Библиотека представляет новую электрохимическую область и определяет все основные компоненты, необходимые для построения электрохимических моделей, включая электрохимическую ссылку, через и между датчиками, источниками и междоменным компонентом. В этом примере иллюстрируются некоторые важные функции моделирования физических сетей, такие как выбор переменных сквозной и поперечной, а также способы преобразования мощности между доменами. Перед просмотром этого более подробного примера рекомендуется ознакомиться с предыдущим разделом «История успеха - базовая библиотека пользовательских блоков».
Библиотека примеров создается на вашем пути так, что она легко исполнима. Однако рекомендуется скопировать исходные файлы в новый каталог, для которого у вас есть разрешение на запись, и добавить этот каталог в путь 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 является молярная расхода ионов, измеренная в единицах SI моль/с. Соответствующая переменная Поперечный называется химическим потенциалом и должна иметь единицы измерения J/моль, чтобы гарантировать, что произведение переменных Сквозной и Поперечный имеет единицы измерения мощности J/s. Химический потенциал или свободная энергия Гибба на моль определяется следующим образом:
RTlna
где мк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, и вы увидите три соответствующих поддиапазона.

Физическая сеть должна иметь опорный блок, по которому измеряются переменные Поперек. Так, например, библиотека 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, *);
Дополнительные сведения о соединениях компонентов и синтаксисе неявного узла ссылки см. в разделе Соединения с неявным узлом ссылки.
Идеальный источник поперек обеспечивает постоянное значение переменной Поперек независимо от значения переменной Сквозной. В электрической области это соответствует блоку источника постоянного напряжения в библиотеке 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
Двойство идеального источника Поперек является идеальным источником Сквозной, который поддерживает переменную Сквозной до некоторого заданного значения независимо от значения переменной Поперечный. В электрической области это соответствует блоку источника постоянного тока в библиотеке 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 оператор в разделе уравнений определяет взаимосвязь между переменными 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. branches раздел и let оператор в разделе уравнений определяет взаимосвязь между переменными Through и Across для датчика. В этом случае идеальный датчик химического потенциала не притягивает поток, то есть ndot = = 0, гдеndot - расход. Второе уравнение присваивает выходному физическому сигналу значение переменной Поперек.
После создания блоков измерения и привязки следующим шагом будет создание блоков, определяющих поведенческие отношения между переменными Сквозной (Through) и Поперечный (Across). В электрической области, например, такими компонентами являются резистор, конденсатор и индуктор.
В качестве примера основного электрохимического компонента рассмотрим химическое восстановление или окисление иона, которое можно рассматривать как электрохимический эквивалент нелинейного конденсатора. Определяющими уравнениями в терминах переменных Through (Сквозной) и Across (Поперечный)
nC0M
RTlna
где n - число молей иона, C0 - стандартная концентрация 1 моль/кг, а М - масса растворенного вещества.
Чтобы увидеть реализацию этих уравнений, откройте файл +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), требуются два уравнения. Первый происходит от основного физического закона, а второй - от суммирования полномочий из двух доменов в конвертер, который должен суммировать ноль.
В качестве примера взаимодействующего компонента рассмотрим электрохимическую полуклетку. Мольный расход химических веществ и электрический ток связаны законом Фарадея, который требует, чтобы:
izF
где λ - молярный расход, 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 объявляется как
1zF
Затем он используется в обоих уравнениях в следующем предложении выражения.
Этот компонент имеет четыре порта, но только два уравнения. Это происходит потому, что компонент взаимодействует с двумя различными физическими сетями. Каждая из сетей имеет два порта и одно уравнение, таким образом удовлетворяя требованию для уравнений 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. Дополнительные сведения см. в разделе Файлы конфигурации библиотеки.
В примере аккумуляторного элемента с пользовательским электрохимическим доменом для моделирования свинцово-железной батареи используется электрохимическая библиотека. Для получения дополнительной информации см. пример справки.
[1] Печё, Ф., Б. Аллар, К. Лаллемент, А. Вашу и Х. Морель. «Моделирование и моделирование многопрофильных систем с использованием графиков связи и VHDL-AMS». Международная конференция по моделированию и моделированию графов облигаций (ICBGM). Новый Орлеан, США, 23-27 января 2005 года.