Simulink Control Design

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

航空機の周波数領域特性の確認

この例では、Simulink Control Design の Linear Analysis Plots および Model Verification ライブラリにあるブロックを使用する方法を説明します。Simulink Control Design ソフトウェアには、シミュレーション中にモデルの線形応答が周波数領域特性を満たすかどうかを確認するために、Simulink モデルに追加できるブロックが用意されています。この例では、航空機速度制御ループのゲイン余裕と位相余裕が装荷燃料の変化に従って確認されます。

航空機モデル

以下のように航空機の Simulink モデルを開きます。

open_system('scdaircraft')

この航空機モデルは、巡航高度および巡航速度で飛行する長距離型旅客機に基づいて作成されています。航空機は燃料が満載された状態を開始点とし、事前に 8 時間に指定された速度プロファイルに従っています。この Simulink モデルは、速度制御ループが非常に簡略化されたバージョンであり、機体速度を制御するために燃料の流量が調整されます。モデルには、燃料消費をモデル化するための要素、結果として発生する機体質量の変化、および機体速度を制限する非線形ドラフト効果が含まれています。抵抗係数など、モデル内で使用されている定数は、モデル ワークスペースで定義済みで、スクリプトから初期化されます。

ループのゲイン余裕と位相余裕の確認

航空機モデルには、Simulink Control Design Model Verification ライブラリにある Check Gain and Phase Margins ブロックが含まれています。このブロックは、シミュレーション時間の 30 分ごとに Velocity Controller ブロックによって検知されたループの線形化を計算します。

ループのゲイン余裕と位相余裕がこのブロックによって計算され、以下が確認されます。

  • ゲイン余裕が 30 dB より大きい

  • ゲイン余裕が 60°より大きい

余裕の計算中には、ループのフィードバック符号が指定されなければなりません。フィードバック符号を判定するには、IO によって定義済みのパスにフィードバックの和が含まれているかどうかを以下のように確認します。

  • パスに加算ブロックがある場合、正のフィードバックを使用します。

  • パスに加算ブロックがない場合、加算ブロックで定義されているフィードバックを使用します。

Check Gain and Phase Margins ブロックで指定されている線形化 IO には、負のフィードバックのある加算ブロックがあります。したがって、ゲイン余裕および位相余裕を計算するために使用するフィードバック符号は正でなければなりません。

ブロックには、計算済みのゲイン余裕と位相余裕が表形式で表示されます。[プロットの表示] ボタンをクリックして、表形式で開きます。

ブロック内の [アサーション] タブでは、ゲイン余裕および位相余裕が満たされなかった場合など、アサーションが失敗したときの警告のスローを指定します。

モデルには、Simulink Control Design Linear Analysis Plots ライブラリにある Nichols Plot ブロックも含まれています。このブロックは、シミュレーション中の燃料質量の低下に伴うループ応答を計算します。Generate dynamic range events ブロックは、燃料質量がその最大質量の 10% の倍数になるごとに立ち上がりエッジを生成します。これらの立ち上がりエッジは、線形化をトリガーし、ニコルス線図に結果を表示します。[ブロック パラメーター] ダイアログ ボックスの [プロットの表示] を使用するとニコルス線図が開きます。

モデル内の Signal Builder ブロックは、航空機の速度プロファイルを定義します。Simulink Verification and Validation ソフトウェアがインストールされている場合、このブロックをダブルクリックすると、モデル内に含まれているチェック ブロックを表示する Verification Manager Tool が表示されます。詳細は、「Verification Manager の使用」を参照してください。

指定されているゲイン余裕と位相余裕が満たされているかどうかを確認するには、Signal Builder ブロックのウィンドウまたは Simulink モデルの [シミュレーションの開始] ボタンをクリックしてモデルをシミュレーションします。

sim('scdaircraft');
Warning: Assertion detected in 'scdaircraft/Check Gain and Phase Margins' at
time 27020.4 

図には以下の項目が表示されます。

  • 制御ループが線形化された時刻

  • 計算済みのゲイン余裕と位相余裕

指定された範囲外の余裕は、赤で表示されます。シミュレーションの終盤に燃料質量と機体速度が低下したときに位相余裕が限界を超えています。ニコルス線図には、装荷した燃料と機体速度の変化とともに、小規模なループ応答の変動が示されています。

この図は、線形化の計算が正確に 30 分ごとに行われたのではなく、30 分前後で計算されたことを示しています。これは、ブロックのゼロクロッシング検出が有効になっていないためです。ブロックのゼロクロッシングを有効にすると、正確に 30 分の間隔で線形化が計算されるようになりますが、シミュレーションの実行時間が増加する可能性があります。

[ブロック パラメーター] ダイアログ ボックスの [ゼロクロッシング検出を有効にする] オプションをオンにするか、ブロック コマンド ライン API を使用して以下のようにゼロクロッシング検出を有効にします。

set_param('scdaircraft/Check Gain and Phase Margins','ZeroCross','on')
sim('scdaircraft');
Warning: Assertion detected in 'scdaircraft/Check Gain and Phase Margins' at
time 27000 

線形システムのログ

Check Gain and Phase Margins ブロックの [ログ] タブでは、計算された線形システムがワークスペース変数に保存されるように指定できます。

線形システムは、time フィールドと values フィールドのある構造体にログされます。

LinearAircraft
LinearAircraft = 

              time: [17x1 double]
            values: [4-D ss]
         blockName: 'scdaircraft/Check Gain and Phase Margins'
    assertionValue: [17x1 logical]

values フィールドは、線形システムを LTI 状態空間システムの配列として保存します (詳細は、Control System Toolbox ドキュメンテーションの「LTI モデルの配列LTI モデルの配列」を参照してください)。

個別のシステムは、values フィールド内にインデックス化することで取得できます。

L = LinearAircraft.values(:,:,17)
L =
 
  a = 
                 scdaircraft/  scdaircraft/  scdaircraft/
   scdaircraft/      -0.01122             0             0
   scdaircraft/      -0.01184             0             0
   scdaircraft/        0.7492             0       -0.4326
 
  b = 
                 Velocity Con
   scdaircraft/        0.3774
   scdaircraft/             0
   scdaircraft/             0
 
  c = 
                 scdaircraft/  scdaircraft/  scdaircraft/
   Velocity Con    -1.998e-15             1       -0.4326
 
  d = 
                 Velocity Con
   Velocity Con             0
 
Continuous-time state-space model.

Simulink モデルを閉じます。

bdclose('scdaircraft')
clear('LinearAircraft','L')