0

ユーザーが入力を入力に接続できないように強制したいと思います。以下のコードでコンパイル時エラーが発生すると予想しましたが、エラーは発生しません。どうすればこれを修正できますか?

もう1つの問題は、パッケージグローバルコンパイル時定数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定義のパラメーターである必要があります。サイズの異なる2つのコネクタを接続すると、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のセマンティクスは、2つの入力の接続がエラートリガーするようなものです(実際、これは入力コネクタと出力コネクタの基本的な制限です)。

于 2012-04-28T07:39:56.273 に答える