このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
故障検出ロジックと冗長ロジックをもつチャートのテスト
この例では、操作点を使用して、航空機の昇降舵システムのアクチュエータの故障に対する反応をテストする方法を説明します。"操作点" とは、シミュレーション中の Simulink® モデルの状態のスナップショットです。モデルに Stateflow® チャートが含まれている場合、操作点にはアクティブ ステート、出力データとローカル データ、および永続変数についての情報が含まれます。詳細については、Stateflow チャートの操作点の保存と復元を参照してください。
モデル sf_aircraft
は、冗長アクチュエータによって制御される 1 組の航空機の昇降舵の故障検出、分離、回復 (FDIR) のアプリケーションを示します。
Mode Logic
チャートは、4 つのアクチュエータのステータスを監視します。各エレベーターには、プライマリの外部アクチュエータ (ステート LO
および RO
で表される) とセカンダリの内部アクチュエータ (ステート LI
および RI
で表される) があります。正常運転では、外部アクチュエータがアクティブになり、内部アクチュエータは待機状態にあります。
アクチュエータが正常に機能している場合、左右のエレベーターは 3 秒後に定常位置に達します。
1 つのアクチュエータが故障した場合に何が起こるのかを確認するには、モデルをシミュレートして、t = 3 における操作点を保存し、アクチュエータの故障を反映するようにその操作点を変更してから、t = 3 ~ t = 10 の範囲で再びシミュレートすることができます。
このモデルの詳細については、航空機の昇降舵の制御システムの故障の検出を参照してください。
定常状態の操作点の定義
sf_aircraft
モデルを開きます。openExample("stateflow/FaultDetectionControlLogicInAnAircraftControlSystemExample")
最終の操作点を保存するようにモデルを設定します。[コンフィギュレーション パラメーター] ダイアログ ボックスを開き、[データのインポート/エクスポート] ペインで次を行います。
[最終状態] を選択し、操作点の名前を入力します。この例では、
xSteadyState
を使用します。[最終の操作点を保存] を選択します。
[OK] をクリックします。
このシミュレーション セグメントの終了時間を設定します。[シミュレーション] タブで、[終了時間] を
3
に設定します。シミュレーションを実行します。
このモデルをシミュレートするときに、t = 3 における最終操作点を MATLAB® ベース ワークスペース内の変数
xSteadyState
に保存します。[コンフィギュレーション パラメーター] ダイアログ ボックスの [データのインポート/エクスポート] ペインで、[最終の操作点を保存] パラメーターと [最終状態] パラメーターをクリアします。こうしておけば、前の手順で保存した操作点が上書きされることはありません。
アクチュエータの故障を想定した操作点の値の変更
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]
操作点には、ステート、関数、およびデータのリストが階層順に含まれています。
チャートの t = 3 でアクティブになっているステートを強調表示します。
highlightActiveStates(op)
アクティブなステートが強調表示されます。外部アクチュエータ 2 台がアクティブになっており、内部アクチュエータ 2 台は待機状態にあります。
左側の外部アクチュエータの故障を反映するように、ステート
LO
内のサブステート アクティビティを変更します。setActive(op.Actuators.LO.Isolated)
メモ
関数
setActive
により、チャートが適切なステートから出て適切なステートに入るようにすることで、ステートの整合性が維持されます。しかし、この方法では、前にアクティブであったサブステートに対するexit
アクションまたは新たにアクティブになったサブステートに対するentry
アクションは実行されません。変更した操作点をワークスペース変数
xFailure
として保存します。xFailure = set(xSteadyState,blockpath,op);
アクチュエータの故障後のモデル動作のテスト
モデルの初期状態として操作点を読み込みます。[コンフィギュレーション パラメーター] ダイアログ ボックスの [データのインポート/エクスポート] ペインで、[初期状態] を選択し、チャートの変更された操作点を含む変数
xFailure
を入力します。その後、[OK] をクリックします。テストするシミュレーション セグメントの終了時間を定義します。[シミュレーション] タブで、[終了時間] を
10
に設定します。シミュレーションを実行します。
チャートのアニメーションを見ると、その他 3 台のアクチュエータが、左側の外部アクチュエータの故障に対応していることが分かります。
左側の内部アクチュエータは、左側の外部アクチュエータの故障を補正するために、待機状態からアクティブに切り替わります。
内部アクチュエータ 2 台は同じ油圧系統に接続されているため、右側の内部アクチュエータは待機状態からアクティブに切り替わります。
エレベーター 1 基につき 1 台のアクチュエータのみがアクティブになることができるため、右側の外部アクチュエータはアクティブから待機状態に切り替わります。
故障後、どちらのエレベーターも、定常位置を維持し続けています。
参考
モデル設定
オブジェクト
Stateflow.op.BlockOperatingPoint
|Stateflow.op.OperatingPointContainer
|Stateflow.op.OperatingPointData
関数
highlightActiveStates
|setActive
|get
(Simulink) |set
(Simulink)