AUTOSAR のキューに登録されている送信側/受信側通信の設定
AUTOSAR のキューに登録されている送信側/受信側 (S-R) 通信では、AUTOSAR ソフトウェア コンポーネントが、他のコンポーネントまたはサービスに対するデータの読み取りおよび書き込みを行います。AUTOSAR 送信側ソフトウェア コンポーネントによって送信されたデータは AUTOSAR ランタイム環境 (RTE) で提供されるキューに追加されます。新しく受信したデータは既存の未読データを上書きしません。その後、受信側ソフトウェア コンポーネントでキューからデータが読み取られます。
キューに登録されている S-R 通信を実装するために、AUTOSAR ソフトウェア コンポーネントは以下を定義します。
データ要素をもつ AUTOSAR 送信側/受信側インターフェイス。
キューに登録されているデータを送受信する AUTOSAR 提供側ポートと要求側ポート。
Simulink® では、以下のことができます。
AUTOSAR ディクショナリを使用して、AUTOSAR のキューに登録されている S-R インターフェイスとポートを作成します。
Simulink ルートレベルの出力端子と入力端子を使用して、AUTOSAR 提供側ポートと要求側ポートをモデル化します。
コード マッピング エディターを使用して、出力端子と入力端子を AUTOSAR 提供側ポートと要求側ポートにマッピングします。AUTOSAR データ アクセス モードを
[QueuedExplicitSend]
または[QueuedExplicitReceive]
に設定します。
キューを使用した AUTOSAR データの送受信をモデル化するには、Simulink Send ブロックと Receive ブロックを使用します。キューに登録されている S-R 通信の実装に状態が含まれている場合や、判定ロジックが必要な場合は、Stateflow® チャートを使用します。キューが空またはいっぱいの場合に発生するエラーを処理できます。キューのサイズは指定できます。詳細については、Simulink メッセージの概要を参照してください。
コンポジションレベルのシミュレーションなど、AUTOSAR のキューに登録されているコンポーネント モデル間の送信側/受信側 (S-R) 通信のシミュレーションを実行できます。データの送信側と受信側は異なるレートで実行できます。複数のデータ送信側は単一のデータ受信側と通信できます。
開始するには、キューに登録されている S-R インターフェイスとポートで ARXML ファイルから Simulink にコンポーネントをインポートするか、Simulink を使用してインターフェイスとポートを作成します。
AUTOSAR のキューに登録されている送信と受信の Simulink でのモデル化のワークフロー
次の手順は、AUTOSAR のキューに登録されている送信側コンポーネントと受信側コンポーネントを Simulink でモデル化する一般的なワークフローの概要を示したものです。
AUTOSAR のキューに登録されている送信側コンポーネントとして 1 つ以上のモデルを設定し、AUTOSAR のキューに登録されている受信側コンポーネントとして 1 つのモデルを設定します。それぞれのコンポーネント モデルについて、AUTOSAR ディクショナリとコード マッピング エディターを使用して次を行います。
S-R データ インターフェイスとそのデータ要素を作成します。
送信ポートまたは受信ポートを作成します。
送信ポートまたは受信ポートを Simulink の送信用の出力端子または受信用の入力端子にマッピングします。AUTOSAR データ アクセス モードを
[QueuedExplicitSend]
または[QueuedExplicitReceive]
に設定します。
例については、AUTOSAR のキューに登録されている通信用の送信側コンポーネントと受信側コンポーネントの設定を参照してください。
AUTOSAR のキューに登録されている送信側コンポーネントまたは受信側コンポーネントの動作を実装するには、SimulinkSend ブロックと Receive ブロックを使用します。詳細については、Simulink メッセージの概要を参照してください。
キューに登録されている S-R 通信の実装に状態が含まれている場合や、判定ロジックが必要な場合は、Stateflow チャートを使用します。
詳細については、AUTOSAR のキューに登録されている送信と受信のメッセージングの実装を参照してください。
AUTOSAR のキューに登録されている送信側コンポーネントまたは受信側コンポーネントのモデルをビルドすると次のようになります。
生成された C コードには AUTOSAR の
Rte_Send_<port>_<DataElement>
API またはRte_Receive_<port>_<DataElement>
API が含まれます。生成されたコードでメッセージ受信呼び出しのステータスが処理されます。
メッセージ送信ステータス (キューのオーバーフローなど) の処理は、Stateflow でのみモデル化できます。キューに登録されている送信側コンポーネントで Stateflow ロジックが実装されている場合にのみ、生成されたコードでメッセージ送信ステータスが処理されます。
エクスポートされた ARXML ファイルにキューに登録されている送信側/受信側通信の記述が含まれます。キューに登録されているポートについて生成された
ComSpec
には、ポートの種類とキューの長さ (Simulink メッセージのプロパティQueueCapacity
に基づく) が含まれます。キューに登録されているポートのデータ要素について生成されたSwDataDefProps
では、SwImplPolicy
がQueued
に設定されます。
AUTOSAR のキューに登録されている送信側/受信側通信を Simulink でシミュレートするには、含まれるコンポジション、システム、またはハーネス モデルを作成します。キューに登録されている送信側コンポーネントと受信側コンポーネントを参照モデルとして含めます。
送信側コンポーネントと受信側コンポーネントの間にキューイング ロジックを提供するには、Simulink Queue ブロックまたは Stateflow ロジックを挿入します。Queue ブロックを使用すると、特定の容量をもつキューをシミュレートできます。送信側コンポーネントと受信側コンポーネントを直接接続すると、Simulink によって容量 1 の既定のキューが挿入されます。
コンポーネントを直接接続する例については、AUTOSAR のキューに登録されている送信側/受信側通信のシミュレーションの設定で使用している 1 対 1 のコンポジション モデルを参照してください。
送信側コンポーネントと受信側コンポーネントの間に Queue ブロックまたは Stateflow ロジックを挿入する例については、AUTOSAR のキューに登録されている送信側/受信側の N 対 1 の通信のシミュレーションおよびAUTOSAR のキューに登録されている送信側/受信側のイベントドリブンの通信のシミュレーションを参照してください。
AUTOSAR のキューに登録されている通信用の送信側コンポーネントと受信側コンポーネントの設定
この例では、AUTOSAR のキューに登録されている送信側コンポーネントと受信側コンポーネントを Simulink で設定します。これらのモデルのシミュレーション用の接続については、AUTOSAR のキューに登録されている送信側/受信側通信のシミュレーションの設定を参照してください。
openExample('mAutosarSlSenderSWC1') openExample('mAutosarSlReceiverSWC')
キューに登録されている送信側コンポーネントまたは受信側コンポーネントとして設定する AUTOSAR モデルを開きます。S-R データ インターフェイスとキューに登録されている送信ポートまたは受信ポートを作成するには次を行います。
AUTOSAR ディクショナリを開きます。
[S-R Interfaces] を選択します。S-R データ インターフェイスを作成するには、[追加] ボタン
をクリックします。その名前と関連付けられる S-R データ要素の数を指定します。この例では、送信側コンポーネントと受信側コンポーネントの両方で 1 つのデータ要素を使用します。
新しい S-R インターフェイスを選択して展開します。[DataElements] を選択し、データ要素の属性を変更します。次の図は、送信側コンポーネントのデータ要素
DE1
を示しています。[AtomicComponents] ノードを展開し、AUTOSAR コンポーネントを選択します。コンポーネントを展開します。
[SenderPorts] ビューまたは [ReceiverPorts] ビューを選択し、そのビューを使用して必要な送信ポートまたは受信ポートを追加します。それぞれの S-R ポートについて、作成した S-R インターフェイスを選択します。次の図は、送信側コンポーネントの送信ポート
MsgOut
を示しています。S-R インターフェイスOut1
を使用しています。コード マッピング エディターを開きます。[入力端子] タブまたは [出力端子] タブを選択し、そのタブを使用して 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
では、SwImplPolicy
がQueued
に設定されます。
AUTOSAR のキューに登録されている送信側コンポーネントまたは受信側コンポーネントのメッセージング動作を実装するには、Simulink メッセージまたは Stateflow メッセージを使用します。AUTOSAR のキューに登録されている送信と受信のメッセージングの実装またはStateflow メッセージングを使用した AUTOSAR のキューに登録されている送信と受信の実装を参照してください。
AUTOSAR のキューに登録されている送信と受信のメッセージングの実装
AUTOSAR のキューに登録されている送信側コンポーネントと受信側コンポーネントの動作をモデル化するため、この例では以下を使用します。
メッセージングを実装するための Simulink メッセージ ブロック。
判定ロジックを実装するための Stateflow チャート。
この例では、モデル例 mAutosarSlSenderSWC1.slx
および mAutosarSlReceiverSWC.slx
の作成について説明します。これらのモデルにアクセスするには、MATLAB® コマンド ラインで次のコードを実行します。
openExample('mAutosarSlSenderSWC1') openExample('mAutosarSlReceiverSWC')
他の例では、同じ送信側と受信側のモデルを 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
チャートで実装されるロジックを示しています。このチャートには、ActivateLeft
、DeactivateLeft
、ActivateRight
、DeactivateRight
の 4 つのステートがあります。それぞれのステートに、方向指示器のデータ値を代入してメッセージ制御値を true
に設定する entry アクションがあります (メッセージ送信による Stateflow チャートとの通信 (Stateflow)を参照してください)。メッセージの出力は周期的なタイミングで行われます。
次の図は、AUTOSAR のキューに登録されている受信側コンポーネントの最上位の mAutosarSlReceiverSWC
を示しています。このモデルには次が含まれます。
Simulink Receive メッセージ ブロック。
Stateflow チャート
HMILogic
。
ルート入力端子 MsgIn
がメッセージを Receive ブロックに提供し、このブロックがメッセージから方向指示器のデータ値を抽出します。次に、ブロックはメッセージ受信と方向指示器のデータ値を Stateflow チャートに出力します。
Receive ブロック パラメーターは Simulink の既定値に設定されます。たとえば、[受信ステータスの表示] はオンになり、[内部キューの使用] はオフになり、[キューが空のときの値のソース] は [最後の値をホールド]
に設定されます。
次の図は、HMILogic
チャートで実装されるロジックを示しています。HMILogic
には、HMIRequestProcessing
、LeftTurnSignal
、RightTurnSignal
のステートがあります。
HMIRequestProcessing
は、メッセージ受信と方向指示器のデータ入力を受け取り、isNewData
フラグを設定して、方向指示器のデータを処理する関数を呼び出してからisNewData
フラグをクリアします。関数processRequest
は、受信した方向指示器のデータをテストし、メッセージの送信側でLeftTurnOn
、RightTurnOn
、LeftTurnOff
、またはRightTurnOff
の値が設定されていないかどうかを調べます。受信した値に基づいて、要求カンター変数のleftTurnReqs
またはrightTurnReqs
が関数でインクリメントまたはデクリメントされます。メッセージの入力は周期的なタイミングで行われます。LeftTurnSignal
とRightTurnSignal
には、それぞれOff
とOn
のステートがあります。要求カウンターleftTurnReqs
またはrightTurnReqs
の値と時間間隔に基づいてOff
からOn
に遷移します。要求カウンターがゼロより大きい場合、チャートで変数leftSignalOut
またはrightSignalOut
が 1 に設定されます。時間間隔が経過すると、ステートが遷移してOff
に戻り、leftSignalOut
またはrightSignalOut
が 0 に設定されます。
キューに登録されている複数の送信側コンポーネントの N 対 1 のメッセージング構成のサンプル実装については、AUTOSAR のキューに登録されている送信側/受信側の N 対 1 の通信のシミュレーションで使用されているモデル例を参照してください。
イベントドリブンのキューに登録されているメッセージングのサンプル実装については、AUTOSAR のキューに登録されている送信側/受信側のイベントドリブンの通信のシミュレーションで使用されているモデル例を参照してください。
AUTOSAR のキューに登録されている送信側/受信側通信のシミュレーションの設定
AUTOSAR のキューに登録されている送信側/受信側通信を Simulink® でシミュレートするには、含まれるコンポジション、システム、またはハーネス モデルを作成します。キューに登録されている送信側コンポーネントと受信側コンポーネントを参照モデルとして含めます。
送信側コンポーネントと受信側コンポーネントがどちらも 1 つの場合は、それらのモデルを直接接続することもできます。この例では、送信側コンポーネントと受信側コンポーネントのモデルを直接接続します。
N 対 1 またはイベントドリブンのメッセージングをシミュレートする場合は、送信側コンポーネントと受信側コンポーネントのモデル間に追加のロジックを指定します。例については、AUTOSAR のキューに登録されている送信側/受信側の N 対 1 の通信のシミュレーションとAUTOSAR のキューに登録されている送信側/受信側のイベントドリブンの通信のシミュレーションを参照してください。
この例では、キューに登録されている送信側/受信側コンポーネント モデルが含まれ、1 対 1 の通信を実装するコンポジションレベルのモデルを示します。周期的なタイミングによってメッセージングが実行されます。この例では、次のコードを実行して開くことができる次の 3 つのモデルを使用します。
open_system('mAutosarSlQueuedMsgs_1_1.slx') %(top model) open_system('mAutosarSlSenderSWC1.slx') open_system('mAutosarSlReceiverSWC.slx')
モデル mAutosarSlSenderSWC1
と mAutosarSlReceiverSWC
は、AUTOSAR のキューに登録されている通信用の送信側コンポーネントと受信側コンポーネントの設定で設定してAUTOSAR のキューに登録されている送信と受信のメッセージングの実装で実装したものと同じ送信側コンポーネントと受信側コンポーネントです。それらがコンポジションレベルのモデル mAutosarSlQueuedMsgs_1_1
に参照モデルとして含まれ、送信側コンポーネントのポート MsgOut
が受信側コンポーネントのポート MsgIn
に接続されています。
最上位モデル mAutosarSlQueuedMsgs_1_1
はシミュレーションにのみ使用されます。AUTOSAR C コードおよび ARXML ファイルは、送信側コンポーネントと受信側コンポーネントのモデルについては生成できますが、含まれるコンポジションレベルのモデルについては生成できません。
同様に、ソフトウェアインザループ (SIL) シミュレーションについても、送信側コンポーネントと受信側コンポーネントのモデルでは実行できますが、コンポジションレベルのモデルでは実行できません。
AUTOSAR のキューに登録されている送信側/受信側の N 対 1 の通信のシミュレーション
この例では、3 つの送信側と 1 つの受信側のコンポーネント モデルを含み、N 対 1 の通信を実装するコンポジションレベルのモデルを示します。周期的なタイミングによってメッセージングが実行されます。この例は、2 つの送信側モデルを追加し、送信側と受信側の間にフロー ロジックを提供することで、1 対 1 の例を拡張しています。
この例では、MATLAB® コマンド ラインで次のコード行を実行してアクセスできる 4 つのモデルを使用します。
open_system('mAutosarSlQueuedMsgs_N_1.slx') open_system('mAutosarSlSenderSWC1.slx') open_system('mAutosarSlSenderSWC2.slx') open_system('mAutosarSlSenderSWC3.slx') open_system('mAutosarSlReceiverSWC.slx')
コンポジションレベルのモデル mAutosarSlQueuedMsgs_N_1
に 3 つの送信側コンポーネントと 1 つの受信側コンポーネントが参照モデルとして含まれています。送信側コンポーネントの MsgOut
ポートが間にある MsgJoin
処理ロジックに接続され、それを介して受信側コンポーネントの MsgIn
ポートに接続されています。
モデル mAutosarSlSenderSWC1
と mAutosarSlReceiverSWC
は、AUTOSAR のキューに登録されている通信用の送信側コンポーネントと受信側コンポーネントの設定で設定してAUTOSAR のキューに登録されている送信と受信のメッセージングの実装で実装したものと同じ送信側コンポーネントと受信側コンポーネントです。2 つ目の送信側コンポーネント mAutosarSlSenderSWC2
と 3 つ目の送信側コンポーネント mAutosarSlSenderSWC3
は mAutosarSlSenderSWC1
に似ていますが、受信側で処理する別のタイプのメッセージ入力を実装します。
次の図は、AUTOSAR のキューに登録されている送信側コンポーネントの最上位の mAutosarSlSenderSWC2
を示しています。これには、左折の方向指示器のロジックを提供する Stateflow® チャート Hazard Signal Generator
が含まれています。チャートのメッセージラインの出力端子は Simulink® ルート出力端子 MsgOut
に接続されています。右折の方向指示器を処理するための対応する Hazard Signal Generator
チャートが送信側コンポーネント mAutosarSlSenderSWC3
に表示されます。
次の図は、 Hazard Signal Generator
チャートで実装されるロジックを示しています。このチャートには、HazardOff
と HazardOn
の 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 のキューに登録されている送信と受信の実装を参照してください。
この例では、MATLAB® コマンド ラインで次のコード行を実行してアクセスできる 3 つのモデルを使用しています。
open_system('mAutosarDREventMsgs') open_system('mAutosarMsgSender') open_system('mAutosarHMILogicEvent')
コンポジションレベルのモデル 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
チャートで実装されるロジックを示しています。このチャートには、ActivateLeft
、DeactivateLeft
、ActivateRight
、DeactivateRight
の 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)を参照してください。
次の図は、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
には、HMIRequestProcessing
、LeftTurnSignal
、RightTurnSignal
のステートがあります。(この受信側のチャートは 1 対 1 および N 対 1 のシミュレーションの例のチャート HMILogic
と同様です)。
HMIRequestProcessing
は、メッセージ キューからメッセージを受信し、関数を呼び出してメッセージを処理してから、メッセージを破棄します。関数processRequest
は、受信したメッセージ データをテストし、メッセージの送信側でLeftTurnOn
、RightTurnOn
、LeftTurnOff
、またはRightTurnOff
の値が設定されていないかどうかを調べます。受信した値に基づいて、要求カンター変数のleftTurnReqs
またはrightTurnReqs
が関数でインクリメントまたはデクリメントされます。メッセージの入力は関数呼び出し入力イベントに基づいて行われます。チャートが誤って有効化されると、変数InvalidPath
が 1 に設定されます。LeftTurnSignal
とRightTurnSignal
には、それぞれOff
とOn
のステートがあります。要求カウンター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)で説明されている一般的な手順に従います。
AUTOSAR のキューに登録されている送信側コンポーネントまたは受信側コンポーネントのモデルにチャートを追加します。チャートに名前を付けます。
チャートを開き、メッセージ関連のステートを追加します。
各ステートについて、entry アクションを追加します。サポートされているメッセージのキーワードは次のとおりです。
send(M)
-- メッセージ M を送信します。receive(M)
-- メッセージ M を受信します。isvalid(M)
-- メッセージ M が有効かどうか (ポップされていて破棄されていないこと) を確認します。discard(M)
-- メッセージ M を明示的に破棄します。メッセージはメッセージ受信操作が完了するとステート exit で暗黙的に破棄されます。
ステート遷移ラインを追加し、それらのラインで遷移条件またはイベントを指定します。
条件ステートメントまたは Simulink ブロックの入力値の変更に基づいて遷移する場合は条件を使用します。詳細については、動作モード間の遷移 (Stateflow)を参照してください。
Simulink のトリガー入力イベントまたは関数呼び出し入力イベントに基づいて遷移する場合はイベントを使用します。詳細については、イベントのブロードキャストによるモデル コンポーネントの同期 (Stateflow)を参照してください。
状態変数を格納するデータを定義します。
チャートのメッセージ ラインの入力端子と出力端子を Simulink のルートの入力端子と出力端子に接続します。
詳細については、メッセージ (Stateflow)を参照してください。
Stateflow チャートのコンテキストで、データ型やキューの容量など、メッセージのプロパティを変更できます (プロパティの一覧については、メッセージのプロパティの設定 (Stateflow)を参照してください)。メッセージのプロパティには、プロパティ インスペクター、[メッセージ] プロパティ ダイアログ ボックス、モデル エクスプローラーからアクセスできます。メッセージのプロパティをプロパティ インスペクターで表示または変更するには次を行います。
メッセージを使用するチャートを開きます。
[モデル化] タブで [[シンボル] ペイン] および [プロパティ インスペクター] を開きます。
[シンボル] ビューで、メッセージを選択します。プロパティ インスペクターに [メッセージ データ プロパティ] と [詳細設定] のプロパティのペインが表示されます。
受信側コンポーネントのチャートの場合は、プロパティ インスペクターに [メッセージ キュー プロパティ] も表示されます。受信側コンポーネントで外部 AUTOSAR RTE メッセージ キューを使用するよう構成するため、プロパティ [内部キューの使用] がクリアされていることを確認します。
既定では、Simulink ルート端子が接続された Stateflow メッセージからメッセージのデータ型とキューの容量が継承されます。メッセージ データはこれらの Simulink パラメーターのデータ型を使用できます (int
型、uint
型、浮動小数点型、boolean
、Enum
、または Bus
(struct
))。
インポートしたバス データ型または列挙データ型を Stateflow チャートで使用する場合、シミュレーション用に typedef が必要です。typedef を自動的に生成するには、Simulink コンフィギュレーション オプションの [インポートしたバスと列挙型に対して typedef を生成する] を選択します。それ以外の場合は、Simulink コンフィギュレーション パラメーターの [シミュレーション ターゲット] 、 [カスタム コード] 、 [ヘッダー ファイル] を使用して定義を含むヘッダー ファイルを含めます。
キューに登録されている送信側コンポーネントと受信側コンポーネントの 1 対 1 の構成のサンプル実装については、AUTOSAR のキューに登録されている通信用の送信側コンポーネントと受信側コンポーネントの設定とAUTOSAR のキューに登録されている送信側/受信側通信のシミュレーションの設定の両方で使用されているコンポーネント モデルの例を参照してください。モデル mAutosarSenderSWC1.slx
および mAutosarReceiverSWC.slx
は、MATLAB コマンド ラインで次のコード行を実行することでアクセスできます。
openExample('mAutosarSenderSWC1.slx') openExample('mAutosarReceiverSWC.slx')
次の図は、AUTOSAR のキューに登録されている送信側コンポーネントの最上位の mAutosarSenderSWC1
を示しています。これには、Stateflow チャート Turn Signal Generator
が含まれています。チャートのメッセージ ラインの出力端子は Simulink ルート出力端子 MsgOut
に接続されています。
次の図は、Turn Signal Generator
チャートで実装されるロジックを示しています。このチャートには、ActivateLeft
、DeactivateLeft
、ActivateRight
、DeactivateRight
の 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
には、HMIRequestProcessing
、LeftTurnSignal
、RightTurnSignal
のステートがあります。
HMIRequestProcessing
は、メッセージ キューからメッセージを受信し、関数を呼び出してメッセージを処理してから、メッセージを破棄します。関数processRequest
は、受信したメッセージ データをテストし、メッセージの送信側でLeftTurnOn
、RightTurnOn
、LeftTurnOff
、またはRightTurnOff
の値が設定されていないかどうかを調べます。受信した値に基づいて、要求カンター変数のleftTurnReqs
またはrightTurnReqs
が関数でインクリメントまたはデクリメントされます。メッセージの入力は周期的なタイミングで行われます。LeftTurnSignal
とRightTurnSignal
には、それぞれOff
とOn
のステートがあります。要求カウンターleftTurnReqs
またはrightTurnReqs
の値と時間間隔に基づいてOff
からOn
に遷移します。要求カウンターがゼロより大きい場合、チャートで変数leftSignalOut
またはrightSignalOut
が 1 に設定されます。時間間隔が経過すると、ステートが遷移してOff
に戻り、leftSignalOut
またはrightSignalOut
が 0 に設定されます。
キューに登録されている送信側コンポーネントと受信側コンポーネントの N 対 1 の構成のサンプル実装については、AUTOSAR のキューに登録されている送信側/受信側の N 対 1 の通信のシミュレーションで使用されているモデル例を参照してください。
イベントドリブンのキューに登録されているメッセージングのサンプル実装については、AUTOSAR のキューに登録されている送信側/受信側のイベントドリブンの通信のシミュレーションで使用されているモデル例を参照してください。
AUTOSAR のキューに登録されている送信側/受信側通信のシミュレーションの設定
AUTOSAR のキューに登録されている送信側/受信側通信を Simulink でシミュレートするには、含まれるコンポジション、システム、またはハーネス モデルを作成します。キューに登録されている送信側コンポーネントと受信側コンポーネントを参照モデルとして含めます。
送信側コンポーネントと受信側コンポーネントがどちらも 1 つの場合は、それらのモデルを直接接続することもできます。この例では、送信側コンポーネントと受信側コンポーネントのモデルを直接接続します。
N 対 1 またはイベントドリブンのメッセージングをシミュレートする場合は、送信側コンポーネントと受信側コンポーネントのモデル間に追加のロジックを指定します。例については、AUTOSAR のキューに登録されている送信側/受信側の N 対 1 の通信のシミュレーションとAUTOSAR のキューに登録されている送信側/受信側のイベントドリブンの通信のシミュレーションを参照してください。
この例では、キューに登録されている送信側/受信側コンポーネント モデルが含まれ、1 対 1 の通信を実装するコンポジションレベルのモデルを示します。周期的なタイミングによってメッセージングが実行されます。この例では、MATLAB コマンド ラインで次のコード行を実行してアクセスできる 3 つのモデルを使用しています。
openExample('mAutosarQueuedMsgs_1_1.slx') openExample('mAutosarSenderSWC1.slx') openExample('mAutosarReceiverSWC.slx')
モデル mAutosarSenderSWC1
と mAutosarReceiverSWC
の送信側コンポーネントと受信側コンポーネントは、AUTOSAR のキューに登録されている通信用の送信側コンポーネントと受信側コンポーネントの設定で設定してAUTOSAR のキューに登録されている送信と受信のメッセージングの実装で実装したものと同じです。それらがコンポジションレベルのモデル mAutosarQueuedMsgs_1_1
に参照モデルとして含まれ、送信側コンポーネントのポート MsgOut
が受信側コンポーネントのポート MsgIn
に接続されています。
最上位モデル mAutosarQueuedMsgs_1_1
はシミュレーションにのみ使用されます。AUTOSAR C コードおよび ARXML ファイルは、送信側コンポーネントと受信側コンポーネントのモデルについては生成できますが、含まれるコンポジションレベルのモデルについては生成できません。
同様に、ソフトウェアインザループ (SIL) シミュレーションについても、送信側コンポーネントと受信側コンポーネントのモデルでは実行できますが、コンポジションレベルのモデルでは実行できません。
AUTOSAR のキューに登録されている送信側/受信側の N 対 1 の通信のシミュレーション
この例では、2 つの送信側と 1 つの受信側のコンポーネント モデルを含み、N 対 1 の通信を実装するコンポジションレベルのモデルを示します。周期的なタイミングによってメッセージングが実行されます。この例は、2 つ目の送信側モデルを追加し、送信側と受信側の間にフロー ロジックを提供することで、1 対 1 の例を拡張しています。
この例では、MATLAB コマンド ラインで次のコード行を実行してアクセスできる 4 つのモデルを使用しています。
openExample('mAutosarQueuedMsgs_N_1.slx') %top model openExample('mAutosarSenderSWC1.slx') openExample('mAutosarSenderSWC2.slx') openExample('mAutosarReceiverSWC.slx')
コンポジションレベルのモデル mAutosarQueuedMsgs_N_1
に 2 つの送信側コンポーネントと 1 つの受信側コンポーネントが参照モデルとして含まれています。送信側コンポーネントの MsgOut
ポートが間にある MsgJoin
処理ロジックに接続され、それを介して受信側コンポーネントの MsgIn
ポートに接続されています。
モデル mAutosarSenderSWC1
と mAutosarReceiverSWC
の送信側コンポーネントと受信側コンポーネントは、AUTOSAR のキューに登録されている通信用の送信側コンポーネントと受信側コンポーネントの設定で設定してAUTOSAR のキューに登録されている送信と受信のメッセージングの実装で実装したものと同じです。2 つ目の送信側コンポーネント mAutosarSenderSWC2
は mAutosarSenderSWC1
に似ていますが、受信側で処理する別のタイプのメッセージ入力を実装します。
次の図は、AUTOSAR のキューに登録されている送信側コンポーネントの最上位の mAutosarSenderSWC2
を示しています。これには、Stateflow チャート Hazard Signal Generator
が含まれています。チャートのメッセージ ラインの出力端子は Simulink ルート出力端子 MsgOut
に接続されています。
次の図は、Hazard Signal Generator
チャートで実装されるロジックを示しています。このチャートには、HazardOff
と HazardOn
の 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
演算子が動的に反応できるようにするには、[キュー オーバーフローの診断] プロパティの値を [Warning]
または [None]
に設定します。詳細については、キュー オーバーフローの診断 (Stateflow)を参照してください。
入力メッセージのオーバーフローのチェック. 入力メッセージ キューのオーバーフロー ステータスをチェックするには、まず 1 つのメッセージをキューから削除します。次のことが可能です。
メッセージおよび
overflowed
演算子で遷移をガードする。メッセージで遷移をガードして、遷移先ステートの entry アクションで
overflowed
演算子を呼び出す。メッセージでステートが
on
のアクションをガードして、アクションでoverflowed
演算子を呼び出す。ステート アクションで、
receive
演算子を使用し、続いてoverflowed
演算子を使用する。
同じタイム ステップ内で、入力メッセージを取得する前に overflowed
演算子を呼び出すと、実行時エラーが発生します。
出力メッセージのオーバーフローのチェック. 出力メッセージ キューのオーバーフロー ステータスをチェックするには、まず 1 つのメッセージをキューに追加します。次のことが可能です。
send
演算子を使用し、続いてoverflowed
演算子を使用する。forward
演算子を使用し、続いてoverflowed
演算子を使用する。
同じタイム ステップ内で、出力メッセージを送信または転送する前に overflowed
演算子を呼び出すと、実行時エラーが発生します。