Modelica Custom Componentの作成
Tutorial Level: Advanced モデルに存在するModelica Standard Libraryブロックを置き換えるためにMoCustomComponentブロックをカスタマイズするプロセスを学習します。
重要: Available only with Twin Activate commercial edition.
Modelica言語を使用して陰的コンポーネントを定義できるように、Modelica Custom Componentブロックが用意されています。このブロックは、そのポート、パラメーター、シミュレーション関数を含め、自由にカスタマイズできます。このブロックを使用すると、既存のModelicaコードを利用して、新しいコンポーネントの作成や既存のModelicaブロックの変更が可能です。
このチュートリアルのファイル
ActiveRC.scm
Modelica Custom Componentの定義
MoCustomComponentブロックのポート、パラメーター、およびシミュレーション関数を定義します。
-
ActiveRC.scmを選択します。
から、このモデルが新しいウィンドウで表示されます。
-
MoCustomComponentブロックをメインダイアグラムの外にドラッグ&ドロップした後、このブロックをダブルクリックします。
からブロックダイアログが開き、このブロックのポート、パラメーター、およびシミュレーション関数を定義するためのタブが表示されます。
-
ブロックダイアログで、ポート(Ports)タブを選択して、入力ポート1つと出力ポート1つを定義する情報を次の図のとおりに入力します。
重要: ModelicaのMOコードを参照すると、どのポートがこのコンポーネントに必要なのかを理解する上で効果的です。
-
ブロックダイアログで、パラメーター(Parameters)タブを選択します。オブジェクトパラメーターの数(Number of Object Parameters)に1と入力します。名前(Name)に'R'、値(Value)にRをそれぞれ入力します。
-
ブロックダイアログで、シミュレーション関数(SimFunction)タブを選択します。
注: シミュレーション関数を書くには、Modelica言語とその継承(拡張)方法に関する一定の知識が必要です。
-
SimFunctionタブで、次の操作を実行します:
- 関数名をResistorに設定します。
- 関数コード(Function code)欄の横にある
をクリックします。開いたテキストエディターで、次のModelicaコードをコピー&ペーストします。
model Resistor "Ideal linear electrical resistor" //MSL 2.2.1 extends Modelica.Electrical.Analog.Interfaces.OnePort; parameter Real R "Resistance"; equation R * i = v; end Resistor;
- OKをクリックします。
Modelica Custom Componentブロックが定義されて、モデルに接続できるようになります。
Modelica Custom Componentの実装
既存のR=1 ResistorブロックをModelica Custom Componentに置き換えます。
-
モデルから、Modelica Componentを選択してカットします。左側のResistor R=1を選択して、カットしたModelica Componentブロックをそこにペーストします。
2つあるResistorブロックの1つがModelica Componentに置き換えられます。モデルは次の図のようになります。
- ダイアグラムの外で右クリックしてコンテキスト(Context)を選択します。
-
コンテキストメニューでR=10と入力してOKをクリックします。
注: コンテキストに入力した値は、この後でスーパーブロックをマスクするステップを実行するために必要です。
- モデルで、Modelica Componentを選択します。
-
リボンでスーパーブロック(Super Block)ツールを選択します:
を選択するか、右クリックしてコンテキストメニューからスーパーブロックを選択します。
選択したModelica Componentがスーパーブロックに変換されます。 -
リボンのマスク(Mask)ツールグループで、自動マスク(Auto Mask)ツール:
をクリックします。
スーパーブロックがマスクされます。 - メインダイアグラムの外で右クリックしてコンテキスト(Context)を選択し、R=10を削除します。
-
ダイアグラムで、SuperBlockをコピーして、残っているResistorブロックR=1を選択して、そこにSuperBlockをペーストします。
2つ目のResistorブロックがSuperBlockに置き換えられます。この結果として、モデルにはSuperBlockとSuperBlock_1という2つのスーパーブロックが存在しています。
- ダイアグラムでSuperBlock_1をダブルクリックします。
-
ダイアログで、Rに1.25を入力します。