框图组件 block

非因果建模适合物理系统的建模,系统会自动生成守恒模型。而框图则是基于数学运算的因果建模。至于因果模型什么的,现在还理解不了 😦

标准模块

标准库中的框图(实数)连接器:

connector RealInput = input Real "'input Real' as connector";
connector RealOutput = output Real "'output Real' as connector";

也可以自定义类型和connector

within Project.Examples;

type MyType = Real(unit="MT");    // 定义类型,在分文件存储的包里面,每个文件内只能定义一个类型,下同  

///////////////////////////////////////////////
within Project.Examples;

connector MyInput = input MyType;  // 输入信号连接器

///////////////////////////////////////////////
within Project.Examples;

connector MyOutput = output MyType;  // 输出信号连接器  

///////////////////////////////////////////////
within Project.Examples;

model MyModel                  // 定义简单的计算模型
  MyType mt;                   // 内部变量
  MyOutput mo;
  MyInput mi;

equation
  der(mt) = mi;   // 接收输入信号  
  mo = mt;        // 处理并传递到输出信号  
end MyModel;


///////////////////////////////////////////////
within Project.Examples;

model Test  // 测试
  Modelica.Blocks.Sources.Constant const annotation(
    Placement(visible = true, transformation(origin = {-60, 36}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
  MyModel m;
equation
  connect(m.mi, const.y);
end Test;

需要注意的是,因为没有标注图标信息,所以是看不到连线的。但是不妨碍我们得到正确的仿真结果:

单输出模块

注意模块的定义是block,以单输出模块为例:

partial block SO "Single Output continuous control block"
  extends Modelica.Blocks.Icons.Block;

  RealOutput y "Connector of Real output signal" annotation (Placement(
        transformation(extent={{100,-10},{120,10}}, rotation=0)));
end SO;

多输入单输出模块

可以利用数组的特性,定义任意输入输出的模块:

partial block MISO "Multiple Input Single Output continuous control block"
  extends Modelica.Blocks.Icons.Block;
  parameter Integer nin=1 "Number of inputs";
  RealInput u[nin] "Connector of Real input signals" annotation (Placement(
        transformation(extent={{-140,-20},{-100,20}}, rotation=0)));
  RealOutput y "Connector of Real output signal" annotation (Placement(
        transformation(extent={{100,-10},{120,10}}, rotation=0)));
end MISO;

混合建模

非因果模型比较适合物理建模,而原理框图更适合表示信号传递和数学逻辑。二者可以混用!


至此,就已经能看懂、甚至开发自己的Modelica 系统了。然而最重要的还是要不断地重复、联系、总结、尝试!

📅 2022-08-25 Aachen