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

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

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