Main Content

AUTOSAR のキューに登録されている送信側/受信側通信の設定

AUTOSAR のキューに登録されている送信側/受信側 (S-R) 通信では、AUTOSAR ソフトウェア コンポーネントが、他のコンポーネントまたはサービスに対するデータの読み取りおよび書き込みを行います。AUTOSAR 送信側ソフトウェア コンポーネントによって送信されたデータは AUTOSAR ランタイム環境 (RTE) で提供されるキューに追加されます。新しく受信したデータは既存の未読データを上書きしません。その後、受信側ソフトウェア コンポーネントでキューからデータが読み取られます。

キューに登録されている S-R 通信を実装するために、AUTOSAR ソフトウェア コンポーネントは以下を定義します。

  • データ要素をもつ AUTOSAR 送信側/受信側インターフェイス。

  • キューに登録されているデータを送受信する AUTOSAR 提供側ポートと要求側ポート。

Simulink® では、以下のことができます。

  1. AUTOSAR ディクショナリを使用して、AUTOSAR のキューに登録されている S-R インターフェイスとポートを作成します。

  2. Simulink ルートレベルの出力端子と入力端子を使用して、AUTOSAR 提供側ポートと要求側ポートをモデル化します。

  3. コード マッピング エディターを使用して、出力端子と入力端子を AUTOSAR 提供側ポートと要求側ポートにマッピングします。AUTOSAR データ アクセス モードを [QueuedExplicitSend] または [QueuedExplicitReceive] に設定します。

キューを使用した AUTOSAR データの送受信をモデル化するには、Simulink Send ブロックと Receive ブロックを使用します。キューに登録されている S-R 通信の実装に状態が含まれている場合や、判定ロジックが必要な場合は、Stateflow® チャートを使用します。キューが空またはいっぱいの場合に発生するエラーを処理できます。キューのサイズは指定できます。詳細については、Simulink メッセージの概要を参照してください。

コンポジションレベルのシミュレーションなど、AUTOSAR のキューに登録されているコンポーネント モデル間の送信側/受信側 (S-R) 通信のシミュレーションを実行できます。データの送信側と受信側は異なるレートで実行できます。複数のデータ送信側は単一のデータ受信側と通信できます。

開始するには、キューに登録されている S-R インターフェイスとポートで ARXML ファイルから Simulink にコンポーネントをインポートするか、Simulink を使用してインターフェイスとポートを作成します。

AUTOSAR のキューに登録されている送信と受信の Simulink でのモデル化のワークフロー

次の手順は、AUTOSAR のキューに登録されている送信側コンポーネントと受信側コンポーネントを Simulink でモデル化する一般的なワークフローの概要を示したものです。

  1. AUTOSAR のキューに登録されている送信側コンポーネントとして 1 つ以上のモデルを設定し、AUTOSAR のキューに登録されている受信側コンポーネントとして 1 つのモデルを設定します。それぞれのコンポーネント モデルについて、AUTOSAR ディクショナリとコード マッピング エディターを使用して次を行います。

    1. S-R データ インターフェイスとそのデータ要素を作成します。

    2. 送信ポートまたは受信ポートを作成します。

    3. 送信ポートまたは受信ポートを Simulink の送信用の出力端子または受信用の入力端子にマッピングします。AUTOSAR データ アクセス モードを [QueuedExplicitSend] または [QueuedExplicitReceive] に設定します。

    例については、AUTOSAR のキューに登録されている通信用の送信側コンポーネントと受信側コンポーネントの設定を参照してください。

  2. AUTOSAR のキューに登録されている送信側コンポーネントまたは受信側コンポーネントの動作を実装するには、SimulinkSend ブロックと Receive ブロックを使用します。詳細については、Simulink メッセージの概要を参照してください。

    キューに登録されている S-R 通信の実装に状態が含まれている場合や、判定ロジックが必要な場合は、Stateflow チャートを使用します。

    詳細については、AUTOSAR のキューに登録されている送信と受信のメッセージングの実装を参照してください。

  3. AUTOSAR のキューに登録されている送信側コンポーネントまたは受信側コンポーネントのモデルをビルドすると次のようになります。

    • 生成された C コードには AUTOSAR の Rte_Send_<port>_<DataElement> API または Rte_Receive_<port>_<DataElement> API が含まれます。

      生成されたコードでメッセージ受信呼び出しのステータスが処理されます。

      メッセージ送信ステータス (キューのオーバーフローなど) の処理は、Stateflow でのみモデル化できます。キューに登録されている送信側コンポーネントで Stateflow ロジックが実装されている場合にのみ、生成されたコードでメッセージ送信ステータスが処理されます。

    • エクスポートされた ARXML ファイルにキューに登録されている送信側/受信側通信の記述が含まれます。キューに登録されているポートについて生成された ComSpec には、ポートの種類とキューの長さ (Simulink メッセージのプロパティ QueueCapacity に基づく) が含まれます。キューに登録されているポートのデータ要素について生成された SwDataDefProps では、SwImplPolicyQueued に設定されます。

  4. AUTOSAR のキューに登録されている送信側/受信側通信を Simulink でシミュレートするには、含まれるコンポジション、システム、またはハーネス モデルを作成します。キューに登録されている送信側コンポーネントと受信側コンポーネントを参照モデルとして含めます。

  5. 送信側コンポーネントと受信側コンポーネントの間にキューイング ロジックを提供するには、Simulink Queue ブロックまたは Stateflow ロジックを挿入します。Queue ブロックを使用すると、特定の容量をもつキューをシミュレートできます。送信側コンポーネントと受信側コンポーネントを直接接続すると、Simulink によって容量 1 の既定のキューが挿入されます。

    コンポーネントを直接接続する例については、AUTOSAR のキューに登録されている送信側/受信側通信のシミュレーションの設定で使用している 1 対 1 のコンポジション モデルを参照してください。

    送信側コンポーネントと受信側コンポーネントの間に Queue ブロックまたは Stateflow ロジックを挿入する例については、AUTOSAR のキューに登録されている送信側/受信側の N 対 1 の通信のシミュレーションおよびAUTOSAR のキューに登録されている送信側/受信側のイベントドリブンの通信のシミュレーションを参照してください。

AUTOSAR のキューに登録されている通信用の送信側コンポーネントと受信側コンポーネントの設定

この例では、AUTOSAR のキューに登録されている送信側コンポーネントと受信側コンポーネントを Simulink で設定します。この例では、フォルダー matlabroot/help/toolbox/autosar/examples (cd でフォルダーに移動) にある 2 つのモデルを使用します。ファイルを作業フォルダーにコピーする場合はモデルと併置します。これらのモデルのシミュレーション用の接続については、AUTOSAR のキューに登録されている送信側/受信側通信のシミュレーションの設定を参照してください。

  • mAutosarSlSenderSWC1.slx

  • mAutosarSlReceiverSWC.slx

キューに登録されている送信側コンポーネントまたは受信側コンポーネントとして設定する AUTOSAR モデルを開きます。S-R データ インターフェイスとキューに登録されている送信ポートまたは受信ポートを作成するには次を行います。

  1. AUTOSAR ディクショナリを開きます。

  2. [S-R Interfaces] を選択します。S-R データ インターフェイスを作成するには、[追加] ボタン をクリックします。その名前と関連付けられる S-R データ要素の数を指定します。この例では、送信側コンポーネントと受信側コンポーネントの両方で 1 つのデータ要素を使用します。

  3. 新しい S-R インターフェイスを選択して展開します。[DataElements] を選択し、データ要素の属性を変更します。次の図は、送信側コンポーネントのデータ要素 DE1 を示しています。

  4. [AtomicComponents] ノードを展開し、AUTOSAR コンポーネントを選択します。コンポーネントを展開します。

  5. [SenderPorts] ビューまたは [ReceiverPorts] ビューを選択し、そのビューを使用して必要な送信ポートまたは受信ポートを追加します。それぞれの S-R ポートについて、作成した S-R インターフェイスを選択します。次の図は、送信側コンポーネントの送信ポート MsgOut を示しています。S-R インターフェイス Out1 を使用しています。

  6. コード マッピング エディターを開きます。[Inports] タブまたは [Outports] タブを選択し、そのタブを使用して Simulink の入力端子または出力端子を AUTOSAR のキューに登録されている S-R ポートにマッピングします。入力端子または出力端子ごとに、AUTOSAR ポート、データ要素、データ アクセス モードを選択します。AUTOSAR データ アクセス モードを [QueuedExplicitSend] または [QueuedExplicitReceive] に設定します。次の図は、送信側コンポーネントの Simulink 出力端子 MsgOut を示しています。AUTOSAR 送信ポート MsgOut およびデータ要素 DE1 にマッピングされており、データ アクセス モードは [QueuedExplicitSend] です。

    入力端子を AUTOSAR のキューに登録されている受信ポートにマッピングする場合、コード マッピングまたは端子の AUTOSAR ディクショナリ ビューのいずれかを使用して、その AUTOSAR 通信仕様 (ComSpec) 属性 QueueLength を変更できます。コード マッピングで入力端子を選択し、 アイコンをクリックするか AUTOSAR ディクショナリを開きます。詳細については、AUTOSAR 送信側/受信側ポートの ComSpec の設定を参照してください。

AUTOSAR のキューに登録されている送信側コンポーネントまたは受信側コンポーネントのモデルをビルドすると次のようになります。

  • 生成された C コードには AUTOSAR の Rte_Send_<port>_<DataElement> API または Rte_Receive_<port>_<DataElement> API が含まれます。生成されたコードでメッセージ送受信呼び出しのステータスが処理されます。

  • エクスポートされた ARXML ファイルにキューに登録されている送信側/受信側通信の記述が含まれます。キューに登録されているポートについて生成された ComSpec には、ポートの種類とキューの長さ (Simulink メッセージのプロパティ QueueCapacity に基づく) が含まれます。キューに登録されているポートのデータ要素について生成された SwDataDefProps では、SwImplPolicyQueued に設定されます。

AUTOSAR のキューに登録されている送信側コンポーネントまたは受信側コンポーネントのメッセージング動作を実装するには、Simulink メッセージまたは Stateflow メッセージを使用します。AUTOSAR のキューに登録されている送信と受信のメッセージングの実装またはStateflow メッセージングを使用した AUTOSAR のキューに登録されている送信と受信の実装を参照してください。

AUTOSAR のキューに登録されている送信と受信のメッセージングの実装

AUTOSAR のキューに登録されている送信側コンポーネントと受信側コンポーネントの動作をモデル化するため、この例では以下を使用します。

  • メッセージングを実装するための Simulink メッセージ ブロック。

  • 判定ロジックを実装するための Stateflow チャート。

この例では、モデル例 mAutosarSlSenderSWC1.slx および mAutosarSlReceiverSWC.slx の作成について説明します。これらのモデルはフォルダー matlabroot/help/toolbox/autosar/examples (cd でフォルダーに移動) にあります。

他の例では、同じ送信側と受信側のモデルを 1 対 1 および N 対 1 のメッセージング構成で展開します。AUTOSAR のキューに登録されている送信側/受信側通信のシミュレーションの設定およびAUTOSAR のキューに登録されている送信側/受信側の N 対 1 の通信のシミュレーションを参照してください。

次の図は、AUTOSAR のキューに登録されている送信側コンポーネントの最上位の mAutosarSlSenderSWC1 を示しています。このモデルには次が含まれます。

  • Stateflow チャート Turn Signal Generator

  • Enabled Subsystem 内にラップされた Simulink Send メッセージ ブロック。

チャートには方向指示器とメッセージ制御の出力があり、Enabled Subsystem に接続されています。メッセージ制御信号が正の値になると、サブシステムはイネーブルになります。サブシステム内で、Send メッセージ ブロックが方向指示器のデータ値を読み取り、その値を含むメッセージをルート出力端子 MsgOut に送信します。

次の図は、Turn Signal Generator チャートで実装されるロジックを示しています。このチャートには、ActivateLeftDeactivateLeftActivateRightDeactivateRight の 4 つのステートがあります。それぞれのステートに、方向指示器のデータ値を代入してメッセージ制御値を true に設定する entry アクションがあります (メッセージ送信による Stateflow チャートとの通信 (Stateflow)を参照してください)。メッセージの出力は周期的なタイミングで行われます。

次の図は、AUTOSAR のキューに登録されている受信側コンポーネントの最上位の mAutosarSlReceiverSWC を示しています。このモデルには次が含まれます。

  • Simulink Receive メッセージ ブロック。

  • Stateflow チャート HMILogic

ルート入力端子 MsgIn がメッセージを Receive ブロックに提供し、このブロックがメッセージから方向指示器のデータ値を抽出します。次に、ブロックはメッセージ受信と方向指示器のデータ値を Stateflow チャートに出力します。

Receive ブロック パラメーターは Simulink の既定値に設定されます。たとえば、[受信ステータスの表示] はオンになり、[内部キューの使用] はオフになり、[キューが空のときの値のソース][最後の値をホールド] に設定されます。

次の図は、HMILogic チャートで実装されるロジックを示しています。HMILogic には、HMIRequestProcessingLeftTurnSignalRightTurnSignal のステートがあります。

  • HMIRequestProcessing は、メッセージ受信と方向指示器のデータ入力を受け取り、isNewData フラグを設定して、方向指示器のデータを処理する関数を呼び出してから isNewData フラグをクリアします。関数 processRequest は、受信した方向指示器のデータをテストし、メッセージの送信側で LeftTurnOnRightTurnOnLeftTurnOff、または RightTurnOff の値が設定されていないかどうかを調べます。受信した値に基づいて、要求カンター変数の leftTurnReqs または rightTurnReqs が関数でインクリメントまたはデクリメントされます。メッセージの入力は周期的なタイミングで行われます。

  • LeftTurnSignalRightTurnSignal には、それぞれ OffOn のステートがあります。要求カウンター leftTurnReqs または rightTurnReqs の値と時間間隔に基づいて Off から On に遷移します。要求カウンターがゼロより大きい場合、チャートで変数 leftSignalOut または rightSignalOut が 1 に設定されます。時間間隔が経過すると、ステートが遷移して Off に戻り、leftSignalOut または rightSignalOut が 0 に設定されます。

キューに登録されている複数の送信側コンポーネントの N 対 1 のメッセージング構成のサンプル実装については、AUTOSAR のキューに登録されている送信側/受信側の N 対 1 の通信のシミュレーションで使用されているモデル例を参照してください。

イベントドリブンのキューに登録されているメッセージングのサンプル実装については、AUTOSAR のキューに登録されている送信側/受信側のイベントドリブンの通信のシミュレーションで使用されているモデル例を参照してください。

AUTOSAR のキューに登録されている送信側/受信側通信のシミュレーションの設定

AUTOSAR のキューに登録されている送信側/受信側通信を Simulink でシミュレートするには、含まれるコンポジション、システム、またはハーネス モデルを作成します。キューに登録されている送信側コンポーネントと受信側コンポーネントを参照モデルとして含めます。

この例では、キューに登録されている送信側/受信側コンポーネント モデルが含まれ、1 対 1 の通信を実装するコンポジションレベルのモデルを示します。周期的なタイミングによってメッセージングが実行されます。この例では、フォルダー matlabroot/help/toolbox/autosar/examples (cd でフォルダーに移動) にある 3 つのモデルを使用します。ファイルを作業フォルダーにコピーする場合はモデルと併置します。

  • mAutosarSlQueuedMsgs_1_1.slx (最上位モデル)

  • mAutosarSlSenderSWC1.slx

  • mAutosarSlReceiverSWC.slx

モデル mAutosarSlSenderSWC1mAutosarSlReceiverSWC の送信側コンポーネントと受信側コンポーネントは、AUTOSAR のキューに登録されている通信用の送信側コンポーネントと受信側コンポーネントの設定で設定してAUTOSAR のキューに登録されている送信と受信のメッセージングの実装で実装したものと同じです。それらがコンポジションレベルのモデル mAutosarSlQueuedMsgs_1_1 に参照モデルとして含まれ、送信側コンポーネントのポート MsgOut が受信側コンポーネントのポート MsgIn に接続されています。

最上位モデル mAutosarSlQueuedMsgs_1_1 はシミュレーションにのみ使用されます。AUTOSAR C コードおよび ARXML ファイルは、送信側コンポーネントと受信側コンポーネントのモデルについては生成できますが、含まれるコンポジションレベルのモデルについては生成できません。

同様に、ソフトウェアインザループ (SIL) シミュレーションについても、送信側コンポーネントと受信側コンポーネントのモデルでは実行できますが、コンポジションレベルのモデルでは実行できません。

AUTOSAR のキューに登録されている送信側/受信側の N 対 1 の通信のシミュレーション

この例では、3 つの送信側と 1 つの受信側のコンポーネント モデルを含み、N 対 1 の通信を実装するコンポジションレベルのモデルを示します。周期的なタイミングによってメッセージングが実行されます。この例は、2 つの送信側モデルを追加し、送信側と受信側の間にフロー ロジックを提供することで、1 対 1 の例を拡張しています。

この例では、フォルダー matlabroot/help/toolbox/autosar/examples (cd でフォルダーに移動) にある 4 つのモデルを使用します。ファイルを作業フォルダーにコピーする場合はモデルと併置します。

  • mAutosarSlQueuedMsgs_N_1.slx (最上位モデル)

  • mAutosarSlSenderSWC1.slx

  • mAutosarSlSenderSWC2.slx

  • mAutosarSlSenderSWC3.slx

  • mAutosarSlReceiverSWC.slx

コンポジションレベルのモデル mAutosarSlQueuedMsgs_N_1 に 3 つの送信側コンポーネントと 1 つの受信側コンポーネントが参照モデルとして含まれています。送信側コンポーネントの MsgOut ポートが間にある MsgJoin 処理ロジックに接続され、それを介して受信側コンポーネントの MsgIn ポートに接続されています。

モデル mAutosarSlSenderSWC1mAutosarSlReceiverSWC の送信側コンポーネントと受信側コンポーネントは、AUTOSAR のキューに登録されている通信用の送信側コンポーネントと受信側コンポーネントの設定で設定してAUTOSAR のキューに登録されている送信と受信のメッセージングの実装で実装したものと同じです。2 つ目の送信側コンポーネント mAutosarSlSenderSWC2 と 3 つ目の送信側コンポーネント mAutosarSlSenderSWC3mAutosarSlSenderSWC1 に似ていますが、受信側で処理する別のタイプのメッセージ入力を実装します。

次の図は、AUTOSAR のキューに登録されている送信側コンポーネントの最上位の mAutosarSlSenderSWC2 を示しています。これには、左折の方向指示器のロジックを提供する Stateflow チャート Hazard Signal Generator が含まれています。チャートのメッセージ ラインの出力端子は Simulink ルート出力端子 MsgOut に接続されています。右折の方向指示器を処理するための対応する Hazard Signal Generator チャートが送信側コンポーネント mAutosarSlSenderSWC3 に表示されます。

次の図は、Hazard Signal Generator チャートで実装されるロジックを示しています。このチャートには、HazardOffHazardOn の 2 つのステートがあります。それぞれのステートに、値をメッセージ データに代入してメッセージを送信する entry アクションがあります (メッセージ送信による Stateflow チャートとの通信 (Stateflow)を参照してください)。メッセージの出力は周期的なタイミングで行われます。

送信側コンポーネントと受信側コンポーネントの間で、Message Merge ブロックと Queue ブロックがメッセージのマージとキューイングを提供します。

  • Message Merge ブロックは、3 行のメッセージをマージしてメッセージを Queue ブロックに出力します。

  • Queue ブロックは、到着順に基づいて 3 行のメッセージをキューに保存します。

    • キューの容量は 16 件のメッセージに設定されます。

    • ブロックは、キューがいっぱいのときにメッセージが到着すると、受信したメッセージによって最も古いメッセージを上書きするように設定されます。

    • メッセージ並べ替えポリシーは、AUTOSAR でサポートされる先入れ先出し (FIFO) ポリシーに設定されます。

キューの先頭の各要素は、下流の ReceiverSWC ブロックが受け入れ準備ができたときにキューを出ます。

最上位モデル mAutosarSlQueuedMsgs_N_1 はシミュレーションにのみ使用されます。AUTOSAR C コードおよび ARXML ファイルは、参照される送信側コンポーネントと受信側コンポーネントのモデルについては生成できますが、含まれるコンポジションレベルのモデルについては生成できません。

同様に、ソフトウェアインザループ (SIL) シミュレーションについても、送信側コンポーネントと受信側コンポーネントのモデルでは実行できますが、コンポジションレベルのモデルでは実行できません。

AUTOSAR のキューに登録されている送信側/受信側のイベントドリブンの通信のシミュレーション

この例では、Simulink 関数呼び出し入力イベントによって受信側コンポーネントでのキューに登録されているメッセージの処理が有効になるコンポジションレベルのモデルを示します。この例は、Stateflow メッセージを使用して実装されます。他の Stateflow メッセージングの例については、Stateflow メッセージングを使用した AUTOSAR のキューに登録されている送信と受信の実装を参照してください。

この例では、フォルダー matlabroot/help/toolbox/autosar/examples (cd でフォルダーに移動) にある 3 つのモデルを使用します。ファイルを作業フォルダーにコピーする場合はモデルと併置します。

  • mAutosarDREventMsgs.slx (最上位モデル)

  • mAutosarMsgSender.slx

  • mAutosarHMILogicEvent.slx

コンポジションレベルのモデル mAutosarDREEventMsgs に送信側コンポーネントと受信側コンポーネントが参照モデルとして含まれています。送信側のメッセージ ポート DashLight が間にある Data Receive Trigger ロジックに接続され、それを介して受信側のメッセージ ポート MsgIn と関数のトリガー ポート Trigger に接続されています。

次の図は、AUTOSAR のキューに登録されている送信側コンポーネントの最上位の mAutosarMsgSender を示しています。これには、Stateflow チャート Turn Signal Generator が含まれています。チャートのメッセージ ラインの出力端子は Simulink ルート出力端子 DashLight に接続されています (この送信側コンポーネントは、Stateflow メッセージングを使用した AUTOSAR のキューに登録されている送信と受信の実装に示す 1 対 1 および N 対 1 の Stateflow シミュレーションの例のコンポーネント mAutosarSenderSWC1 と同様です)。

次の図は、Turn Signal Generator チャートで実装されるロジックを示しています。このチャートには、ActivateLeftDeactivateLeftActivateRightDeactivateRight の 4 つのステートがあります。それぞれのステートに、値をメッセージ データに代入してメッセージを送信する entry アクションがあります (メッセージ送信による Stateflow チャートとの通信 (Stateflow)を参照してください)。メッセージの出力は周期的なタイミングで行われます。

次の図は、受信側コンポーネントと送信側コンポーネントの間に配置される Data Receiver Trigger チャートを示しています。

メッセージを受信するには、キューに登録されている受信側のロジックで receive(M) を使用します。

  • 有効なメッセージ M が存在する場合、receive(M) は true を返します。

  • 有効なメッセージが存在しない場合、チャートはメッセージの関連付けられているキューからそのメッセージを削除し、receive(M) は true を返します。receive(M) でキューからメッセージが削除されると、キューの長さは 1 短くなります。

  • メッセージ M が無効で、別のメッセージをキューから削除できなかった場合、receive(M) は false を返します。

receive[receive(M)] のように遷移に配置できます。あるいは、if(receive(M)) のようにステート内で if 条件を使用します。詳細については、メッセージ送信による Stateflow チャートとの通信 (Stateflow)を参照してください。

次の図は、Data Receiver Trigger チャートで実装されるロジックを示しています。このチャートでは、キューに登録されているメッセージを送信側コンポーネントから受信します。受信した各メッセージについて、受信したメッセージ データを送信メッセージにコピーしてデータを送信してから、関数呼び出しイベントを送信します (メッセージ送信による Stateflow チャートとの通信 (Stateflow)を参照してください)。

次の図は、AUTOSAR のキューに登録されている受信側コンポーネントの最上位の mAutosarHMILogicEvent を示しています。これには、Simulink Function-Call Subsystem が含まれています。サブシステムの入力端子は、関数呼び出しのトリガーと AUTOSAR データ アクセス モード QueuedExplicitReceive に設定されたメッセージの受信ポート DashLight です。

この Function-Call Subsystem には、Stateflow チャート ProcessHMIRequests と Trigger Port ブロックが含まれています。チャートのメッセージ ラインの入力端子は Simulink ルート入力端子 Msg に接続されています。範囲は変数 InvalidPath の値を表示するように設定されています。

Trigger Port ブロックで関数呼び出しトリガーとトリガー サンプル時間が設定されています。最上位モデルの Data Receiver Trigger チャートから送信される関数呼び出し入力イベントに基づいてチャートが有効になります。

次の図は、ProcessHMIRequests チャートで実装されるロジックを示しています。ProcessHMIRequests には、HMIRequestProcessingLeftTurnSignalRightTurnSignal のステートがあります。(この受信側のチャートは 1 対 1 および N 対 1 のシミュレーションの例のチャート HMILogic と同様です)。

  • HMIRequestProcessing は、メッセージ キューからメッセージを受信し、関数を呼び出してメッセージを処理してから、メッセージを破棄します。関数 processRequest は、受信したメッセージ データをテストし、メッセージの送信側で LeftTurnOnRightTurnOnLeftTurnOff、または RightTurnOff の値が設定されていないかどうかを調べます。受信した値に基づいて、要求カンター変数の leftTurnReqs または rightTurnReqs が関数でインクリメントまたはデクリメントされます。メッセージの入力は関数呼び出し入力イベントに基づいて行われます。チャートが誤って有効化されると、変数 InvalidPath が 1 に設定されます。

  • LeftTurnSignalRightTurnSignal には、それぞれ OffOn のステートがあります。要求カウンター leftTurnReqs または rightTurnReqs の値に基づいて Off から On に遷移します。要求カウンターがゼロより大きい場合、チャートで変数 leftSignalOut または rightSignalOut が 1 に設定されます。その後、ステートが遷移して Off に戻り、leftSignalOut または rightSignalOut が 0 に設定されます。

最上位モデル mAutosarDREventMsgs はシミュレーションにのみ使用されます。AUTOSAR C コードおよび ARXML ファイルは、参照される送信側コンポーネントと受信側コンポーネントのモデルについては生成できますが、含まれるコンポジションレベルのモデルについては生成できません。

同様に、ソフトウェアインザループ (SIL) シミュレーションについても、送信側コンポーネントと受信側コンポーネントのモデルでは実行できますが、コンポジションレベルのモデルでは実行できません。

Stateflow メッセージングを使用した AUTOSAR のキューに登録されている送信と受信の実装

Stateflow メッセージを使用した AUTOSAR のキューに登録されている送信と受信のメッセージングの実装

AUTOSAR のキューに登録されている送信側コンポーネントまたは受信側コンポーネントの動作を実装するため、この例では Stateflow メッセージを使用します。Stateflow チャートを作成するには、Stateflow チャートを使用した有限ステート マシンのモデル化 (Stateflow)で説明されている一般的な手順に従います。

  1. AUTOSAR のキューに登録されている送信側コンポーネントまたは受信側コンポーネントのモデルにチャートを追加します。チャートに名前を付けます。

  2. チャートを開き、メッセージ関連のステートを追加します。

  3. 各ステートについて、entry アクションを追加します。サポートされているメッセージのキーワードは次のとおりです。

    • send(M) -- メッセージ M を送信します。

    • receive(M) -- メッセージ M を受信します。

    • isvalid(M) -- メッセージ M が有効かどうか (ポップされていて破棄されていないこと) を確認します。

    • discard(M) -- メッセージ M を明示的に破棄します。メッセージはメッセージ受信操作が完了するとステート exit で暗黙的に破棄されます。

  4. ステート遷移ラインを追加し、それらのラインで遷移条件またはイベントを指定します。

  5. 状態変数を格納するデータを定義します。

  6. チャートのメッセージ ラインの入力端子と出力端子を Simulink のルートの入力端子と出力端子に接続します。

詳細については、メッセージ (Stateflow)を参照してください。

Stateflow チャートのコンテキストで、データ型やキューの容量など、メッセージのプロパティを変更できます (プロパティの一覧については、メッセージのプロパティの設定 (Stateflow)を参照してください)。メッセージのプロパティには、プロパティ インスペクター、[Message] プロパティ ダイアログ ボックス、モデル エクスプローラーからアクセスできます。メッセージのプロパティをプロパティ インスペクターで表示または変更するには次を行います。

  1. メッセージを使用するチャートを開きます。

  2. [モデル化] タブで [[シンボル] ペイン] および [プロパティ インスペクター] を開きます。

  3. [シンボル] ビューで、メッセージを選択します。プロパティ インスペクターに [Message Data Properties][Advanced] のプロパティのペインが表示されます。

    受信側コンポーネントのチャートの場合は、プロパティ インスペクターに [Message Queue Properties] も表示されます。受信側コンポーネントで外部 AUTOSAR RTE メッセージ キューを使用するよう構成するため、プロパティ [Use internal queue] がクリアされていることを確認します。

既定では、Simulink ルート端子が接続された Stateflow メッセージからメッセージのデータ型とキューの容量が継承されます。メッセージ データはこれらの Simulink パラメーターのデータ型を使用できます (int 型、uint 型、浮動小数点型、booleanEnum、または Bus (struct))。

インポートしたバス データ型または列挙データ型を Stateflow チャートで使用する場合、シミュレーション用に typedef が必要です。typedef を自動的に生成するには、Simulink コンフィギュレーション オプションの [インポートしたバスと列挙型に対して typedef を生成する] を選択します。それ以外の場合は、Simulink コンフィギュレーション パラメーターの [シミュレーション ターゲット][カスタム コード][ヘッダー ファイル] を使用して定義を含むヘッダー ファイルを含めます。

キューに登録されている送信側コンポーネントと受信側コンポーネントの 1 対 1 の構成のサンプル実装については、AUTOSAR のキューに登録されている通信用の送信側コンポーネントと受信側コンポーネントの設定AUTOSAR のキューに登録されている送信側/受信側通信のシミュレーションの設定の両方で使用されているコンポーネント モデルの例を参照してください。モデル mAutosarSenderSWC1.slxmAutosarReceiverSWC.slx はフォルダー matlabroot/help/toolbox/autosar/examples (cd でフォルダーに移動) にあります。

次の図は、AUTOSAR のキューに登録されている送信側コンポーネントの最上位の mAutosarSenderSWC1 を示しています。これには、Stateflow チャート Turn Signal Generator が含まれています。チャートのメッセージ ラインの出力端子は Simulink ルート出力端子 MsgOut に接続されています。

次の図は、Turn Signal Generator チャートで実装されるロジックを示しています。このチャートには、ActivateLeftDeactivateLeftActivateRightDeactivateRight の 4 つのステートがあります。それぞれのステートに、値をメッセージ データに代入してメッセージを送信する entry アクションがあります (メッセージ送信による Stateflow チャートとの通信 (Stateflow)を参照してください)。メッセージの出力は周期的なタイミングで行われます。

次の図は、AUTOSAR のキューに登録されている受信側コンポーネントの最上位の mAutosarReceiverSWC を示しています。これには、Stateflow チャート HMILogic が含まれています。チャートのメッセージ ラインの入力端子は Simulink ルート入力端子 MsgIn に接続されています。

メッセージを受信するには、キューに登録されている受信側のロジックで receive(M) を使用します。

  • 有効なメッセージ M が存在する場合、receive(M) は true を返します。

  • 有効なメッセージが存在しない場合、チャートはメッセージの関連付けられているキューからそのメッセージを削除し、receive(M) は true を返します。receive(M) でキューからメッセージが削除されると、キューの長さは 1 短くなります。

  • メッセージ M が無効で、別のメッセージをキューから削除できなかった場合、receive(M) は false を返します。

receive[receive(M)] のように遷移に配置できます。あるいは、if(receive(M)) のようにステート内で if 条件を使用します。詳細については、メッセージ送信による Stateflow チャートとの通信 (Stateflow)を参照してください。

次の図は、HMILogic チャートで実装されるロジックを示しています。HMILogic には、HMIRequestProcessingLeftTurnSignalRightTurnSignal のステートがあります。

  • HMIRequestProcessing は、メッセージ キューからメッセージを受信し、関数を呼び出してメッセージを処理してから、メッセージを破棄します。関数 processRequest は、受信したメッセージ データをテストし、メッセージの送信側で LeftTurnOnRightTurnOnLeftTurnOff、または RightTurnOff の値が設定されていないかどうかを調べます。受信した値に基づいて、要求カンター変数の leftTurnReqs または rightTurnReqs が関数でインクリメントまたはデクリメントされます。メッセージの入力は周期的なタイミングで行われます。

  • LeftTurnSignalRightTurnSignal には、それぞれ OffOn のステートがあります。要求カウンター leftTurnReqs または rightTurnReqs の値と時間間隔に基づいて Off から On に遷移します。要求カウンターがゼロより大きい場合、チャートで変数 leftSignalOut または rightSignalOut が 1 に設定されます。時間間隔が経過すると、ステートが遷移して Off に戻り、leftSignalOut または rightSignalOut が 0 に設定されます。

キューに登録されている送信側コンポーネントと受信側コンポーネントの N 対 1 の構成のサンプル実装については、AUTOSAR のキューに登録されている送信側/受信側の N 対 1 の通信のシミュレーションで使用されているモデル例を参照してください。

イベントドリブンのキューに登録されているメッセージングのサンプル実装については、AUTOSAR のキューに登録されている送信側/受信側のイベントドリブンの通信のシミュレーションで使用されているモデル例を参照してください。

AUTOSAR のキューに登録されている送信側/受信側通信のシミュレーションの設定

AUTOSAR のキューに登録されている送信側/受信側通信を Simulink でシミュレートするには、含まれるコンポジション、システム、またはハーネス モデルを作成します。キューに登録されている送信側コンポーネントと受信側コンポーネントを参照モデルとして含めます。

この例では、キューに登録されている送信側/受信側コンポーネント モデルが含まれ、1 対 1 の通信を実装するコンポジションレベルのモデルを示します。周期的なタイミングによってメッセージングが実行されます。この例では、フォルダー matlabroot/help/toolbox/autosar/examples (cd でフォルダーに移動) にある 3 つのモデルを使用します。ファイルを作業フォルダーにコピーする場合はモデルと併置します。

  • mAutosarQueuedMsgs_1_1.slx (最上位モデル)

  • mAutosarSenderSWC1.slx

  • mAutosarReceiverSWC.slx

モデル mAutosarSenderSWC1mAutosarReceiverSWC の送信側コンポーネントと受信側コンポーネントは、AUTOSAR のキューに登録されている通信用の送信側コンポーネントと受信側コンポーネントの設定で設定してAUTOSAR のキューに登録されている送信と受信のメッセージングの実装で実装したものと同じです。それらがコンポジションレベルのモデル mAutosarQueuedMsgs_1_1 に参照モデルとして含まれ、送信側コンポーネントのポート MsgOut が受信側コンポーネントのポート MsgIn に接続されています。

最上位モデル mAutosarQueuedMsgs_1_1 はシミュレーションにのみ使用されます。AUTOSAR C コードおよび ARXML ファイルは、送信側コンポーネントと受信側コンポーネントのモデルについては生成できますが、含まれるコンポジションレベルのモデルについては生成できません。

同様に、ソフトウェアインザループ (SIL) シミュレーションについても、送信側コンポーネントと受信側コンポーネントのモデルでは実行できますが、コンポジションレベルのモデルでは実行できません。

AUTOSAR のキューに登録されている送信側/受信側の N 対 1 の通信のシミュレーション

この例では、2 つの送信側と 1 つの受信側のコンポーネント モデルを含み、N 対 1 の通信を実装するコンポジションレベルのモデルを示します。周期的なタイミングによってメッセージングが実行されます。この例は、2 つ目の送信側モデルを追加し、送信側と受信側の間にフロー ロジックを提供することで、1 対 1 の例を拡張しています。

この例では、フォルダー matlabroot/help/toolbox/autosar/examples (cd でフォルダーに移動) にある 4 つのモデルを使用します。ファイルを作業フォルダーにコピーする場合はモデルと併置します。

  • mAutosarQueuedMsgs_N_1.slx (最上位モデル)

  • mAutosarSenderSWC1.slx

  • mAutosarSenderSWC2.slx

  • mAutosarReceiverSWC.slx

コンポジションレベルのモデル mAutosarQueuedMsgs_N_1 に 2 つの送信側コンポーネントと 1 つの受信側コンポーネントが参照モデルとして含まれています。送信側コンポーネントの MsgOut ポートが間にある MsgJoin 処理ロジックに接続され、それを介して受信側コンポーネントの MsgIn ポートに接続されています。

モデル mAutosarSenderSWC1mAutosarReceiverSWC の送信側コンポーネントと受信側コンポーネントは、AUTOSAR のキューに登録されている通信用の送信側コンポーネントと受信側コンポーネントの設定で設定してAUTOSAR のキューに登録されている送信と受信のメッセージングの実装で実装したものと同じです。2 つ目の送信側コンポーネント mAutosarSenderSWC2mAutosarSenderSWC1 に似ていますが、受信側で処理する別のタイプのメッセージ入力を実装します。

次の図は、AUTOSAR のキューに登録されている送信側コンポーネントの最上位の mAutosarSenderSWC2 を示しています。これには、Stateflow チャート Hazard Signal Generator が含まれています。チャートのメッセージ ラインの出力端子は Simulink ルート出力端子 MsgOut に接続されています。

次の図は、Hazard Signal Generator チャートで実装されるロジックを示しています。このチャートには、HazardOffHazardOn の 2 つのステートがあります。それぞれのステートに、値をメッセージ データに代入してメッセージを送信する entry アクションがあります (メッセージ送信による Stateflow チャートとの通信 (Stateflow)を参照してください)。メッセージの出力は周期的なタイミングで行われます。

次の図は、受信側コンポーネントと送信側コンポーネントの間に配置される MsgJoin チャートを示しています。

次の図は、MsgJoin チャートで実装されるロジックを示しています。このチャートでは、キューに登録されているメッセージを両方の送信側コンポーネントから受信し、受信側コンポーネントに一度に 1 つずつ出力します。最初の送信側コンポーネント mAutosarSenderSWC1.slx からのメッセージが先に処理されます。受信した各メッセージについて、受信したメッセージ データを送信メッセージにコピーしてデータを送信してから、受信したメッセージを破棄します (メッセージ送信による Stateflow チャートとの通信 (Stateflow)を参照してください)。

最上位モデル mAutosarQueuedMsgs_N_1 はシミュレーションにのみ使用されます。AUTOSAR C コードおよび ARXML ファイルは、参照される送信側コンポーネントと受信側コンポーネントのモデルについては生成できますが、含まれるコンポジションレベルのモデルについては生成できません。

同様に、ソフトウェアインザループ (SIL) シミュレーションについても、送信側コンポーネントと受信側コンポーネントのモデルでは実行できますが、コンポジションレベルのモデルでは実行できません。

キューのオーバーフロー タイミングの判別

既にいっぱいのキューに送信されたためにメッセージが失われたかどうかをチェックするには、Stateflow overflowed 演算子を使用します。

overflowed(message_name)
overflowed 演算子を使用するには、シミュレーションとコード生成の両方でモデルを autosar.tlc ターゲットに設定し、入力端子または出力端子のメッセージが外部キューに接続されていることを確認します。各タイム ステップで、チャートがキューのメッセージを追加または削除するときに、この演算子の値が設定されます。同じタイム ステップ内でメッセージを送信または取得する前に overflowed 演算子を使用したり、ローカル メッセージ キューのオーバーフロー ステータスをチェックしたりすることは無効です。

既定では、メッセージ キューがオーバーフローすると、シミュレーションはエラーで停止します。実行時エラーを回避して、除外されたメッセージに対して overflowed 演算子が動的に反応できるようにするには、[Queue Overflow Diagnostic] プロパティの値を [Warning] または [None] に設定します。詳細については、キュー オーバーフローの診断 (Stateflow)を参照してください。

入力メッセージのオーバーフローのチェック.  入力メッセージ キューのオーバーフロー ステータスをチェックするには、まず 1 つのメッセージをキューから削除します。次のことが可能です。

  • メッセージおよび overflowed 演算子で遷移をガードする。

  • メッセージで遷移をガードして、遷移先ステートの entry アクションで overflowed 演算子を呼び出す。

  • メッセージでステートが on のアクションをガードして、アクションで overflowed 演算子を呼び出す。

  • ステート アクションで、receive 演算子を使用し、続いて overflowed 演算子を使用する。

同じタイム ステップ内で、入力メッセージを取得する前に overflowed 演算子を呼び出すと、実行時エラーが発生します。

出力メッセージのオーバーフローのチェック.  出力メッセージ キューのオーバーフロー ステータスをチェックするには、まず 1 つのメッセージをキューに追加します。次のことが可能です。

  • send 演算子を使用し、続いて overflowed 演算子を使用する。

  • forward 演算子を使用し、続いて overflowed 演算子を使用する。

同じタイム ステップ内で、出力メッセージを送信または転送する前に overflowed 演算子を呼び出すと、実行時エラーが発生します。

参考

関連するトピック