2012-04-27 33 views
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; 

答えて

2

ここにいくつかの問題があります。主なものは、Aの再宣言が正しくないということです。それらはextends句の変更でなければなりません。しかし、実際には何も変えないので、それらは必要ではないことにも注意してください。サイズを指定するには、パラメータを使用する必要があります。

同様に、定数は本当にあなたのConnector定義のパラメータである必要があります。 Modelicaコンパイラは、サイズの異なる2つのコネクタを接続するとエラーが発生します(具体的には、接続セット内のパラメータの値にアサーションを生成する必要があります)。

私はこのマシンにインストールされている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つの入力の接続が(実際には、その入力と出力コネクタの基本的な制限である)エラーをトリガーするようなものです。

+0

多くのおかげで、それは私の問題を修正!混乱した接続に関しては、私は失敗したアサートを得て、それで十分です。 – Ali

+0

Ooops、そうではありません。クラスはパッケージへのアクセスも必要です - グローバル 'C'とそれらのクラスはコネクタを持っていません。したがって、コネクタークラスの中で 'C'を動かすと、すべてが破壊されます。別の質問が出るかもしれません。 – Ali

+0

パッケージレベルを一定にして、パッケージレベルを定数としてコネクタのパラメータを初期化することはできます。しかし、なぜあなたの 'x'配列にアクセスできないコンポーネントはそのサイズを知る必要がありますか?私は、ここでより根本的な建築上の問題があると思います。 –

関連する問題