Engee 文档

Engee物理建模语言的子组件与继承

页面进行中。

在本文中,我们将介绍如何使用Engee物理建模语言通过从子组件组装它们来构建更复杂的模型。 此机制允许您组织元素的层次结构,使模型可重用且更紧凑。

组件的继承

有时一个新的组件与现有的组件非常相似,重新重写所有内容是没有意义的。 为此,*Engee*物理建模语言使用构造 @扩展,它允许您*从另一个物理组件继承*变量和方程。

@extend Branch
@extend Branch(i = 0)

所有参数/变量/子组件 访问=公共分行 它们将在继承的组件中自动可见。

申请 @扩展 它只允许在一个组件内进行一次。

子组件

*子组件*是我们嵌入其他物理组件的普通物理组件。 它们是使用构造创建的 @组件.

@components begin
    diode     = EngeePhysicalFoundation.Electrical.Elements.PieceWiseLinearDiode(v_forward = 0.6, R_on = 0.3, G_off = 1e-8)
    capacitor = EngeePhysicalFoundation.Electrical.Elements.Capacitor(C = 1e-4)
end

在这里,新组件中增加了两个子组件:二极管和电容器。 在子组件构造函数的参数中,可以立即设置参数(v_前向, R_on, C 等等)。

传输值的示例

可以使用主组件的参数作为子组件的参数值,但不需要指定测量单位。

@engeemodel A begin
    @variables begin
        a = 1
        b[:] = [1, 2]
    end
    @parameters begin
        c = 3
        d[:] = [3, 4]
    end
    @equations begin
        a^2 ~ 2
        b[1] * b[2] ~ 5
        b[1]^2 ~ 12
    end
end

@engeemodel B begin
    @components begin
        a1 = A(a = 2, b = [3, 4.0], c = 1, d = [5, 6])
        a2 = A(a = e, b = f*2, c = sin(e), d = f .+ 2)
    end
    @parameters begin
        e = 3
        f[:] = [3,4]
    end
end

在这个例子中:

  • a1 值直接传递:数字和数组;

  • a2 组件参数被使用 B: e, f;

  • 传递值时可以使用表达式: f*2, 罪(e), f.+ 2;

  • 您不需要指定测量单位-*Engee*自动使用组件中参数声明中的单位。 A.

子组件的阵列

子组件不仅可以一次设置一个,还可以在数组中设置。

@engeemodel ArrayExample begin
    @components begin
        res = [EngeePhysicalFoundation.Electrical.Elements.Resistor() for i in 1:5]
        cap = [EngeePhysicalFoundation.Electrical.Elements.Capacitor() for i in 1:3]
    end
end

特征:

  • 子组件像常规Julia数组一样被访问。 例子:: 接(二极管[1]。p,电容[3]。p).

  • 供外部使用的元素的名称如下所示 diode_1, diode_2, …​ 和 电容_1, 电容_2, …

如果您需要一次连接一组相同的元件(例如,几个二极管或电容器),这很方便。

子组件连接

功能 接(。..) 解决了两个问题:

  1. 将子组件相互连接;

  2. 将子组件的端口连接到主组件的端口。

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

    @components begin
        r = EngeePhysicalFoundation.Electrical.Elements.Resistor(R = 1000)
        c = EngeePhysicalFoundation.Electrical.Elements.Capacitor(C = 1e-6)
    end

    @equations begin
        connect(r.n, c.p)  # (1)我们将子组件相互连接
        connect(p, r.p)    # (2)将r.p端口连接到外部p端口
        connect(c.n, n)    # (2)将c.n端口连接到外部端口n
    end
end