【问题标题】:Modelica connect equationModelica 连接方程
【发布时间】:2013-12-18 14:19:50
【问题描述】:

谁能告诉我我是否可以在模型 Main 连接模型 A 和模型 B 的位置进行如下建模。它给出了错误:6 个方程和 8 个变量,但是如何连接这些模型。

model A
Modelica.Blocks.Interfaces.RealInput ain1;
Modelica.Blocks.Interfaces.RealInput ain2;
Modelica.Blocks.Interfaces.RealInput ain3;
Modelica.Blocks.Interfaces.RealInput ain4;
Modelica.Blocks.Interfaces.RealOutput aout1;
Modelica.Blocks.Interfaces.RealOutput aout2;
end A;

model B
Modelica.Blocks.Interfaces.RealInput bin1;
Modelica.Blocks.Interfaces.RealInput bin2;
end B;

model Main
Modelica.Blocks.Interfaces.RealInput min1;
Modelica.Blocks.Interfaces.RealInput min2;
Modelica.Blocks.Interfaces.RealInput min3;
Modelica.Blocks.Interfaces.RealInput min4;
A a;
B b;
equation
connect(a.ain1,min1);
connect(a.ain2,min2);
connect(a.ain3,min3);
connect(a.ain4,min4);
connect(a.aout1,b.bin1);
connect(a.aout2,b.bin2);
end Main;

【问题讨论】:

    标签: modelica


    【解决方案1】:

    现在,您有 6 个方程(每个 connect 语句一个)。但是,您有 8 个变量(每个 RealInput 和每个 RealOutput 一个)。从数学的角度来看,这意味着您的模型是under-determined,因为您的变量比方程多。

    要解决这个问题,您需要添加两个额外的方程。从逻辑上讲,缺少的链接似乎是A 的两个输出与A 的输入之间的关系。例如,以下模型(我在A 的输入和输出之间添加了这种关系)就可以了:

    model Main  
      model A
        Modelica.Blocks.Interfaces.RealInput ain1;
        Modelica.Blocks.Interfaces.RealInput ain2;
        Modelica.Blocks.Interfaces.RealInput ain3;
        Modelica.Blocks.Interfaces.RealInput ain4;
        Modelica.Blocks.Interfaces.RealOutput aout1;
        Modelica.Blocks.Interfaces.RealOutput aout2;
      equation
         aout1 = ain1 + ain2;
         aout2 = ain3 + ain4;
      end A;
    
      model B
        Modelica.Blocks.Interfaces.RealInput bin1;
        Modelica.Blocks.Interfaces.RealInput bin2;
      end B;  
    
      Modelica.Blocks.Interfaces.RealInput min1;
      Modelica.Blocks.Interfaces.RealInput min2;
      Modelica.Blocks.Interfaces.RealInput min3;
      Modelica.Blocks.Interfaces.RealInput min4;
      A a;
      B b;
    equation
      connect(a.ain1,min1);
      connect(a.ain2,min2);
      connect(a.ain3,min3);
      connect(a.ain4,min4);
      connect(a.aout1,b.bin1);
      connect(a.aout2,b.bin2);
    end Main;
    

    【讨论】:

    • 只是为了给弗洛里安的回答加一点。您原来的 A 模型不是合法的 Modelica。 Modelica 要求每个单独的组件都是平衡的(与未知数一样多的方程)。这允许工具提供更具体的诊断。我本来希望您的 Modelica 编译器说的更像是“无法在模型 'Main' 中实例化 'a',因为模型 'A' 没有正确平衡(2 个未知数,但 0 个方程)。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多