Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

Stateflow のメッセージ、イベント、データ間の相違の表示

この例では、Stateflow® 内のメッセージ、イベント、データの動作を比較します。

送信側チャート

このモデルには、DataSenderEventSenderMessageSender の 3 つの送信側チャートがあります。各送信側チャートには、ステートが 1 つずつあります。ステートの entry アクションで、チャートはデータに値を割り当てるか、関数呼び出しイベントを送信するか、メッセージを送信します。

受信側チャート

各送信側チャートには、それぞれに対応する受信側チャートがあります。各受信側チャートには、A0A1A2 および A3 のステートをもつ状態図があります。暗黙的なイベント after(3,sec) は、A0 から A1 への遷移をトリガーします。A1A2 および A3 間での遷移は、対応する送信側チャートからのデータ、イベントまたはメッセージによってガードされます。

スコープ出力

各受信側チャートでは、アクティブ ステートの出力が有効に設定され、スコープに接続されています。このスコープは、各タイム ステップでアクティブなステートを示します。この出力により、出力データ、イベントおよびメッセージ間の動作の違いが強調表示されます。

データの動作

DataSender チャートは、DataReceiver チャートに入力として接続する出力データ M に 1 の値を割り当てます。

DataReceiver チャートは、タイム ステップごとに 1 回ずつ実行されます。シミュレーションの開始時は、ステート A0 がアクティブです。時間 t=3 で、A0 から A1 への遷移が発生します。時間 t=4 で、チャートは M が 1 に等しいかどうかをテストします。この条件は満たされているため、チャートは A1 から A2 に遷移します。時間 t=5 で、M は引き続き 1 に等しいため、チャートは A2 から A3 に遷移します。スコープ上で、DataReceiver のステートが 3 回変化するのがわかります。

データに値が割り当てられると、その値はシミュレーション全体を通して保持されます。したがって、DataReceiver は条件 [M == 1] を評価するたびに新しいステートに遷移します。

イベントの動作

EventSender チャートは、コマンド send(M) を使用して関数呼び出し出力イベントを送信し、EventReceiver チャートを起動します。

EventReceiver チャートは、入力イベント M によってチャートが起動された場合にのみ実行されます。シミュレーションの開始時は、ステート A0 がアクティブです。A0 から A1 への遷移は絶対時間の時相論理に基づいているため、時間 t=0 では有効ではありません。A0 はアクティブのままで、チャートはスリープ状態に戻ります。EventSender がイベント M を送信するのは 1 回だけなので、EventReceiver が再度起動することはありません。スコープ上で、EventReceiverA0 から一度も遷移しないことがわかります。

イベントの有効性はタイム ステップ間で保持されないため、受信側のチャートがイベントに応答できる機会は 1 回しかありません。EventSender がイベントを送信しても、EventReceiver は応答する準備ができていません。EventReceiver がこのイベントに応答して遷移する機会は失われました。

メッセージの動作

MessageSender チャートは、構文 send(M) を使用して、出力メッセージ端子を介してメッセージを送信します。メッセージは、MessageReceiver チャートの入力メッセージ キューに入ります。MessageReceiver によって評価されるまで、メッセージはキュー内で待機します。

MessageReceiver チャートは、タイム ステップごとに 1 回ずつ実行されます。シミュレーションの開始時は、ステート A0 がアクティブです。時間 t=3 で、A0 から A1 への遷移が発生します。時間 t=4 で、チャートは M がキュー内に存在すると判断し、A2 に遷移します。タイム ステップの最後に、チャートは M をキューから削除します。時間 t=5 では、メッセージがキュー内に存在しないため、チャートは A3 に遷移しません。アクティブ ステートは A2 のままになります。スコープ上で、MessageReceiver のステートの変化が 2 回だけであることがわかります。

イベントとは異なり、メッセージはキューに登録されます。受信側チャートは、メッセージが送信された後に、いつでもそのメッセージに応答できます。データとは異なり、メッセージは無期限に有効ではありません。メッセージはタイム ステップの終了時に破棄されます。

関連するトピック