Main Content

メッセージの送受信のアニメーション化および理解

この例では、メッセージを送信、受信、および可視化する方法を説明します。また、この例では、モデル内でメッセージがどのように流れるのかを理解するために、シミュレーション データ インスペクターシーケンス ビューアーアニメーション、および Storage Inspector を使用する方法を説明します。

モデルの説明

SimpleMessagesModel には以下のブロックが含まれます。

  • Sine Wave — 信号ソース。このブロックの [サンプル時間] パラメーターは 0.1 に設定されています。

  • Send — データ信号を変換し、メッセージを送信します。Sine Wave ブロックの [サンプル時間] パラメーターに指定した値により、Send ブロックがメッセージを送信するレートが決まります。したがって、Send ブロックは 0.1 シミュレーション時間ごとにメッセージを 1 件送信します。

  • Queue — メッセージを格納します。Send ブロックと Queue ブロックの間のメッセージ ラインを観察します。既定のキューの容量は 16 です。つまり、Queue ブロックは最大で 16 件のメッセージを格納できます。既定のメッセージの並べ替え動作は LIFO です。つまり、受信したメッセージは後入れ先出しのポリシーに従って並べ替えられます。既定では、[Overwrite the oldest element if queue is full] チェック ボックスはオンになっています。キューが一杯になると、受信したメッセージによってキュー内の最も古いメッセージが上書きされます。Queue ブロックの使い方の詳細については、Queue ブロックを使用したメッセージの管理を参照してください。

  • Receive — メッセージを受信し、信号データに変換します。このブロックでは、[サンプル時間] パラメーターは 0.1 に設定されています。Receive ブロックは、0.1 シミュレーション時間ごとにメッセージを 1 件受信します。

  • Scope — Receive ブロックによって受信されたメッセージを可視化します。

モデルのシミュレーションと結果の確認

このモデルでは、Sine Wave ブロック、Send ブロック、Queue ブロック、Receive ブロック、Scope ブロック間の信号およびメッセージ ラインについてデータのログ記録が有効になっています。

SimpleMessagesModel をシミュレートし、シミュレーション データ インスペクターから以下を観察します。

  • Sine Wave ブロックが正弦波信号を生成する (緑)。

  • 0.1 シミュレーション時間ごとに、Send ブロックが信号の値をメッセージに変換し、Queue ブロックに送信する。シミュレーション データ インスペクターでメッセージがステム プロットとして表示されます。シミュレーション データ インスペクターで送信メッセージ (紫) が表示されていることを確認します。

  • Queue ブロックが Receive ブロックにメッセージを送信する (青)。

  • Receive ブロックが再構成された正弦波信号を出力する (オレンジ)。

シーケンス ビューアーを使用したメッセージの可視化

シーケンス ビューアーツールまたは Sequence Viewer ブロックを使用して、メッセージ、イベント、および Simulink 関数の呼び出しを可視化できます。シーケンス ビューアーには、メッセージの遷移イベントとメッセージが搬送するデータが表示されます。シーケンス ビューアー ウィンドウでは、Stateflow チャートの実行に関連するイベント データと、Stateflow チャート間でのメッセージの交換を表示できます。

シーケンス ビューアー ツールを使用するには次のようにします。

  • イベントのログ記録を有効にするには、Simulink ツールストリップの [シミュレーション] タブにある [準備] セクションで [イベントのログ] をクリックします。

  • モデルをシミュレートします。シーケンス ビューアー ツールを開くには、[シミュレーション] タブの [結果の確認] セクションで [シーケンス ビューアー] をクリックします。

[イベントのログ] ボタンと [シーケンス ビューアー] ボタンは、モデルに Simulink® Messages & Events ライブラリのブロック、Stateflow チャート、Function-Call Subsystem ブロック、Simulink Function ブロック、または SimEvents® ブロックが含まれている場合に表示されます。

シーケンス ビューアー ウィンドウには、モデル実行中のさまざまな時点で作成、送信、転送、受信、破棄されたメッセージが表示されます。シーケンス ビューアー ウィンドウには、ステート アクティビティ、遷移や、Stateflow グラフィカル関数、Simulink 関数、MATLAB 関数への関数呼び出しも表示されます。

メッセージの遷移を可視化するために、モデルにSequence Viewerブロックを追加することもできます。詳細については、Queue ブロックを使用したメッセージの管理を参照してください。

アニメーションと Storage Inspector の使用

[アニメーション] を使用してモデルをアニメーション化し、モデル コンポーネント間のメッセージの流れを観察することができます。アニメーションの速度は、[Slow]、[Medium]、または [Fast] に指定できます。オプション [None] は、モデルのアニメーション化を無効にします。

ツールストリップの [デバッグ] タブにある [イベント アニメーション] セクションを見つけます。

[イベント アニメーション] セクションで、アニメーション速度を [Slow] に設定します。

モデルを再度シミュレートします。強調表示されたメッセージ ラインによってブロック間のメッセージの流れが表現されるのを観察します。

アニメーションでは、経過時間ではなく、イベントに基づいてメッセージ ラインと Simulink 関数の呼び出しが強調表示されます。同一のシミュレーション時間において、1 つ以上のメッセージ フローまたは Simulink 関数呼び出しイベントが強調表示されることがあります。

シミュレーションを一時停止します。Simulink ツールストリップの [デバッグ] タブで、[一時停止] をクリックします。最後に強調表示されたメッセージ ラインが紫で強調表示されていることを観察します。

Storage Inspector を使用すると、Queue ブロックに格納されたメッセージの詳細を可視化できます。シミュレーションを一時停止すると、Storage Inspector の拡大鏡アイコンが Queue ブロックに表示されます。Storage Inspector を開くには、この拡大鏡をクリックします。

Storage Inspector に格納されたメッセージは表示されていません。これは、Queue ブロックに到着したメッセージは、同一のシミュレーション時間に Receive ブロックによって受信されるからです。

格納されたメッセージが存在するシナリオを作成するには、シミュレーションを停止し、Receive ブロックの [サンプル時間] パラメーターを 0.5 に変更します。すると、Send ブロックは 0.1 シミュレーション時間ごとにメッセージを 1 件送信しますが、Receive ブロックは 0.5 シミュレーション時間ごとにメッセージを 1 件受信するようになります。これにより、メッセージのバックログが生じ、Queue ブロックに格納されます。

[アニメーション速度] を [Slow] に設定してモデルを再度シミュレートし、シミュレーションを一時停止して Storage Inspector でステータスをチェックします。Storage Inspector のエンティティは、Queue ブロックに格納された要素を表します。この場合は、メッセージになります。Storage Inspector には、Queue ブロックに格納されたメッセージが、各メッセージがもつ ID とデータ値とともにリストされます。

端子の値ラベルとしてのメッセージ ペイロードの表示

メッセージ データを端子の値ラベルとして表示するには、ブロックから発生するメッセージ ラインを右クリックし、[選択した端子の値ラベルを表示] を選択します。

以下の例では、Send ブロックから Queue ブロックを接続するメッセージ ラインに端子の値が表示されています。

メッセージがデータをバス オブジェクトとして搬送する場合、要素を端子の値として表示するよう選択することもできます。

SimpleMessagesPortValueModel は Send ブロックへの入力が Bus Creator ブロックから発生する SimpleMessagesModel のバリエーションです。この例では、バス オブジェクト Data_messagesinewaveconstant の 2 つの要素で作成されます。

このモデルを開くには、次を入力します。

open_system('SimpleMessagesPortValueModel');

Send ブロックから発生するメッセージ ラインを右クリックし、Show Value Label of Selected Port をクリックして [constant] を選択します。

定数信号の値のみが端子の値として表示されます。

メッセージ送信があるメッセージ ラインで停止した場合、端子の値表示は最後のメッセージ ペイロードの値を表示し続けます。

参考

| | | | |

関連するトピック