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 ブロックが再構成された正弦波信号を出力する (オレンジ)。

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

[アニメーション] を使用してモデルをアニメーション化し、モデル コンポーネント間のメッセージの流れを観察することができます。アニメーションの速度は、[Slow]、[Medium]、または [Fast] に指定できます。4 つ目のオプションである [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] を選択します。

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

参考

| | | | |

関連するトピック