Main Content

AUTOSAR ソフトウェア コンポーネントのモデル化

Simulink® では、AUTOSAR Classic Platform 用のソフトウェア コンポーネントの構造と動作を柔軟にモデル化できます。コンポーネントには 1 つまたは複数のランナブル エンティティを含めることができます。またコンポーネントは単一インスタンスにもマルチインスタンスにもできます。コンポーネントの内部動作を設計するために、レートベースや関数呼び出しベースなどの Simulink モデリング スタイルを使用できます。

AUTOSAR ソフトウェア コンポーネントについて

AUTOSAR アプリケーションは相互接続された "ソフトウェア コンポーネント" (SWC) で構成されています。各ソフトウェア コンポーネントは自動車の動作の機能実装をカプセル化しており、適切に定義された外界との接続点をもちます。

Simulink では、次のモデル化を行うことができます。

  • "アトミック" ソフトウェア コンポーネント — アトミック ソフトウェア コンポーネントは、ただ 1 つの自動車電子コントロール ユニット (ECU) 上で実行され、より小さなソフトウェア コンポーネントに分割できません。

  • "パラメーター" ソフトウェア コンポーネント — パラメーター ソフトウェア コンポーネントは AUTOSAR キャリブレーション パラメーターを含むメモリを表し、接続されたアトミック ソフトウェア コンポーネントにパラメーター データを提供します。

Simulink での AUTOSAR モデリングの中心はアトミック ソフトウェア コンポーネントです。パラメーター ソフトウェア コンポーネントの詳細については、AUTOSAR キャリブレーション パラメーターとルックアップ テーブルのモデル化を参照してください。

メモ

このコンテキストでの "アトミック" と Atomic Subsystem の Simulink の概念とを混同しないでください。

AUTOSAR アトミック ソフトウェア コンポーネントは、"ポート" と呼ばれる適切に定義された接続点を経由して、他の AUTOSAR ソフトウェア コンポーネントまたはシステム サービスと相互作用します。ポートは Inport ブロックと Outport ブロックを使用してモデル化するか、Simulink バス端子を使用してモデル化できます。詳細については、Simulink バス端子の使用による AUTOSAR 端子の構成を参照してください。1 つ以上の "ランナブル エンティティ" (ランナブル) によってコンポーネントの動作が実装されます。

実装についての考慮事項

Simulink で AUTOSAR アトミック ソフトウェア コンポーネントを開発するには、コンポーネントの作成の説明に従って AUTOSAR コンポーネントの初期 Simulink 表現を作成します。ARXML ファイルからの AUTOSAR コンポーネントの記述のインポート、または既存のモデル内でのモデル コンテンツに基づいた既定の AUTOSAR コンポーネントの作成のいずれかを行うことができます。結果として得られる表現には以下が含まれます。

  • ポート、ランナブル、インターランナブル変数 (IRV)、パラメーターなど、AUTOSAR 要素をモデル化する Simulink ブロック、接続およびデータ。

  • AUTOSAR 規格で定義されている、ソフトウェア コンポーネント内の AUTOSAR 要素用の保存されたプロパティ。

  • AUTOSAR 要素への Simulink 要素のマッピング。

通常、AUTOSAR コンポーネントの Simulink 表現はレートベース モデルであり、その中に周期的なランナブルが周期的レートをもつアトミック サブシステムとしてモデル化されます。

AUTOSAR のモデル例 autosar_swc を考えます。このモデルは AUTOSAR アトミック ソフトウェア コンポーネントのレートベース実装を示しています。このモデルでは複数のレートを使用して周期的なランナブルを実装しています。Initialize Function ブロックによってコンポーネントを初期化しています。

しかし、コンポーネント設計においてサーバー関数または周期関数呼び出しが必要な場合、関数呼び出しベースのモデルを使用できます。モデルには Simulink Function ブロックまたは周期的レートをもつ Function-Call Subsystem を含めることができます。

AUTOSAR のモデル例 autosar_swc_slfcns を考えます。このモデルは AUTOSAR アトミック ソフトウェア コンポーネントの関数呼び出しベースの実装を示しています。このモデルは Simulink Function ブロックとルート レベルの周期的な Function-Call Subsystem を使用しています。Initialize Function ブロックによってコンポーネントを初期化しています。

AUTOSAR ソフトウェア コンポーネントの設計に周期的なランナブルが含まれる場合、レートベースのモデル化方法と関数呼び出しベースのモデル化方法のどちらをコンポーネントが必要とするかを決定しなければなりません。AUTOSAR コンポーネントの最初の Simulink 表現を作成する前に、周期的なランナブルのモデル化方法を指定します。

  • arxml.importer オブジェクト関数 createComponentAsModel を使用して ARXML ファイルから AUTOSAR コンポーネントの記述をインポートする場合、ModelPeriodicRunnablesAs プロパティを、レートベースの場合は AtomicSubsystem (既定値) に、関数呼び出しベースの場合は FunctionCallSubsystem に設定します。

  • 既存のモデル内に既定の AUTOSAR コンポーネントを作成する場合、レートベースまたは関数呼び出しベースのコンテンツをモデルに作成します。

    • レートベースのモデル化の場合、1 つ以上の周期的レートをもつモデル コンテンツを作成します。AUTOSAR インターランナブル変数をモデル化するには、異なるレートで動作するブロック間のデータ転送を処理する Rate Transition ブロックを使用します。結果のコンポーネントには N 個の周期的なステップ ランナブルがあります。ここで、N はモデルに含まれる離散レートの数を示しています。レートベースの割り込みを表すイベントが、レート モノトニック スケジューリングを使用して周期的なステップ ランナブルの実行を開始します。

    • 関数呼び出しベースのモデル化の場合、モデルの最上位レベルで、Function-Call Subsystem を作成するか、クライアント/サーバー モデリングの場合は、Simulink Function ブロックを作成します。ルート モデルの入力端子と出力端子を追加します。AUTOSAR インターランナブル変数をモデル化するには、信号線を使用して Function-Call Subsystem を接続します。結果のコンポーネントには N 個のエクスポートした関数またはサーバー ランナブルがあります。ここで、N はモデルの最上位レベルにある Function-Call Subsystem または Simulink Function ブロックの数を示しています。関数の呼び出しを表すイベントが、関数ベース ランナブルの実行を開始します。

設計で関数呼び出しベースのモデル化が必要な場合を除いて、既定のレートベースのモデル化を選択します。

たとえば、AUTOSAR ソフトウェア コンポーネントに以下が含まれている場合、AUTOSAR ソフトウェア コンポーネントの状態によっては、レートベースのモデル化が使用できない場合があります。

  • サーバー ランナブル

  • 複数のランナブルから読み取りまたは書き込みが行われるインターランナブル変数 (IRV)

  • 最速レートの倍数ではないレートの周期的なランナブル

  • 異なるレートで同じ読み取りデータまたは書き込みデータにアクセスする複数のランナブル

  • 他のイベントからもトリガーされる周期的なランナブル

  • 同じ周期でトリガーされる複数の周期的なランナブル

AUTOSAR ソフトウェア コンポーネントをモデル化するさまざまな方法の例については、レートベースのコンポーネント関数呼び出しベースのコンポーネントおよびAUTOSAR ランナブルのモデル化パターンを参照してください。

レートベースのコンポーネント

Simulink のレートベース マルチタスク モデリングを使用して、AUTOSAR 複数ランナブルをモデル化できます。まず、複数の周期的レートを含むモデル コンテンツを作成またはインポートします。次のことが可能です。

  • 複数の周期的なランナブルをもつソフトウェア コンポーネントを Simulink に作成する。

  • 複数の周期的なランナブルをもつソフトウェア コンポーネントを ARXML ファイルから Simulink にインポートする。ModelPeriodicRunnablesAs プロパティが AtomicSubsystem に設定された arxml.importer オブジェクト関数 createComponentAsModel を使用します。

  • 既存のレートベース マルチタスキング Simulink モデルを AUTOSAR ターゲットに移行する。

ルート モデルの入力端子および出力端子は AUTOSAR ポートを表しています。また、Rate Transition ブロックは AUTOSAR インターランナブル変数 (IRV) を表しています。

シミュレーションおよび AUTOSAR コード生成に適しているレートベースのマルチタスキング モデルの例を次に示します (この例ではモデル例 mMultitasking_4rates.slx を使用します。)このモデルは AUTOSAR ソフトウェア コンポーネントを表しています。モデルを更新したときに表示される色 (色が [デバッグ] タブの [診断][情報のオーバーレイ] の下で有効になっている場合) は、異なる周期的レートが存在することを表しています。Rate Transition ブロックは、AUTOSAR IRV を表します。

コードを生成するとき、モデル C コードには AUTOSAR ランナブルに対応するレートでグループ化されたモデル ステップ関数が含まれ、それぞれがモデルの各離散レートに対応します (周期的なステップ関数はレートモノトニック スケジューラの方法で呼び出されなければなりません)。詳細については、AUTOSAR ランナブルのモデル化パターンを参照してください。

レートベースの AUTOSAR ソフトウェア コンポーネントには周期的なランナブルと非同期ランナブルの両方を含めることができます。たとえば、JMAAB 型ベータ アーキテクチャでは、非同期トリガー ランナブルが周期的なレートベースのランナブルと相互作用します。

AUTOSAR のモデル例 autosar_swc_fcncalls を考えます。このモデルは、ルート レベルの非同期 (トリガーされる) Function-Call Subsystem を含む AUTOSAR アトミック ソフトウェア コンポーネントのレートベースの実装を示しています。Initialize Function ブロックによってコンポーネントを初期化しています。

詳細については、周期的なレートベース システムへの最上位非同期トリガーの追加を参照してください。

関数呼び出しベースのコンポーネント

モデルの最上位レベルにおいて、Simulink Function-Call Subsystem または (クライアント/サーバー モデリングの場合は) Simulink Function ブロックを使用して AUTOSAR 複数ランナブルをモデル化できます。まず、複数の関数を含むモデル コンテンツを作成またはインポートします。次のことが可能です。

  • Function-Call Subsystem または Simulink Function ブロックとしてモデル化された複数のランナブルをもつソフトウェア コンポーネントを Simulink に作成する。

  • 複数のランナブルをもつソフトウェア コンポーネントを ARXML ファイルから Simulink にインポートする。ModelPeriodicRunnablesAs プロパティが FunctionCallSubsystem に設定された arxml.importer オブジェクト関数 createComponentAsModel を使用します。

  • 既存の関数ベースの Simulink モデルを AUTOSAR ターゲットに移行する。

ルート モデルの入力端子および出力端子は AUTOSAR ポートを表しています。また、Function-Call Subsystem を接続する信号線は AUTOSAR インターランナブル変数 (IRV) を表しています。

複数ランナブル エンティティをもち、シミュレーションおよび AUTOSAR コード生成に適している関数呼び出しベースのモデルの例を次に示します (この例では AUTOSAR のモデル例 autosar_swc_slfcns を使用します)。このモデルは AUTOSAR ソフトウェア コンポーネントを表しています。SS1 のラベルが付けられた Function-Call Subsystem および Simulink Function ブロック readData は、各動作を実装したランナブルを表しています。Initialize Function ブロックによってコンポーネントを初期化しています。信号線 curValIRV は AUTOSAR IRV を表しています。

コードを生成するとき、モデル C コードには AUTOSAR ランナブルに対応する呼び出し可能なモデルのエントリポイント関数が含まれ、それぞれが最上位モデルの各 Function-Call Subsystem または Simulink Function ブロックに対応します。詳細については、AUTOSAR ランナブルのモデル化パターンを参照してください。

マルチインスタンス コンポーネント

Simulink でマルチインスタンス AUTOSAR ソフトウェア コンポーネントをモデル化できます。たとえば、次のようなことができます。

  • Simulink モデルをマルチインスタンス AUTOSAR ソフトウェア コンポーネントとしてマッピングおよび構成し、その構成を検証します。モデル パラメーター [コード インターフェイスのパッケージ化] (Simulink Coder)[再利用可能な関数] 設定を使用します。

  • 再呼び出し可能なランナブル関数とマルチインスタンス RTE API 呼び出しで C コードを生成します。外部 I/O、キャリブレーション パラメーターおよびインスタンスごとのメモリにアクセスし、マルチインスタンス モードで再利用可能なサブシステムを使用できます。

  • AUTOSAR マルチインスタンス C コードをソフトウェアインザループ (SIL) とプロセッサインザループ (PIL) シミュレーションで検証します。

  • マルチインスタンス AUTOSAR ソフトウェア コンポーネント記述 XML ファイルをインポートおよびエクスポートします。

グローバルな Simulink Function ブロックを含むマルチインスタンス AUTOSAR ソフトウェア コンポーネントとして構成されたモデルのコード生成が可能です。ただし、グローバルな Simulink Function ブロックを含むマルチインスタンス AUTOSAR モデルのシミュレーションはサポートされていません。

メモ

マルチインスタンス AUTOSAR のコード生成は、コードの再利用に準拠しない S-Function を含むモデルや複数の関数呼び出しを一緒にトリガーすることでトリガーされるサブシステムを含むモデルなど、特定のモデル化パターンでは実行できません。

起動、リセット、シャットダウン

AUTOSAR アプリケーションでは、システムの初期化、リセット、終了シーケンス中に、複雑なロジックの実行が必要な場合もあります。AUTOSAR ソフトウェア コンポーネントの起動、リセット、シャットダウン処理をモデル化するには、Simulink ブロックの Initialize FunctionTerminate Function を使用します。

Initialize Function ブロックと Terminate Function ブロックは、初期化イベント、リセット イベント、終了イベントに応答してコンポーネントの実行を制御できます。これらのブロックは、モデルの階層構造のどのレベルにも配置できます。非バーチャル サブシステムは、それぞれ独自の初期化関数、リセット関数、終了関数をもつことができます。下位のモデルでは、Simulink は親モデル内の対応するインスタンスで関数の内容を集約します。

Initialize Function ブロックと Terminate Function ブロックには、それぞれ 1 つの Event Listener ブロックが含まれます。関数のイベント タイプ ([初期化][リセット]、または [終了]) を指定するには、Event Listener ブロックの [イベント タイプ] パラメーターを使用します。さらに、関数ブロックは、その他のブロックの状態を読み取り、書き込みします。既定では、Initialize Function ブロックは、State Writer ブロックを使用して、ブロックの状態を初期化します。同様に、Terminate Function ブロックは、State Reader ブロックを使用して、ブロックの状態を保存します。関数がトリガーされると、状態変数の値が指定されたブロックから読み取られるか、指定されたブロックに書き込まれます。

AUTOSAR モデルは、これらのブロックを使用して、複雑になり得る AUTOSAR 起動、リセット、シャットダウン シーケンスをモデル化できます。これらのサブシステムは、AUTOSAR コンポーネントのモデリング スタイルを問わず動作します(ただし、AUTOSAR 初期化、リセットまたは終了ランナブルのソフトウェアインザループ シミュレーションは、エクスポートされた関数モデリングでのみ動作します)。

AUTOSAR モデルでは、Simulink 初期化、リセット、または終了の各エントリポイント関数を、それぞれ 1 つの AUTOSAR ランナブルにマッピングします。各ランナブルについて、そのランナブルを有効にする AUTOSAR イベントを設定します。一般に、TimingEvent を除き、任意の AUTOSAR イベント タイプを選択できます。

詳細については、AUTOSAR の初期化、リセット、終了ランナブルの設定を参照してください。

参考

| | | | | |

関連する例

詳細