Создание физического компонента
|
Страница в процессе разработки. |
Структура физического компонента
Объявление любого физического компонента всегда начинается с конструкции @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.
Создание компонента: конденсатор
Теперь рассмотрим, как на практике выглядит создание реального физического компонента. В качестве примера возьмем электрический конденсатор — показательный элемент, на котором видно, как объединяются порты, параметры, переменные, ветви и уравнения внутри одного физического компонента.
-
Создайте папку в файловом браузере Engee
. -
Добавьте созданную папку в путь.
-
В папке создайте файл формата
.ngpcи начальный шаблон:@engeemodel Capacitor begin endКонструкция @engeemodel имя_компонента begin … endобязательна для создания любого физического компонента.
|
В одном |
Добавление портов
Порты определяют, как компонент подключается к остальной модели и какие величины через него обмениваются. Здесь мы объявим два электрических вывода — положительный 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.
-
В его настройках (окно настроек
) укажите путь к файлу .ngpcили имя Capacitor. -
Теперь блок Capacitor можно использовать в любой модели наравне с типовыми блоками физической библиотеки Engee.
| Для корректной работы модели с физическим компонентом (и любым другим блоком из Физическое моделирование) добавьте в модель блок Solver Configuration. |
Таким образом, на языке физического моделирования Engee мы описали физический компонент Capacitor, моделирующий поведение конденсатора.
Рекомендации
-
Используйте информативные имена и задавайте единицы измерения для параметров и переменных.
-
Проверяйте физическую корректность уравнений и граничные случаи (например, с помощью
assertможно задать допустимый интервал значений параметров и т.д.). Подробнее см. в статье Проверки.