チュートリアル:モデル階層とパラメーター化の使用

PIDコントローラーとモデルの動的挙動を水タンクモデルに追加する方法を学習します。コンテキスト変数を使用してモデルをパラメーター化する方法およびスーパーブロックをマスクしてモデル階層の詳細を非表示にする方法を学習します。

このチュートリアルのファイル

Watertank.scm

チュートリアルで構築するモデルの完成版と、チュートリアルを完了するために必要なすべてのファイルは、次の場所にあります:<installation_directory>/tutorial_models/

水タンク問題の概要

水タンクモデルで、タンクへの水の流量を調整するPIDコントローラーを追加します。

次の流動方程式は水タンクモデルを表しています。

タンクへの水の流入率qinを制御すると、指定された時間内で水位hに達することができます。このシステムモデルの入力と出力はそれぞれ1つのみ(qinとqout)なので、水の流量を制御するには従来型のPIDコントローラーを追加する必要があります。

PIDコントローラーは、基本的な代数ブロックと積分ブロックから構成されるスーパーブロックとして組み込みます。PIDコントローラーの比例項、積分項、微分項の係数は、OMLコマンドで編集可能なコンテキスト変数として定義されます。

スーパーブロック内のコントローラーはマスクされ、通常のActivateブロックのように見えます。スーパーブロックの内容はマスクによって非表示になりますが、スーパーブロックをダブルクリックするとPIDパラメーターにアクセスすることはできます。

PIDコントローラーの構築

水流を調節するPIDコントローラーによるモデルを作成します。

  1. ribbonで、Filesツールグループのをクリックします。
  2. 新しいモデルをwatertank_practice.scmという名前で保存します。
  3. Palette Browserで、次のブロックをダイアグラムに追加します。
    • Activate #menucascade-separatorMathOperations#menucascade-separator Gainから、Gainブロックを3つドラッグ&ドロップします。
    • Activate #menucascade-separatorDynamicalから、Integralブロックをドラッグ&ドロップします。
    • Activate #menucascade-separatorDynamicalから、Derivativeブロックをドラッグ&ドロップします。
    • Activate #menucascade-separatorMathOperationsから、Sumブロックをドラッグ&ドロップします。
  4. ブロックを次の図のように配置します:
  5. 各Gainブロックをダブルクリックし、ゲイン(Gain)パラメーターの値を入力してOKをクリックします。
    • 上側のGainブロックについてはPと入力します。
    • 中央のGainブロックについてはIと入力します。
    • 下側のGainブロックについてはDと入力します。
    NoteColonSymbol パラメーターに、値であるPIDを割り当てることにより、その値が本チュートリアルの後の部分で定義するコンテキスト変数を表すことを示しています。
    ブロックは次の図のようになります:


  6. Sumブロックをダブルクリックします。入力数(Number of inputs)に3と入力します。Signsテーブルのすべての入力に“+”を割り当てます:
  7. ブロックを次の図のように接続してリンクを調整します。
  8. 領域内をクリックしてカーソルをドラッグし、すべてのブロックを領域選択します。
  9. リボンでスーパーブロックの作成ツールを選択します。
    ダイアグラムにあるブロックがスーパーブロックに変換されます。
  10. SuperBlockをダブルクリックしてダイアグラムを開きます。
  11. Palette Browser#menucascade-separatorActivate#menucascade-separatorPortsから、InputブロックとOutputブロックを1つずつダイアグラムにドラッグ&ドロップします。
  12. ブロックを次の図のように接続します:
    InputブロックとOutputブロックは、スーパーブロック内からスーパーブロック外のブロックへの信号交換のためのインターフェースとして機能します。
  13. 最上位のダイアグラムを表示するには、モデリングウィンドウの空白領域でダブルクリックします。
    入力ポートと出力ポートがスーパーブロックに接続されていることを確認します。
  14. スーパーブロックの名前を変更するため、F2キーを押し、Controllerと入力します。
    スーパーブロックの名前がControllerに変わります。

水タンクの動的挙動のモデル化

3つの流れの方程式に基づいて水タンクの動的挙動を構築します。

  1. Palette Browserで、次のブロックをダイアグラムに追加します。
    • Activate #menucascade-separatorMathOperationsから、Gainブロックを2つドラッグ&ドロップします。
    • Activate #menucascade-separatorMathOperationsから、Sumブロックをドラッグ&ドロップします。
    • Activate #menucascade-separatorMathOperationsから、MathFuncブロックをドラッグ&ドロップします。
    • Activate #menucascade-separatorDynamicalから、Integralブロックをドラッグ&ドロップします。
  2. ブロックの追加後、MathFuncブロックを選択して右クリックし、反転を選択します。Gainブロックの1つにも同じ操作を実行します。
  3. ブロックを次の図のように配置します。
  4. 上側と下側のGainブロックをダブルクリックし、ゲイン(Gain)パラメーターの値を入力してからOKをクリックします。
    • 上側のGainブロックについてはb/Rと入力します。
    • 下側のGainブロックについてはa/Rと入力します。
  5. MathFuncブロックをダブルクリックします。関数(Function)パラメーターに“sqrt”と入力してOKをクリックします。
  6. ブロックを次のように接続します:


  7. Palette Browserで、次のブロックをダイアグラムに追加します。
    • Activate #menucascade-separatorMathOperationsから、Sumブロックをドラッグ&ドロップします。
    • Activate#menucascade-separatorSignalGeneratorsからConstantブロックをドラッグ&ドロップします。
    • Activate #menucascade-separatorSignalViewersから、Scopeブロックをドラッグ&ドロップします。
  8. Constantブロックをダブルクリックします。定数(Constant)パラメーターに10と入力してOKをクリックします。
  9. ブロックを次のように組み立てて接続します:


  10. ダイアグラム上でクリック&ドラッグによる領域選択で、次の図のように複数のブロックを選択します:


  11. 右クリックしてスーパーブロックを選択します。
    ダイアグラムの選択された領域内にあるブロックがスーパーブロックに変換されます。スーパーブロック操作により、新しいスーパーブロックはダイアグラム内の既存のブロックに自動的にリンクされます。
  12. プロパティエディターで新しいスーパーブロックを選択します。名前欄をダブルクリックし、Watertankという名前を入力します。
  13. ダイアグラム内の他のブロックに対するWatertankブロックの接続を次のように修正します。


  14. モデルを保存します。

コンテキスト変数の定義

ダイアグラムダイアログのコンテキストタブで、メインコンテキスト変数とローカルコンテキスト変数の値を入力します。

  1. ルートダイアグラムの空白領域を右クリックしてコンテキストを選択するか、メニューバーからダイアグラムツールを選択します。
    ダイアグラムダイアログが開きます。
  2. コンテキストタブで、次の図に示すようにOMLコマンドを入力してからOKをクリックします。
    コンテキスト変数P、I、Dはメインダイアグラムのコンテキストで定義されますが、モデルのその他の部分で使用される変数もこれらの値を受け取ります。ただし、ローカルコンテキストで定義された値は除きます。
  3. Watertankスーパーブロックをダブルクリックします。
  4. メインダイアグラムの何もない領域を右クリックしてコンテキストを選択します。
  5. コンテキストタブで、次の図に示すようにOMLコマンドを入力してからOKをクリックします。
    コンテキスト変数Rabは、スーパーブロック内部のダイアグラムで定義します。これらの変数のスコープはセミグローバルです。つまり、これらの変数を認識できるのは、現在のダイアグラムの中および現在のダイアグラムにあるすべてのスーパーブロックの中のみです。Gainブロックは現在のダイアグラム内にあり、変数Rabを含むため、これらの変数はコンテキストタブで指定した値に基づいて定義されます。
  6. リボンで実行を選択します。
    シミュレーションが開始されます。
  7. メインダイアグラムで、Scopeブロックをダブルクリックします。
    Scopeウィンドウが表示されます。
  8. Scopeのビューをウィンドウにフィットさせるには、マウスの中央ボタンをクリックします。
    このカーブは、水タンクの水位が指定水位である10に達したあと、それが維持されることを示しています。

スーパーブロックのマスク

Controllerスーパーブロックをマスクして、PIDの各パラメーターを調整します。

マスクしたControllerスーパーブロックの詳細は確認できなくなりますが、ブロックパラメーターダイアログでパラメーターを編集するプロセスは、通常ブロックと同じです。
  1. ルートダイアグラムでControllerスーパーブロックを選択します。リボンから、自動マスクツールを選択します。
    このスーパーブロックが自動的にマスクされます。
  2. マスクされたControllerスーパーブロックをダブルクリックします。
    パラメーターダイアログが表示されます。入力としてのパラメーター値IDPは、ルートダイアグラムのコンテキストで定義されたコンテキスト変数です。
  3. Controllerスーパーブロックを選択してから、リボンでマスクの編集ツールを選択します。
  4. 表示されたマスクエディターダイアログで、概要(Short Description )欄にBasic PID Controllerと入力します。
  5. パラメーターごとにをクリックします。表示されたパラメーター作成ダイアログで、次の図に示す情報を入力してOKをクリックします。
  6. パラメーター情報を入力すると、テーブルは次のようになります。
  7. Controllerスーパーブロックをダブルクリックします。パラメーターの説明が更新されているはずです。次の図に示す数値をパラメーターに入力します:
  8. リボンで実行を選択します。
    シミュレーションが開始されます。Scopeウィンドウに以下の結果のプロットが表示されます:
  9. Controllerスーパーブロックをダブルクリックします。Proportional Parameter欄に8と入力します。
  10. もう一度シミュレーションを実行します。プロットは次の図のようになります。
    Scopeウィンドウには、出力が最初に先ほどより急激に増加しますが、設定値を超える量は小さくなるようなグラフが示されます。
  11. モデルを保存します。