主要内容

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

実行時のStateflowオブジェクトの相互作用

実行時,Stateflow®オブジェクトは相互に作用して実世界での動作をシミュレ,トします。次のモデルでは,さまざまなStateflowオブジェクトを示し,その相互作用を説明します。

例示モデルの概要

このモデル例は,チャート内のグラフィカルオブジェクトと非グラフィカルオブジェクトが実行時にどのように相互作用するかを示しています。以下のオブジェクトがあります。

  • 条件と条件アクション

  • 排他的(或)ステト

  • フロ,チャ,ト

  • 関数の呼び出し

  • ヒストリジャンクション

  • パラレル(和)ステ,ト

  • ステ,トアクション

  • 入力▪▪ベントにガ▪▪ドされた遷移

チャ,トのセマンティクスの詳細は,チャ,トの実行フェ,ズを参照してください。

ホテルへのチェック@ @ンプロセスのモデル

この例では,ホテルへのチェックインプロセスを使用してStateflowチャートのセマンティクスを説明します。

sf_semantics_hotel_checkinモデルは,4の手动开关(金宝app模型)ブロック,1のMux(金宝app模型)ブロック,1の多端口切换(金宝app模型)ブロック,酒店チャ,ト,および显示(金宝app模型)ブロックで構成されています。

ブロック 目的 理由

手动开关(金宝app模型)

シミュレション中に一時停止や再開をすることなく2の設定の間を切り替えられるようにします。

シミュレーション中に,以下の入力イベントのいずれかを送信することでチャートを対話的にトリガーできます。

  • ホテルへのチェック@ @ン

  • ル,ムサ,ビスの呼び出し

  • 火災警報器の作動

  • 火災警報器が作動した後の警報解除信号の送信

Mux(金宝app模型)

複数の入力信号を組み合わせてベクトルにします。

チャートで複数の入力イベントを使用できるのは,それらの入力イベントがチャートのトリガー端子に入力のベクトルとして接続されている場合に限ります。

多端口切换(金宝app模型)

2以上の入力の間で選択できるようにします。

このブロックにより,チャ,ト入力デ,タroom_typeの値が提供されます。ここで,部屋の各タ▪▪プは数字(1,2,または3)。

手动开关ブロックで2を超える入力をサポトすることはできませんが,多端口切换ブロックでは可能です。

显示(金宝app模型)

入力信号の最新の数値を表示します。

シミュレ,ション中は,チャ,トの出力デ,タに加えたすべての変更が表示されます。

酒店チャートには,ステートやヒストリジャンクションなどのグラフィカルオブジェクトと,条件や条件アクションなどの非グラフィカルオブジェクトが含まれています。

オブジェクトをチャト内の位置にマッピングする方法にいては,Stateflowオブジェクトを参照してください。

チャ,トと金宝appブロックとの相互作用の仕組み

チャ,トの初期化

シミュレ,ションが始まると,[初期化時に指定されたチャ,トを実行(入力)]オプションがオンになっているため(チャ,トの初期化実行を参照),チャ,トが起動し,デフォルト遷移が実行されます。その後,チャ,トはスリ,プ状態に移行します。

メモ

このオプションがオフになっている場合,手动开关ブロックのいずれかを切り替えるまでチャ,トは起動しません。このオプションの設定は,[チャ,ト]プロパティダ@アログボックスで確認できます。チャ,トの最上位レベルを右クリックし,コンテキストメニュ,から[プロパティ]を選択します。

チャ,トと他のブロックとの相互作用

以下のエッジトリガ入力@ @ベントが発生した場合のみ,チャ@ @トは再び起動します。check_inroom_servicefire_alarm,またはall_clearです。シミュレション中に入力ベントに対して手动开关ブロックを切り替えると,立上がりエッジまたは立下がりエッジが検出され,チャトが起動します。チャ,トが起動している間は,以下のようになります。

  • 多端口切换ブロックにより,チャ,ト入力デ,タroom_typeに値が与えられます。

  • 显示ブロックにより,チャ,ト出力デ,タの値の変更が示されます。

チャ,トの非アクティブ

可能性のある実行フェ,ズがすべて完了すると,チャ,トはスリ,プ状態に戻ります。

チャ,トの実行フェ,ズ

次の節では,酒店チャ,トの影付きの各領域に対するチャ,トの実行を説明します。

ヒント

影付きの領域をクリックすると,チャ,トの実行フェ,ズに関する情報に直接ジャンプします。

フェ,ズ:チャ,トの初期化

この節では,チャ,トの起動直後にFront_deskステ,トで何が起こるのかを説明します。

ステジ ホテルのシナリオ チャ,トの動作
1

最初に,ホテルのフロントデスクで立止まります。

チャ,トレベルで,Check_inへのデフォルト遷移が発生し,このステ,トがアクティブになります。次に,Front_deskへのデフォルト遷移が発生し,このステ,トがアクティブになります。

チャ,トまたはステ,トに入るを参照してください。

2

ホテルにチェック▪▪ンした後,フロントデスクから立▪▪去ります。

check_inベントにより,Front_deskからの出力遷移がガ,ドされます。check_inに対するベントブロドキャストがチャトに受信されると,遷移は有効になります。

@ @ @ @ @ @ @ @ @ @ @ @ @を参照してください。

3.

フロントデスクから立去る直前,部屋へ運ぶ荷物を手に取ります。

遷移の発生直前,Front_desk退出アクションにより,move_bagsロ,カルデ,タが1に設定されます。次に,Front_deskが非アクティブになります。

ステ,トを出るを参照してください。

チャトの初期化に関するモデリングガドラン-以下のガ@ @ドラ@ @ンはチャ@ @ト初期化に適用されます。

モデリングガ▪▪ドラ▪▪ン このガ▪▪ドラ▪▪ンが適用される理由 参照

階層内の同じレベルに位置する複数のステートが同時にアクティブになることが不可能な場合は,排他的(或)構造を使用します。

このガドランを守ることで,チャトは適切に実行されます。たとえば,ホテルの中と外に同時にいることはできないため,Check_inWaiting_areaは排他的(或)ステトです。

デフォルト遷移を使用して,排他的(或)ステートのうち最初にアクティブになるものにマークを付けます。

このガドランを守ることで,チャトの実行中にステトの不整合エラが起こらないようにします。

固有の数値のない発生に依存する遷移をガドするには,条件ではなくベントを使用します。

ホテルへのチェックインの数値を定量化することはできないため,このような発生はイベントとしてモデリングします。

ステ,トが非アクティブになる直前に,退出アクションを使用してステトメントを1回実行します。

他のタプのステトアクションは,異なる方法で実行されるため,当てはまりません。

  • 条目アクションは,ステ,トがアクティブになった直後に1回実行されます。

  • アクションは,タイムステップのたびに実行されます(ステートがアクティブになった後の最初のタイムステップ以外)。チャ,トがそのステ,トにとどまり,有効な出力遷移が存在しない限り,実行は続けられます。

  • event_nameアクションは,。

フェ,ズ:単一のジャンクションからの複数の出力遷移の評価

この節では,Front_deskステ,トから出た後に何が起こるのかを説明します。それは,単一のジャンクションからの複数の出力遷移の評価です。

ステジ ホテルのシナリオ チャ,トの動作
1

部屋のタ▪▪プは3▪▪あり,そのいずれかに移動できます。

check_inベントによってFront_deskからの遷移がトリガ,された後,多端口切换ブロックで選択した部屋のタ▪▪プに基づいて,3▪▪の遷移パスが使用可能になります。各パスに割り当てた優先順位に基づいて,遷移がテストされます。

一連のフロ,チャ,トの実行順序を参照してください。

2

エグゼクティブスetc / etc / etc / etc / etc / etc / etc / etc / etc / etc / etc / etc。

room_type入力デ,タが1に等しい場合は,最上位の遷移が有効です。この条件が真の場合,出力デタを1500に設定することによって条件アクションが実行されます。

メモ

最上位の遷移が有効でない場合は,次の遷移をテストするために,セントラルジャンクションへの制御フローのバックトラッキングが発生します。この種のバックトラッキングは意図的です。

意図しないバックトラッキングとこれを回避する方法の詳細は,フロ,チャ,トのバックトラックフロ,チャ,ト作成のベストプラクティスを参照してください。

3.

ファミリス。

room_typeが2に等しい場合は,中間の遷移が有効です。この条件が真の場合,を1000に設定することによって条件アクションが実行されます。

4

シングルル,ムを選択した場合,基本料金は500です。

room_typeが3に等しい場合は,一番下の遷移が有効です。この条件が真の場合,を500に設定することによって条件アクションが実行されます。

room_typeの値が1,2,3のいずれでもない場合

出力遷移の評価に関するモデリングガ▪▪ドラ▪▪ン-以下のガ▪▪ドラ▪▪ンは遷移構文に適用されます。

モデリングガ▪▪ドラ▪▪ン このガ▪▪ドラ▪▪ンが適用される理由 参照

数値のない発生に依存する遷移をガドするには,ベントではなく条件を使用します。

ホテルの部屋のタaapl . exeプは数値的に定量化できるため,部屋のタaapl . exeプの選択は条件として表現します。

状态流におけるフロ,チャ,ト

可能な限り,遷移アクションではなく条件アクションを使用します。

条件アクションは,条件が真であると評価されるとすぐに実行されます。遷移アクションは、終端ジャンクションまたはステートまでの遷移パスが完了するまで実行されません。

実行遅延が必要でない場合は,遷移アクションではなく条件アクションを使用します。

遷移

複数の出力遷移のテスト順を管理するには,明示的な順序付けを使用します。

遷移の順序付けには,明示的な順序付けまたは暗黙的な順序付けを指定できます。既定の設定では,明示的な順序付けが使用されます。暗黙的な順序付けに切り替えた場合は,グラフィカルオブジェクトが動いたときに遷移のテスト順が変わる場合があります。

遷移の評価順序

フェズ:スパステトに対するステトアクションの実行

この節では,Checked_inステ,トに入った後に,どのサブステ,トがアクティブになるかに関係なく起こることを説明します。

ステジ ホテルのシナリオ チャ,トの動作
1

目的の部屋に着いたら,運んできた荷物を置きます。

move_bagsロ,カルデ,タを0に設定することにより,条目アクションが実行されます。

2

ル,ムサ,ビスを注文すると,ホテルからの請求額が一定額増えます。

room_serviceに対するベントブロドキャストがチャトに受信されると,以下のことが行われます。

  1. 服务ロカルデタのカウンタが1だけンクリメントします。

  2. 费用への関数呼び出しが発生し,出力デ,タに保存されていた,ホテルからの請求額が返されます。

@ @ @ @ @ @ @ @ @ @ @ @ @を参照してください。

ステトアクションの実行に関するモデリングガドラン-以下のガ@ @ドラ@ @ンはステ@ @トアクションに適用されます。

モデリングガ▪▪ドラ▪▪ン このガ▪▪ドラ▪▪ンが適用される理由 参照

ステ,トがアクティブになった直後に,条目アクションを使用してステトメントを1回実行します。

他のタプのステトアクションは,異なる方法で実行されるため,当てはまりません。

  • アクションは,そのステ,トからの有効な遷移が現れるまで,各タ,ムステップで実行されます。

  • 退出アクションは,ステ,トが非アクティブになる直前に1回実行されます。

ステト

event_nameアクションまたはmessage_nameアクションは,イベントブロードキャストまたはメッセージが受信された後にのみ,ステートメントを実行するために使用します。

スパステトを使用して,同じステトアクションを共有する複数のサブステトを囲みます。

このガイドラインを守ることで,複数のサブステートに適用されるステートアクションを再利用できるようにします。ステ,トアクションは,サブステ,トごとに記述するのではなく,1回だけ記述します。

サブステ,トとス,パ,ステ,トの作成

フェ,ズ:ステ,トアクションからの関数呼び出し

チャ,トのこの部分では,ステ,トがアクティブなときに関数呼び出しを実行する方法を説明します。

ステジ ホテルのシナリオ チャ,トの動作
1

部屋のタプとルムサビスの合計注文回数に基づいて,ホテルからの請求額を追跡できます。

费用は,ルームサービスの合計注文回数を入力として受け取り,現在のホテルの請求額を出力として返すMATLAB®関数です。

関数ボックスをダブルクリックすると,以下のスクリプトが関数エディタ,に表示されます。

函数y = expenses(x) if (room_type == 1) y = 1500 + (x*50);如果(room_type == 2) y = 1000 + (x*25);Else y = 500 + (x*5);结束结束

関数呼び出しに関するモデリングガ▪▪ドラ▪▪ン-以下のガ▪▪ドラ▪▪ンは関数呼び出しに適用されます。

モデリングガ▪▪ドラ▪▪ン このガ▪▪ドラ▪▪ンが適用される理由 参照

チャトでの数値計算の実行にはmatlab関数を使用します。

MATLAB関数は,グラフィカル関数や真理値表,S金宝appimulink®関数よりも,数値計算の処理に優れています。

Matlab関数の定義によるMatlabコ,ドの再利用

関数シグネチャでは説明的な名前を使用します。

説明的な関数名を使用すると,チャ,トオブジェクトがわかりやすくなります。

フェズ:排他的サブステトをもステトの実行

チャ,トのこの部分では,排他的(或構造が設定されたステ,トの実行方法を説明します)。

ステジ ホテルのシナリオ チャ,トの動作
1

エグゼクティブス。

メモ

エグゼクティブス。したがって,ス。

条件Room_type == 1が真の場合は,条件アクション费用= 1500が実行されます。その遷移パスが完了すると,以下のステ,トの初期化アクションがトリガ,されます。

  1. Checked_inがアクティブになり,その词条アクションが実行されます。

  2. Executive_suiteがアクティブになります。

  3. 卧室へのデフォルト遷移が発生し,このステ,トがアクティブになります。

チャ,トまたはステ,トに入るを参照してください。

2

ル、ムサ、ビスを注文したら、ダ、ニングエリアに入って食事をします。

room_serviceベントが発生すると,卧室からDining_areaへの遷移が発生します。

3.

ダイニングエリアでとった食事の後片付けをしてほしい場合は,再びルームサービスを注文し,ベッドルームに戻ります。

room_serviceベントが発生すると,Dining_areaから卧室への遷移が発生します。

4

火災警報器が作動したためにエグゼクティブスイートを出た場合は,警報解除信号が出された後,もといた部屋へ戻ります。

Executive_suiteからの遷移が発生した場合,最後にアクティブであったサブステ,ト,まり卧室またはDining_areaがヒストリジャンクションに記録されます。この遷移が発生する仕組みの詳細は,フェ:を参照してください。

排他的(或)ステトの実行に関するモデリングガドラン-以下のガ▪▪ドラ▪▪ンは排他的(或)ステ▪▪トに適用されます。

モデリングガ▪▪ドラ▪▪ン このガ▪▪ドラ▪▪ンが適用される理由 参照

階層内の同じレベルに位置する複数のステートが同時にアクティブになることが不可能な場合は,排他的(或)構造を使用します。

このガドランを守ることで,チャトは適切に実行されます。たとえば,ベッドル,ムとダ,卧室Dining_areaは排他的(或)ステトです。

前にアクティブであったサブステートに依存する排他的(或)構造が設定されたステートに再度入る場合は,ヒストリジャンクションを使用します。この種のジャンクションでは,ステ,トから出るときにアクティブなサブステ,トが記録されます。

前にアクティブであったサブステートを記録しない場合はデフォルト遷移が発生し,そのステートに再度入るときに,不適切なサブステートがアクティブになる場合があります。

たとえば,食事中に火災警報が鳴ったため部屋を出た後,戻ってくる場合,ダイニングエリアではなくベッドルームに入ってしまいます。

フェズ:パラレルサブステトをもステトの実行

チャ,トのこの部分では,パラレル(和)構造が設定されたステ,トの実行方法を説明します。

ステジ ホテルのシナリオ チャ,トの動作
1

家族でスイートルームに着いた場合は,両方のベッドルームに家族がいることが可能です(たとえば,両親がマスターベッドルームにいて子供たちがセカンドベッドルームにいるなど)。既定の部屋選択は適用されません。

条件Room_type == 2が真の場合は,条件アクション费用= 1000が実行されます。その遷移パスが完了すると,以下のステ,トの初期化アクションがトリガ,されます。

  1. Checked_inがアクティブになり,その词条アクションが実行されます。

  2. Family_suiteがアクティブになります。

  3. パラレルステ,トは,各ステ,トの右上隅に表示された番号順に起動します。まずMaster_bedroom,次にSecond_bedroomです。

    順序の指定方法

チャ,トまたはステ,トに入るを参照してください。

2

両方の部屋を同時に使用することができます。

Master_bedroomSecond_bedroomが同時にアクティブなステ,トに保たれます。

パラレル(和)ステトの実行に関するモデリングガドラン-以下のガ▪▪ドラ▪▪ンはパラレル(和)ステ▪▪トに適用されます。

モデリングガ▪▪ドラ▪▪ン このガ▪▪ドラ▪▪ンが適用される理由 参照

階層内の同じレベルに位置するすべてのステートが同時にアクティブになることが可能な場合は,パラレル(和)構造を使用します。

このガドランを守ることで,チャトは適切に実行されます。たとえば,マスタ,ベッドル,ムとセカンドベッドル,ムは同時に使用することができるため,Master_bedroomSecond_bedroomはパラレルステ,トです。

パラレル(和)構造の設定されたステ,トでは,ヒストリジャンクションを使用しません

このガ▪▪ドラ▪▪ンにより,コンパ▪▪ルエラ▪を防ぎます。階層内の同じレベルに位置するすべてのパラレル ステートが同時にアクティブであるため、ヒストリ ジャンクションを使用する意味がありません。

パラレル(和)ステ,トの実行順序の管理には,明示的な順序付けを使用します。

パラレルステ,トの順序付けには,明示的な順序付けまたは暗黙的な順序付けを指定できます。既定の設定では,明示的な順序付けが使用されます。暗黙的な順序付けに切り替えた場合は,パラレルステートが動いたときに実行順序が変わる場合があります。

フェ:

チャ,トのこの部分では,或:ステ,ト間の遷移のガ,ド方法を説明します。

ステジ ホテルのシナリオ チャ,トの動作
1

火災警報が鳴ったら,ホテルを出て,外の待合い場所に移動します。

fire_alarmに対するベントブロドキャストがチャトに受信されると,Check_inのサブステ,トからWaiting_areaへの遷移が発生します。

この遷移が発生する仕組み

2

警報解除信号が出されると,待合い場所を離れてホテル内のもといた場所に戻ることができます。

all_clearに対するベントブロドキャストがチャトに受信されると,Waiting_areaからCheck_inの最後にアクティブであったサブステ,トへの遷移が発生します。

Check_inの各階層レベルのヒストリジャンクションにより,どのサブステ,トがWaiting_areaへの遷移の発生前にアクティブであったかがわかります。

この遷移が発生する仕組み

遷移のガドに関するガドランのモデル化-以下のガ▪▪ドラ▪▪ンでは▪▪ベントに対する条件の使用法を検討します。

モデリングガ▪▪ドラ▪▪ン このガ▪▪ドラ▪▪ンが適用される理由 参照

数値のない発生に依存する遷移をガドするには,条件ではなくベントを使用します。

火災警報や警報解除信号の数値を簡単に定量化することはできないため,このような発生はイベントとしてモデリングします。

入力ベントの送信によるstatflowチャトのアクティブ化