Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

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

操作点とは、シミュレーション中の特定の時間における Simulink® モデルのステートのスナップショットです。Stateflow® チャートの場合、操作点には以下が含まれます。

  • チャートステートのアクティビティ

  • チャートのローカル データの値

  • チャートの出力データの値

  • MATLAB® 関数内および Truth Table ブロック内の固定データの値

詳細については、Stateflow での操作点の使用を参照してください。

チュートリアルの目的

エレベーター システムのアクチュエータが 1 台以上故障した場合の sf_aircraft モデルの応答をテストするとします。このモデルの仕組みの詳細については、航空機用エレベーターの制御システムの故障の検出を参照してください。

この Mode Logic チャートでは、2 基のエレベーターに使用されているアクチュエータのステートが監視されます。各エレベーターには、外部 (第 1) アクチュエータと内部 (第 2) アクチュエータがあります。正常運転では、外部アクチュエータがアクティブになり、内部アクチュエータは待機状態にあります。

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

1 台以上のアクチュエータが故障した場合に t = 3 で何が起こるのかを知りたいとします。そこでこのモデルをシミュレーションし、t = 3 で操作点を保存してから、この操作点を読み込んで変更します。その後、t = 3 ~ 10 の範囲で再びシミュレーションします。

手順タスク参照
1チャートの操作点を定義します。操作点の定義
2操作点を読み込み、アクチュエータが 1 台故障したという想定で値を変更します。アクチュエータ 1 台の故障を想定した操作点の値の変更
3モデルを実行して、変更した操作点をテストします。1 台の故障を想定した操作点のテスト
4アクチュエータが 2 台故障したという想定で操作点の値を変更します。アクチュエータ 2 台の故障を想定した操作点の値の変更
5モデルを再度実行して、変更した操作点をテストします。2 台の故障を想定した操作点のテスト

操作点の定義

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

  2. 操作点の保存を有効にします。

    1. [モデル コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[データのインポート/エクスポート] ペインに移動します。

    2. [最終状態] チェック ボックスをオンにします。

    3. 名前を入力します。例: xFinal

    4. [最終の操作点を保存] チェック ボックスをオンにします。

    5. [適用] をクリックします。

     プログラムでの同等の機能

  3. このシミュレーション セグメントの終了時間を定義します。

    1. [モデル コンフィギュレーション パラメーター] ダイアログ ボックスで、[ソルバー] ペインに移動します。

    2. [終了時間] として 3 を入力します。

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

     プログラムでの同等の機能

  4. シミュレーションを開始します。

    このモデルをシミュレーションするとき、t = 3 におけるすべての操作点を MATLAB ベース ワークスペース内の変数 xFinal に保存します。

  5. 操作点の保存を無効にします。

    こうしておけば、前の手順で保存した操作点が上書きされることはありません。

    1. [モデル コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[データのインポート/エクスポート] ペインに移動します。

    2. [最終の操作点を保存] チェック ボックスをオフにします。

    3. [最終状態] チェック ボックスをオフにします。

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

     プログラムでの同等の機能

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

  1. 操作点の読み込みを有効にします。

    1. [モデル コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[データのインポート/エクスポート] ペインに移動します。

    2. [初期状態] チェック ボックスをオンにします。

    3. チャートの操作点を含んでいる変数 xFinal を入力します。

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

     プログラムでの同等の機能

  2. Mode Logic チャートの操作点の値のオブジェクト ハンドルを定義します。

    コマンド プロンプトで、以下のように入力します。

    blockpath = 'sf_aircraft/Mode Logic';
    c = xFinal.get(blockpath);

    ヒント

    モデル ウィンドウでチャートが強調表示されている場合は、gcb (Simulink) を使用してブロックのパスを指定できます。

    c = xFinal.get(gcb);

     操作点に対する get メソッドの使用

  3. 操作点のコンテンツを調べます。

    c = 
    
      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]
    

    チャートの操作点には、ステート、関数およびデータのリストを階層順に収納しています。

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

    コマンド プロンプトで、以下のように入力します。

    c.highlightActiveStates;

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

    ヒント

    ある単一のステートがアクティブであるかどうかをチェックするために、isActive メソッドを使用することができます。たとえば以下のように入力します。

    c.Actuators.LI.L1.Standby.isActive

    このコマンドの戻り値は、ステートがアクティブである場合は true (1)、アクティブでない場合は false (0) です。その他のメソッドについての詳細は、チャートの操作点を操作するためのメソッド を参照してください。

  5. アクチュエータ 1 台の故障を反映するようにチャート内のステート アクティビティを変更します。

    左側の外部 (LO) アクチュエータが故障したと仮定します。ステートを変更するには、以下のコマンドを使用します。

    c.Actuators.LO.Isolated.setActive;

    新たにアクティブになったサブステートが、チャート内で強調表示されます。

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

  6. 次のコマンドを使用して、変更した操作点を保存します。

    xFinal = xFinal.set(blockpath, c);

1 台の故障を想定した操作点のテスト

  1. テストするシミュレーション セグメントの終了時間を新たに定義します。

    1. [モデル コンフィギュレーション パラメーター] ダイアログ ボックスの [ソルバー] ペインに移動します。

    2. [終了時間] として 10 を入力します。

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

    開始時間は新たに入力する必要がありません。シミュレーションは、前回中断したところから再開されます。

     プログラムでの同等の機能

  2. シミュレーションを開始します。

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

    アクチュエータ切替わり理由
    左側の内部 (LI)待機状態からアクティブへ左側のエレベーターが左側の外部 (LO) アクチュエータの故障を補正する必要があるため。
    右側の内部 (RI)待機状態からアクティブへ内部アクチュエータ 2 台は同じ油圧系統に接続されているため。
    右側の外部 (RO)アクティブから待機状態へアクチュエータはエレベーター 1 基につき 1 台のみがアクティブになることができるため。

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

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

  1. アクチュエータ 2 台の故障を反映するようにチャート内のステート アクティビティを変更します。

    左側の内部 (LI) アクチュエータも故障したと仮定します。ステートを変更するには、以下のコマンドを使用します。

    c.Actuators.LI.Isolated.setActive;
  2. 次のコマンドを使用して、変更した操作点を保存します。

    xFinal = xFinal.set(blockpath, c);

2 台の故障を想定した操作点のテスト

  1. [モデル コンフィギュレーション パラメーター] ダイアログ ボックスで、終了時間が 10 になっていることを確認します。

  2. シミュレーションを実行してください。

    アクチュエータが 2 台とも故障しているため、左側のエレベーターは機能しなくなります。右側のエレベーターは、定常位置を維持しています。

チャートの操作点を変更して、アクチュエータの故障について右側のエレベーターの応答をテストすると、同様の結果が得られます。

関連するトピック