创建物理组件
物理组件的结构
任何物理组件的声明总是从构造开始 @工程师模型,后跟组件名称。 构内部描述了组件的全部内容 開始啦。… 结束:
@engeemodel component_name begin
end
上面的代码创建了一个没有参数或行为描述的空物理组件。 为了使组件执行有用的功能,其他语言结构被放置在结构内部,每个语言结构也被形成为一个块。 開始啦。… 结束. 例如:
-
@参数--设置模型启动前配置的参数:@parameters begin a = 1.0 end -
@变量--引入模拟过程中发生变化的变量:@variables begin x = 1.0 end
应该注意的是,这只是一组基本的构造;在Engee物理建模语言中,它们的数量明显更多:端口,分支,结构参数,子组件,注释等等。 有关完整列表,请参阅 Engee物理建模语言的语法.
组件创建:电容器
现在让我们来看看在实践中创建一个真正的物理组件是什么样子的。 作为一个例子,让我们以一个电容器为例,它是一个说明性的元素,它显示了端口、参数、变量、分支和方程是如何在一个物理组件中组合在一起的。
-
在 文件浏览器Engee
. -
通过以下方式将创建的文件夹添加到搜索路径 Engee路径编辑器.
-
在文件夹中创建格式化文件
.ngpc和初始模板:@engeemodel Capacitor begin end建筑工程 开始的@engeemodel_name。.. 终端组件需要创建任何物理组件。
|
在一个 |
添加端口
端口确定组件如何连接到模型的其余部分以及通过它交换的值。 在这里,我们将宣布两个电气输出-正 p 和负 n,这将在分量方程中使用。 两个电气输出(p 和 n),通过该电容器连接到电路。
@nodes begin
p = EngeePhysicalFoundation.Electrical.Pin
n = EngeePhysicalFoundation.Electrical.Pin
end
添加参数
参数是在启动模型之前设置的可配置常量。 对于电容器,这是电容 C 带有法拉第测量单位和接口的简要描述。
@parameters begin
C = 1e-6, [unit = "F", description = "Capacitance"]
end
C --电容器容量;将来,该值可以在单位设置中更改。
添加变量
变量是在仿真期间计算的量。 电容器需要:电压 v 端子和电流之间 i 通过元素;我们将为它们指定测量单位和可理解的签名。:
@variables begin
v = 0.0, [unit = "V", description = "Voltage"]
i = 0.0, [unit = "A", description = "Current"]
end
这里 v --元件上的电压; i --电流通过元件。
添加分支
分支将物理组件变量与端口流变量相关联,并定义模型内的流拓扑。 通过链接 i 与 p.i 和 n.我,确保在将物理组件相互连接时正确计算电流平衡。
@branches begin
i:(p.i, n.i)
end
分支定义变量的方式 i 连接到组件的端口:电流 i 它表示流经端口的总量。 p.i 和 n.我. 连接物理组件时会自动考虑流量平衡。
写方程
方程是描述组件行为的物理关系。 对于电容器,我们将电压降设置为端口的电位差,并记下基本比率 i=C*du/dt 并同步端口之间的端口参数。
@equations begin
v ~ p.v - n.v # напряжение между портами
i ~ C * der(v) # основное уравнение конденсатора
domain_connect(n, p) # согласование параметров среды между портами
end
第一个方程将电压定义为端口的电位差,第二个方程定义了电流动态。 域名连接 在端口之间传输参数。 有关匹配端口参数的信息,请参阅文章 物理建模语言的方程。
物理组件的最终代码
下面,将物理组件的所有部分放在一起,从端口和参数到分支和方程。 这个完成的片段可以保存在 .ngpc 并立即使用它作为一个完整的*电容器*单位在*Engee模型。*:
@engeemodel Capacitor begin
@nodes begin
p = EngeePhysicalFoundation.Electrical.Pin
n = EngeePhysicalFoundation.Electrical.Pin
end
@parameters begin
C = 1e-6, [unit = "F", description = "Capacitance"]
end
@variables begin
v = 0.0, [unit = "V", description = "Voltage"]
i = 0.0, [unit = "A", description = "Current"]
end
@branches begin
i:(p.i, n.i)
end
@equations begin
v ~ p.v - n.v
i ~ C * der(v)
domain_connect(n, p)
end
end