制限と使用方法

FromModelica関数の制限と使用方法。

一般に、パラメータの値を定義するOML式は、モデル評価時にOMLによって計算されます。ただし、式にFromModelica関数で取得した値が含まれている場合、この式はModelica構文に変換され、後でModelicaコンパイラによってバックグラウンドで評価されます。このため、これらの式には制限があります。式の変換は、OMLとModelicaの両方で同じように表現できる場合にのみ可能です。

例えば、AとBを行列とする有効なOML式FromModelicを例にあげます。この構文はModelicaではサポートされておらず、このような式を実装するには中間的な変数を使用する必要があります。そのため、AやBをFromModelicaから取得した場合、上記の式でコンポーネントのパラメータを定義することはできません。

また、OMLの式に対応するOMLがない場合もあります。例えば、Modelicaの有効な式:

if x>0 then 2 else 3

この場合、この構文には相当するOMLがありません。しかし、OMLの関数ifexprを 使えば、その代用が可能です。上記のModelica式の場合、以下のOML式から得ることができます。

ifexpr(x>0, 2, 3)

上記のことから、FromModelicaの使用は、Modelica環境から値を取得することが絶対に必要な状況に限定することが求められます。ここで紹介するほとんどのシンプルな例においては、Modelicaから取得した定数や関数は、OMLで直接定義することが可能です。FromModelica関数は、主に戻り値のオブジェクトにOMLの対応するものがない場合に必要となります。

モデル内の他のコンポーネントのパラメータにアクセスするためにFromModelica関数を使用する場合、特に他のコンポーネントがレコードの場合は、OML構造を使用してダイアグラムのコンテキストに同等のレコードを定義することで回避することも可能です。

同様に、あるブロックのパラメータの値が、モデル内の他のブロックのパラメータの値に依存することは、Twin Activateの通常の動作とは異なります。Twin Activateの異なるブロックのパラメータ間の依存関係は、Context変数とスコープルールの使用により実現されます。しかし、Modelicaコンポーネントでは、このModelica関数は、 FromModelicaを使用して維持されますが、可能な限り避ける必要があります。

FromModelicaを使用すると、Twin Activateは異なる他のModelica構文が使用できます。Modelicaでは、コンポーネントのパラメータが他のコンポーネントのパラメータに依存するだけでなく、その出力が他のブロックパラメータ、さらには出力や入力に依存することがあります。これは、以下の例で見ることができます。Modelica RealExpressionブロックの式は、他のブロック(この場合はRamp )の出力に依存します。FromModelica関数は、Rampブロックのパラメータではなく、その出力を取得するために使用されます。