Обзор конструкций декларативного языка Engee
Страница в процессе разработки. |
В декларативном языке физического моделирования Engee каждая часть физического компонента оформляется через отдельные конструкции. Они задают параметры, переменные, уравнения, порты, ветви, аннотации и многое другое. Ниже приведен обзор всех доступных конструкций:
Конструкция | Назначение | Пример |
---|---|---|
|
Параметры компонента, задаваемые перед запуском. |
|
|
Переменные состояния, вычисляемые во время моделирования. |
|
|
Уравнения, описывающие поведение. |
|
|
Порты подключения к физическим доменам. |
|
|
Связывает потоки нескольких портов в общую переменную. |
|
|
Промежуточные выражения, упрощающие уравнения. |
|
|
Подкомпоненты внутри модели (иерархия). |
|
|
Наследование от существующего компонента. |
|
|
Входные и выходные сигналы (нефизические коннекторы). |
|
|
Параметры, влияющие на структуру модели. |
|
|
Значения по умолчанию для параметров и переменных. |
|
|
Служебные данные: описание, единицы, группы, приоритеты. |
|
|
Внешний вид иконки блока. |
|
|
Дискретные режимы работы (гибридная динамика). |
|
|
События, изменяющие состояние при выполнении условия. |
|
Правила работы конструкций
-
Все конструкции оформляются в виде
@имя begin … end
. -
Порядок следования конструкций внутри физического компонента (в коде после
@engeemodel
) не имеет значения — язык декларативный.Например, переменную можно использовать в уравнении еще до ее явного объявления:
@engeemodel Example begin @equations begin y ~ x^2 + 1 # используем x, хотя он объявлен ниже end @variables begin x = 0 y = 0 end end
-
Внутри уравнений и выражений можно ссылаться на параметры и переменные, объявленные выше или ниже по тексту.
-
В одном физическом компоненте может быть несколько конструкций одного типа (например, несколько блоков
@equations
). -
Конструкции можно снабжать метаданными (например,
group = "Parameters"
), которые управляют отображением и поведением (см. ниже). -
Проверки условий (
assert
) обычно размещаются в блоке@equations
.
Использование default()
Для получения числового значения параметров и переменных (в системе СИ) применяется функция default()
. Это нужно при передаче значений в подкомпоненты, условиях или вызове функций на Julia.
@parameters begin
smoothing_factor = 0
end
@variables begin
x = 0
end
@equations begin
a = if default(smoothing_factor) == 0
x
else
x / default(smoothing_factor)
end
end
Несколько переменных в одной конструкции
В одной конструкции можно объявить несколько параметров или переменных сразу, если у них одинаковые метаданные.
@intermediates [access = Private] begin
a, b = [3, 5]
c, d = f(x)
end
Типизация
Для параметров и переменных можно указывать типы данных: скаляр, вектор, матрица, булево значение, перечисление.
@parameters begin
a::Bool = true
b = 1
c[:] = [2, 3] # вектор
d[:, :] = [1 2; 3 4] # матрица
end
Типизация влияет на то, как параметр отображается в интерфейсе (например, Bool
превращается в чекбокс). Подробнее про типизацию в декларативном языке Engee читайте в статье Типизация и единицы измерения декларативного языка Engee.
Метаданные
Метаданные позволяют задавать дополнительные свойства параметров, переменных, узлов и других конструкций. Они не влияют на уравнения напрямую, но определяют единицы измерения, отображение в интерфейсе, группировку и другие аспекты.
Метаданные записываются в квадратных скобках после объявления и помогают сделать модель понятной и удобной для работы. Пример использования:
@parameters [group = "Parameters"] begin
R = 1.0, [unit = "Ohm", description = "Resistance"]
end
В этом примере параметр R
снабжен метаданными:
-
unit = "Ohm"
— единица измерения; -
description = "Resistance"
— описание; -
group = "Parameters"
— группировка в окне настроек.
Часто используемые поля метаданных:
-
unit
— единицы измерения (например,"Ohm"
,"V"
,"A"
). -
description
— текстовое описание. -
group
— группировка для интерфейса. -
priority
— приоритет отображения. -
gui
— управление видимостью в редакторе. -
access
— уровень доступа (публичный или внутренний). -
view
— отображение в GUI. -
inside
— внутреннее использование.
Подробнее о всех доступных метаданных, их назначении и примерах см. в статье: Метаданные декларативного языка Engee.
Прочие конструкции
В дополнение к основным конструкциям существуют те, которые используются реже, но играют важную роль в моделировании:
-
assert(…)
— функция проверки условий. Обычно размещается в@equations
. Проверка может выполняться на этапе компиляции или во время моделирования — это зависит от того, какие переменные участвуют в выражении. Пример:@equations begin assert(R >= 0.0) end
-
@initialequations
— уравнения, действующие только в начальный момент времени. Используются для задания начальных условий, когда их нельзя выразить простыми целевыми значениями переменных. Пример:@initialequations begin v = 0.0 end
-
@functions
— объявление пользовательских функций. Функции можно определять внутри компонента и затем использовать в уравнениях. Пример:@functions begin f(x) = x^2 + 1 end
-
connect(…)
— соединение портов разных компонентов в схеме. Создает уравнения равенства потенциалов и баланса потоков. Пример:connect(R1.p, R2.n)
-
domain_connect(…)
— выравнивание параметров среды между портами одного компонента. Не соединяет переменные, а только синхронизирует параметры домена (например, температуру, минимальную проводимость). Пример:domain_connect(n, p)