Engee 文档
Notebook

创建自定义物理组件

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

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

设置任务

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

创建电阻器组件

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

哪里:
-参考温度

-参考温度下的电阻

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

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

@engeemodel MyResistorHeat begin
   
    @nodes begin
        p = EngeePhysicalFoundation.Electrical.Pin(), [view = ("+", "left")]
        n = EngeePhysicalFoundation.Electrical.Pin(), [view = ("-", "right")]
    end

   @variables begin
        v = 0, [unit="V",description = "Voltage"]
        i = 0, [unit="A",description = "Current"]
    end

    @parameters begin
        R = 200.0, [unit="Ohm"]
        a = 0.1, [unit="1/K"]
        T0 = 300, [unit="K"]
        T = 300, [unit="K"]
    end

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

    @equations begin
        v~p.v-n.v
        v ~ R*(1+a*(T-T0))*i
    end

end

可以看出,组件被封闭在@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物理建模语言是描述其物理组件的必要工具。 在当前项目的背景下,可以想象该组件可以在对电阻加热进行建模方面进行扩展,这也是使用物理建模语言很方便的。