Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

診断フォールト挿入を使用した AUTOSAR コンポーネントの動作のシミュレーションと検証

この例では、AUTOSAR Diagnostic Event Manager (Dem) の呼び出しを含む Simulink® でモデル化された AUTOSAR コンポーネントの動作をシミュレートして検証する方法を説明します。特定のイベントの診断ステータスをオーバーライドしてテスト カバレッジをすばやく取得したり、一時的なイベント障害を挿入してコンポーネントの回復を検証したりできます。

カバレッジを取得するための AUTOSAR 診断ステータスのオーバーライド

コンポーネント モデルで AUTOSAR Diagnostic Event Manager (Dem) を呼び出して、システムの残りの部分に局所的なエラーを伝達することがよくあります。また、getEventStatus を呼び出して他のシステムの診断ステータスをクエリすることもあります。

イベントのステータスをオーバーライドすることで動作をシミュレートして検証する方法を説明するために、スロットル位置モニター コンポーネントの例を示します。このコンポーネントには、4 つの特定のイベントが最後の評価で失敗したかどうかをクエリするための Diagnostic Event Manager の呼び出しが 4 つ含まれています。これらのイベントのステータスにより、プライマリ センサー入力とセカンダリ センサー入力をシステムの残りの部分に渡すことができるかどうかが決まります。両方のセンサーでイベント障害が報告された場合は、既定値がセンサー入力として渡され、setEventStatus の呼び出しでシステムに一般障害が報告されます。

Screenshot from 2021-11-12 13-52-23.png

このコンポーネントが設計どおりに動作することを検証するために、モデルの分岐を実行できるテスト ハーネス モデルを以下に示します。このテスト ハーネスでは、値 1 および 2 で 2 つのセンサー入力を識別し、Diagnostic Service Component ブロックが GetEventFailed と SetEventStatus の呼び出しのシミュレーションを提供します。Dem Status Override ブロックが追加され、各イベントの UDS ステータス バイトの Test Failed ビットをオーバーライドします。

open_system('autosar_bsw_override_test');

Screenshot from 2021-11-12 15-33-45.png

テスト ハーネス内のコンポーネント例のテスト条件とテスト カバレッジについて視覚的理解を深めるには、[アプリ] ギャラリーから [カバレッジ アナライザー] アプリを使用できます。

Screenshot from 2021-11-12 13-54-26.png

以下の図は、Dem Status Override ブロックが削除された場合のコンポーネント モデルのテスト カバレッジを示しています。GetEventFailed の呼び出しで false が返され、外部入力がない場合は、コンポーネント内の Switch ブロックで判定フル カバレッジを達成できません。

Screenshot from 2021-11-12 15-29-06.png

ハーネスで Dem Status Override ブロックを使用すると、コンポーネントのフル カバレッジを取得できます。

Screenshot from 2021-11-12 15-29-54.png

この例では、Dem Status Override ブロックを使用してテスト カバレッジを取得する方法を示しました。この具体的な例ではスコープが狭くなっており、Test Failed ビットに焦点を当てていましたが、Dem Status Override ブロックを使用して、Unified Diagnostic Service (UDS) ステータス バイトの各ビットで任意の組み合わせを作成するように構成できます。

DemStatusDialog.png

一般に、Dem Status Override ブロックを使用して、UDS ステータス バイトのビットを手動でオーバーライドしたり、ビットで個別にシミュレートしたりできます。[Dialog] を選択してビットを構成する場合は、そのビットのステータスをオーバーライドします。ステータス ビットは、setEventStatus の呼び出しによる変更や、イベントの可用性とオペレーション サイクルの変化の影響に対してロバストです。さらに、Function Inhibition (FiM) などの下流サービスはオーバーライドされたステータスに合わせて応答します。[Input port] を選択した場合は、特定のステータス ビットを接続された入力信号に基づいて更新でき、値がゼロより大きい場合はビットがオンになります。この機能を使用すると、コンポーネントでステータスの特定のビットをオーバーライドしながら、その他のビットでは引き続き個別にシミュレートできます。

コンポーネントの回復を検証するための一時的なイベントの挿入

AUTOSAR には、多くの場合、それぞれのステータスの監視も担うコンポーネント管理システムがあります。このようなシステムでは、そのコンポーネントが障害から成功を再度報告できるポイントまで回復できるかどうかをテストできると便利です。このタイプのテストには、前の例で使用した Dem Status Override ブロックは適していません。このブロックを使用すると、テストされたコンポーネントが成功のステータスを再度報告できないためです。代わりに、Dem Status Inject ブロックを使用してこのタイプのテスト条件を作成できます。

一時的なイベントを挿入してコンポーネントの回復を検証する方法を説明するために、再生式微粒子フィルターのコンポーネントの例を示します。このコンポーネントでは、フィルターの状態が Delay ブロックの状態に格納されます。シミュレーション中に、フィルターの使用率は 20 ~ 80% のノミナル範囲内で徐々に増加します。この使用率は監視され、診断サービスに報告されます。代表的な再生モードも示します。再生が有効になると、フィルターの使用率は急激に低下します。

DemInjectFilter.png

このコンポーネント内でも、診断サービス Test Failed ビットをクエリします。フィルターがしきい値の使用率に達したことを示す立ち上がりエッジが検出された場合、"isRegenerating" データ ストアを true に設定することでコンポーネントは再生サイクルに入ります。

DemInjectMonitor.png

このコンポーネントの自己回復を検証するために、以下に示すテスト ハーネス モデルを作成しました。具体的には、フィルターが使用率のノミナル範囲内にとどまっており、診断イベントの発生時に正しく再生サイクルに入り、そのサイクルから出ることを検証します。コンポーネントのシミュレーション時に、必要に応じて固有の診断イベントを起動することで再生サイクルとノミナル使用率サイクルが絶えず切り替わる必要があります。また、コンポーネントがランタイム環境 (RTE) から診断イベントを受信した場合に再生サイクルをトリガーできることもテストします。

テスト ハーネスは、そのダッシュボードに表示されているゲージでコンポーネント フィルターの使用率を示します。Diagnostic Service Component ブロックは、Diagnostic Event Manager の呼び出しのシミュレーションを提供します。ハーネスでコンポーネント モデルのシミュレーションを実行すると、フィルターが 80% まで徐々に増加し、サイクルを繰り返す前にフィルターが再生されるため 20% に急激に低下することがゲージに示されます。

RTE によって提供される診断イベントから再生をトリガーできることを検証するには、Dem Status Inject ブロックを使用します。ブロックは EventId 1 を使用するように指定されており、これは診断サービス コンポーネントで定義されているコンポーネントのクライアント ポートと一致します。障害タイプは Event Fail に設定されており、イベントが挿入されると Test Failed ビットが true に設定されます。テスト ハーネス モデルで、ダッシュボード ボタンを使用して障害の挿入をトリガーできます。あるいは、自動テスト構成のためにこの障害を入力信号ソースから指定することもできます。テスト ハーネスでコンポーネントをシミュレートすると、フォールト挿入に対するその応答がわかります。上限しきい値に達していなくてもゲージが低下し、コンポーネント モデルが再生サイクルに入ったことがわかるため、ダッシュボード ボタンを使用して障害を挿入したタイミングがわかります。このモデル例は無限に実行されるように構成されているため、[停止] をクリックしてシミュレーションを終了する必要があります。

open_system('autosar_bsw_inject_test');

DemInjectModel.png

この例では、Dem Status Inject ブロックを使用してコンポーネントの回復をテストする方法を示しました。この具体的な例ではスコープが狭くなっており、Test Failed ビットに焦点を当てていましたが、Dem Status Inject ブロックを使用して、Unified Diagnostic Service (UDS) ステータス バイトの各ビットで任意の組み合わせを作成するように構成できます。

DemInjectDialog.png

一般に、Dem Status Inject ブロックを使用して、UDS ステータス バイトのビットを手動でオーバーライドできます。このブロックは、シミュレーションを実行してそのステータスをモデル内の他のブロックに合わせて更新し、回復を示します。Function Inhibition (FiM) などの下流サービスは、シミュレーション全体を通じてこのステータスに合わせて応答します。

参考

|

関連する例

詳細