Документация Engee

Создание физического компонента

Страница в процессе разработки.

Структура физического компонента

Объявление любого физического компонента всегда начинается с конструкции @engeemodel, после которой указывается имя компонента. Все содержимое компонента описывается внутри конструкции begin …​ end:

@engeemodel component_name begin
end

Код выше создает пустой физический компонент без параметров и описания поведения. Чтобы компонент выполнял полезные функции, внутри конструкции размещаются другие конструкции языка, каждая из которых также оформляется в блок begin …​ end. Например:

  • @parameters — задает параметры, которые настраиваются до запуска модели:

    @parameters begin
        a = 1.0
    end
  • @variables — вводит переменные, изменяющиеся в ходе моделирования:

    @variables begin
        x = 1.0
    end

Следует отметить, что это лишь базовый набор конструкций, в языке физического моделирования Engee их значительно больше: порты, ветви, структурные параметры, подкомпоненты, аннотации и многое другое. Полный список см. в разделе Синтаксис языка физического моделирования Engee.

Создание компонента: конденсатор

Теперь рассмотрим, как на практике выглядит создание реального физического компонента. В качестве примера возьмем электрический конденсатор — показательный элемент, на котором видно, как объединяются порты, параметры, переменные, ветви и уравнения внутри одного физического компонента.

  1. Создайте папку в файловом браузере Engee file browser 7.

  2. Добавьте созданную папку в путь.

  3. В папке создайте файл формата .ngpc и начальный шаблон:

    @engeemodel Capacitor begin
    end
    Конструкция @engeemodel имя_компонента begin …​ end обязательна для создания любого физического компонента.

В одном .ngpc-файле может быть несколько физических компонентов, но во избежание путаницы лучше хранить каждый компонент в отдельном файле (1 .ngpc-файл = 1 физический компонент).

Добавление портов

Порты определяют, как компонент подключается к остальной модели и какие величины через него обмениваются. Здесь мы объявим два электрических вывода — положительный p и отрицательный n, которые будут использоваться в уравнениях компонента. Два электрических вывода (p и n), через которые конденсатор подключается в схему.

@nodes begin
    p = EngeePhysicalFoundation.Electrical.Pin
    n = EngeePhysicalFoundation.Electrical.Pin
end

Добавление параметров

Параметры — это настраиваемые константы, которые задаются перед запуском модели. Для конденсатора это емкость C с единицей измерения фарады и кратким описанием для интерфейса.

@parameters begin
    C = 1e-6, [unit = "F", description = "Capacitance"]
end

C — емкость конденсатора; в дальнейшем это значение можно менять в настройках блока.

Добавление переменных

Переменные — величины, которые вычисляются во время моделирования. Конденсатору нужны: напряжение v между выводами и ток i через элемент; укажем им единицы измерения и понятные подписи:

@variables begin
    v = 0.0, [unit = "V", description = "Voltage"]
    i = 0.0, [unit = "A", description = "Current"]
end

Здесь v — напряжение на элементе; i — ток через элемент.

Добавление ветви

Ветви связывают переменные физического компонента с потоковыми переменными портов и задают топологию потоков внутри модели. Связав i с p.i и n.i, обеспечивается корректный учет баланса токов при соединении физических компонентов между собой.

@branches begin
    i:(p.i, n.i)
end

Ветвь определяет, как переменная i связана с портами компонента: ток i представляет собой общую величину, которая протекает через порты p.i и n.i. Баланс потоков учитывается автоматически при соединении физических компонентов.

Запись уравнения

Уравнения — это физические соотношения, описывающие поведение компонента. Для конденсатора зададим падение напряжения как разность потенциалов портов, запишем основное соотношение i = C * du/dt и синхронизируем параметры портов между портами.

@equations begin
    v ~ p.v - n.v         # напряжение между портами
    i ~ C * der(v)        # основное уравнение конденсатора
    domain_connect(n, p)  # согласование параметров среды между портами
end

Первое уравнение определяет напряжение как разность потенциалов портов, второе — динамику тока. domain_connect переносит параметры между портами. Про согласование параметров портов см. в статье Уравнения языка физического моделирования.

Итоговый код физического компонента

Ниже все части физического компонента собраны воедино — от портов и параметров до ветвей и уравнений. Этот законченный фрагмент можно сохранить в .ngpc и сразу использовать как полноценный блок Capacitor в моделях Engee:

@engeemodel Capacitor begin
    @nodes begin
        p = EngeePhysicalFoundation.Electrical.Pin
        n = EngeePhysicalFoundation.Electrical.Pin
    end

    @parameters begin
        C = 1e-6, [unit = "F", description = "Capacitance"]
    end

    @variables begin
        v = 0.0, [unit = "V", description = "Voltage"]
        i = 0.0, [unit = "A", description = "Current"]
    end

    @branches begin
        i:(p.i, n.i)
    end

    @equations begin
        v ~ p.v - n.v
        i ~ C * der(v)
        domain_connect(n, p)
    end
end

Подключение физического компонента в модель Engee

  • Добавьте на холст блок Physical Component.

  • В его настройках (окно настроек debug article icon 1) укажите путь к файлу .ngpc или имя Capacitor.

  • Теперь блок Capacitor можно использовать в любой модели наравне с типовыми блоками физической библиотеки Engee.

Для корректной работы модели с физическим компонентом (и любым другим блоком из Physical Modeling) добавьте в модель блок Solver Configuration.

Таким образом, на языке физического моделирования Engee мы описали физический компонент Capacitor, моделирующий поведение конденсатора.

Рекомендации

  • Используйте информативные имена и задавайте единицы измерения для параметров и переменных.

  • Проверяйте физическую корректность уравнений и граничные случаи (например, с помощью assert можно задать допустимый интервал значений параметров и т.д.). Подробнее см. в статье Проверки.