このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
メッセージの送受信のアニメーション化および理解
この例では、メッセージを送信、受信、および可視化する方法を説明します。また、この例では、モデル内でメッセージがどのように流れるのかを理解するために、シミュレーション データ インスペクター、シーケンス ビューアー、アニメーション、および 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 とデータ値とともにリストされます。
端子の値のラベルを使用したメッセージ ペイロードの表示
端子の値のラベルを使用してメッセージ データを表示するには、ブロックから出るメッセージ ラインを右クリックし、Show Port Value Label On Selected Signal
を選択します。
以下の例では、Send ブロックを Queue ブロックに接続するメッセージ ラインに端子の値のラベルが表示されています。
メッセージがデータをバスとして搬送する場合、端子の値のラベルで表示するバス要素を選択することもできます。
SimpleMessagesPortValueModel
は Send ブロックへの入力が Bus Creator ブロックから発生する SimpleMessagesModel
のバリエーションです。この例では、バス オブジェクト Data_message
は sinewave
と constant
の 2 つの要素で作成されます。
このモデルを開くには、次を入力します。
open_system('SimpleMessagesPortValueModel');
Send ブロックから出るメッセージ ラインを右クリックし、Show Port Value Label On Selected Signal
をクリックして [定数] を選択します。
定数信号の値のみが端子の値のラベルに表示されます。
メッセージ送信があるメッセージ ラインで停止した場合、端子の値のラベルは最後のメッセージ ペイロードの値を表示し続けます。
参考
Sine Wave | Send | Receive | Queue | Hit Crossing Probe | Sequence Viewer