0

我想强制用户不能将输入连接到输入。我希望下面的代码给出编译时错误,但它没有给出错误。我怎样才能解决这个问题?

另一个问题是包全局编译时常量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;
4

1 回答 1

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 的语义是两个输入的连接应该触发错误(实际上,这是输入和输出连接器的基本限制)。

于 2012-04-28T07:39:56.273 回答