输入和输出连接器的连接限制

时间:2012-04-27 12:01:48

标签: modelica

我想强制用户无法将输入连接到输入。我期望下面的代码给出编译时错误,但它没有给出任何错误。 我该如何解决这个问题?

另一个问题是包全局编译时常量C。它是一种参数,应该由包的用户提供。 如何在Modelica中实施?

package Pkg

  constant Integer C=3;

  connector Connector
    Real x[C];
  end Connector;

  connector InConn  = input  Connector;
  connector OutConn = output Connector;

  class Base
    InConn[:]  inlet;
    OutConn[:] outlet;
  end Base;

  class A
    extends Base;
    redeclare InConn[1]  inlet;
    redeclare OutConn[1] outlet;
  end A;

end Pkg;

model Test
  import Pkg.*;
  A p;
  A q;
  equation
    connect(p.inlet[1], q.inlet[1]);
end Test;

1 个答案:

答案 0 :(得分:2)

这里有几个问题。主要原因是A中的重新声明不正确。它们应该是对extends子句的修改。但是请注意,它们甚至没有必要,因为它们实际上并没有改变任何东西。指定尺寸应通过参数完成。

同样,常量确实需要是Connector定义的参数。如果连接两个不同大小的连接器,Modelica编译器应该抛出一个错误(具体来说,它应该对连接集中任何参数的值生成一个断言)。

我没有在这台机器上安装Modelica编译器,但我建议你试一试,看看这对你有效:

package Pkg

  connector Connector
    parameter Integer C=3;
    Real x[C];
  end Connector;

  connector InConn  = input  Connector;
  connector OutConn = output Connector;

  class Base
    parameter Integer ni;
    parameter Integer no;
    InConn[ni]  inlet;
    OutConn[no] outlet;
  end Base;

  class A
    extends Base(ni=1, no=1);
  end A;

end Pkg;

model Test
  import Pkg.*;
  A p;
  A q;
equation
  connect(p.inlet[1], q.inlet[1]);
end Test;

希望这会使事情进入编译器将生成正确错误的状态。 Modelica的语义是这样的,两个输入的连接应该触发错误(实际上,这是输入和输出连接器的基本限制)。