Engee 文档
Notebook

创建自定义物理组件

Engee拥有庞大的物理建模库。 但是总会缺少一些东西,或者你想用你自己的方程来模拟一个物理物体。

这个小项目的任务是制作自己的电阻,其中电阻取决于温度。

设置任务

物理建模基础库中有一个电阻组件。 它模拟电路中的电阻,并且只有一个参数,电阻。 然而,这是一个理想化的电阻-没有考虑温度的影响。 因此,我们需要创建自己的更"现实"的电阻器。

创建电阻器组件

要创建自定义物理组件,我们将使用Engee中包含的专用物理建模语言。 但在我们开始编写代码之前,让我们记住温度和电阻是如何相关的。:

哪里:
-参考温度

-参考温度下的电阻

-一定的常数,取决于电阻材料

现在,您可以继续编写自己的组件。 组件的代码必须包含在带有*的文件中。ngpc扩展。 我已经写了我自己的电阻实现,让我们看看它。:

``'茱莉亚
@engeemodel MyResistorHeat开始

@节点开始
    P=EngeePhysicalFoundation。电气。销(),[视图=("+","左")]
    N=EngeePhysicalFoundation。电气。Pin(),[view=("-","right")]
结束

@变量开始
v=0,[单位="V",描述="电压"]
i=0,[单位="A",描述="当前"]
结束

@参数开始
    R=200.0,[单位="欧姆"]
    a=0.1,[单位="1/K"]
    T0=300,[单位="K"]
    T=300,[单位="K"]
结束

@分支开始
    i:(p.i,n.i)
结束

@方程开始
    v~p.v-n.v
    v~R*(1+a*(T-T0))*i
结束

结束


可以看出,组件被封闭在@engeemodel区域中。 让我们来看看最有趣的代码结构。:

`@nodes` -描述组件的物理非定向端口。 每个这样的端口属于一个*域-*物理领域(力学,电力,磁性等)。)

`@parameters` -用户设置的组件的参数

`@equations` -描述组件行为的方程。 这就是我们的方程写的地方。

如何使用组件代码?

要使用自己的物理块,编写组件代码是不够的,它需要嵌入到模型中。 物理分量块用于此。 带有组件代码的文件在其设置中指定。 为了使模型工作,代码文件必须位于Engee路径中。

是时候应用我们的新组件了。:

In [ ]:
demoroot = @__DIR__
engee.addpath(demoroot);

首先,让我们看一下在传统的、未经修改的组件上组装的放大器的模型。:

OpAMPStock.png

让我们运行这个模型,得到-8的增益因子:

In [ ]:
engee.open(joinpath("OpAmp_Stock.engee"))
Rs = engee.run(joinpath("OpAmp_Stock"))
collect(Rs["师。1"])
Out[0]:
2×2 DataFrame
Rowtimevalue
Float64Float64
10.0-8.0
20.01-8.0

现在让我们打开OpAmp_Custom模型:

image.png

如您所见,电阻块发生了变化。 因为这些不是电阻块,而是物理元件块。 让我们看看他们:

Cssc_d.png

在"描述"选项卡中,我们看到组件的名称MyResistorHeat,在主选项卡中,我们看到我们在区域中指定的参数。 @parameters:

Cssc_p.png

目标值的出现是因为我们在 @variables.

为了清楚起见,我们取系数 等于0.001,和 让我们把它等于300开尔文(这对应于正常条件下的温度)。 让我们在温度下模拟模型 平等 :

image.png

可以看出,该组件正常工作,所得增益为-8。 现在让我们提高R1的温度并查看仿真结果。:

image.png

可见增益有所改变! 这意味着我们的组件正在工作。

结论

Engee物理建模语言是描述其物理组件的必要工具。 在当前项目的背景下,可以想象该组件可以在对电阻加热进行建模方面进行扩展,这也是使用物理建模语言很方便的。