电气方面的实例¶
现在,让我们回到工程应用方面。那些对电气系统比较熟悉的读者,考虑下面的回路:
假设我们要去求解以下变量:\(V\)、\(i_L\)、\(i_R\)以及\(i_C\)。我们可以使用下面与电感、电容以及电阻有关的方程来求解各个电流值\(i_L\)、\(i_R\)及\(i_C\)。
其中,\(V_b\)表示电池电压。
因为我们只有3个方程,却要求解4个变量,因此我们需要一个附加的方程。附加方程根据基尔霍夫电流定律来得到,如下所示:
我们已经确定了求解这个问题所需的方程和变量。现在,我们直接把这些方程转换为Modelica语言,以此创建一个基本模型(模型包括物理类型)。但是,在后面的章节电气部件中,我们还会回到这个电路。到时我们会演示如何通过拖放以及连接模型来创建电路。最后,我们会得出外观上类似于低通RLC滤波器的电路模型。
但是现在,我们将建立一个由简单变量和方程组成的模型。这可以表示为如下形式:
model RLC1 "A resistor-inductor-capacitor circuit model"
type Voltage=Real(unit="V");
type Current=Real(unit="A");
type Resistance=Real(unit="Ohm");
type Capacitance=Real(unit="F");
type Inductance=Real(unit="H");
parameter Voltage Vb=24 "Battery voltage";
parameter Inductance L = 1;
parameter Resistance R = 100;
parameter Capacitance C = 1e-3;
Voltage V;
Current i_L;
Current i_R;
Current i_C;
equation
V = i_R*R;
C*der(V) = i_C;
L*der(i_L) = (Vb-V);
i_L=i_R+i_C;
end RLC1;
让我们一点点的来检查这个例子,并且加强理解各种语句的含义。让我们从模型定义部分开始:
model RLC1 "A resistor-inductor-capacitor circuit model"
我们可以看到,模型的名字是RLC1
。此外,它还包含关于这个模型的描述,即"A resistor-inductor-capacitor circuit model"
。接下来,我们定义了需要用到的几个物理类型:
type Voltage=Real(unit="V");
type Current=Real(unit="A");
type Resistance=Real(unit="Ohm");
type Capacitance=Real(unit="F");
type Inductance=Real(unit="H");
每一行都通过关联特定的物理单位定义了一种指定了嵌入的Real
类型的物理类型。然后,我们声明所有的parameter
变量:
parameter Voltage Vb=24 "Battery voltage";
parameter Inductance L = 1;
parameter Resistance R = 100;
parameter Capacitance C = 1e-3;
这些parameter
变量分别代表了不同的物理特性(这里分别表示电压、电感、电阻和电容)。最后定义我们想要求解的变量,即:
Voltage V;
Current i_L;
Current i_R;
Current i_C;
现在,所有的变量都已经声明了。我们要在模型中添加equation
区域,去定义在生成解时使用的方程组。
equation
V = i_R*R;
C*der(V) = i_C;
L*der(i_L) = (Vb-V);
i_L=i_R+i_C;
最后,我们通过创建包含model
名字的end
语句去结束模型(例如,本例中模型名为RLC1
):
end RLC1;
本实例和前面实例的区别在于,本实例包含更多的方程。在NewtonCooling
例子中,有些方程左右两边都有表达式。其中还有一个微分方程(包含一个变量的微分)和简单的代数方程的混合方程。
这也进一步强调了,Modelica不同于其他的建模环境。我们完全没有必要把方程变成所谓的“显式状态空间形式”。当然,我们可以把方程组重新整理成更加明确的形式,如下所示:
der(V) = i_C/C;
der(i_L) = (Vb-V)/L;
i_R = i_L-i_C;
V = i_R*R;
重要的是,在Modelica中我们没有必要进行这样的操作。相反的,我们可以自由的将方程组写成任何想要的形式。
最终,这些方程可能需要转换成类似显式状态空间的形式。但是,如果这样的转换是必须的,那么,这将是Modelcia语言编译器的工作,而不需要模型开发者去做。这让模型开发者不再有必要去处理这些繁琐、费时且容易出错的任务。
将方程保存成其自有“教科书形式”这一功能非常重要。在我们后续章节中将会介绍到,这些方程将会“包含在”各个组件模型内。在这些情况下,我们(在创建组件模型时)无法明确知道用于求解每个方程所使用的变量。Modelica语言编译器所执行的这些操作不仅使模型开发更快、更容易,而且也显著提高了模型的可重用性。
下图显示了模型RLC1
的动态响应:
