系统模型¶
下一章将深入讨论子系统。现在,我们只讨论到目前为止看到的几个子系统主题。
连接¶
我们在本章见到,组件和子系统模型间的一个区别在于,子系统模型包括connect
语句。为了探讨connect
语句的原理,让我们重温在讨论热力控制时出现的MultiDomainControl
例子。如果我们去掉所有标注(我们很快就会讨论这个内容),我们会得到一个如下所示的模型,:
within ModelicaByExample.Components.BlockDiagrams.Examples;
model MultiDomainControl
"Mixing thermal components with blocks for sensing, actuation and control"
import Modelica.SIunits.Conversions.from_degC;
parameter Real h = 0.7 "Convection coefficient";
parameter Real m = 0.1 "Thermal maass";
parameter Real c_p = 1.2 "Specific heat";
parameter Real T_inf = from_degC(25) "Ambient temperature";
parameter Real T_bar = from_degC(30.0) "Desired temperature";
parameter Real k = 2.0 "Controller gain";
Components.Constant setpoint(k=T_bar);
Components.Feedback feedback;
Components.Gain controller_gain(k=k);
HeatTransfer.ThermalCapacitance cap(C=m*c_p, T0 = from_degC(90));
HeatTransfer.Convection convection2(h=h);
HeatTransfer.AmbientCondition amb(T_amb(displayUnit="K") = T_inf);
Components.IdealTemperatureSensor sensor;
Components.HeatSource heatSource;
equation
connect(setpoint.y, feedback.u1);
connect(feedback.y, controller_gain.u);
connect(convection2.port_a, cap.node);
connect(amb.node, convection2.port_b);
connect(sensor.y, feedback.u2);
connect(heatSource.node, cap.node);
connect(controller_gain.y, heatSource.u);
connect(sensor.node, cap.node);
end MultiDomainControl;
在我们前面对非因果建模的讨论里,我们谈论了连接器内的非因果变量产生的方程式。但connect
语句的作用取决于所连接变量的性质。MultiDomainControl
模型对我们的讨论很有用,因为该模型不只有非因果连接。
在考虑MultiDomainControl
模型的某条特定连接前,让我们先阐述一下connect
语句的实际作用。这里可能有一些复杂的情况。但为了简单和教学需要,在这里我们只讨论基本情况。
connect
语句连接了正正两个连接器。然后,语句按名字将每个连接器的每个相应变量“互相配对”。换句话说,语句将一个连接器的每个变量和另一连接器内的同名变量配对起来。
对每对变量,编译器首先确保这两个变量具有相同的类型(如Real
、Integer
)。但是,产生的方程以及额外限制就取决于变量前的限定词了。下面列表涵盖了所有的基本情况:
穿越变量- 这是带有
flow
限定词的变量。我们在此前对非因果建模讨论里就提到了,连接集的所有变量会生成一个守恒方程。参数- 包含
parameter
限定词的变量不会产生任何方程式。相反,它会生成一个assert
调用,确保两个变量之间值相同。这在某些情况下很有用。例如,当connector
包括指定连接器内数组大小的Integer
参数时,断言语句会确保数组大小相同。输入- 带有
input
限定词的变量只能搭配带有input
或output
限定词的变量。假定这个要求得到满足,生成的等式会简单地为这两个变量建立相等关系。输出- 带有
output
限定词的变量只能与具有input
限定词的变量配对(即两个输出不能连接)。与输入变量的情况一样,这样的连接会产生相等关系。横跨变量- 这些变量均没有任何限定词(和此前的情况不同)。正如我们对非因果建模所讨论的一样,连接集会产生一系列方程,令有横跨变量相等。
在对框图组件的讨论里,我们将input
和output
限定词表述为“因果性的”。事实上,input
和output
限定词实际上并不指定执行计算的顺序。正如以上所讨论,这些限定词只是限制变量可以如何连接。除了以上提到的限制,还有另一个限制:一个连接组内只能有一个output
信号(原因很明显)。
我们可以看到,在MultiDomainControl
模型里已经包括了几个这样的例子。例如,
connect(setpoint.y, feedback.u1);
在这里,output
信号setpoint.y
与input
信号feedback.u1
相连接。因此,此连接只涉及因果信号。但另一方面,我们有以下连接:
connect(heatSource.node, cap.node);
由此将得到此前讨论过的那类守恒方程。
总之,使用connect
语句是一种管理复杂任务(如生成守恒以及连续性方程)并为此生成公式的方法。而同时,语句也会检查并确保该连接是有意义(例如变量须具有相同的类型)。
简图¶
本章中,我们展示了Modelica子系统模型可以如何用图形方式表示,如:
产生这样图形所需的所有信息均包含在该Modelica模型里。虽然,这些信息已在本章中部分Modelica代码列举了出来。我们还没有真正讨论到底存储了什么信息、这些信息又是存储在了哪里。
渲染子系统简图需要三项信息:
用来表示每个组件的图标。
各组件的位置。
每个连接的路径
组件位置¶
我们知道要组件要怎样呈现。现在,我们需要知道要在哪里对组件进行绘制。这就需要Placement
标注了。这个标注出现在本章中许多例子里,如:
Convection convection(h=0.7, A=1.0)
annotation (Placement(transformation(extent={{10,-10},{30,10}})));
Placement
标注不过建立了一个矩形区域,用以绘制组件的图标。与其他的图形标注相同,我们可以将Placement
标注用record
定义表示:
record Placement
Boolean visible = true;
Transformation transformation "Placement in the diagram layer";
Transformation iconTransformation "Placement in the icon layer";
end Placement;
visible
字段与在此前讨论GraphicItem
标注时的作用一致。也就是说,此项用以控制组件是否被渲染。
transformation
字段定义了如何在示意图中呈现图标。若标注被认为是子系统图标的一部分时,iconTransformation
则定义了该标注此时的呈现方式。一般来说,iconTransformation
仅用于连接器上。因为连接器通常是出现在图标表示里的唯一组件。
Transformation
标注定义如下:
record Transformation
Point origin = {0, 0};
Extent extent;
Real rotation(quantity="angle", unit="deg")=0;
end Transformation;
rotation
字段表示组件图标应旋转多少度。而origin
字段则表明上述旋转所应围绕的位置。最后,extent
字段表示图标渲染区域的尺寸。
连接的显示¶
最后,我们讨论第三个话题,连接的显示。同样,决定如何渲染连接的标注已经出现在许多例子中。现在,我们终于会解释这些信息的意义了。考虑我们热力控制例子中的下列connect
声明:
connect(controller_gain.y, heatSource.u) annotation (Line(
points={{41,40},{50,40},{50,60},{-70,60},{-70,-20},{-61,-20}},
color={0,0,255},
smooth=Smooth.None));
注意到connect
语句后带有标注。尤其要注意,这是一个Line
标注。我们此前已经讨论过Line。标注数据是在这里与当时的数据一致。