動作モード間の遷移
"遷移" は、ある動作モードから別の動作モードに至るリアクティブ システムの経路を表します。Stateflow® チャートでは、通常は 2 つのステートを接続する矢印付きの線で遷移が表現されます。"遷移元" は遷移の開始点のステートであり、"遷移先" は遷移の終了点のステートです。
コネクティブ ジャンクションを使用して、複数の遷移セグメントをもつ遷移パスを作成することもできます。たとえば、単一の遷移元から複数の遷移先への遷移パスや、複数の遷移元から単一の遷移先への遷移パスを作成できます。この場合、中間にある遷移の遷移元と遷移先はコネクティブ ジャンクションになります。詳細については、遷移とジャンクションを結合して分岐パスを作成を参照してください。
"デフォルト遷移" は、遷移元がない特殊なタイプの遷移です。排他的 (OR) 構造と少なくとも 2 つのサブステートをもつチャートまたはステートには、条件でガードされず、かつイベントでトリガーされないデフォルト遷移パスが必要です。ヒストリ ジャンクションがなければ、デフォルト遷移はチャートまたはスーパーステートがアクティブになったときに最初にアクティブになるサブステートを示します。詳細については、デフォルト遷移を使用した最初のサブステート アクティビティの指定を参照してください。
たとえば、次のチャートのステートは、2 つのファンをもつ空調機システムの動作モードを表しています。ステート PowerOn
と PowerOff
の間の遷移は、空調機システムがオンおよびオフになったときのモードの変化を表します。ステート PowerOff
へのデフォルト遷移は、シミュレーションの最初にチャートが起動した時点でシステムがオフになることを示します。同様に、ステート FAN1
と FAN2
では、サブステート間の遷移は各ファンがオンおよびオフになったときのモードの変化を表し、デフォルト遷移はスーパーステート PowerOn
がアクティブになった時点でファンがオフになることを示します。この例の詳細については、パラレル構造を使用した同期サブシステムのモデル化を参照してください。
遷移の親は、遷移元と遷移先を含む最下位レベルのステートまたはチャートです。たとえば、前の例では、サブステート FAN1.On
と FAN1.Off
の間の遷移の親はステート FAN1
です。同様に、サブステート FAN2.On
と FAN2.Off
の間の遷移の親はステート FAN2
です。一方、ステート PowerOn
と PowerOff
の間の遷移については、チャート自体が親になります。
遷移の作成
遷移は新規または既存の遷移先に対して追加できます。
遷移元のステートまたはジャンクション境界をポイントします。ポインターが十字形に変化します。
クリックして遷移元のステートまたはジャンクション以外の場所にドラッグします。Stateflow エディターに、ジャンクションまたはステートを追加するためのグラフィカル キューが表示されます。
新しい遷移の遷移先を選択します。
遷移の末尾に新しいステートを追加するには、四角形のキューをクリックします。
遷移の末尾に新しいジャンクションを追加するには、円形のキューをクリックします。
既存のステートまたはジャンクションに遷移を接続するには、ポインターを目的の遷移先までドラッグします。
遷移のラベルを入力し、遷移以外の場所をクリックします。ラベルでは、遷移を有効にする条件とトリガー、およびシミュレーション時に遷移で実行するアクションを指定します。詳細については、遷移のアクションの定義を参照してください。
遷移を作成した後、Stateflow エディターを使用して遷移の形状、遷移元、遷移先、ラベルを変更できます。
遷移の形状を変更するには、遷移の中間点をクリックしてドラッグします。
遷移元または遷移先を変更するには、遷移の端点をクリックしてドラッグします。
遷移のラベルを編集するには、編集する文字の位置付近でラベル テキストをクリックします。遷移のラベルが空の場合は、最初に遷移を選択します。
遷移のラベルを移動するには、ラベルをクリックしてドラッグします。
デフォルト遷移の作成
オブジェクト パレットで、デフォルト遷移のアイコン をクリックします。
チャート キャンバスで、遷移先のステートまたはジャンクションの端をクリックします。
オプションで、デフォルト遷移のラベルを追加します。
ヒント
デフォルト遷移の端点のサイズは、矢印サイズに比例します。遷移の矢印サイズの変更 を参照してください。
遷移のアクションの定義
遷移のラベルでは、遷移を有効にするイベント トリガーまたはメッセージ トリガーと条件、およびシミュレーション時に遷移で実行する条件アクションと遷移アクションを指定します。遷移のラベルの一般的な形式は次のとおりです。
trigger[condition]{condition_action}/{transition_action}
ラベルの各部分はオプションであり、別々の行に配置できます。チャートにおけるラベルを使用した遷移の妥当性の判定方法に関する詳細については、遷移の評価を参照してください。
イベント トリガーとメッセージ トリガー
遷移のラベルは、遷移をトリガーするイベントまたはメッセージの名前から始まります。イベント トリガーまたはメッセージ トリガーを複数指定するには、論理 OR (|
) 演算子を使用します。
イベント トリガーをもつ遷移は、指定されたイベントのブロードキャストをチャートが受け取った場合にのみ有効になります。メッセージ トリガーをもつ遷移は、指定されたメッセージがメッセージ キューに存在する場合にのみ有効になります。詳細については、イベントのブロードキャストによるモデル コンポーネントの同期およびメッセージ送信による Stateflow チャートとの通信を参照してください。
たとえば、次のチャートでは、ステート PowerOff
と PowerOn
の間の遷移にイベント トリガーがあります。これらの遷移は、遷移元のステートがアクティブなときに、チャートで入力イベント SWITCH
のブロードキャストを受け取ると有効になります。
ヒント
遷移のトリガーに、暗黙的イベント (change
、enter
、exit
など) や時相論理演算子 (after
、at
、before
、every
など) を使用できます。詳細については、暗黙的イベントを使用したチャート動作の制御および時相論理を使用したチャート実行の制御を参照してください。
条件
遷移のラベルに条件を追加するには、論理式を大かっこ ([]
) で囲んで入力します。条件を定義する際には、以下のガイドラインに従ってください。
条件式は、
true
(1) またはfalse
(0) として評価される論理式でなければなりません。複数の論理式を組み合わせるには、論理 AND (
&&
) 演算子および論理 OR (||
) 演算子を使用します。条件式を複数の行にわたって入力するには、省略記号 (
...
) を使用します。条件式では、数値を返す関数であれば、グラフィカル関数、真理値表関数、MATLAB® 関数、または Simulink® 関数を呼び出すことができます。ただし、その関数は、データの値を変更したり、チャートのステートを変更させたりしてはなりません。
条件式で代入ステートメントは使用しないでください。
条件をもつ遷移は、指定された式が真の場合にのみ有効になります。たとえば、次のチャートでは、サブステート Off
と On
の間の遷移に、チャートの入力 temp
の値をしきい値と比較する条件があります。これらの遷移は、遷移元のステートがアクティブなときに、条件が真であれば有効になります。
条件アクション
条件アクションは、チャートで遷移が有効であると判定された時点ですぐに実行されます。条件アクションを追加するには、条件の後に、1 つ以上のステートメントを中かっこ ({}
) で囲んで入力します。複数のステートメントを区切るには、コンマまたはセミコロンを使用します。あるいは、各ステートメントを別々の行に入力できます。単一のステートメントを複数の行にわたって入力するには、省略記号 (...
) を使用します。
遷移が複数のセグメントで構成される遷移パスの一部である場合、そのチャートでは、遷移パスの後続のセグメントを評価する前に条件アクションが実行されます。たとえば、次のチャートには 2 つの遷移セグメントをもつ遷移パスが含まれています。このチャートでは、入力イベント SWITCH
のブロードキャストを受け取ると、2 番目の遷移セグメントが有効であるかどうかに関係なく、最初の遷移セグメントで条件アクションが実行されます。詳細については、条件アクションを使用したチャートの実行の制御を参照してください。
遷移アクション
遷移アクションは、チャートで遷移パス全体が有効であると判定されると実行されます。遷移アクションを追加するには、条件アクションの後に、スラッシュ (/
) に続けて 1 つ以上のステートメントを中かっこ ({}
) で囲んで入力します。複数のステートメントを区切るには、コンマまたはセミコロンを使用します。あるいは、各ステートメントを別々の行に入力できます。単一のステートメントを複数の行にわたって入力するには、省略記号 (...
) を使用します。
遷移が複数のセグメントで構成される遷移パスの一部である場合、そのチャートでは、遷移先ステートまたは終端ジャンクションまでの一連の有効なセグメントがあることを判定してから遷移アクションが実行されます。たとえば、次のチャートには 2 つの遷移セグメントをもつ遷移パスが含まれています。このチャートでは、入力イベント SWITCH
のブロードキャストを受け取ると、2 番目の遷移セグメントが有効である場合にのみ、最初の遷移セグメントで遷移アクションが実行されます。詳細については、条件アクションおよび遷移アクションを伴う外部遷移の評価を参照してください。
遷移アクションは、MATLAB 内のスタンドアロンの Stateflow チャートではサポートされません。
ヒント
C をアクション言語として使用するチャートでは、遷移アクションを中かっこで囲む必要はありません。MATLAB をアクション言語として使用するチャートでは、遷移アクションに中かっこが付いていない場合、構文が自動修正されます。MATLAB をアクション言語として使用する場合の自動修正を参照してください。
遷移の矢印サイズの変更
遷移の矢印のサイズを調整するには、次を行います。
遷移を右クリックします。
[矢印サイズ] を選択します。
ドロップダウン リストから矢印サイズを選択します。
あるいは、複数の遷移の矢印サイズを同時に調整することもできます。
複数の遷移を選択します。
選択した遷移のいずれかを右クリックします。
[書式形式] 、 [矢印サイズ] を選択します。
ドロップダウン リストから矢印サイズを選択します。
遷移の矢印サイズを変更すると、同じ遷移先をもつ他の遷移の矢印サイズも変更されます。
遷移のプロパティの指定
以下に示すプロパティを使用して、遷移が Stateflow チャート内の他のコンポーネントとどのように相互作用するかを指定できます。これらのプロパティは、[プロパティ インスペクター]、モデル エクスプローラー、または [遷移] プロパティ ダイアログ ボックスで変更できます。
[プロパティ インスペクター] を使用するには、次を行います。
[モデル化] タブの [データの設計] で、[プロパティ インスペクター] を選択します。
Stateflow エディターで、遷移を選択します。
[プロパティ インスペクター] で、遷移のプロパティを編集します。
モデル エクスプローラーを使用するには、次を行います。
[モデル化] タブの [データの設計] で、[モデル エクスプローラー] を選択します。
[モデルの階層構造] ペインで、遷移の親のステートまたはチャートを選択します。
[コンテンツ] ペインで、遷移を選択します。
[ダイアログ] ペインで、遷移のプロパティを編集します。
遷移のプロパティ ダイアログ ボックスを使用するには、次を行います。
Stateflow エディターで、遷移を右クリックします。
[プロパティ] を選択します。
プロパティ ダイアログ ボックスで、遷移のプロパティを編集します。
遷移のプロパティは、Stateflow.Transition
オブジェクトを使用してプログラムで変更することもできます。Stateflow プログラム インターフェイスの詳細については、Stateflow API の概要を参照してください。
遷移元
遷移元。このプロパティは読み取り専用であり、[プロパティ インスペクター] では使用できません。遷移元のハイパーリンクをクリックすると、Stateflow エディターで遷移元が前面に移動します。
遷移先
遷移先。このプロパティは読み取り専用であり、[プロパティ インスペクター] では使用できません。遷移先のハイパーリンクをクリックすると、Stateflow エディターで遷移先が前面に移動します。
親
遷移の親。このプロパティは読み取り専用であり、[プロパティ インスペクター] では使用できません。親のハイパーリンクをクリックすると、Stateflow エディターで親が前面に移動します。
実行順序
遷移の実行順序。詳細については、遷移の評価順序を参照してください。
バリアント遷移として扱う
遷移がバリアント遷移であるかどうか。詳細については、バリアント条件を使用したインジケーター ランプ調光器の制御を参照してください。
ラベル
遷移のラベル。このプロパティは、[プロパティ インスペクター] では使用できません。詳細については、遷移のアクションの定義を参照してください。
説明
遷移の説明。
ドキュメント リンク
遷移のオンライン ドキュメンテーションへのリンク。HTML ファイルまたは MATLAB コマンド ウィンドウのテキストとしてドキュメンテーションを表示する、Web の URL アドレスまたは MATLAB コマンドを入力できます。[ドキュメント リンク] ハイパーリンクをクリックすると、Stateflow でリンクが評価され、ドキュメンテーションが表示されます。
参考
オブジェクト
ツール
- モデル エクスプローラー (Simulink)