AUTOSAR Adaptive ソフトウェア コンポーネントの設定
Simulink® では、AUTOSAR Adaptive Platform 向けのソフトウェア コンポーネントの構造と動作を柔軟にモデル化できます。AUTOSAR Adaptive Platform は、外部のイベントや条件に柔軟に適応しなければならない車載コンポーネントのためのサービス指向アーキテクチャを定義します。
AUTOSAR Adaptive ソフトウェア コンポーネントはサービスを提供し消費します。各ソフトウェア コンポーネントには次が含まれます。
受信したイベントに応答してタスクを実行する自動車用のアルゴリズム。
サービス インターフェイスにそれぞれ関連づけられた要求側ポートと提供側ポート。
関連付けられたイベントと関連付けられた名前空間をもつサービス インターフェイス。
詳細については、AUTOSAR Adaptive ソフトウェア コンポーネントのモデル化を参照してください。
この例では、自動車用アルゴリズムの Simulink 表現を AUTOSAR Adaptive ソフトウェア コンポーネントとして設定します。設定手順では、モデル例 LaneGuidance
と autosar_LaneGuidance
を使用します。
空であるか、関数アルゴリズムが含まれている Simulink モデルを開きます。この例では、ERT アルゴリズム モデル
LaneGuidance
を使用します。[モデル コンフィギュレーション パラメーター] ダイアログ ボックスの [コード生成] ペインを使用して、AUTOSAR Adaptive コード生成用のモデルを設定します。[システム ターゲット ファイル] を
autosar_adaptive.tlc
に設定します。変更を適用します。新しい設定は、他のモデル設定に影響を与えます。たとえば、ターゲット ファイルの選択は以下を行います。
[言語] を
[C++]
に設定します。[コード生成のみ] を選択します。
[ツールチェーン] を
[AUTOSAR Adaptive | CMake]
に設定します。[インターフェイス] 、 [コード インターフェイスのパッケージ化] を
[C++ クラス]
に設定します。
AUTOSAR Adaptive ソフトウェア コンポーネントで使用するための、モデルのアルゴリズム コンテンツを開発します。モデルが空の場合、アルゴリズム内で作成またはコピーします。アルゴリズムの想定されるソースには、他の Simulink モデルのアルゴリズム要素が含まれます。例には、サブシステム、参照モデル、MATLAB Function ブロック、および C Caller ブロックが含まれます。
モデルの最上位レベルにおいて、AUTOSAR Adaptive Platform が AUTOSAR の要求側ポートと提供側ポートのために必要とするイベントベースの通信を設定します。AUTOSAR Blockset は、Event Receive ブロックおよび Event Send ブロックを提供し、必要なイベント/信号の接続を行います。
各ルート入力端子の後に Event Receive ブロックを追加します。これにより、信号の値とデータ型を保持したまま、入力イベントが信号に変換されます。
各ルート出力端子の前に Event Send ブロックを追加します。これにより、信号の値とデータ型を保持したまま、入力信号がイベントに変換されます。
メモ
この手順は、省略することもできます。後の方の手順で、イベント変換ブロックを含む、マッピング完了済みのモデルを提供します。
イベント ブロックを追加および接続したモデル例
LaneGuidance
は次のとおりです。アルゴリズム モデルを AUTOSAR Adaptive ソフトウェア コンポーネントにマッピングします。
アルゴリズム モデルをマッピングするには、[アプリ] タブで [AUTOSAR Component Designer] をクリックします。この例では、モデルがマッピングされていないため、AUTOSAR コンポーネントのクイック スタートが開きます。それ以外の場合、アルゴリズム情報をマッピングするには、右下隅にあるパースペクティブ コントロールをクリックして [コード] を選択するか、API を使用して MATLAB® 関数
autosar.api.create(modelName)
を呼び出します。クイック スタートの手順に従います。[Finish] をクリックしてモデルをマッピングします。
AUTOSAR コードのパースペクティブでモデルが開きます。このパースペクティブは、Simulink 要素の AUTOSAR Adaptive ソフトウェア コンポーネント要素へのマッピングと、既定のプロパティをもつ AUTOSAR Adaptive コンポーネント要素を含む AUTOSAR ディクショナリを表示します。
Adaptive 設定手順を完了した場合は、AUTOSAR Adaptive ソフトウェア コンポーネント モデルを一意の名前で保存します。
いずれかの手順を省略した場合は、マッピング完了済みの AUTOSAR Adaptive ソフトウェア コンポーネントのモデル例
autosar_LaneGuidance
を開きます。AUTOSAR コード パースペクティブと AUTOSAR ディクショナリ (または同等の AUTOSAR のマップ関数とプロパティ関数) を使用して、AUTOSAR Adaptive モデル コンフィギュレーションを詳細に調整します。
モデル ウィンドウでモデル データをチェックし、型またはその他の属性について、マッピング後の調整を行う必要があるか確認します。たとえば、イベント データが設計に対して正しく設定されているか検証します。
AUTOSAR コード パースペクティブで、Simulink 入力端子および出力端子と、AUTOSAR の要求側ポートおよびイベントと提供側ポートおよびイベントとのマッピングを確認します。
AUTOSAR ディクショナリを開くには、入力端子または出力端子を選択し、[AUTOSAR ディクショナリ] ボタン
をクリックします。対応するマッピングされた AUTOSAR ポートのビューで、ディクショナリが開きます。
ポートを選択し、その AUTOSAR 属性 (マニフェスト属性、または要求側ポートについては、サービス検出モードなど) を設定します。
ディクショナリにおいて、サービス インターフェイス ノードを展開して、既定のコンポーネント マッピングによって作成された AUTOSAR イベントを確認できます。
ディクショナリにおいて、各サービス インターフェイスに一意の名前空間を定義できます。モデル例
autosar_LaneGuidance
は、名前空間company::chassis::provided
およびcompany::chassis::required
を対応するサービス インターフェイスについて定義します。モデルをビルドするとき、生成された C++ コードにこのサービス インターフェイス名前空間が使用されます。ディクショナリの XML オプションのビューで、エクスポートされた AUTOSAR XML の特性を設定できます。コンパクトなコードを生成するため、モデル例
autosar_LaneGuidance
では XML オプション [エクスポートされた XML ファイルのパッケージ化] を[単一のファイル]
に設定しています。[モデル コンフィギュレーション パラメーター] ダイアログ ボックスにおいて、モデル例では [コード配置] 、 [ファイル パッケージ化形式] を[コンパクト]
に設定します。
AUTOSAR Adaptive ソフトウェア コンポーネント モデルをビルドします。たとえば、モデル ウィンドウで Ctrl+B キーを押します。モデルをビルドすると、次が生成されます。
AUTOSAR Adaptive Platform 用のモデル アルゴリズムを実装し、共有データ型定義を提供する C++ ファイル。
AUTOSAR Adaptive ソフトウェア コンポーネントの AUTOSAR XML 記述およびアプリケーション配布とサービス構成のマニフェスト情報。
メイン プログラム モジュールを実装する C++ ファイル。
AUTOSAR Runtime Adaptive (ARA) 環境のヘッダー ファイル。
実行可能ファイルの CMake 生成をサポートする
CMakeLists.txt
ファイル。
生成された C++ モデル ファイルには、Adaptive ソフトウェア コンポーネント サービスを実装するために、モデル クラス定義と AUTOSAR Runtime for Adaptive Applications (ARA) 呼び出しが含まれます。たとえば、モデル ファイル autosar_LaneGuidance.cpp
には、各サービス インターフェイスおよびイベント用の初期化コードが含まれます。このコードには、AUTOSAR ディクショナリで設定されたサービス インターフェイスの名前空間とイベント名が反映されます。
// Model initialize function void autosar_LaneGuidanceModelClass::initialize() { { ara::com::ServiceHandleContainer< company::chassis::required::proxy:: RequiredInterfaceProxy::HandleType > handles; handles = company::chassis::required::proxy::RequiredInterfaceProxy:: FindService(ara::com::InstanceIdentifier("1")); if (handles.size() > 0U) { RequiredPort = std::make_shared< company::chassis::required::proxy:: RequiredInterfaceProxy >(*handles.begin()); // Subscribe event RequiredPort->leftLaneDistance.Subscribe(1U); RequiredPort->leftTurnIndicator.Subscribe(1U); RequiredPort->leftCarInBlindSpot.Subscribe(1U); RequiredPort->rightLaneDistance.Subscribe(1U); RequiredPort->rightTurnIndicator.Subscribe(1U); RequiredPort->rightCarInBlindSpot.Subscribe(1U); } ProvidedPort = std::make_shared< company::chassis::provided::skeleton:: ProvidedInterfaceSkeleton >(ara::com::InstanceIdentifier("2"), ara::com:: MethodCallProcessingMode::kPoll); ProvidedPort->OfferService(); } }
モデル ファイル autosar_LaneGuidance.cpp
には、各サービス インターフェイス イベント用のステップ コードも含まれます。たとえば、RequiredInterface
のステップ コードであるイベント rightCarInBlindSpot
は、AUTOSAR Runtime Adaptive (ARA) 環境のミドルウェアで受信された新しい rightCarInBlindSpot
イベント データを取得および処理するために、関数を呼び出します。
// Model step function void autosar_LaneGuidanceModelClass::step() { ... if (RequiredPort) { leftLaneDistanceResultSharedPtr = std::make_shared< ara::core::Result<size_t> >(RequiredPort->rightCarInBlindSpot.GetNewSamples(std::move(std::bind (&autosar_LaneGuidanceModelClass:: RequiredPortrightCarInBlindSpotReceive, this, std::placeholders::_1)))); leftLaneDistanceResultSharedPtr->ValueOrThrow(); } ... }
エクスポートされた AUTOSAR XML コードには、AUTOSAR ディクショナリを使用して設定した AUTOSAR 要素の記述が含まれます。たとえば、コンポーネント ファイル autosar_LaneGuidance.arxml
には、要求側と提供側のインターフェイスに指定された名前空間とイベントが記述されます。
<SERVICE-INTERFACE UUID="..."> <SHORT-NAME>RequiredInterface</SHORT-NAME> <NAMESPACES> <SYMBOL-PROPS> <SHORT-NAME>company</SHORT-NAME> <SYMBOL>company</SYMBOL> </SYMBOL-PROPS> <SYMBOL-PROPS> <SHORT-NAME>chassis</SHORT-NAME> <SYMBOL>chassis</SYMBOL> </SYMBOL-PROPS> <SYMBOL-PROPS> <SHORT-NAME>required</SHORT-NAME> <SYMBOL>required</SYMBOL> </SYMBOL-PROPS> </NAMESPACES> <EVENTS> ... <VARIABLE-DATA-PROTOTYPE UUID="..."> <SHORT-NAME>rightCarInBlindSpot</SHORT-NAME> <CATEGORY>VALUE</CATEGORY> <SW-DATA-DEF-PROPS> <SW-DATA-DEF-PROPS-VARIANTS> <SW-DATA-DEF-PROPS-CONDITIONAL> <SW-CALIBRATION-ACCESS>READ-ONLY</SW-CALIBRATION-ACCESS> <SW-IMPL-POLICY>QUEUED</SW-IMPL-POLICY> </SW-DATA-DEF-PROPS-CONDITIONAL> </SW-DATA-DEF-PROPS-VARIANTS> </SW-DATA-DEF-PROPS> <TYPE-TREF DEST="IMPLEMENTATION-DATA-TYPE"> /LaneGuidance_pkg/LaneGuidance_dt/Double</TYPE-TREF> </VARIABLE-DATA-PROTOTYPE> </EVENTS> </SERVICE-INTERFACE>
生成された C++ メイン プログラム ファイルは、Adaptive ソフトウェア コンポーネント サービス コードを実行するためのフレームワークを提供します。autosar_LaneGuidance
モデルについて、main.cpp
ファイルは以下を行います。
Adaptive ソフトウェア コンポーネント モデル オブジェクトをインスタンス化する。
Adaptive アプリケーションの状態を ARA にレポートする。
モデル初期化関数および終了関数を呼び出す。
各タスクについて非同期関数呼び出しオブジェクトを設定する。
基本レート チック数のセマフォ post に対して、非同期関数呼び出しを実行する。
参考
関連する例
- AUTOSAR Adaptive ソフトウェア コンポーネントのモデル化
- AUTOSAR Adaptive ソフトウェア コンポーネントの作成と設定
- コード生成用の AUTOSAR Adaptive 要素のマッピング
- AUTOSAR Adaptive の要素とプロパティの設定
- AUTOSAR Adaptive サービス通信のモデル化
- AUTOSAR Adaptive コード生成の構成