Порты декларативного языка Engee
Страница в процессе разработки. |
В декларативном языке Engee порты — это интерфейсы, через которые физический компонент взаимодействует с другими блоками модели. Через порт могут передаваться:
-
Физические величины (напряжение, давление, температура);
-
Сигналы управления (например, числовые коэффициенты или булевы значения).
Порты физических компонентов (как и всей библиотеки Физическое моделирование) могут соединяться только с другими блоками физического моделирования.
Виды портов
В декларативном языке Engee есть два типа портов:
-
Направленные порты (
@inputs
,@outputs
) — используются для передачи сигналов. У них всегда задано направление: вход (input
) или выход (output
). Такие порты чаще всего применяются в блоках управления, где нужно передавать управляющие или вычисленные значения. -
Ненаправленные порты (
@nodes
) — применяются для описания физических соединений. У них нет строгого деления на «вход» и «выход»: поток может течь в любую сторону. С их помощью моделируются реальные физические домены, например:-
Электричество (напряжение и ток),
-
Механика (скорость и сила),
-
Теплообменники (температура и тепловой поток).
-
Автоматические уравнения
Главное преимущество декларативного подхода в том, что базовые уравнения формируются автоматически. Когда два компонента соединяются портами, то Engee сам создает:
-
Уравнение равенства потенциалов (например, напряжения в соединенных узлах одинаковы);
-
Уравнение баланса потоков (сумма токов, тепловых потоков или сил в узле равна нулю — по закону сохранения).
В итоге не нужно вручную выписывать уравнения для каждого соединения — достаточно связать компоненты портами, и система сама сформирует необходимые балансовые зависимости.
Направленные порты
Сигнальные входы и выходы объявляются через секции @inputs
и @outputs
.
@engeemodel GainBlock begin
@parameters begin
k = 2.0
end
@inputs begin
u
end
@outputs begin
y
end
@equations begin
y ~ k * u
end
end
Здесь:
-
На вход
u
поступает сигнал; -
Внутри уравнения он умножается на коэффициент
k
; -
Результат передается на выход
y
.
Такие порты удобны для смешанных моделей, где часть элементов работает с физическими величинами, а часть — с сигналами управления.
Ненаправленные порты
Внутри компонента такие порты объявляются через секцию @nodes
.
@engeemodel Resistor begin
@parameters begin
R = 1.0, [unit = "Ohm"]
end
@nodes begin
p = AcausalFoundation.Electrical.Pin
n = AcausalFoundation.Electrical.Pin
end
@variables begin
v = 0.0, [unit = "V"]
i = 0.0, [unit = "A"]
end
@branches begin
i:(p.i, n.i)
end
@equations begin
v ~ p.v - n.v
v ~ R * i
end
end
Здесь:
-
@nodes
— добавляет два электрических портаp
иn
; -
@branches
— формулирует правило сохранения тока в ветви; -
@equations
— задает закон Ома: напряжение на резисторе равно произведению сопротивления на ток.
Потенциалы и потоки в ненаправленных портах
Чтобы корректно описывать физику, у каждого ненаправленного порта есть связанные переменные:
-
Потенциальные переменные — задают состояние точки подключения (например, напряжение, температура, давление). По умолчанию переменная считается потенциальной, если не указаны дополнительные метаданные.
-
Потоковые переменные (
connect = Flow
) описывают перенос или обмен величины между компонентами (например, ток, тепловой поток, массовый расход).
Пример объявления электрического порта:
@engeeconnector Pin begin
v # напряжение (потенциал)
i, [connect = Flow] # ток (поток)
end
Здесь:
-
v
— переменная-потенциал, отражает напряжение в узле; -
i
— переменная-поток, отражает ток, протекающий через порт.
При соединении портов Engee автоматически формирует уравнения:
-
Потенциалы (
v
) соединенных портов равны; -
Сумма потоков (
i
) равна нулю (закон сохранения).
Соединение портов
После объявления портов их нужно соединить между собой в модели. В декларативном языке Engee предусмотрены два механизма:
-
connect(…)
— соединяет порты разных компонентов, формируя уравнения равенства потенциалов и баланса потоков. Например:@equations begin connect(res.p, cap.p) connect(res.n, cap.n) end
Такое соединение создает уравнения, связывающие резистор и конденсатор в электрическую цепь.
-
domain_connect(…)
— обеспечивает согласованность параметров среды внутри одного физического компонента. Пример:@equations begin domain_connect(p, n) end
Здесь оператор
domain_connect
выравнивает параметры среды между портами (например, теплопроводность или свойства жидкости), если это требуется внутри одного компонента.