このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
AUTOSAR 送信側/受信側通信の設定
AUTOSAR ポートベース送信側/受信側 (S-R) 通信では、AUTOSAR ソフトウェア コンポーネントが他のコンポーネントまたはサービスとデータの読み取りおよび書き込みを行います。S-R 通信を実装するために、AUTOSAR ソフトウェア コンポーネントは以下を定義します。
データ要素をもつ AUTOSAR 送信側/受信側インターフェイス。
データを送受信する AUTOSAR 提供側ポートと要求側ポート。
Simulink® では、以下のことができます。
AUTOSAR ディクショナリまたはアーキテクチャ データ エディター (Simulink データ ディクショナリを使用している場合) を使用して、AUTOSAR S-R インターフェイスとポートを作成します。
Simulink ルートレベルの出力端子と入力端子を使用して、AUTOSAR 提供側ポートと要求側ポートをモデル化します。
コード マッピング エディターを使用して、出力端子と入力端子を AUTOSAR 提供側ポートと要求側ポートにマッピングします。
メモ
インターフェイスの格納に Simulink データ ディクショナリを使用している場合、それらのインターフェイスについては、アーキテクチャ データ エディターまたは関連プログラム インターフェイス
Simulink.dictionary.ArchitecturalData
のいずれかを使用して構成する必要があります。
キューに登録されている送信側/受信側通信については、AUTOSAR のキューに登録されている送信側/受信側通信の設定を参照してください。
送信側/受信側通信を Simulink バス端子を使用してモデル化する例については、Simulink バス端子の使用による AUTOSAR 端子の構成を参照してください。
AUTOSAR 送信側/受信側インターフェイスの設定
次の手順は、AUTOSAR の送信側コンポーネントと受信側コンポーネントを Simulink でモデル化する一般的なワークフローの概要を示したものです。この例では、インターフェイスの格納に Simulink データ ディクショナリは使用していないものと仮定します。インターフェイスの格納に Simulink データ ディクショナリを使用している場合、それらのインターフェイスについては、アーキテクチャ データ エディターまたは関連プログラム インターフェイス Simulink.dictionary.ArchitecturalData
のいずれかを使用して構成する必要があります。
Simulink で S-R インターフェイスおよびポートを作成するには次を行います。
AUTOSAR ディクショナリを開き、[S-R Interfaces] を選択します。[追加] ボタン をクリックして新しい AUTOSAR S-R データ インターフェイスを作成します。その名前と関連付けられる S-R データ要素の数を指定します。
新しい S-R インターフェイスを選択して展開します。[DataElements] を選択し、AUTOSAR データ要素の属性を変更します。
AUTOSAR ディクショナリで、[AtomicComponents] ノードを展開し、AUTOSAR コンポーネントを選択します。コンポーネントを展開します。
[ReceiverPorts]、[SenderPorts]、[SenderReceiverPorts] の各ビューを選択して使用し、新しい S-R インターフェイスに関連付ける AUTOSAR S-R ポートを追加します。新しいそれぞれの S-R ポートについて、作成した S-R インターフェイスを選択します。
必要に応じて、それぞれの S-R ポートの通信属性を調べ、変更が必要な場合は変更します。詳細については、AUTOSAR 送信側/受信側ポートの ComSpec の設定を参照してください。
コード マッピング エディターを開きます。[入力端子] タブと [出力端子] タブを選択して使用し、Simulink の入力端子と出力端子を AUTOSAR S-R ポートにマッピングします。入力端子または出力端子ごとに、AUTOSAR ポート、データ要素、データ アクセス モードを選択します。
AUTOSAR の提供側/要求側ポートの設定
AUTOSAR Release 4.1 では、AUTOSAR の提供側/要求側ポート (PRPort
) が導入されました。AUTOSAR の PRPort
のモデル化には、データ型、次元、信号タイプが一致する Simulink の入力端子と出力端子のペアを使用します。PRPort
を送信側/受信側 (S-R) インターフェイスまたは不揮発性 (NV) データ インターフェイスと関連付けることができます。
Simulink で S-R 通信用に AUTOSAR PRPort
を設定するには、以下を行います。
AUTOSAR の
PRPort
とのペアリングに適した入力端子と出力端子をもつランナブルを含む、AUTOSAR 用に構成されたモデルを開きます。この例では、入力端子RPort_DE1
と出力端子PPort_DE1
のどちらも、データ型がint8
、端子の次元が 1、信号タイプがreal
を使用します。AUTOSAR ディクショナリを開き、[SenderReceiverPorts] ビューに移動します (NV 通信用に
PRPort
を設定するには、[NvSenderReceiverPorts] ビューを代わりに使用します)。送信側/受信側ポートを追加するには、[追加] ボタン をクリックします。[ポートの追加] ダイアログ ボックスで、[名前] を
PRPort
と指定し、[インターフェイス] を使用可能な S-R インターフェイスのリストから選択します。[追加] をクリックします。コード マッピング エディターを開き、[入力端子] タブを選択します。Simulink の入力端子を、作成した AUTOSAR の送信側/受信側ポートにマッピングするには、入力端子を選択して [ポート] を
[PRPort]
に設定し、[要素] を入力端子と出力端子が共有するデータ要素に設定します。[出力端子] タブを選択します。Simulink の出力端子を、作成した AUTOSAR の送信側/受信側ポートにマッピングするには、出力端子を選択して [ポート] を
[PRPort]
に設定し、[要素] を前の手順で選択したデータ要素と同じに設定します。[検証] ボタン をクリックして、更新された AUTOSAR コンポーネントの構成を検証します。エラーが報告された場合は、対処した上で検証を再試行します。検証によって示される一般的なエラーは、AUTOSAR の
PRPort
にマップされている入力端子と出力端子の間のプロパティが一致しないことです。
別の方法として、AUTOSAR のプロパティ関数と map 関数を使用して、プログラムによって PRPort
ポートを追加してマッピングできます。次の例では、AUTOSAR の PRPort
(送受信ポート) を追加し、それを Simulink の入力端子と出力端子のペアにマッピングします。
hModel = 'my_autosar_expfcns'; open_system(hModel) arProps = autosar.api.getAUTOSARProperties(hModel); swcPath = find(arProps,[],'AtomicComponent')
swcPath = 'ASWC
add(arProps,'ASWC','SenderReceiverPorts','PRPort','Interface','Interface1') prportPath = find(arProps,[],'DataSenderReceiverPort')
prportPath = 'ASWC/PRPort'
slMap = autosar.api.getSimulinkMapping(hModel); mapInport(slMap,'RPort_DE1','PRPort','DE1','ImplicitReceive') mapOutport(slMap,'PPort_DE1','PRPort','DE1','ImplicitSend') [arPortName,arDataElementName,arDataAccessMode] = getOutport(slMap,'PPort_DE1')
arPortName = PRPort arDataElementName = DE1 arDataAccessMode = ImplicitSend
IsUpdated サービスのための AUTOSAR 受信ポートの設定
AUTOSAR は、ErrorStatus
や IsUpdated
といった送信側/受信側インターフェイスのサービス品質属性を定義します。IsUpdated
属性により、AUTOSAR の明示的な受信側で、最後の読み取りの発生後に受信ポートのデータ要素がデータを受信したかどうかを検出できます。データがアイドル状態にある場合、受信側は演算リソースを節約することができます。
送信側では、AUTOSAR ランタイム環境 (RTE) が更新フラグのステータスを設定し、データ要素が書き込まれたかどうかを示します。受信側では、更新フラグを読み取ってデータ要素が最後の読み取り後に更新されたかどうかを示す値を返す Rte_IsUpdated_
API を呼び出します。Port
_Element
Simulink では、以下のことができます。
IsUpdated
サービスが設定された AUTOSAR 受信ポートをインポートする。IsUpdated
サービスの AUTOSAR 受信ポートを設定する。IsUpdated
サービスが設定されている AUTOSAR 受信ポートの C および ARXML コードを生成する。
Simulink で IsUpdated
サービスをモデル化するには、ExplicitReceive
データ アクセス用に設定された入力端子と IsUpdated
データ アクセス用に設定された新しい入力端子を組み合わせます。IsUpdated
サービスの AUTOSAR 受信ポートを設定する方法は以下のとおりです。
AUTOSAR 送信側/受信側インターフェイスが設定されているモデルを開きます。
IsUpdated
サービスを必要としている AUTOSAR 受信ポートに対応する入力端子を特定します。2 番目の入力端子を作成し、データ型をboolean
に設定し、同じブロックに接続します。以下に例を示します。コード マッピング エディターを開きます。[入力端子] タブを選択します。入力端子のビューで、両方の入力端子のマッピング プロパティを設定します。
データ入力端子がまだ構成されていない場合、[DataAccessMode] を
[ExplicitReceive]
に設定します。IsUpdated
サービスを必要としている AUTOSAR 受信ポートとデータ要素に入力端子をマッピングする [ポート] および [要素] の値を選択します。サービス品質入力端子の場合、[DataAccessMode] を
[IsUpdated]
に設定します。データ入力端子に完全に一致する [ポート] および [要素] の値を選択します。
AUTOSAR コンポーネントの構成を検証するには、[検証] ボタン をクリックします。
モデルをビルドして、生成されたコードを検証します。生成された C コードには
Rte_IsUpdated
API 呼び出しが含まれています。if (Rte_IsUpdated_Input_DE1()) { … Rte_Read_Input_DE1(&tmp); … }
エクスポートされた ARXML コードには、AUTOSAR 受信ポートに対して
true
に設定された ENABLE-UPDATE が含まれています。<R-PORT-PROTOTYPE UUID="..."> <SHORT-NAME>Input</SHORT-NAME> <REQUIRED-COM-SPECS> <NONQUEUED-RECEIVER-COM-SPEC> <DATA-ELEMENT-REF DEST="VARIABLE-DATA-PROTOTYPE">/pkg/if/Input/DE1 </DATA-ELEMENT-REF> … <ENABLE-UPDATE>true</ENABLE-UPDATE> … </NONQUEUED-RECEIVER-COM-SPEC> </REQUIRED-COM-SPECS> … </R-PORT-PROTOTYPE>
AUTOSAR 送信側/受信側データの無効化の設定
AUTOSAR 規格では、送信側/受信側 (S-R) 通信で使用される AUTOSAR データ要素の無効化メカニズムが定義されています。送信側コンポーネントは、送信ポートのデータが無効であることを下流の受信側コンポーネントに通知できます。無効化ポリシーは S-R データ要素ごとに設定できます。Simulink では、以下のことができます。
無効化ポリシーが設定された AUTOSAR 送信側/受信側データ要素をインポートする。
シミュレーションおよびコード生成用に Signal Invalidation ブロックを使用して送信側/受信側データの無効化をモデル化する。ブロック パラメーターを使用して信号の無効化ポリシーと S-R データ要素の初期値を指定できます。
無効化ポリシーが設定された AUTOSAR 送信側/受信側データ要素の C コードと ARXML 記述を生成する。
それぞれの S-R データ要素について、Signal Invalidation ブロックのパラメーター [Signal Invalidation のポリシー] を [Keep]
、[Replace]
、または [DontInvalidate]
に設定できます。入力データ値が無効な場合 (無効化制御フラグが true
の場合)、[Signal Invalidation のポリシー] の値に応じて実行される処理が決まります。
Keep
- 入力データ値を最新の有効な信号値に置き換えます。Replace
- 入力データ値を [初期値] パラメーターの値に置き換えます。DontInvalidate
- 入力データ値を置き換えません。
AUTOSAR S-R データ要素の無効化ポリシーを Simulink で設定するには次を行います。
AUTOSAR 送信側/受信側インターフェイスが設定されているモデルを開きます。たとえば、次の場合を仮定します。
Out
という名前の Simulink 出力端子が AUTOSAR 送信ポートPPort
およびデータ要素OutElem
にマッピングされています。AUTOSAR ディクショナリで、データ要素OutElem
を含む S-R インターフェイスOut
を AUTOSAR 送信ポートPPort
のインターフェイスとして選択しています。In1
という名前の Simulink 入力端子が AUTOSAR 受信ポートRPort1
およびデータ要素InElem1
にマッピングされています。AUTOSAR ディクショナリで、データ要素InElem1
を含む S-R インターフェイスIn1
を AUTOSAR 受信ポートRPort1
のインターフェイスとして選択しています。コード マッピング エディターの [入力端子] タブで、入力端子In1
のマッピングを示します。
Signal Invalidation ブロックをモデルに追加します。
このブロックは、ルートの Outport ブロックに直接接続されていなければなりません。ブロックをルート出力端子
Out
に接続します。最初のブロック入力 (データ値) をルート入力端子
In1
からのデータ パスに接続します。2 番目のブロック入力 (無効化制御フラグ) 用に
In2
という名前のルート入力端子をモデルに追加します。データ型はスカラーのboolean
に設定します。新しい入力端子を 2 番目の AUTOSAR 受信ポートにマッピングします。2 番目の AUTOSAR 受信ポートが存在しない場合は、AUTOSAR ディクショナリを使用して AUTOSAR のポート、S-R インターフェイス、データ要素を作成します。この例では、Simulink 入力端子
In2
が AUTOSAR 受信ポートRPort2
およびデータ要素InElem2
にマッピングされています。AUTOSAR ディクショナリで、データ要素InElem2
を含む S-R インターフェイスIn2
を AUTOSAR 受信ポートRPort2
のインターフェイスとして選択しています。2 番目のブロック入力をルート入力端子
In2
に接続します。
Signal Invalidation ブロックのパラメーター ダイアログ ボックスを表示します。[Signal Invalidation のポリシー] 属性と [初期値] 属性を調べます。詳細については、Signal Invalidation ブロックのリファレンス ページを参照してください。
コード マッピング エディターを開き、[出力端子] タブを選択します。ルート出力端子
Out
の AUTOSAR データ アクセス モードがExplicitSend
またはEndToEndWrite
に設定されていることを確認します。AUTOSAR コンポーネントの構成を検証するには、コード マッピング エディターを開き、[検証] ボタン をクリックします。
モデルをビルドして、生成されたコードを検証します。信号が有効な場合、生成された C コードは
Rte_Write_
を呼び出します。信号が無効の場合、C コードはPort
_Element
Rte_Invalidate_
を呼び出します。Port
_Element
/* SignalInvalidation: '<Root>/Signal Invalidation' incorporates: * Inport: '<Root>/In2' */ if (!Rte_IRead_Runnable_Step_RPort2_InElem2()) { /* Outport: '<Root>/Out' */ (void) Rte_Write_PPort_OutElem(mSignalInvalidation_B.Gain); } else { Rte_Invalidate_PPort_OutElem(); }
エクスポートされた ARXML コードにはデータ要素の無効化設定が含まれています。
<INVALIDATION-POLICY> <DATA-ELEMENT-REF DEST="VARIABLE-DATA-PROTOTYPE">/pkg/if/Out/OutElem</DATA-ELEMENT-REF> <HANDLE-INVALID>KEEP</HANDLE-INVALID> </INVALIDATION-POLICY>
エンドツーエンド保護のための AUTOSAR S-R インターフェイス端子の設定
送信ポートおよび受信ポートの AUTOSAR エンドツーエンド (E2E) 保護は、E2E ライブラリに基づいています。E2E は、AUTOSAR コンポーネント間で安全にデータを送信するために使用する C ライブラリです。エンドツーエンド保護はアウトバウンド データ パケットにさらなる情報を追加します。パケットを受信しているコンポーネントは、受信したデータ パケットが送信されたパケットと一致していることを個別に検証できます。受信コンポーネントがエラーを検出し、アクションを実行する可能性があります。
AUTOSAR の生成コードと AUTOSAR E2E ソリューションをより簡単に統合するために、Embedded Coder® は AUTOSAR E2E 保護をサポートしています。Simulink では、以下のことができます。
E2E 保護が設定されている AUTOSAR の送信ポートと受信ポートをインポートする。
E2E 保護用に AUTOSAR の送信ポートまたは受信ポートを構成する。
E2E 保護が設定された AUTOSAR の送信ポートと受信ポート用に C および ARXML コードを生成する。
Simulink では、E2E トランスフォーマー方式または E2E 保護ラッパーを使用して、生成コードにエンドツーエンド保護を実装できます。関数getDataDefaults
を使用して、設定されているエンドツーエンド保護方法を取得できます。関数setDataDefaults
を使用して、エンドツーエンド保護方法を設定できます。
E2E トランスフォーマー:
AUTOSAR ランタイム環境 (RTE) によって呼び出されます。E2E トランスフォーマーは、エラー ステータスを示すための追加のトランスフォーマー エラー引数
Rte_TransformerError
を取るRte_Write
とRte_Read
の呼び出しを生成します。AUTOSAR スキーマ Version 4.2 以降を使用している場合にサポートされます。
E2E 保護ラッパー:
関数
Rte_Write
および関数Rte_Read
のラッパーを挿入します。Rte_Write
とRte_Read
の呼び出しを含む E2E 保護ラッパーの本体が生成コードの外部に実装されます。既定のエンドツーエンド保護方法です。
E2E 保護は、明示的な書き込みおよび読み取りデータ アクセス モードを使用する個々の AUTOSAR の送信ポートおよび受信ポートに対して設定します。AUTOSAR ポートのデータ アクセス モードを明示的な書き込みからエンドツーエンドの書き込みへ、あるいは明示的な読み取りからエンドツーエンドの読み取りへ変更する場合、次のようになります。
シミュレーション動作には影響しません。
コード生成は明示的な書き込みおよび読み取りに似ていますが、次のような違いがあります。
生成された項目 | E2E 保護ラッパー | E2E トランスフォーマー |
---|---|---|
初期化用に生成されたコード | E2EPW_ReadInit_<Port> または E2EPW_WriteInit_<Port> を呼び出す | なし |
関数シグネチャ用に生成されたコード | uint32 E2EPW_Read_<Port>(data*) または (void) E2EPW_Write_<Port> を使用する | uint8 Rte_Read_<Port>(data*, Rte_TransformerError*) または (void)Rte_Write_<Port>(data, Rte_TransformerError*) を使用する |
送信側/受信側 COM-SPEC 用の ARXML エクスポーター | 値を true に設定した USES-END-TO-END-PROTECTION プロパティを生成する | 値を true に設定した USES-END-TO-END-PROTECTION プロパティを生成する |
送信側/受信側 API 拡張 PORT-API-OPTIONS 用の ARXML エクスポーター | なし | 値を TRANSFORMER-ERROR-HANDLING に設定した ERROR-HANDLING プロパティを生成する |
AUTOSAR の送信ポートまたは受信ポートを E2E トランスフォーマー保護用に構成する方法は以下のとおりです。
AUTOSAR 送信側/受信側インターフェイスが設定されているモデルを開きます。
MATLAB コマンド ウィンドウで、
TransformerError
を既定の E2E 保護方法として設定します。slMap = autosar.api.getSimulinkMapping(modelName); setDataDefaults(slMap, 'InportsOutports', ... 'EndToEndProtectionMethod', 'TransformerError');
[コンフィギュレーション パラメーター] を開きます。AUTOSAR スキーマのバージョンが 4.2 以降であることを確認します。
コード マッピング エディターを開きます。E2E 保護を設定する AUTOSAR 受信ポートまたは送信ポートをモデル化する、Simulink 入力端子または出力端子に移動します。ポートを選択します。
AUTOSAR のデータ アクセス モードを
EndToEndRead
(入力端子) またはEndToEndWrite
(出力端子) に設定します。AUTOSAR コンポーネントの構成を検証するには、[検証] ボタン をクリックします。
モデルをビルドして、生成されたコードを検証します。
生成された C コードには、トランスフォーマー エラー引数を渡す
RTE
読み取りおよび書き込み API の呼び出しが含まれています。void Runnable(void) { Rte_TransformerError transformerError_Input; float64 tmpRead; … /* Inport: '<Root>/Input' */ Rte_Read_RPort_InputDE(&tmpRead, &transformerError_Input); … /* Outport: '<Root>/Output'... */ (void) Rte_Write_PPort_OutputDE(data, &transformerError_Input); … }
生成されたヘッダー ファイル
Rte_
にはトランスフォーマー エラー宣言が含まれています。model
.h/* Transformer Classes */ typedef enum { RTE_TRANSFORMER_UNSPECIFIED = 0x00, RTE_TRANSFORMER_SERIALIZER = 0x01, RTE_TRANSFORMER_SAFETY = 0x02, RTE_TRANSFORMER_SECURITY = 0x03, RTE_TRANSFORMER_CUSTOM = 0xff } Rte_TransformerClass; typedef uint8 Rte_TransformerErrorCode; typedef struct { Rte_TransformerErrorCode errorCode; Rte_TransformerClass transformerClass; } Rte_TransformerError;
エクスポートされた ARXML コードには AUTOSAR の受信ポートおよび送信ポート用の E2E 設定が含まれています。
<REQUIRED-COM-SPECS> <NONQUEUED-RECEIVER-COM-SPEC> … <USES-END-TO-END-PROTECTION>true</USES-END-TO-END-PROTECTION> … <NONQUEUED-SENDER-COM-SPEC> … <USES-END-TO-END-PROTECTION>true</USES-END-TO-END-PROTECTION> … </REQUIRED-COM-SPECS> … </PORT-API-OPTIONS> <PORT-API-OPTION> <ERROR-HANDLING>TRANSFORMER-ERROR-HANDLING</ERROR-HANDLING> <PORT-REF DEST="R-PORT-PROTOTYPE">/pkg/swc/ASWC/RPort</PORT-REF> </PORT-API-OPTION> … <PORT-API-OPTION> <ERROR-HANDLING>TRANSFORMER-ERROR-HANDLING</ERROR-HANDLING> <PORT-REF DEST="P-PORT-PROTOTYPE">/pkg/swc/ASWC/PPort</PORT-REF> </PORT-API-OPTION> … </PORT-API-OPTIONS>
AUTOSAR の送信ポートまたは受信ポートを E2E ラッパー保護用に構成する方法は以下のとおりです。
AUTOSAR 送信側/受信側インターフェイスが設定されているモデルを開きます。
MATLAB コマンド ウィンドウで、
ProtectionWrapper
を既定の E2E 保護方法として設定します。slMap = autosar.api.getSimulinkMapping(modelName); setDataDefaults(slMap, 'InportsOutports', ... 'EndToEndProtectionMethod', 'ProtectionWrapper');
コード マッピング エディターを開きます。E2E 保護を設定する AUTOSAR 受信ポートまたは送信ポートをモデル化する、Simulink 入力端子または出力端子に移動します。ポートを選択します。
AUTOSAR のデータ アクセス モードを
EndToEndRead
(入力端子) またはEndToEndWrite
(出力端子) に設定します。AUTOSAR コンポーネントの構成を検証するには、[検証] ボタン をクリックします。
モデルをビルドして、生成されたコードを検証します。生成された C コードには
E2E
API の呼び出しが含まれています。void Runnable_Step(void) { … /* Inport: '<Root>/Input' */ E2EPW_Read_RPort_InputDE(…); … /* Outport: '<Root>/Output'... */ (void) E2EPW_Write_PPort_OutputDE(…); … } … void Runnable_Init(void) { … /* End-to-End (E2E) initialization */ E2EPW_ReadInit_RPort_InputDE(); E2EPW_WriteInit_PPort_OutputDE(); … }
エクスポートされた ARXML コードには AUTOSAR の受信ポートおよび送信ポート用の E2E 設定が含まれています。
<NONQUEUED-RECEIVER-COM-SPEC> … <USES-END-TO-END-PROTECTION>true</USES-END-TO-END-PROTECTION> … <NONQUEUED-SENDER-COM-SPEC> … <USES-END-TO-END-PROTECTION>true</USES-END-TO-END-PROTECTION> …
DataReceiveErrorEvent のための AUTOSAR 受信ポートの設定
ソフトウェア コンポーネント間の AUTOSAR 送信側/受信側通信で、通信レイヤーが受信側コンポーネントのデータ受信エラーを報告すると、ランタイム環境 (RTE) は [DataReceiveErrorEvent]
を発生させます。たとえば、このイベントは、送信側コンポーネントが AliveTimeout
の制限内に応答できなかったことや、送信側コンポーネントが無効なデータを送信したことを示す可能性があります。
Embedded Coder は、AUTOSAR 受信側コンポーネントでの [DataReceiveErrorEvent]
の作成をサポートします。Simulink では、以下のことができます。
AUTOSAR の
[DataReceiveErrorEvent]
定義をインポートする。[DataReceiveErrorEvent]
を定義する。[DataReceiveErrorEvent]
が設定されている AUTOSAR 受信ポートの ARXML コードを生成する。
[ImplicitReceive]
、[ExplicitReceive]
または [EndToEndRead]
データ アクセス モードを使用する AUTOSAR 受信ポートの [DataReceiveErrorEvent]
を設定しなければなりません。
AUTOSAR 受信ポートの [DataReceiveErrorEvent]
を設定する方法は以下のとおりです。
AUTOSAR 送信側/受信側インターフェイスの受信側が設定されているモデルを開きます。
コード マッピング エディターを開きます。[入力端子] タブを選択します。
[DataReceiveErrorEvent]
を設定する AUTOSAR 受信ポートにマッピングされているデータ入力端子を選択します。AUTOSAR データ アクセス モードを[ImplicitReceive]
、[ExplicitReceive]
、または[EndToEndRead]
に設定します。ErrorStatus 端子が連結されていない場合と連結されている場合の 2 つの例を次に示します。AUTOSAR ディクショナリを開きます。[AtomicComponents] ノードを展開します。受信側コンポーネントを展開し、[ランナブル] を選択します。
ランナブルのビューで、
[DataReceiveErrorEvent]
を処理するランナブルを作成します。[追加] ボタン をクリックしてランナブル エントリを追加します。
新しいランナブルを選択し、名前やその他のプロパティを設定します。
[イベント] ペインに移動し、ランナブルの
[DataReceiveErrorEvent]
を設定します。[イベントの追加] をクリックし、[DataReceiveErrorEvent]
型を選択し、イベント名を入力します。[イベントのプロパティ] の下で、イベントのトリガーを選択します。選択されたトリガーの値は、ランナブルが
[DataReceiveErrorEvent]
の処理を行っている AUTOSAR 受信ポートとデータ要素を示しています。または、
[DataReceiveErrorEvent]
をプログラムによって作成することもできます。arProps = autosar.api.getAUTOSARProperties(mdlname); add(arProps,ibQName,'Events','DRE_Evt',... 'Category','DataReceiveErrorEvent','Trigger','rPort.DE1',... 'StartOnEvent',runnableQName);
モデルをビルドして、生成されたコードを検証します。エクスポートされた ARXML コードは、エラー処理ランナブルとそのトリガー イベントを定義します。
<EVENTS> <DATA-RECEIVE-ERROR-EVENT UUID="..."> <SHORT-NAME>DRE_Evt</SHORT-NAME> <START-ON-EVENT-REF DEST="RUNNABLE-ENTITY"> /Root/mDemoModel_swc/ReceivingASWC/IB/Run_ErrorHandling</START-ON-EVENT-REF> <DATA-IREF> <CONTEXT-R-PORT-REF DEST="R-PORT-PROTOTYPE"> /Root/mDemoModel_swc/ReceivingASWC/rPort</CONTEXT-R-PORT-REF> <TARGET-DATA-ELEMENT-REF DEST="VARIABLE-DATA-PROTOTYPE"> /Root/Interfaces/In/DE</TARGET-DATA-ELEMENT-REF> </DATA-IREF> </DATA-RECEIVE-ERROR-EVENT> </EVENTS> ... <RUNNABLES> ... <RUNNABLE-ENTITY UUID="..."> <SHORT-NAME>Run_ErrorHandling</SHORT-NAME> <MINIMUM-START-INTERVAL>0</MINIMUM-START-INTERVAL> <CAN-BE-INVOKED-CONCURRENTLY>false</CAN-BE-INVOKED-CONCURRENTLY> ... <SYMBOL>Run_ErrorHandling</SYMBOL> </RUNNABLE-ENTITY> </RUNNABLES>
AUTOSAR 送信側/受信側ポートの ComSpec の設定
AUTOSAR ソフトウェア コンポーネントでは、送信ポートや受信ポートの通信仕様 (ComSpec) をオプションで指定できます。ComSpec はポートのデータに対する追加の通信要件を示します。
AUTOSAR の送信側と受信側の ComSpec を Simulink でモデル化するために次のことが可能です。
送信側と受信側の ComSpec を ARXML ファイルからインポートする。
送信側と受信側の ComSpec を Simulink で作成する。
キューに登録されていない送信ポートの ComSpec 属性
InitValue
を変更する。キューに登録されていない受信ポートの ComSpec 属性
AliveTimeout
、HandleNeverReceived
、InitValue
を変更する。キューに登録されている受信ポートの ComSpec 属性
QueueLength
を変更する。ComSpec を ARXML ファイルにエクスポートする。
たとえば、AUTOSAR 受信ポートを Simulink で作成する場合、コード マッピング エディターを使用して Simulink 入力端子を AUTOSAR 受信ポートおよび S-R データ要素にマッピングします。その後、そのポートを選択して ComSpec 属性を指定することができます。
キューに登録されている受信ポートのプロパティを次に示します。
AUTOSAR 受信ポートをインポートまたは作成する場合、AUTOSAR ディクショナリを使用して AUTOSAR ポートのマッピングされた S-R データ要素の ComSpec 属性を表示および編集できます。
AUTOSAR ポートの ComSpec 属性をプログラムで変更するには、AUTOSAR プロパティ関数 set
を使用します。以下に例を示します。
hModel = 'autosar_swc'; openExample(hModel); arProps = autosar.api.getAUTOSARProperties(hModel); % Find ComSpec path portPath = find(arProps,[],'DataReceiverPort','PathType','FullyQualified'); ifPath = find(arProps,[],'SenderReceiverInterface','Name','Input_If','PathType','FullyQualified'); dataElementPath = find(arProps,ifPath{1},'FlowData','Name','In1','PathType','FullyQualified'); infoPath = find(arProps,portPath{1},'PortInfo',... 'PathType','FullyQualified','DataElements',dataElementPath{1}); comSpecPath = find(arProps,infoPath{1},'PortComSpec','PathType','FullyQualified'); % Set ComSpec attributes set(arProps,comSpecPath{1},'AliveTimeout',30,'HandleNeverReceived',true,'InitValue',1); get(arProps,comSpecPath{1},'AliveTimeout') get(arProps,comSpecPath{1},'HandleNeverReceived') get(arProps,comSpecPath{1},'InitValue')
キューに登録されている受信ポートの QueueLength
属性を設定するには、次のようにします。
set(arProps,comSpecPath,'QueueLength',10);
ComSpec 属性を指定する AUTOSAR モデルのコードを生成すると、エクスポートされる ARXML ポートの記述に ComSpec 属性の値が含まれます。
<PORTS> <R-PORT-PROTOTYPE UUID="..."> <SHORT-NAME>ReceivePort</SHORT-NAME> <REQUIRED-COM-SPECS> <NONQUEUED-RECEIVER-COM-SPEC> <DATA-ELEMENT-REF DEST="VARIABLE-DATA-PROTOTYPE"> /Company/Powertrain/Interfaces/Input_If/In1 </DATA-ELEMENT-REF> ... <ALIVE-TIMEOUT>30</ALIVE-TIMEOUT> <HANDLE-NEVER-RECEIVED>true</HANDLE-NEVER-RECEIVED> ... <INIT-VALUE> <CONSTANT-REFERENCE> <SHORT-LABEL>DefaultInitValue_Double_1</SHORT-LABEL> <CONSTANT-REF DEST="CONSTANT-SPECIFICATION"> /Company/Powertrain/Constants/DefaultInitValue_Double_1 </CONSTANT-REF> </CONSTANT-REFERENCE> </INIT-VALUE> </NONQUEUED-RECEIVER-COM-SPEC> </REQUIRED-COM-SPECS> </R-PORT-PROTOTYPE> </PORTS> ... <CONSTANT-SPECIFICATION UUID="..."> <SHORT-NAME>DefaultInitValue_Double_1</SHORT-NAME> <VALUE-SPEC> <NUMERICAL-VALUE-SPECIFICATION> <SHORT-LABEL>DefaultInitValue_Double_1</SHORT-LABEL> <VALUE>1</VALUE> </NUMERICAL-VALUE-SPECIFICATION> </VALUE-SPEC> </CONSTANT-SPECIFICATION>