このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
AUTOSAR Adaptive サービス通信のモデル化
AUTOSAR Adaptive Platform は、Adaptive ソフトウェア コンポーネント間の、サービス指向のイベントベースの通信を定義します。それぞれの Adaptive ソフトウェア コンポーネントはサービスを提供する側でも消費する側でもあり、相互接続されたコンポーネントはサービス イベントを送受信します。コンポーネントには次が含まれます。
受信したイベントに応答してタスクを実行するアルゴリズム。
イベントが送受信される要求側ポートおよび提供側ポート。
イベントベースの通信のフレームワークを提供するサービス インターフェイス。
Simulink® の Adaptive サービス通信をモデル化するために次のことができます。
AUTOSAR の要求側ポートと提供側ポート、サービス インターフェイス、サービス インターフェイス イベント、および C++ 名前空間を作成する。
ルートレベルの入力端子と出力端子を作成し、AUTOSAR の要求側ポートと提供側ポートおよびサービス インターフェイス イベントにマッピングする。
Simulink Coder™ および Embedded Coder® ソフトウェアがある場合は、C++ コードと AUTOSAR サービス通信の ARXML 記述を生成できます。
Simulink で Adaptive サービス通信を実装するには次のようにします。
AUTOSAR Adaptive Platform 用に構成されたモデルを開きます。この例の表示ではモデル
autosar_LaneGuidance
を使用します。AUTOSAR ディクショナリを開き、[サービス インターフェイス] を選択します。AUTOSAR サービス インターフェイスを作成するには [追加] ボタン をクリックします。[インターフェイスの追加] ダイアログ ボックスで、インターフェイス名と関連付けられるイベントの数を指定します。
[サービス インターフェイス] ノードを展開します。新しいサービス インターフェイスを展開し [イベント] を選択します。このイベント ビューで、各サービス イベントを選択してその属性を構成します。
[名前空間] を選択します。名前空間のビューでは、各サービス インターフェイスに一意の名前空間を定義できます。コード ジェネレーターがインターフェイス用の C++ コードを生成するとき、定義された名前空間が使用されます。名前空間の仕様を変更または構築するには、名前空間要素を選択し、名前の値を編集します。たとえば、この名前空間表示は、サービス インターフェイス
ProvidedInterface
についての名前空間company::chassis::provided
を定義します。AUTOSAR ディクショナリの最上位レベルで [AdaptiveApplications] を展開し、Adaptive ソフトウェア コンポーネントを展開します。[RequiredPorts] ビューと [ProvidedPorts] ビューを使用して、新しいサービス インターフェイスに関連付ける AUTOSAR 要求側ポートと提供側ポートを追加します。新しい各サービス端子ごとに、作成したサービス インターフェイスを選択します。
オプションで、AUTOSAR ポートの Adaptive サービス インスタンスの識別子を構成できます。[RequiredPorts] ビューまたは [ProvidedPorts] ビューで、ポートを選択し、その [マニフェスト属性] を表示します。サービス インスタンスを識別するために [インスタンス識別子] が選択されている場合、[インスタンス識別子] の値を調べます。値を入力することも、既存の値を受け入れることもできます。詳細については、AUTOSAR Adaptive サービス インスタンス識別の構成を参照してください。
オプションで、AUTOSAR の要求側ポートについて、サービス検出を設定できます。これは、Adaptive アプリケーションによるダイナミクス サービスの検索方法に影響します。[RequiredPorts] ビューで、ポートを選択し、その [サービス検出モード] を設定します。
[OneTime]
または[DynamicDiscovery]
を選択します。詳細については、AUTOSAR Adaptive サービス検出モードの構成を参照してください。モデル ウィンドウで、AUTOSAR Adaptive サービス ポートをモデル化するため、ルートレベルの入力端子と出力端子を作成します。
コード マッピング エディターを開きます。[入力端子] タブと [出力端子] タブを使用して、Simulink の入力端子と出力端子を AUTOSAR 要求側ポートと提供側ポートにマッピングします。入力端子または出力端子ごとに、AUTOSAR 要求側ポートまたは提供側ポート、および AUTOSAR サービス インターフェイス イベントを選択します。
オプションで、AUTOSAR の提供側ポートから送信されたサービス データのメモリ割り当てを構成できます。[出力端子] タブで端子を選択し、コード属性
AllocateMemory
を使用してメモリ割り当てを構成します。参照によってイベント データを送信する (既定) か、ara::com
で割り当てられたメモリで送信するかを指定します。イベント データをara::com
で割り当てられたメモリで送信するには、値[true]
を選択します。イベント データを参照で送信するには[false]
を選択します。詳細については、AUTOSAR Adaptive サービス データのメモリ割り当ての構成を参照してください。Adaptive コンポーネント モデルの構成を検証した後、AUTOSAR サービス通信用のコードをシミュレーションまたは生成できます。
AUTOSAR Adaptive サービス通信をプログラムで構成するには、AUTOSAR プロパティとマッピング関数を使用します。たとえば、次の MATLAB® コードは、AUTOSAR サービス インターフェイス、イベント、オープン モデルへの要求側ポートを追加します。次に、Simulink 入力端子を AUTOSAR 要求側ポートにマッピングします。
hModel = 'autosar_LaneGuidance'; openExample(hModel); % Add AUTOSAR service interface mySvcInterface with event mySvcEvent arProps = autosar.api.getAUTOSARProperties(hModel); addPackageableElement(arProps,'ServiceInterface',... '/LaneGuidance_pkg/LaneGuidance_if','mySvcInterface'); add(arProps,'mySvcInterface','Events','mySvcEvent'); % Add AUTOSAR required port myRPort, associated with mySvcInterface add(arProps,'LaneGuidance','RequiredPorts','myRPort',... 'Interface','mySvcInterface'); % Map Simulink inport to AUTOSAR port/event pair myRPort and mySvcEvent slMap = autosar.api.getSimulinkMapping(hModel); mapInport(slMap,'rightCarInBlindSpot','myRPort','mySvcEvent');
クライアント/サーバー通信のモデル化
Adaptive AUTOSAR では、アプリケーション ソフトウェア コンポーネント間のクライアント/サーバー通信がサポートされます。AUTOSAR サービス インターフェイスのメソッドは、インターフェイスの実装を "提供" するサーバーとしてモデル化されたソフトウェア コンポーネントと、インターフェイスを "要求" するクライアントとしてモデル化されたソフトウェア コンポーネントとの相互作用を定義します。
Simulink で、クライアント/サーバー通信を同期呼び出しまたは非同期呼び出しの動作でモデル化できます。同期クライアント モデルではクライアントの実行がブロックされ、クライアントはサーバーに要求を送信し、応答を待機します。非同期クライアント モデルでは実行はブロックされず、クライアントは要求を送信し、要求の送信後も実行を継続して、メソッドの完了時に応答を処理します。
シミュレーションおよびコード生成用に AUTOSAR クライアントとサーバーを Simulink 環境でモデル化するには、以下を実行します。
モデルのルート レベルでSimulink Functionブロックを使用して AUTOSAR サーバーをモデル化します。
同期または非同期 AUTOSAR クライアントをモデル化:
Function Callerブロックを使用して同期クライアント呼び出しをモデル化します。
Function CallerブロックとMessage Triggered Subsystemブロックを使用して非同期クライアント呼び出しをモデル化します。
クライアントまたはサーバーの ARXML 定義をインポートすると、AUTOSAR Blockset によって Simulink でコンポーネントが作成および構成されます。その後、コンポーネント モデルを直接シミュレートして、生成された C++ コードと ARXML をエクスポートできます。クライアントの ARXML 定義は同期クライアント呼び出しとしてインポートされます。必要に応じて、非同期動作を使用するようにこの定義を Simulink で再設定できます。
AUTOSAR Adaptive サーバーの構成
サーバーはクライアントにサービスを提供します。AUTOSAR Adaptive サーバーを Simulink 環境でモデル化してシミュレートするには、Simulink Function ブロックと Function Element ブロックを使用し、クライアントにサービスを提供します。必要に応じて、C++ コードを生成して ARXML 定義をエクスポートできます。
AUTOSAR Adaptive Platform 用に構成されたエクスポート関数モデルを作成するか開きます。
AUTOSAR Adaptive サーバーをモデル化します。Simulink FunctionブロックとFunction Element端子を使用して、クライアントに提供するサービスをモデル化します。
Simulink Function ブロックを開いて、Trigger Port を右クリックし、[ブロック パラメーター] を選択します。[関数の可視性] が
[端子]
に設定されており、[端子へのスコープ] がルートレベルの Function Element によって作成されたエクスポート関数の端子の名前に設定されていることを確認します。クライアント/サーバーの非同期動作をモデル化する場合は、[関数呼び出しを非同期で実行] を選択します。
[アプリ] タブで [AUTOSAR コンポーネント デザイナー] をクリックします。
サービス インターフェイスの AUTOSAR プロパティを表示します。
AUTOSAR ディクショナリを開き、コンポーネント モデルから派生したプロパティを表示します。必要に応じて、追加のプロパティを作成できます。
[サービス インターフェイス] を選択してインターフェイスを表示または作成します。このインターフェイスは、モデル化されたサーバー コンポーネントのプロパティを定義します。
AUTOSAR サービス インターフェイスを作成するには追加ボタン をクリックします。
[サービス インターフェイス] で、メソッドを表示または作成します。AUTOSAR Adaptive 規格では、メソッド呼び出しへの応答を想定した Request-Response メソッドと、戻り値を想定しない Fire-Forget メソッドが定義されています。モデル化されたサーバーについて、名前とメソッドのタイプを作成して構成できます。
AUTOSAR ディクショナリの最上位レベルで [AdaptiveApplications] を展開し、[ProvidedPorts] を表示します。ProvidedPorts は、Simulink Function ブロックでクライアントへの応答に使用される端子のプロパティを定義します。
展開されたサーバーが展開されたクライアントと通信するには、モデル化されたサーバーの提供側ポートのサービス インスタンス識別が、モデル化されたクライアントの要求側ポートのインスタンス識別と一致する必要があります。詳細については、AUTOSAR Adaptive サービス インスタンス識別の構成を参照してください。
モデル化されたサーバーにコード プロパティがどのようにマッピングされているかを確認します。コード マッピング エディターを開き、[関数] タブを開いてサーバー関数を表示します。
[ソース] 列に、モデル化された Function Element ブロックが表示されます。
[ポート] 列に、ProvidedPort の名前が表示されます。
[メソッド] 列に、それぞれの端子およびブロックに AUTOSAR ディクショナリで定義されているどのメソッドが関連付けられているかが表示されます。
サーバー モデルを検証してシミュレートします。
必要に応じて、C++ コードを生成して ARXML 定義をエクスポートするには、コンポーネント モデルをビルドします。
同期 AUTOSAR Adaptive クライアント (ブロックする) の構成
サーバーにサービスを要求する AUTOSAR Adaptive クライアントを構成します。この例のクライアントは同期通信をモデル化します。この通信では、サーバーに要求を送信した後に実行がブロックされます。
同期 AUTOSAR Adaptive クライアントを Simulink 環境でモデル化するには、Simulink Function Caller ブロックを使用し、サーバーを呼び出すためのサービス インターフェイスを構成します。必要に応じて、C++ コードを生成して ARXML 定義をエクスポートできます。
AUTOSAR Adaptive Platform 用に構成されたエクスポート関数モデルを作成するか開きます。
同期 AUTOSAR Adaptive クライアントをモデル化します。クライアントを Simulink でモデル化するには、Function CallerブロックとFunction Element Callブロックを使用してサーバーから提供されるサービスを呼び出します。
非同期 AUTOSAR Adaptive クライアント (ブロックしない) の構成
サーバーにサービスを要求する AUTOSAR Adaptive クライアントを構成します。この例のクライアントは非同期通信をモデル化します。この通信では操作はブロックされず、サーバーに要求を送信した後も実行が継続されます。
非同期 AUTOSAR Adaptive クライアントを Simulink 環境でモデル化するには、Simulink Function Caller ブロックと Message Triggered Subsystem を使用し、サーバーを呼び出すためのサービス インターフェイスを構成します。必要に応じて、C++ コードを生成して ARXML 定義をエクスポートできます。
非同期 Adaptive クライアントを構成するには、以下を実行します。
AUTOSAR Adaptive Platform 用に構成されたエクスポート関数モデルを作成するか開きます。
Function Element Call端子を追加して非同期 AUTOSAR Adaptive クライアントをモデル化します。
Function-Call Subsystem でFunction Callerブロックを追加して、Function Caller ブロックを右クリックし、[ブロック パラメーター (FunctionCaller)] を選択します。[ブロック パラメーター] ダイアログ ボックスで、[関数呼び出しを非同期で実行] を選択します。
非同期関数呼び出しブロックの出力は 1 つである必要があります。非同期動作が選択されると、Function Caller ブロックは信号線ではなくメッセージを出力します。このメッセージは、メソッド実行の非同期動作を示します。
モデルのルート レベルにMessage Triggered Subsystemを追加し、Function-Call Subsystemからメッセージ信号を接続します。
Function Caller から呼び出されたメソッドが完了すると、出力メッセージによって Message Triggered Subsystem がトリガーされ、クライアント アプリケーションが非同期メソッドのために登録するコールバックとして機能します。Message Triggered Subsystem は、サンプル時間とは関係なく、メッセージが制御端子で使用可能な場合は必ず実行されます。
Message Triggered Subsystem を開いて、Trigger Port ブロックを右クリックし、[ブロック パラメーター (TriggerPort)] を選択します。
[ブロック パラメーター] ダイアログ ボックスで、[トリガー タイプ] が
[メッセージ]
に設定されており、[非周期的分割としてスケジュールする] が選択されていないことを確認します。動作を Message Triggered Subsystem に追加します。
追加のロジックをもつモデルを完成させます。
セクションAdaptive クライアントのコードの検証、シミュレート、および必要に応じた生成に進みます。
Adaptive クライアントのコードの検証、シミュレート、および必要に応じた生成
AUTOSAR Adaptive クライアントを Simulink 環境で検証してシミュレートするには、AUTOSAR ディクショナリとコード マッピング エディターを使用したコード プロパティのマッピングを使用して、サービス インターフェイスを確認します。必要に応じて、C++ コードを生成して ARXML 定義をエクスポートできます。
[アプリ] タブで [AUTOSAR コンポーネント デザイナー] をクリックします。
サービス インターフェイスの AUTOSAR プロパティを表示します。AUTOSAR ディクショナリを開き、コンポーネント モデルから派生したプロパティを表示します。必要に応じて、追加のプロパティを作成できます。
[サービス インターフェイス] を選択してインターフェイスを表示または作成します。このインターフェイスは、モデル化されたクライアント コンポーネントのプロパティを定義します。
AUTOSAR サービス インターフェイスを作成するには追加ボタン をクリックします。
[サービス インターフェイス] で、メソッドを表示または作成します。モデル化されたクライアントについて、名前とメソッドのタイプを作成して構成できます。
AUTOSAR ディクショナリの最上位レベルで [AdaptiveApplications] を展開し、[RequiredPorts] を表示します。[RequiredPorts] は、サーバーにサービスを要求する Simulink Function Caller ブロックで使用される端子のコード プロパティを定義します。
展開されたクライアントが展開されたサーバーと通信するには、モデル化されたクライアントの要求側ポートのサービス インスタンス識別子が、モデル化されたサーバーの提供側ポートのインスタンス識別子と一致する必要があります。詳細については、AUTOSAR Adaptive サービス インスタンス識別の構成を参照してください。
モデル化されたクライアントにコード プロパティがどのようにマッピングされているかを確認します。コード マッピング エディターを開き、[Function Caller] タブを開いてクライアント関数を表示します。
[ソース] 列に、モデル化された Function Caller ブロックが表示されます。
[ポート] 列に、RequiredPort の名前が表示されます。
[メソッド] 列に、それぞれの端子およびブロックに AUTOSAR ディクショナリで定義されているどのメソッドが関連付けられているかが表示されます。
クライアント モデルを検証してシミュレートします。
(オプション) C++ コードを生成して ARXML 定義をエクスポートするには、コンポーネント モデルをビルドします。
ヒントと制限事項
グローバルな Simulink 関数は Adaptive AUTOSAR ではサポートされません。
プライベート スコープの Simulink 関数はメソッドにマッピングされません。これらは、Adaptive アプリケーション コンポーネントの内部動作のモデル化に使用できます。
非同期動作用に構成された Function Caller ブロックの出力は 1 つである必要があります。無効な出力または複数の出力をもつ Function Caller ブロックはサポートされません。
参考
Simulink Function | Function Caller | Function-Call Subsystem | Message Triggered Subsystem | Function Element | Function Element Call