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

Конструкции языка физического моделирования Engee

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

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

Основные конструкции

Конструкция Назначение Пример

@parameters

Параметры компонента, задаваемые перед запуском.

@parameters begin
    R = 1.0, [unit = "Ohm"]
end

@variables

Переменные, вычисляемые во время моделирования.

@variables begin
    v = 0.0, [unit = "V"]
end

@equations

Уравнения, описывающие поведение.

@equations begin
    v ~ R * i
end

@nodes

Порты подключения к физическим доменам.

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

@branches

Связывает поток(и) нескольких портов с общей переменной.

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

@components

Подкомпоненты (иерархия внутри модели).

@components begin
    cap = EngeePhysicalFoundation.Electrical.Elements.Capacitor()
end

@structural_parameters

Несимвольные параметры. Обычно используются для индексов и размерностей массивов.

@structural_parameters begin
    N::Int = 3
end

@intermediates

Промежуточные переменные, упрощающие выражения в уравнениях.

@intermediates begin
    power = v*i
end

@inputs

Входные переменные.

@inputs begin
    u_in = 0.0
end

@outputs

Выходные переменные.

@outputs begin
    y_out = 0.0
end

@annotations

Изменение метаданных параметров, переменных, портов и подкомпонентов.

@annotations begin
    (v, i), [gui = None]
end

@icon

Внешний вид иконки блока.

@icon begin
    "icon.svg"
end

@extend

Наследование от существующего компонента.

@engeemodel MyResistor begin
    @extend Resistor
end

Метаданные

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

Специальные функции для конструкции с уравнениями

  • assert(condition [, message [, action]]) — проверки.

    @equations begin
        assert(R >= 0.0)
    end
  • connect(a, b, …​) — соединение портов и подкомпонентов.

    connect(R1.p, R2.n)
  • domain_connect(a, b) — синхронизация параметров среды между портами внутри одного компонента (переменные портов не соединяются).

    @equations begin
        domain_connect(n, p)
    end

Правила работы конструкций

  • Все конструкции оформляются в виде @имя 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"), которые применяются ко всем объектам, объявленным в этой конструкции. Например:

    @parameters [group = "Electrical Parameters"] begin
        R = 1.0, [unit = "Ohm", description = "Resistance"]
        v_nom = 230.0, [unit = "V", description = "Nominal voltage"]
    end

    В этом примере оба параметра будут отображаться в группе "Electrical Parameters".

  • Видимость параметров, переменных, портов и подкомпонентов можно менять в зависимости от значений параметров внутри условий с помощью блока @annotations. Например:

    @parameters begin
        a::Bool = true
        b = 1, [gui = None]
    end
    
    if a
        @annotations begin
            b, [gui = Modify]
        end
    end

    В этом примере поведение метаданных зависит от значения параметра a:

    • Если a = false, то параметр b скрывается в интерфейсе (gui = None),

    • Если a = true, то параметр b отображается (gui = Modify).