このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
Stateflow のメッセージ、イベント、データ間の相違の表示
この例では、Stateflow® 内のメッセージ、イベント、データの動作を比較します。
送信側チャート
このモデルには、DataSender
、EventSender
、MessageSender
の 3 つの送信側チャートがあります。各送信側チャートには、ステートが 1 つずつあります。ステートの entry アクションで、チャートはデータに値を割り当てるか、関数呼び出しイベントを送信するか、メッセージを送信します。
受信側チャート
各送信側チャートには、それぞれに対応する受信側チャートがあります。各受信側チャートには、A0
、A1
、A2
および A3
のステートをもつ状態図があります。暗黙的なイベント after(3,sec)
は、A0
から A1
への遷移をトリガーします。A1
、A2
および 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
が再度起動することはありません。スコープ上で、EventReceiver
が A0
から一度も遷移しないことがわかります。
イベントの有効性はタイム ステップ間で保持されないため、受信側のチャートがイベントに応答できる機会は 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 回だけであることがわかります。
イベントとは異なり、メッセージはキューに登録されます。受信側チャートは、メッセージが送信された後に、いつでもそのメッセージに応答できます。データとは異なり、メッセージは無期限に有効ではありません。メッセージはタイム ステップの終了時に破棄されます。