ExposableパラメータとModelicaブロック

Modelicaブロックのパラメータの公開について紹介します。

Modelicaブロックによるパラメータの公開

また、Modelicaブロックパラメータの値は、exposableパラメータを使った式で定義することができます。すべてのModelicaブロックパラメータが、公開されたパラメータを持つ式をサポートしているわけではありません。Twin Activateブロックパラメータと同様で、主にブロックパラメータが構造的な場合、制限されます。

ModelicaブロックによるExposableパラメータ

以下は、Sallen-Keyローパスフィルターのモデルです:



フィルターの伝達関数は次のように表現されます:



フィルターは通常、カットオフ周波数( F0 = ω0/(2π), quality factor Q = 1/a, and gain H)で規定されます。これらのパラメータは、このモデルのExposableパラメータとして使用されます。抵抗とコンデンサの値は、これらのパラメータの関数として計算する必要があります。

抵抗とコンデンサの値をフィルターパラメータの関数として定義する方程式系は決定されていません。例えば、C1 and R3は任意に選択でき、他の値は次のように計算されます。

k=2*pi*F0*C1; a=1/Q; m=a^2/4 +(H-1); C2=m*C1; R1=2/(a*k); R2=a/(2*m*k); R4=R3/(H-1);

このOMLスクリプトは、フィルターのモデルを含むダイアグラムのコンテキストに置かれます。そして、このダイアグラムは次のモデルのスーパーブロック内に置かれます。


スーパーブロックの自動マスキングは、モデルのフリーパラメータを決定します:



これで、コード生成が可能になりますが、この場合、フィルターパラメータに加えてR 3とC1が公開されることになります。R3C1の値を一度に設定するには、これらの値をマスクに数値で与えてからコードジェネレータを 適用するなどの方法があります:


コード生成後、次のようなマスクが生成され、公開されたパラメータが表示されます:



想定通り、フィルターのパラメータが公開されました。

モデル内でTwin ActivateとModelicaブロックを混在させる

パラメータの定義、操作、および公開のプロセスは、Twin ActivateブロックとModelicaブロックで同じです。Modelicaブロックと呼ばれるもの、つまりModelicaコンポーネントを表すTwin Activateブロックは、”通常の”Twin Activateブロックと同じようにパラメータ化されています。そのため、Exposableパラメータを持つTwin ActivateブロックとModelicaブロックを同じモデルで使用できるだけでなく、両方のタイプのブロックのパラメータ値を定義するための式で同じExposableパラメータを使用することができます。

ここでは、Modelica ブロックでモデル化した電気機械システムを、Twin Activateブロックで実装した離散時間コントローラで制御する例について考えます。電気機械部は、入力電圧で制御されるDCモーターで、接地されたスプリングダンパーシステムに取り付けられた質量を回転させます。



質量の慣性を mR2/2と仮定します。パラメータmRを 公開します。

この図には、離散伝達関数の"通常"Twin Activateブロックで実現される制御動作も含まれています。


伝達関数の分母は固定(一定のバイアスを除去するために周波数ゼロで無限大のゲインが得られるように選択)、分子(ベクトル)は制御パラメータで、これは公開する必要があります。コントローラの入力は、測定された角度と基準角度の差です。測定された角度は、実際の出力をサンプリングし、測定ノイズを加えて得られます。

次の図に、測定ノイズと基準角が提供されている完全なモデルを示します。スコープは、実際の角度と基準角度をプロットします。サンプリングの周波数は 10Hzに設定されています。パラメータ値は、m=1, R=2 and num= [-0.1,0.04].です。



ブロックにコード生成を適用すると、期待どおりにパラメータが表示されます:



マスクに新しい値を与えることで、異なるパラメータ値でシミュレーションを実行できるようになりました。例えば、Rの値を変えることで、ロバスト性を調べることができます:



同様に、mnumの値も変更することができます。ただし、numの長さは2でなければならず、exposableパラメータのサイズは固定であるため、変更することはできません。特に伝達関数ブロックの場合、分子ベクトルの長さは分母の次数より小さくなければなりません。したがって、例えば伝達関数 -0.01/(z2-z) を指定する場合、numパラメータの値は、通常の [-0.01]ではなく[0,-0.01]に設定する必要があります。

OMLスクリプトを使用してモデルのパラメータスイープを実行すると、この新しいモデルは元のモデルよりもはるかに優れた性能を発揮します。