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, …
如果您需要一次连接一组相同的元件(例如,几个二极管或电容器),这很方便。
子组件连接
功能 接(。..) 解决了两个问题:
-
将子组件相互连接;
-
将子组件的端口连接到主组件的端口。
@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