Main Content

AUTOSAR Function Inhibition Manager サービスの呼び出しの構成

AUTOSAR Classic Platform の場合、AUTOSAR 規格では、重要なサービスを AUTOSAR ランタイム環境 (RTE) で実行される基本ソフトウェア (BSW) の一部として定義しています。例としては、Diagnostic Event Manager (Dem)、Function Inhibition Manager (FiM) および NVRAM Manager (NvM) によって提供されるサービスがあります。AUTOSAR RTE では、AUTOSAR ソフトウェア コンポーネントは通常、クライアント/サーバー通信または送信側/受信側通信を使用して BSW サービスにアクセスします。

AUTOSAR コンポーネントおよびサービスのシステムレベルでのモデル化をサポートするために、AUTOSAR Blockset には AUTOSAR Basic Software ブロック ライブラリが備わっています。このライブラリには、AUTOSAR BSW サービスに対するコンポーネント呼び出しと BSW サービスの参照実装をモデル化するために、事前設定されたブロックが含まれています。このブロックを使用して AUTOSAR BSW サービス インターフェイスに対するクライアント呼び出しをモデル化する方法の詳細については、AUTOSAR 基本ソフトウェア サービス呼び出しのモデル化を参照してください。

AUTOSAR BSW サービスのシミュレーションを実行するライブスクリプトの例については、AUTOSAR 基本ソフトウェア サービスとランタイム環境のシミュレーションAUTOSAR 関数抑止のサービス呼び出しの構成とシミュレーションの例を参照してください。

AUTOSAR 仕様で定義されているように、Function Inhibition Manager は、抑止条件付きの関数識別子 (FID) に基づいて、ソフトウェア コンポーネント ランナブルでの関数の実行を選択的に抑止 (つまり、アクティベーションを停止) する制御メカニズムを提供します。たとえば、FID は、特定のエラーが発生する場合に停止しなければならない機能を表すことができます。

抑止条件は診断イベントのステータスに基づく場合があるため、Function Inhibition Manager は Diagnostic Event Manager に密接に関連しています。たとえば、Diagnostic Event Manager に対してセンサーの故障イベントがレポートされる場合、Function Inhibition Manager は関連する関数識別子を抑止し、対応する機能の実行を停止します。

AUTOSAR Blockset は、関数抑止条件のステータスをクエリでき、診断イベント ステータスに基づいて関数抑止条件を構成できるようにする FiM ブロックと Dem ブロックを提供します。

関数抑止のモデル化

AUTOSAR ソフトウェア コンポーネントは、関数抑止を使用して、Diagnostic Event Manager (Dem) イベントの状態に応じて関数のオンまたはオフを切り替えます。ソフトウェア コンポーネントは、関連する関数の実行の許可または回避により、センサーの成功または失敗などのイベントに反応できます。

Dem の Set Status ブロックがコンポーネント内の新しい機能のモニターとして機能する AUTOSAR ソフトウェア コンポーネント モデルについて検討します。Set Status ブロックを使用して渡される Dem イベントは、センサー失敗などの条件が発生したかどうかを示します。イベント ステータスにより、関連する下流の関数を続行できるかどうかが決まります。この関数は、失敗イベントがレポートされない場合のみ実行されます。

コンポーネント内の新しい機能に対する関数抑止を実装するには、次の手順を実行します。

  1. AUTOSAR ソフトウェア コンポーネント モデルを開きます。

    Set Status ブロックのダイアログ ボックスを開きます。クライアント ポート名とオペレーション値を確認します。クライアント ポートとそのクライアント インターフェイスが AUTOSAR ディクショナリで定義されていることを確認します。

  2. イベント ステータスでセンサーの失敗が示されていない場合のみ実行されるように、新しい機能をモデル化します。次の例では、新しい機能を Enabled Subsystem 内に配置します。

  3. Function Inhibition Caller ブロックをモデルに追加します。ブロックのダイアログ ボックスを開き、FiM FunctionInhibition サービス インターフェイスから [GetFunctionPermission] オペレーションを要求するブロックを構成します。クライアント ポート名とサンプル時間を指定します。

    コード マッピング エディターを開き、[更新] ボタンをクリックします。指定したクライアント ポートとインターフェイスが AUTOSAR ディクショナリで作成され、Get Permission 呼び出し側ブロックが指定した AUTOSAR クライアント ポートとオペレーションにマッピングされます。

  4. Get Permission ブロックを新しい機能を含むサブシステムのイネーブル端子に接続します。このブロックは、新しい機能の関数抑止条件の評価を表します。関数が抑止されず、したがって実行する権限がある場合、Get Permission ブロックは true を返し、サブシステムを有効にします。

    次に、修正後のソフトウェア コンポーネント モデルを示します。

  5. ソフトウェア コンポーネント モデルをテスト ハーネスに配置します。

    シミュレーションの目的で Dem の Get Status と FiM の Get Permission サービスの参照実装を提供するには、テスト ハーネス モデルで、Diagnostic Service Component ブロックを追加します。モデルを更新します。

  6. Diagnostic Service Component ブロックのダイアログ ボックスを開きます。ダイアログ ボックスの RTE テーブルと FiM テーブルを任意の時点で更新するには、モデルを更新します。

    [RTE] タブで、イベントと関数抑止をトリガーできるイベントの関数識別子を設定します。この例では、モデルの階層構造には 1 つのイベント端子と 1 つの FID 端子のみが含まれるため、[RTE] タブでさらに設定を行う必要はありません。

    モデルの階層構造に複数のコンポーネントに分散する機能を含む、複数の Get Permission ブロックに対する追加の端子が含まれる場合、[RTE] タブを使用して、端子を同じ FID に割り当ててグループ化するか、別の FID に割り当ててそれらを個別に処理します。複数の端子と分散する機能を含む関数抑止の例については、AUTOSAR 関数抑止のサービス呼び出しの構成とシミュレーションを参照してください。

  7. イベントと関数識別子を設定したら、[FiM] タブに切り替えます。[FiM] タブで、Get Permission ブロックで機能を動作させるタイミングを決定する抑止条件を追加し、設定します。

    [FiM] タブに、関数抑止が実装されるモデルの階層構造内の関数を表す関数識別子がリストされます。この例では、モデルの階層構造には FID が 1 つ含まれています。

  8. FID の抑止条件を追加するには、FID を選択し、[Add inhibition condition] ボタンをクリックします。抑止条件の行は、FID の下に表示されます。

    行で、([RTE] タブにリストされているイベント ID と一致する) イベント ID 値を選択します。次に、FID とイベント ID のペアについて、抑止マスク値を選択します。AUTOSAR 仕様で、FiMInhibitionMask 値テーブルのマスク値が定義されます。

    この例では、FID 1 が表す関数は、イベント ID 1 が表すイベントが LAST_FAILED である場合に抑止されます。

  9. ハーネス モデルを更新し、シミュレーションします。

ソフトウェア コンポーネントの開発における次の手順では、以下が行われます。

  • イベントのトリガー方法を指定。

  • 抑止する機能を追加。

AUTOSAR 関数抑止のモデル化の大規模な例については、AUTOSAR 関数抑止のサービス呼び出しの構成とシミュレーションを参照してください。

オペレーション サイクルに対する失敗のスコープの指定

AUTOSAR ソフトウェア コンポーネントでは、オペレーション サイクルは点火サイクル、電源サイクル、ウォーム アップ サイクルまたはオンボード ダイアグノーシス (OBD) サイクルなどの自動車のサイクルを表します。Diagnostic Event Manager サービスを使用して、サイクルの開始、停止、またはクエリの実行を行うことができます。指定の時間内に指定のイベントが失敗したかどうかを判別するためにオペレーション サイクルを使用できます。

オペレーション サイクルにより、シミュレーションは 1 分間のサイクルといった時間間隔に分割されます。各サイクルで、そのサイクル中に診断条件 (イベント) がテストされたかどうか (FiM 条件) が確認され、関数が適宜抑止されます。

BSW ブロック DiagnosticOperationCycleCaller は、[SetOperationCycleState] サービスと [GetOperationCycleState] サービスをサポートします。コンポーネントはサービスを呼び出して、失敗のスコープを時間間隔に指定するために使用される、コンポーネントのオペレーション サイクルを制御します。値 Dem_OperationCycleStateType.DEM_CYCLE_STATE_START で [SetOperationCycleState] を呼び出すと、オペレーション サイクルが開始します。値 Dem_OperationCycleStateType.DEM_CYCLE_STATE_END を渡すと、オペレーション サイクルが終了します。[GetOperationCycleState] を呼び出すと、オペレーション サイクルの現在の状態をクエリします。

DiagnosticOperationCycleCaller ブロックと [SetOperationCycleState] サービスの使用例については、AUTOSAR 関数抑止のサービス呼び出しの構成とシミュレーションを参照してください。

失敗時またはテスト用の関数の可用性の制御

Function Inhibition Manager は、論理的および機能的に先行する関数ブロックが実行されるまで関数ブロックの実行を制限するための抑止条件、または失敗の検証が完了するまで安全システムの実行を制限するための抑止条件をサポートします。ただし、抑止条件に関係なく、機能の使用を制限できます。たとえば、センサー コンポーネントは、失敗時またはその他のシステムの機能のテスト時に、そのセンサー データの読み取りを無効にできます。

BSW ブロック Control Function Available Caller は、特定の機能を抑止する細かいメカニズムを提供する [SetFunctionAvailable] サービスをサポートします。コンポーネントは入力信号値 false と共に [SetFunctionAvailable] を使用して、関連する機能を抑止します。そのため、機能の Get Permission ブロックは 0 を返します。この例では、センサー モニターは [SetFunctionAvailable] を使用して、センサー測定が利用可能かどうかを集中モニター コンポーネントに通知します。

集中モニターは Function Inhibition Caller ブロックと [GetFunctionPermission] サービスを使用して、各センサーによる測定値を考慮するかどうかを決定します。集中モニターには、センサーにあるのと同じ数の Get Permission ブロックがあります。

DIagnostic Service Component ブロックの [FiM] タブは、失敗イベントの詳細を設定します。関数が使用できる場合、[FiM] タブの ID およびマスクの設定により、関数の抑止を制御します。関数が使用できない場合、[GetFunctionPermission] は常に false を返します。

関数抑止のためのサービス呼び出しの構成

関数抑止の実装の一環として、AUTOSAR ソフトウェア コンポーネントの FiM 関連のサービス インターフェイスへのクライアント呼び出しを構成します。次に、関数抑止条件のステータスをクエリするクライアント呼び出しを構成する例を示します。

  1. AUTOSAR コード生成向けに構成されたモデルを開きます。この例では、AUTOSAR 関数抑止のサービス呼び出しの構成とシミュレーションの例に関連するモデル例 autosar_bsw_fimmonitor を使用します。ライブラリ ブラウザーを使用するか、モデル ウィンドウにブロック名を入力して、モデルに FiM ブロック Function Inhibition Caller を追加します。

    この例では、ブロック出力を Terminator ブロックに接続します。

  2. 新しいブロックを開き、パラメーターを確認します。FiM サービス呼び出しの [Client port name]FiM_FunctionInhibition で、[Operation][GetFunctionPermission] です。[Sample time]0.005 に設定すると、モデル内のその他の [GetFunctionPermission] 呼び出し側ブロックと一致します。

  3. コード マッピング エディターを開きます。モデルの Simulink® から AUTOSAR へのマッピングを Simulink 関数呼び出しの変更で更新するために、[更新] ボタン をクリックします。ソフトウェアで AUTOSAR クライアント サービス インターフェイス、オペレーションおよびポートが作成され、各 Simulink 関数呼び出しが AUTOSAR クライアント ポートとオペレーションにマッピングされます。

    たとえばこの例の Function Inhibition Caller ブロック ([GetFunctionPermission] オペレーションが選択されている) では次のようになります。

    • C-S インターフェイス FiM_FunctionInhibition が作成され、FiM_FunctionInhibition の下に、サポートされるオペレーション [GetFunctionPermission] が作成されます。読み取り専用プロパティを使用してオペレーション引数が提供されます。AUTOSAR ディクショナリの、FiM_FunctionInhibition オペレーション [GetFunctionPermission] の引数を次に示します。

    • 既定の名前 FiM_FunctionInhibition をもつクライアント ポートが作成されます。C-S インターフェイス、オペレーションおよび引数の名前とは異なり、クライアント ポート名はカスタマイズできます。クライアント ポートが FiM_FunctionInhibition インターフェイスにマッピングされます。

    • コード マッピング エディターによって Function Inhibition Caller Function Caller ブロックが AUTOSAR クライアント ポート FiM_FunctionInhibition および AUTOSAR オペレーション [GetFunctionPermission] にマッピングされます。

  4. 必要に応じてコンポーネント モデルをビルドし、生成された C コードと ARXML コードを確認します。C コードには、たとえば次のような BSW サービスに対するクライアント呼び出しが含まれます。

      /* FunctionCaller: '<Root>/Function Inhibition Caller' */
      Rte_Call_FiM_FunctionInhibition_GetFunctionPermission
        (&rtb_FunctionInhibitionCaller_o1);

    生成された RTE インクルード ファイルは、サーバー オペレーションの呼び出しポイントを定義します (Rte_Call_FiM_FunctionInhibition_GetFunctionPermission など)。

    ARXML コードでは、サーバー呼び出しポイントとしてコンポーネントによって呼び出される BSW サービス オペレーションを次のように定義します。

    <SERVER-CALL-POINTS>
        <SYNCHRONOUS-SERVER-CALL-POINT UUID="...">
            <SHORT-NAME>SC_FiM_Function_60fb8d34c7807f7b</SHORT-NAME>
            <OPERATION-IREF>
                <CONTEXT-R-PORT-REF DEST="R-PORT-PROTOTYPE">
                 /ThrottlePositionMonitorCompo_pkg/ThrottlePositionMonitorCompo_swc
                 /ThrottlePositionMonitor/FiM_FunctionInhibition
                </CONTEXT-R-PORT-REF>
                <TARGET-REQUIRED-OPERATION-REF DEST="CLIENT-SERVER-OPERATION">
                 /AUTOSAR/Services/FiM/FiM_FunctionInhibition/GetFunctionPermission
                </TARGET-REQUIRED-OPERATION-REF>
            </OPERATION-IREF>
            <TIMEOUT>1.0E-06</TIMEOUT>
        </SYNCHRONOUS-SERVER-CALL-POINT>
        ...
    </SERVER-CALL-POINTS>
  5. コンポーネント モデルのシミュレーションを実行するには、含まれるコンポジション、システム、またはテスト ハーネス モデルを作成します。その含まれるモデルで、FiM の [GetFunctionPermission] サービス オペレーションの参照実装を挿入します。

    AUTOSAR Basic Software ブロック ライブラリには、Diagnostic Service Component ブロックが用意されています。これにより、Dem サービス オペレーションと FiM サービス オペレーションの参照実装が提供されます。含まれるコンポジション、システム、またはハーネス モデルに手動でブロックを挿入することも、Simulink Test™ ハーネス モデルを作成することによって自動的にブロックを挿入することもできます。

    詳細については、シミュレーション用の AUTOSAR 基本ソフトウェア サービス実装の構成を参照してください。

AUTOSAR 関数抑止のサービス呼び出しの構成とシミュレーションの例は、一連のモデル例を提供します。これらは共に、次のような関数抑止の実装の重要な点を示します。

  • 抑止条件のステータスのクエリ実行 (FunctionInhibition オペレーション [GetFunctionPermission])。

  • イベント ステータスに基づく抑止条件の構成 (Diagnostic Service Component ブロックのダイアログ、[RTE] タブと [FiM] タブ)。

  • 失敗のスコープを時間間隔に指定するオペレーション サイクルの定義 (Dem の OperationCycle オペレーション [SetOperationCycleState])。

参考

| | |

関連する例

詳細