このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
遷移
"遷移"は、矢印付きの線で表現されます。この線は、あるグラフィカル オブジェクトを別のグラフィカル オブジェクトにリンクします。ほとんどの場合、遷移は、あるモード (ステート) から別のモードに至るシステムの経路を表しています。遷移は通常、遷移元オブジェクトと遷移先オブジェクトを接続します。"遷移元" オブジェクトは遷移の開始点であり、"遷移先" オブジェクトは遷移の終了点です。以下のチャートは、遷移元ステート B
から遷移先ステート A
への遷移を示します。
ジャンクションは、遷移を遷移セグメントに分割します。この場合、遷移全体としては、元のステートから遷移先のステートに至るセグメントで構成されています。各セグメントは、遷移全体としての妥当性を判定する過程で評価されます。
以下の例には、 2 つのセグメントで構成された遷移が含まれています。1 つはステート On
からステート Off
、もう 1 つはステート On
からそれ自体に至るものです。
デフォルト遷移は、遷移元オブジェクトを含まない特殊なタイプの遷移です。詳細は、デフォルト遷移を参照してください。
遷移階層
遷移は、ステートのように他のオブジェクトを含めることはできません。ただし、遷移はステートに含まれます。遷移の階層は、その親ステート、遷移元ステート、および遷移先ステートによって記述されます。親は、遷移元と遷移先を含める最下位レベルです。以下の例では、遷移の親を考えます。
以下の表は、前述の例に含まれる各遷移の親子関係を示しています。/
文字はチャートを表します。ステートの階層内の各レベルは、ピリオド (.
) 文字で区切られています。
遷移ラベル | 遷移の親 | 遷移元 | 遷移先 |
---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
遷移ラベル
"遷移ラベル" は、イベントまたはメッセージ、条件、条件アクション、および遷移アクションで構成することができます。ラベルの各部分はオプションです。?
文字はデフォルト遷移を表すラベルです。遷移ラベルは全体として次のような形式を取ります。
event_or_message_trigger[condition]{condition_action}/{transition_action}
次の例は遷移ラベルの部分を示しています。
遷移 | イベント トリガー | 条件 | 条件アクション | 遷移アクション |
---|---|---|---|---|
ステート A からステート C | event1 | temp > 50 | func1() | なし |
ステート A からステート B | event2 | なし | なし | data1 = 5 |
イベント トリガーまたはメッセージ トリガー
遷移ラベル構文では、イベント トリガーまたはメッセージ トリガーがイベントまたはメッセージの名前として先頭に表示されます。遷移ラベル内の他のアクションと区別する目的で、特殊文字が使用されることはありません。遷移の例では、ステート A からの遷移の両方にイベント トリガーが設定されています。ステート A からステート B への遷移にはイベント トリガー event2
、ステート A からステート C への遷移にはイベント トリガー event1
がそれぞれ設定されています。
条件 (指定してある場合) が真であれば、イベント トリガーは遷移を発生させるイベントを指定します。イベントの指定はオプションです。メッセージ トリガーは、メッセージ キュー内にメッセージが存在する場合に遷移を実行するように指定します。イベントまたはメッセージが指定されていない場合は、何らかのイベントが発生したときに遷移が発生します。複数のイベントまたはメッセージを指定するには、OR 論理演算子 (|
) を使用します。
条件
遷移ラベル構文では、条件は大かっこ ([]
) で囲まれた論理式として表現されます。遷移の例では、ステート A からステート C への遷移に条件 temp > 50
が設定されています。
条件とは、指定した式が真である場合に遷移が発生するように指定する論理式です。条件を定義および使用する際には、以下のガイドラインに従ってください。
条件式は、true (1) または
false
(0) として評価される論理式でなければなりません。条件式は、以下のいずれかの要素で構成されます。
データと数値を比較する boolean 演算子
ブール値を返す関数
引数として指定されたステートがアクティブである場合に true に評価される
in(state_name)
条件。詳細については、in 演算子を使用したステート アクティビティのチェックを参照してください。時相論理条件 (時相論理を使用したチャート実行の制御 を参照)
条件式では、数値を返す、グラフィカル関数、真理値表関数、または MATLAB® 関数を呼び出すことができます。
たとえば、
[test_function(x, y) < 0]
は、有効な条件式です。条件式では、チャートによるステートの変更や変数の修正を引き起こす関数を呼び出さないでください。
論理式は、AND 関係を表す & と OR 関係を表す
|
を使用してグループ化できます。代入ステートメントは、有効な条件式ではありません。
単項増分および単項減分アクションは、有効な条件式ではありません。
条件アクション
遷移ラベル構文では、条件アクションは遷移条件に続いて、中かっこ ({}
) で囲まれて表現されます。遷移の例では、ステート A からステート C への遷移に条件アクション func1()
(関数呼び出し) が設定されています。
条件アクションは、条件が真として評価された時点で、遷移先が有効であると判定されるよりも前に実行されます。条件を指定していない場合、暗黙の条件は真であると評価されて条件アクションが実行されます。
遷移アクション
遷移ラベル構文では、遷移アクションはその前にスラッシュ (/
) が追加され、中かっこ ({}
) で囲まれます。遷移の例では、ステート A からステート B への遷移に遷移アクション data1 = 5
が設定されています。C チャートでは、遷移アクションを中かっこで囲む必要はありません。MATLAB をアクション言語として使用するチャートでは、遷移アクションに中かっこが付いていない場合、構文が自動修正されます。MATLAB をアクション言語として使用する場合の自動修正を参照してください。
遷移アクションは完全な遷移パスが実行された後でのみ実行されます。遷移先が有効であると判定され、かつ、条件がある場合には、それが真になった後に実行されます。遷移が複数のセグメントで構成されている場合、遷移アクションが実行されるのは、最終的な遷移先に至るまでの遷移パス全体が有効であると判定された後に限定されます。
遷移アクションは、MATLAB 内のスタンドアロンの Stateflow® チャートではサポートされません。
有効な遷移
通常、遷移が有効になるのは、遷移元のステートがアクティブで遷移ラベルが有効なときです。デフォルト遷移では、遷移元のステートが存在しないため、上記と異なります。サブステートへのデフォルト遷移の妥当性が評価されるのは、スーパーステートがアクティブであるという状況で、スーパーステートへの遷移が発生したときです。このラベルリングの規範は、デフォルト遷移と通常遷移の両方に適用されます。以下に示すのは、有効な遷移ラベルの組み合わせです。
遷移ラベル | 有効になる条件 |
---|---|
イベントのみ | イベントの発生 |
イベントと条件 | イベントの発生と条件が真であること |
メッセージのみ | メッセージの発生 |
メッセージと条件 | メッセージの発生と条件が真であること |
条件のみ | 任意のイベントの発生と条件が真であること |
アクションのみ | 任意のイベントの発生 |
指定なし | 任意のイベントの発生 |
遷移接続
排他的 (OR) ステート間の遷移
以下の例は、排他的 (OR) ステート間の簡単な遷移を示しています。
以下の遷移... | 有効になるのは... |
---|---|
B から A | ステート B がアクティブな状況でイベント E1 が発生したときです。 |
A1 から A2 | ステート A1 がアクティブな状況でイベント E2 が発生したときです。 |
この表記法のセマンティクスに関する詳細は、排他的ステート間の遷移を参照してください。
ジャンクション経由の遷移
以下のチャートは、コネクティブ ジャンクション経由の遷移を示しています。
チャートは時相論理を使用して、入力 u
が 1 に等しくなるときを決定します。
入力が 1 に等しい場合... | 遷移が起きるのは... |
---|---|
t = 2 の前 | Start から Fast |
t = 2 から t = 5 の間 | Start から Medium |
t = 5 の後 | Start から Slow |
時相論理についての詳細は、時相論理を使用したチャート実行の制御を参照してください。この表記法のセマンティクスに関する詳細は、共通の遷移元から複数の遷移先への遷移を参照してください。
排他的 (OR) スーパーステート間の遷移
以下の例は、排他的 (OR) スーパーステート間の遷移とデフォルト遷移の使用法を示しています。
チャートには、階層の最上位レベルで 2 つのステート Power_off
と Power_on
が設定されています。既定では、Power_off
がアクティブです。イベント Switch
は、システムを Power_off
ステートと Power_on
ステートの間で切り替えます。Power_on
には次の 3 つのサブステートがあります。すなわち、First
、Second
、Third
です。既定の設定では、Power_on
がアクティブになると First
もアクティブになります。Shift
が 1 に等しい場合は、イベント Switch
が発生するたびに、システムは First
から Second
、Second
から Third
、Third
から First
に遷移し、このパターンを繰り返します。
この表記法のセマンティクスに関する詳細は、デフォルト遷移を使用したチャートの実行の制御を参照してください。
サブステート間の遷移
以下の例は、排他的 (OR) サブステート間の遷移を示しています。
このチャートの仕組みの詳細については、故障検出による信号のデバウンスを参照してください。この表記法のセマンティクスに関する詳細は、イベントによるサブステート間の遷移を参照してください。