このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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 の呼び出し側ブロックをドラッグ アンド ドロップします。[クライアント ポート名] や [オペレーション] などの各ブロックのパラメーターには、値が事前に入力されています。ブロック パラメーターを構成することで、たとえば、呼び出すサービス オペレーションを選択します。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
の呼び出しには、クライアント ポート S1StuckLow
、S1StuckHigh
、S2StuckLow
、S2StuckHigh
が使用されます。
以下に示すのは、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
の呼び出しには、クライアント ポートTPS1StuckLow
、TPS1StuckHigh
、TPS2StuckLow
、TPS2StuckHigh
が使用されます。
以下に示すのは、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 が必要)。詳細については、テスト ハーネスの作成 (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 プロパティ] パラメーターなど、事前に値が入力されているパラメーターがあります。パラメーター設定を調べて、NvM サービス オペレーションの使用方法に基づいて変更が必要かどうかを検討します。詳細については、NVRAM Service Componentを参照してください。
RTE タブ テーブルはコンポーネント クライアント ポートとそれぞれの NvM サービス ブロック ID へのマッピングを一覧表示します。テーブルの各列は、基本ソフトウェアの呼び出し側ブロックから NvM サービスへの呼び出しを表します。同じ NvM ブロックを処理する呼び出しは、通常、同じブロック ID を使用します。この例では、NvM ReadBlock
クライアント ポートを異なるブロック ID にマッピングします。
[初期値] タブ テーブルはコンポーネント クライアント ポートとそれぞれのシミュレーション用の初期値を一覧表示します。既定の初期値は 0 です。
Diagnostic Service Component ブロックには、RTE パラメーターや Dem の [カウンターベースのデバウンス] パラメーターなど、事前に値が入力されているパラメーターがあります。パラメーター設定を調べて、Dem サービス オペレーションの使用方法に基づいて変更が必要かどうかを検討します。
[カウンターベースのデバウンス] パラメーターは、Dem サービスの参照実装で提供されるカウンターベースのデバウンス アルゴリズムを制御します。複数のシミュレーションを実行する際に、イベント ステップ サイズ パラメーターとしきい値パラメーターを調整して、その影響を確認できます。詳細については、Diagnostic Service Componentを参照してください。
RTE タブ テーブルはコンポーネント クライアント ポートとそれぞれの Dem または FiM サービス ID (この例では、イベント ID) へのマッピングを一覧表示します。テーブルの各列は、基本ソフトウェアの呼び出し側ブロックから Dem サービスへの呼び出しを表します。同じイベントを処理する呼び出しは、通常、同じイベント ID を使用します。この例では、Dem SetEventStatus
クライアント ポートを異なるイベント ID にマッピングした後、Dem GetEventFailed
クライアント ポートを、SetEventStatus
ポートと共有されたイベント ID にマッピングします。たとえば、SetEventStatus
ポートの S1StuckHigh
と GetFailedEvent
ポートの TPS1StuckHigh
はイベント ID 1 を共有し、S1Stucklow
と TPS1StuckLow
はイベント ID 2 を共有するなどです。
AUTOSAR NvM および Dem サービスへの呼び出しのシミュレーション
統合モデルで NVRAM Service Component ブロックと Diagnostic Service Component ブロックを構成してから、モデルをシミュレーションします。このシミュレーションでは、スロットル位置センサー コンポーネントおよびモニター コンポーネントのモデルで、AUTOSAR NvM および Dem サービス呼び出しを実行します。
open_system('autosar_bsw_simulation'); simOutIntegration = sim('autosar_bsw_simulation');