Тематическое исследование — электрохимическая библиотека

Начало работы

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

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

PbPb2++2e

Fe2+Fe3++e

Текущие результаты в оксидируемом выводе и уменьшаемое железо, с полной реакцией, данной:

Pb+2Fe3+Pb2++2Fe2+

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

В электрохимических реакциях очевидным выбором для переменной Through является молярная скорость потока жидкости n˙ из ионов, измеренных в единицах СИ mol/s. Соответствующая переменная 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 независимо от значения переменной 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˙=ν

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

Определение междоменного компонента взаимодействия через интерфейс

Междоменные блоки позволяют обмен энергией между областями. Например, блок Rotational Electromechanical Converter в библиотеке Foundation преобразует между электрической и вращательной механической энергией. Чтобы связать два набора переменных Through и Across, два уравнения требуются. Первое прибывает из базового физического закона и второго от подведения итогов степеней от этих двух областей в конвертер, который должен составить нуль.

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

ν=izF

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