Main Content

故障検出ロジックと冗長ロジックをもつチャートのテスト

この例では、操作点を使用して、航空機用エレベーター システムのアクチュエータの故障に対する反応をテストする方法を説明します。"操作点" とは、シミュレーション中の Simulink® モデルの状態のスナップショットです。モデルに Stateflow® チャートが含まれている場合、操作点にはアクティブ ステート、出力データとローカル データ、および永続変数についての情報が含まれます。詳細については、Stateflow チャートの操作点の保存と復元を参照してください。

モデル sf_aircraft は、冗長アクチュエータによって制御される 1 組の航空機用エレベーターの故障検出、分離、回復 (FDIR) のアプリケーションを示します。

Model sf_aircraft

Mode Logic チャートは、4 つのアクチュエータのステータスを監視します。各エレベーターには、プライマリの外部アクチュエータ (ステート LO および RO で表される) とセカンダリの内部アクチュエータ (ステート LI および RI で表される) があります。正常運転では、外部アクチュエータがアクティブになり、内部アクチュエータは待機状態にあります。

Stateflow chart Mode Logic.

アクチュエータが正常に機能している場合、左右のエレベーターは 3 秒後に定常位置に達します。

Scope showing simulation results between t=0 and t=10.

1 つのアクチュエータが故障した場合に何が起こるのかを確認するには、モデルをシミュレートして、t = 3 における操作点を保存し、アクチュエータの故障を反映するようにその操作点を変更してから、t = 3t = 10 の範囲で再びシミュレートすることができます。

このモデルの詳細については、航空機用エレベーターの制御システムの故障の検出を参照してください。

定常状態の操作点の定義

  1. sf_aircraft モデルを開きます。

    openExample("stateflow/FaultDetectionControlLogicInAnAircraftControlSystemExample")
  2. 最終の操作点を保存するようにモデルを設定します。[コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[データのインポート/エクスポート] ペインで次を行います。

    1. [最終状態] を選択し、操作点の名前を入力します。この例では、xSteadyState を使用します。

    2. [最終の操作点を保存] を選択します。

    3. [OK] をクリックします。

  3. このシミュレーション セグメントの終了時間を設定します。[シミュレーション] タブで、[終了時間]3 に設定します。

  4. シミュレーションを実行します。

    このモデルをシミュレートするときに、t = 3 における最終操作点を MATLAB® ベース ワークスペース内の変数 xSteadyState に保存します。

    Scope showing simulation results between t=0 and t=3.

  5. [コンフィギュレーション パラメーター] ダイアログ ボックスの [データのインポート/エクスポート] ペインで、[最終の操作点を保存] パラメーターと [最終状態] パラメーターをクリアします。こうしておけば、前の手順で保存した操作点が上書きされることはありません。

アクチュエータの故障を想定した操作点の値の変更

  1. Mode Logic チャートの操作点情報を含む Stateflow.op.BlockOperatingPoint オブジェクトにアクセスします。

    blockpath = "sf_aircraft/Mode Logic";
    op = get(xSteadyState,blockpath)
    op = 
    
      Block:    "Mode Logic"    (handle)    (active)
      Path:     sf_aircraft/Mode Logic
    
      Contains:
    
        + Actuators          "State (OR)"                    (active)
        + LI_act             "Function"
        + LO_act             "Function"
        + L_switch           "Function"
        + RI_act             "Function"
        + RO_act             "Function"
        + R_switch           "Function"
          LI_mode            "State output data"		sf_aircraft_ModeType [1,1]
          LO_mode            "State output data"		sf_aircraft_ModeType [1,1]
          RI_mode            "State output data"		sf_aircraft_ModeType [1,1]
          RO_mode            "State output data"		sf_aircraft_ModeType [1,1]

    操作点には、ステート、関数、およびデータのリストが階層順に含まれています。

  2. チャートの t = 3 でアクティブになっているステートを強調表示します。

    highlightActiveStates(op)

    アクティブなステートが強調表示されます。外部アクチュエータ 2 台がアクティブになっており、内部アクチュエータ 2 台は待機状態にあります。

    Stateflow chart showing active states.

  3. 左側の外部アクチュエータの故障を反映するように、ステート LO 内のサブステート アクティビティを変更します。

    setActive(op.Actuators.LO.Isolated)

    Stateflow chart showing active states.

    メモ

    関数 setActive により、チャートが適切なステートから出て適切なステートに入るようにすることで、ステートの整合性が維持されます。しかし、この方法では、前にアクティブであったサブステートに対する exit アクションまたは新たにアクティブになったサブステートに対する entry アクションは実行されません。

  4. 変更した操作点をワークスペース変数 xFailure として保存します。

    xFailure = set(xSteadyState,blockpath,op);

アクチュエータの故障後のモデル動作のテスト

  1. モデルの初期状態として操作点を読み込みます。[コンフィギュレーション パラメーター] ダイアログ ボックスの [データのインポート/エクスポート] ペインで、[初期状態] を選択し、チャートの変更された操作点を含む変数 xFailure を入力します。その後、[OK] をクリックします。

  2. テストするシミュレーション セグメントの終了時間を定義します。[シミュレーション] タブで、[終了時間]10 に設定します。

  3. シミュレーションを実行します。

    チャートのアニメーションを見ると、その他 3 台のアクチュエータが、左側の外部アクチュエータの故障に対応していることが分かります。

    • 左側の内部アクチュエータは、左側の外部アクチュエータの故障を補正するために、待機状態からアクティブに切り替わります。

    • 内部アクチュエータ 2 台は同じ油圧系統に接続されているため、右側の内部アクチュエータは待機状態からアクティブに切り替わります。

    • エレベーター 1 基につき 1 台のアクチュエータのみがアクティブになることができるため、右側の外部アクチュエータはアクティブから待機状態に切り替わります。

    Stateflow chart showing active states.

    故障後、どちらのエレベーターも、定常位置を維持し続けています。

    Scope showing simulation results between t=3 and t=10.

参考

モデル設定

オブジェクト

関数

関連するトピック