Пример - Электрохимическая библиотека

Начало

В этом тематическом исследовании рассматриваются более продвинутые темы создания пользовательских библиотек 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

Две полукамеры разделены мембраной, которая препятствует течению ионов между камерами, и, следовательно, электроны текут от твердого свинцового анода к платиновому катоду. Две полуклеточные реакции:

PbPb2++2e

Fe2+Fe3++e

Ток приводит к окислению свинца и восстановлению железа, при этом общая реакция определяется:

Pb+2Fe3+Pb2++2Fe2+

Химическая реакция может быть смоделирована с помощью сетевых концепций переменных Through и Across (для получения дополнительной информации см. «Основные принципы моделирования физических сетей»). Переменная Through представляет поток, а переменная Across - усилие. При выборе переменных Through и Across следует использовать модули СИ, и продукт двух переменных обычно выбирается так, чтобы иметь модули степени.

В электрохимических реакциях очевидным выбором для переменной Through является молярная скорость потока жидкости n˙ ионов, измеренных в модулях СИ моль/с. Соответствующая переменная Across называется химическим потенциалом и должна иметь модули J/mol, чтобы убедиться, что продукт переменных Through и Across имеет модули степени, J/s. Химический потенциал или свободная энергия Гибба на моль определяется:

μ=μ0+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, и вы увидите три соответствующих подмножества.

Определение ссылочного компонента

Физическая сеть должна иметь ссылку блок, против которого измеряются переменные 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˙=ν

a=nC0M

μ=μ0+RTlna

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

В качестве примера сопрягающего компонента рассмотрим электрохимическую полукамеру. Химическая молярная скорость потока жидкости и электрический ток связаны законом Фарадея, который требует, чтобы:

ν=izF

where - молярная скорость потока жидкости, i - ток, z - количество электронов на ион, и F - константа Фарадея. Второе уравнение происходит от уравнения электрической и химической степеней:

(V2V1)i=(μ2μ1)ν

который можно переписать как:

(V2V1)=(μ2μ1)νi=μ2μ1zF

Это уравнение Нернста, записанное в терминах химического потенциала различия, (мк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 объявлен как

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. Дополнительные сведения см. в разделе Файлы строения библиотеки.

Использование собственных компонентов для создания модели

Пример Элемент Батареи с Custom Electrochemical Domain использует электрохимическую библиотеку, чтобы смоделировать свинцовую батарею. Для получения дополнительной информации см. справку по примеру.

Ссылки

[1] P, F., B. Allard, C. Lallement, A. Vachoux и H. Morel. Моделирование и симуляция многопрофильных систем с использованием Bond Graphs и VHDL-AMS. Международная конференция по моделированию и симуляции графика облигаций (ICBGM). Нью-Орлеан, США, 23-27 января 2005 года.