Main Content

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

AUTOSAR 基本ソフトウェア サービスとランタイム環境のシミュレーション

参照実装を使用して、基本ソフトウェア メモリと診断サービスへの AUTOSAR コンポーネント呼び出しをシミュレートします。

AUTOSAR 基本ソフトウェア サービスの呼び出しの構成

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

AUTOSAR ソフトウェア コンポーネント モデルで NvM、Dem および FiM サービス インターフェイスへのクライアント呼び出しを実装するには、事前構成済みの NvM、Dem および FiM の呼び出し側ブロックをドラッグ アンド ドロップします。[Client port name][Operation] などの各ブロックのパラメーターには、値が事前に入力されています。ブロック パラメーターを構成することで、たとえば、呼び出すサービス オペレーションを選択します。AUTOSAR ソフトウェア コンポーネントに追加された Caller ブロックを構成するには、モデルを同期します。ソフトウェアで AUTOSAR クライアント サービス インターフェイス、オペレーションおよびポートが作成され、各 Simulink 関数呼び出しが AUTOSAR クライアント ポートとオペレーションにマッピングされます。詳細については、AUTOSAR NVRAM Manager サービスの呼び出しの構成AUTOSAR Diagnostic Event Manager サービスの呼び出しの構成およびAUTOSAR Function Inhibition Manager サービスの呼び出しの構成を参照してください。

以下に示すのは、スロットル位置の統合モデルです。このモデルには、2 つのスロットル位置センサー コンポーネントと、1 つのスロットル位置モニター コンポーネントが統合されています。センサー コンポーネントは、生のスロットル位置センサー (TPS) 値を受け取り、TPS パーセント値に変換します。モニター コンポーネントは、プライマリ センサー コンポーネントとセカンダリ センサー コンポーネントから提供された TPS パーセント値を受け取り、どちらの TPS 信号を通過させるかを決定します。センサー コンポーネントは BSW NvM および Dem サービスを呼び出し、モニター コンポーネントは BSW Dem サービスを呼び出します。

open_system('autosar_bsw_presim');

センサー コンポーネント autosar_bsw_sensor1 および autosar_bsw_sensor2 のそれぞれに Initialize Function ブロックが含まれています。このブロックは NvM サービス インターフェイス NvMService を呼び出します。これらの呼び出しは、Basic Software ライブラリ ブロック NvMServiceCallerを使用して実装されています。各ブロックは、NvMService オペレーション ReadBlock を呼び出すよう構成されています。ReadBlock の呼び出しには、クライアント ポート S1LowSetPoint および S2LowSetPoint が使用されます。autosar_bsw_sensor1 の Initialize Function ブロックを以下に示します。

以下に示すのは、Initialize Function ブロックにおける ReadBlock 呼び出しの NvMServiceCaller ブロックのダイアログ ボックスです。詳細については、NvMServiceCallerを参照してください。

センサー コンポーネント autosar_bsw_sensor1 および autosar_bsw_sensor2 のそれぞれに、Dem サービス インターフェイス DiagnosticMonitor への呼び出しが 2 つ含まれています。両呼び出しは、Basic Software ライブラリ ブロック DiagnosticMonitorCallerを使用して実装されています。各ブロックは、DiagnosticMonitor オペレーション SetEventStatus を呼び出すよう構成されています。SetEventStatus の呼び出しには、クライアント ポート S1StuckLowS1StuckHighS2StuckLowS2StuckHigh が使用されます。

以下に示すのは、1 つ目のセンサー コンポーネントの StuckLow 呼び出しの DiagnosticMonitorCaller ブロックのダイアログ ボックスです。詳細については、DiagnosticMonitorCallerを参照してください。

モニター コンポーネント autosar_bsw_monitor には、Dem サービス インターフェイス DiagnosticMonitor への呼び出しが 1 つと、DEM サービス インターフェイス DiagnosticInfo への呼び出しが 4 つ含まれています。

  • センサー コンポーネントと同様、DiagnosticMonitor 呼び出しは DiagnosticMonitorCaller ブロックによって実装されており、このブロックは SetEventStatus オペレーションを呼び出すよう構成されています。クライアント ポートの名前は TPS です。

  • 4 つの DiagnosticInfo 呼び出しは、Basic Software ライブラリ ブロック DiagnosticInfoCallerを使用して実装されています。各ブロックは、DiagnosticInfo オペレーション GetEventFailed を呼び出すよう構成されています。GetEventFailed の呼び出しには、クライアント ポート TPS1StuckLowTPS1StuckHighTPS2StuckLowTPS2StuckHigh が使用されます。

以下に示すのは、TPS1StuckLow 呼び出しの DiagnosticinfoCaller ブロックのダイアログ ボックスです。詳細については、DiagnosticInfoCallerを参照してください。

Simulink Coder および Embedded Coder のソフトウェアをお持ちの場合、NvM および Dem サービス呼び出しの C コードを生成して ARXML 記述をエクスポートできます。各コンポーネント モデルを開いてビルドします。たとえば、モデル autosar_bsw_monitor をビルドするには、そのモデルを開きます。Ctrl+B キーを押すか、MATLAB コマンド slbuild('autosar_bsw_monitor') を入力します。

モデルのビルド結果を確認するには、コード生成レポートを調べます。

AUTOSAR 基本ソフトウェア サービスの参照実装のシミュレーション用の構成

BSW サービスを呼び出す AUTOSAR コンポーネント モデルのシミュレーションを実行するには、含まれるコンポジション、システムまたはハーネス モデルを作成します。その含まれるモデルで、コンポーネントによって呼び出される NvM サービス オペレーション、Dem サービス オペレーションおよび FiM サービス オペレーションの参照実装を提供します。

AUTOSAR Basic Software ブロック ライブラリにはNVRAM Service ComponentブロックとDiagnostic Service Componentブロックが含まれます。これらのブロックは NvM サービス オペレーション、Dem サービス オペレーションおよび FiM サービス オペレーションの参照実装を提供します。NvM サービス、Dem サービスおよび FiM サービスに対するコンポーネント呼び出しのシミュレーションをサポートするには、含まれているモデル内にこれらのブロックを含めます。ブロックは次の 2 つの方法のいずれかで挿入できます。

  • Simulink Test ハーネス モデルを作成することにより、自動的にブロックを挿入する。

  • 含まれるコンポジション、システムまたはハーネス モデルに手動でブロックを挿入する。

BSW NvM サービス、Dem サービスおよび FiM サービスを呼び出すモデルに Service Component ブロックを自動的に挿入するには、モデル (または含まれるモデル) を開き、Simulink Test テスト ハーネスを作成します (Simulink Test が必要)。詳細については、Create a Test Harness (Simulink Test)を参照してください。テスト ハーネスを作成することでモデルがコンパイルされ、Service Component ブロックが追加され、シミュレーションに必要な端子およびその他の要素が作成されます。

この例では、NvM および Dem サービス呼び出しに Service Component ブロックを手動で挿入します。統合モデル autosar_bsw_presim を開きます。ライブラリ ブラウザーまたは add_block コマンドを使用するか、モデル ウィンドウにブロック名を入力して、モデルに NVRAM および Diagnostic Service Component ブロックを追加します。

open_system('autosar_bsw_presim');
add_block('autosarlibnvm/NVRAM Service Component','autosar_bsw_presim/NVRAM Service Component');
add_block('autosarlibdem/Diagnostic Service Component','autosar_bsw_presim/Diagnostic Service Component');
set_param('autosar_bsw_presim','SimulationCommand','update');

NVRAM Service Component ブロックには、ランタイム環境 (RTE) パラメーターや、[NVRAM Properties] パラメーターなど、事前に値が入力されているパラメーターがあります。パラメーター設定を調べて、NvM サービス オペレーションの使用方法に基づいて変更が必要かどうかを検討します。詳細については、NVRAM Service Componentを参照してください。

RTE タブ テーブルはコンポーネント クライアント ポートとそれぞれの NvM サービス ブロック ID へのマッピングを一覧表示します。テーブルの各列は、基本ソフトウェアの呼び出し側ブロックから NvM サービスへの呼び出しを表します。同じ NvM ブロックを処理する呼び出しは、通常、同じブロック ID を使用します。この例では、NvM ReadBlock クライアント ポートを異なるブロック ID にマッピングします。

Diagnostic Service Component ブロックには、RTE パラメーターや Dem の [Counter-Based Debouncing] パラメーターなど、事前に値が入力されているパラメーターがあります。パラメーター設定を調べて、Dem サービス オペレーションの使用方法に基づいて変更が必要かどうかを検討します。

[Counter-Based Debouncing] パラメーターは、Dem サービスの参照実装で提供されるカウンターベースのデバウンス アルゴリズムを制御します。複数のシミュレーションを実行する際に、イベント ステップ サイズ パラメーターとしきい値パラメーターを調整して、その影響を確認できます。詳細については、Diagnostic Service Componentを参照してください。

RTE タブ テーブルはコンポーネント クライアント ポートとそれぞれの Dem または FiM サービス ID (この例では、イベント ID) へのマッピングを一覧表示します。テーブルの各列は、基本ソフトウェアの呼び出し側ブロックから Dem サービスへの呼び出しを表します。同じイベントを処理する呼び出しは、通常、同じイベント ID を使用します。この例では、Dem SetEventStatus クライアント ポートを異なるイベント ID にマッピングした後、Dem GetEventFailed クライアント ポートを、SetEventStatus ポートと共有されたイベント ID にマッピングします。たとえば、SetEventStatus ポートの S1StuckHighGetFailedEvent ポートの TPS1StuckHigh はイベント ID 1 を共有し、S1StucklowTPS1StuckLow はイベント ID 2 を共有するなどです。

AUTOSAR NvM および Dem サービスへの呼び出しのシミュレーション

統合モデルで NVRAM Service Component ブロックと Diagnostic Service Component ブロックを構成してから、モデルをシミュレーションします。このシミュレーションでは、スロットル位置センサー コンポーネントおよびモニター コンポーネントのモデルで、AUTOSAR NvM および Dem サービス呼び出しを実行します。

open_system('autosar_bsw_simulation');
simOutIntegration = sim('autosar_bsw_simulation');

関連するリンク