Main Content

モデル線形化器での線形化結果のトラブルシューティング

この例では、モデル線形化器で線形化アドバイザーを使用して、振子モデルの線形化をデバッグする方法を説明します。

モデルの設定

Simulink® モデルを開きます。

mdl = 'scdpendulum';
open_system(mdl)

振子角度の初期条件は、垂直の不安定な平衡状態 0 度から反時計回りに 90 度です。振子角速度の初期条件は 0 deg/s です。この状態を維持するための定格トルクは -49.05 N m です。この構成はモデルの初期条件として保存されています。

モデル線形化器を開いてモデルを線形化する

モデル線形化器を開くには、Simulink モデル ウィンドウの [アプリ] タブで [モデル線形化器] をクリックします。

モデルの初期条件でモデルを線形化するには、モデル線形化器[線形解析] タブで [ボード線図] をクリックします。

モデルが線形化され、その周波数応答がプロットされます。

ボード線図からわかるように、システムはゼロに線形化され、トルクは角度や角速度に影響を与えません。その理由を調べるには、線形化アドバイザーを使用することができます。

アドバイザーを有効にした状態でのモデルの線形化

モデルを再度線形化してアドバイザーを生成するには、[線形化アドバイザー] を選択してから [ボード線図 1] をクリックします。

モデルが線形化されて "linsys2_advisor" ドキュメントが作成され、[アドバイザー] タブが開きます。

線形化パスの強調表示

現在の線形化の線形化パスを表示するには、[アドバイザー] タブで [線形化パスの強調表示] をクリックします。Simulink モデルで、ブロックが次のように強調表示されます。

  • 青はモデルの線形化に数値的な影響を与えます。

  • 赤は線形化パス上にありますが、現在の操作点とブロック パラメーターではモデルの線形化に影響しません。

便宜上、振子サブシステムの下にあるブロックのみが表示されています。

この場合はモデルがゼロに線形化されているため、線形化に寄与するブロックはありません。

アドバイザーを使用した問題が生じる可能性のあるブロックの調査

linsys2_advisor ドキュメントには、線形化で問題が生じる可能性のあるブロックの一覧表が含まれています。

特定のブロック線形化に関する詳細を表示するには、表の対応する行の [ブロック情報] をクリックします。

この場合、1 つの Saturation ブロックと 2 つの Trigonometric Function ブロックの合計 3 つのブロックがアドバイザーによって報告されています。診断されている Saturation ブロックを最初に調べます。そのためには、表の最初の行にある [ブロック情報] をクリックします。

Saturation ブロックには 2 つの診断メッセージがあります。最初のメッセージは、入力操作点が -49.05 なので、ブロックがその飽和の下限 -49 の外で線形化されていることを示します。このメッセージには、ブロックをゲインとして線形化できることも述べられています。こうすると入力操作点に関係なく、ブロックは 1 として線形化されます。これを行うには、まず [ブロックをゲインとして線形化] をクリックして、ブロック ダイアログ ボックスの対応するパラメーターを強調表示します。その後、[線形化時にゲインとして扱う] パラメーターを選択します。

2 番目のメッセージは、このブロックの線形化によってモデルがゼロに線形化されることを示しています。[線形化] セクションからわかるように、ブロックはゼロに線形化されます。したがって、ブロックの線形化の変更は、非ゼロのモデル線形化を取得するための最初のステップとして良い方法です。

モデルの再線形化

Saturation ブロックをゲインとして扱うよう設定した後、モデルを再度線形化します。ここでは 2 つの Trigonometric Function ブロックに関する診断は無視することにします。

モデルを再線形化するには、[線形解析] タブで [ボード線図 1] をクリックします。[ボード線図 1] ドキュメントが更新されて、linsys3 の非ゼロの応答が表示されます。

対応する linsys_advisor3 ドキュメントには Saturation ブロックがリストされなくなります。ただし、2 つの Trigonometric Function ブロックは引き続き表示されています。

線形化パスを強調表示します。

DebugPendulumLinearizationExample_12.png

この時点では、リストされた Trigonometric Function ブロックを通過するパスを除いて、大半のブロックがモデルの線形化に寄与しています。

これらのブロックが線形化に寄与しない理由を調べるため、linsys3_advisor ドキュメントからこれらのブロックに移動します。たとえば、表の 2 行目にある [ブロック情報] をクリックします。

DebugPendulumLinearizationExample_13.png

この Trigonometric Function ブロックでは線形化がゼロであり、入力操作点は π/2=1.5708 です。

入力について関数 sin の 1 次導関数を取ることにより、ブロックの線形化を解析的に求めることができます。

usin(u)=cos(u)

したがって、u=π/2 で評価される場合のブロックの線形化はゼロになります。入力のソースは 2 次積分器の最初の出力で、これは状態 theta に依存します。よって、このブロックは θ=π/2+kπ の場合にゼロに線形化します。ここで k は整数です。angle_wrap サブシステムのもう片方の Trigonometric Function にも同じ条件が適用されます。

これらのブロックでゼロ線形化が予想されていなければ、操作点の状態 theta を変更して、モデルを再線形化することができます。

プリビルドのアドバイザー クエリの実行

線形化アドバイザーにはブロック診断をフィルター処理する一連のプリビルド クエリが用意されています。たとえば、[線形化のアドバイス] クエリは、アドバイザーの最初の作成時にパス上に次のようなブロックを含む場合に実行される既定のクエリです。

  • ブロック線形化に関する診断メッセージがある。

  • ゼロに線形化する。

  • 代替の線形化をもつ。

他のプリビルド クエリを実行するには、[アドバイザー] タブの [クエリ] ギャラリーにあるクエリをクリックします。たとえば、[パス上の零点と I/O のペア] をクリックします。

このクエリは、いずれの入力チャネルからも到達できない出力チャネルがあるか、またはいずれの出力チャネルにも影響しない入力チャネルがある線形化をもつブロックを返します。たとえば、表の 2 番目のブロックは atan2 として構成されている Trigonometric Function ブロックです。このブロックの最初の入力は、唯一の出力に到達できません。

カスタム クエリの作成と実行

線形化アドバイザーにはカスタムのクエリを作成するためのクエリ ビルダーも用意されています。これらのクエリは、モデルで特定の条件に一致するブロックを検出するために使用できます。たとえば、数値的に摂動されたすべての SISO ブロックを見つけるには、まずクエリ ビルダーを開きます。これを行うには、[アドバイザー] タブで [新しいクエリ] をクリックします。

[クエリ ビルダー] ダイアログ ボックスで次を行います。

  1. [クエリ名]sisopert に指定します。

  2. ドロップダウン リストで Has 'Ny' Outputs' を選択し、[出力] ボックスで 1 を指定します。

  3. クエリに別のコンポーネントを追加するには、[クエリに追加] をクリックします。

  4. 2 番目のドロップダウン リストで Has 'Nu' Inputs' を選択し、[入力] ボックスで 1 を指定します。

  5. [クエリに追加] をクリックします。

  6. 3 番目のドロップダウン リストで Perturbation を選択します。

[クエリの実行] をクリックします。

指定のクエリ条件に一致するブロックが linsys3_advisor ドキュメントに表示され、sisopert クエリが [クエリ] ギャラリーに追加されます。

"sisopert" クエリを削除するには、[アドバイザー] タブで [クエリの削除] をクリックして、[sisopert] を選択します。

アドバイザーのエクスポートと MATLAB スクリプトの生成

線形化アドバイザーのコマンド ライン関数を使用してモデルの線形化をデバッグすることもできます。アドバイザー オブジェクトを MATLAB® ワークスペースにエクスポートするには、[エクスポート] をクリックします。次に [アドバイザーのエクスポート] ダイアログ ボックスで、エクスポートするアドバイザーを 1 つ以上選択します。たとえば、linsys3_advisor を選択します。

[エクスポート] をクリックします。

あるいは、線形化、アドバイザーの抽出、カスタム クエリの生成、およびクエリの実行を自動化する MATLAB スクリプトを生成することもできます。このスクリプトを生成するには、[エクスポート] 分割ボタンをクリックしてから、[スクリプトの生成] を選択します。

参考

アプリ

関連するトピック