Main Content

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

ステートを使用した動作モードの表現

"ステート" とは、リアクティブ システムの動作モードを記述するものです。Stateflow® チャートでは、ステートは、状態遷移図を作成するための順序設計に使用されます。

ステートは、アクティブまたは非アクティブです。ステートのアクティブまたは非アクティブは、イベントと条件によって変化します。イベントが発生すると、ステートがアクティブまたは非アクティブになり、状態遷移図が実行されます。詳細については、ステートを参照してください。

ステートの作成

ステートを作成するには、特定のチャート (ブロック) に対してエディターでステートを描画します。以下の手順に従います。

  1. ステート ツールを選択します。

  2. ポインターを描画領域に移動します。

    描画領域では、ポインターはステートの形状 (角が丸みを帯びた四角形) に変化します。

  3. 特定の場所をクリックし、ステートを作成します。

    作成されたステートは、左上隅に疑問符 (?) のラベルが追加された状態で表示されます。

  4. 疑問符をクリックします。

    疑問符の場所にテキスト カーソルが表示されます。

  5. ステートの名前を入力してから、ステートの外側をクリックします。

ステートのラベルでは、必須の名前とオプションのアクションが指定されます。詳細は、ステートのラベル付け を参照してください。

ステートの移動とサイズ変更

ステートの移動は次のように行います。

  1. ステートをクリックしてドラッグします。

  2. 新しい位置でリリースします。

ステートのサイズ変更は次のように行います。

  1. ポインターをステートの隅に置きます。

    ポインターをステートの隅に合わせると、両方向の矢印表示になります (PC のみ。ポインターの外観はプラットフォームに応じて異なります)。

  2. ステートの隅をクリックしてドラッグし、ステートのサイズを変更してから左マウス ボタンをリリースします。

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

"サブステート" は、その親であるステートがアクティブなときにのみ、アクティブになることのできるステートです。サブステートを含むステートは、"スーパーステート" に該当します。サブステートを作成するには、ステート ツールを選択し、新規のステートを、スーパーステートにしたいステートの内部にドラッグします。指定された親ステート内にサブステートが作成されます。この方法で、任意の階層までステートを入れ子にできます。サブステートの親子関係を変更するには、チャート内の現在の親からドラッグして、新しい親にドロップします。

メモ

親ステートは、そのサブステートすべてを含められるサイズのグラフィックであることが前提です。新規のサブステートをドラッグする前に、親ステートのサイズを変更しておく必要があります。スーパーステートをサブチャートとして宣言することにより、大きなグラフィカル サイズのステートを無視することができます。詳細については、サブチャートを使用したモーダル ロジックのカプセル化を参照してください。

ステートのグループ化

ステートをグループ化する場合

ステートをグループ化することにより、そのステートに含まれているすべてのグラフィカル オブジェクトをまとめて移動します。ステートをグループ化すると、そのステートとそのコンテンツは単一のグラフィカル ユニットとして取り扱われます。これにより、チャートの編集は簡素化されます。たとえば、グループ化されたステートを移動すると、そのステートに含まれているサブステートと関数もすべて同時に移動します。

ステートをグループ化する方法

ステートをグループ化するには、ステートを右クリックして、コンテキスト メニューで [グループとサブチャート][グループ] を選択します。ステートはグレーの影付きで表示され、グループ化されていることがわかります。

ステートのグループ化を解除する場合

以下のことを行う場合は、そのステートのグループ化を事前に解除しておかなければなりません。

  • ステートに含まれているオブジェクトの選択

  • ステートへの、その他のグラフィカル オブジェクトの移動

    グループ化されたステートへステートやグラフィカル関数などのオブジェクトを移動しようとすると、無効な交差のエラー メッセージが表示されます。また、交差の無効なオブジェクトの境界線は赤く表示されます。

ステートのグループ化を解除する方法

ステートのグループ化を解除するには、ステートを右クリックして、コンテキスト メニューで [グループとサブチャート][グループ] の選択を解除します。ステートの背景がグレー表示されなくなります。

サブステート構造の指定

スーパーステートの構造を設定することで、パラレル (AND) ステートまたは排他的 (OR) ステートをスーパーステートに含めるかどうかを指定します。ステートがアクティブなときに、そのサブステートがすべてアクティブになっている場合は、そのステートにはパラレル (AND) 構造が含まれています。ステートがアクティブなときに、そのサブステートが 1 つのみアクティブになっている場合は、そのステートには排他的 (OR) 構造が含まれています。空のステート構造は、排他的となります。

ステートの構造を変更するには、ステートを選択し、右クリックしてステートの [構造] コンテキスト メニューを表示し、[OR (排他)] または [AND (パラレル)] を選択します。

チャートのステート構造も指定することができます。この場合、Stateflow チャートでは、最上位のステートがサブステートとして扱われます。チャートは、排他的構造を含むステートを作成します。チャートの構造を指定するには、すべてのオブジェクトの選択を解除し、右クリックしてチャートの [構造] コンテキスト メニューを表示し、[OR (排他)] または [AND (パラレル)] を選択します。

サブステートの外観は、そのスーパーステートの構造を示しています。排他的サブステートは実線の境界となり、パラレル サブステートは破線の境界となります。パラレル サブステートは、右上隅に番号も表示されます。この番号は、兄弟関係にあるサブステートの相対的なアクティブ化の順序を示しています。

パラレル ステートのアクティブ化順序の指定

次の 2 つの方法のいずれかを用いて、アクティブ化の順序を指定することができます。つまり、明示的な順序付けまたは暗黙的な順序付けです。

  • 既定の設定では、新しい Stateflow チャートを作成すると、"明示的な順序付け" が適用されます。この場合は、アクティブ化の順序をステートごとに指定します。

  • また、パラレル ステートが位置に基づいて順序付けされるようにすることで、明示的な順序付けを上書きすることもできます。このモードは、"暗黙的な順序付け" と呼ばれます。

詳細については、パラレル ステートの明示的な順序付けパラレル ステートの暗黙的な順序付けを参照してください。

メモ

パラレル ステートのアクティブ化の順序は、ステートの右上隅に表示されます。

ステートのプロパティの変更

ステートのプロパティを表示して変更するには、ステート ダイアログ ボックスを使用します。[ステート] ダイアログ ボックスにアクセスするには、次の手順に従います。

  1. ステートを右クリックし、[プロパティ] をクリックします。

    [ステート] プロパティ ダイアログ ボックスが表示されます。プロパティの詳細は、一般ペインで設定可能なプロパティおよび[ログ] ペインで設定可能なプロパティを参照してください。

  2. プロパティ設定を変更して、以下のいずれかのボタンをクリックします。

    • 適用 (ステート ダイアログ ボックスを開いたまま変更内容を保存する場合)

    • キャンセル (前の設定に戻る場合)

    • OK (変更内容を保存して、ダイアログ ボックスを閉じる場合)

    • ヘルプ (HTML ブラウザー ウィンドウでドキュメンテーションを表示する場合)

一般ペインで設定可能なプロパティ

[ステート] プロパティ ダイアログ ボックスの [一般] ペインは、以下のように表示されます。

[一般] ペインでは、以下のプロパティを設定できます。

プロパティ

説明

名前

Stateflow チャート名。読み取り専用。このハイパーテキスト リンクをクリックすると、ステートが前面に移動します。

実行順序

パラレル (AND) ステートの実行順序を設定します。排他的 (OR) ステートの場合、このプロパティは表示されません。パラレル ステートの実行順序 を参照してください。

監視用データの作成

ステート アクティビティ データを作成するには、このオプションを選択します。アクティブ ステート データによるステート アクティビティの監視を参照してください。

関数インライン オプション

生成コード内のステート関数のインライン化を制御する以下のオプションのうち、いずれか 1 つを選択します。

  • 自動

    ステート関数が内部の経験則に基づいてインライン化されます。

  • インライン

    ステート関数は常に親関数にインライン化されます。ただし、親関数が漸化式の一部でない場合に限ります。ステート関数の生成コード内インライン化 (Simulink Coder)を参照してください。

  • 関数

    ステートごとに個別の静的関数が作成されます。

ラベル

ステートの名前および関連アクションを含むステートのラベル。ステートのラベル付け を参照してください。

[ログ] ペインで設定可能なプロパティ

[ステート] プロパティ ダイアログ ボックスの [ログ] ペインは、以下のように表示されます。

[ログ] ペインでは、以下のプロパティを設定できます。

プロパティ

説明

自己アクティビティ ログの作成

シミュレーション中に自己アクティビティの値を MATLAB® ワークスペースに保存します。

テスト ポイント

モデルのシミュレーション中にフローティング スコープから監視できるテスト ポイントとしてステートを設定します。テスト ポイントの値を MATLAB ワークスペース オブジェクトにログ作成することも可能です。Stateflow チャートのテスト ポイントの監視を参照してください。

ログ名

ログに記録された自己アクティビティに関連付ける名前を指定します。Simulink® ソフトウェアでは、既定で信号名がログ名として使用されます。カスタムのログ名を指定するには、リスト ボックスから [カスタム] を選択し、隣にある編集フィールドに新しい名前を入力します。

データ点の制限

ログに記録する自己アクティビティを最新のサンプルに制限します。

間引き

サンプルをスキップして、ログに記録する自己アクティビティを制限します。たとえば、間引き係数を 2 に指定すると、サンプルが 1 つおきに保存されます。

[ドキュメンテーション] ペインで設定可能なプロパティ

[ステート] プロパティ ダイアログ ボックスの [ドキュメンテーション] ペインは、以下のように表示されます。

[ドキュメンテーション] ペインでは、以下のプロパティを設定できます。

プロパティ

説明

説明

テキスト形式の説明またはコメント。

ドキュメント リンク

URL アドレスまたは一般の MATLAB コマンドを入力します。たとえば、www.mathworks.commailto:email_addressedit /spec/data/speed.txt などです。

ステートのラベル付け

ステートのラベルは、ステートに対する必須の名前と、ステートの入出力やアクティブなステートでイベントの受信が発生したときに実行されるオプションのアクションを指定します。

ステートのラベルの一般的な形式は、以下のとおりです。

name/
entry:entry actions
during:during actions
exit:exit actions
bind:data and events
on event_or_message_name:on event_or_message_name actions

この形式に含まれるイタリックで表記されたエントリーには、以下の意味があります。

キーワード

エントリー

説明

該当なし

名前

オプションのスラッシュを含むステートに対する一意な参照

entry または en

entry アクション

ステートへの入力遷移の結果、特定のステートの入力が発生したときに実行されるアクション

during または du

during アクション

有効な出力遷移が存在しないアクティブなステートでイベントが受信されたときに実行されるアクション

exit または ex

exit アクション

ステートからの出力遷移の結果、ステートの出力が発生したときに実行されるアクション

bind

データまたはイベント

指定したデータまたはイベントとこのステートがバインドされます。バインドされたデータを変更できるのは、ステートまたはそのステートの子のみに限定されます。ただし、バインドされたデータの読み取りは、他のステートからも可能です。バインドされたイベントは、このステートまたはその子によってブロードキャスト可能です。

on

event_or_message_name

および

on event_name アクション

指定したイベントまたはメッセージ

および

ステートがアクティブで、指定したイベントが発生するか、指定したメッセージが存在するときに実行されるアクション。

詳細については、イベントのブロードキャストによるモデル コンポーネントの同期メッセージ送信による Stateflow チャートとの通信を参照してください。

名前の入力

最初は、ステートのラベルは空です。それを示すものとして、ステートのラベル位置 (左上隅) には "?" が表示されています。ステートのラベリングを開始するには、以下の手順でステートの名前を入力します。

  1. ステートをクリックします。

    ステートは、強調色に変化して、クエスチョン マークがステートの左上隅に現れます。

  2. [?] をクリックしてラベルを編集します。

    編集カーソルが表示されます。これでラベルに任意の文字を入力できます。

    ステートのラベルの 1 行目にステートの名前を入力します。名前は大文字と小文字が区別されます。名前が競合するのを避けるために、兄弟であるステートに同じ名前を割り当てないでください。ただし、同じ親を共有していないステートに対しては、同じ名前を割り当てできます。

    ステートのラベルが完了したら、ラベルの外側をクリックします。そうでない場合は、アクションの入力を続けます。ラベルを再編集するには、編集する文字の位置付近でラベル テキストをクリックします。

アクションの入力

ラベルにステート名を入力した後、次の任意のアクション タイプについてアクションを入力できます。

  • entry アクション: 新しい行の先頭にキーワード entry または en、コロン、1 行または複数行で構成される 1 つまたは複数のアクション ステートメントという順序で入力します。同じ行で複数のアクションを区切るには、コンマまたはセミコロンを使用します。

    ステート名と同じ行に entry アクションを入力できます。この場合は、entry キーワードの代わりにスラッシュ (/) を entry アクションの先頭に入力します。

  • exit アクション: 新しい行の先頭にキーワード exit または ex、コロン、1 行または複数行で構成される 1 つまたは複数のアクション ステートメントという順序で入力します。同じ行で複数のアクションを区切るには、コンマまたはセミコロンを使用します。

  • during アクション — 新しい行の先頭にキーワード during または du、コロン、1 行または複数行で構成される 1 つまたは複数のアクション ステートメントという順序で入力します。同じ行で複数のアクションを区切るには、コンマまたはセミコロンを使用します。

  • bind アクション: 新しい行の先頭にキーワード bind、コロン、1 行または複数行で構成される 1 つまたは複数のデータまたはイベントという順序で入力します。同じ行で複数のアクションを区切るには、コンマまたはセミコロンを使用します。

  • on アクション: 行の先頭にキーワード on、空白、イベント名またはメッセージ名、コロン、1 行以上で構成される 1 つ以上のアクション ステートメントという順序で入力します。たとえば、以下のようになります。

    on ev1: exit();
    

    同じ行で複数のアクションを区切るには、コンマまたはセミコロンを使用します。異なるアクションにトリガーをかけるために複数のイベントを利用する場合は、ステートのラベルに複数の on ブロックを入力します。それぞれのブロックは、特定のイベントやメッセージに対応するアクションを指定します。たとえば、次のように記述します。

    on ev1: action1(); on ev2: action2();
    

ステートに対して入力するアクションの実行は、アクション タイプのみに依存し、ラベルにアクションを入力する順番には依存しません。ステートメントに対するアクション タイプをはっきりと指定しない場合、チャートではそのステートメントを entry アクションとして取り扱います。

ヒント

ステートに対するプロパティ ダイアログ ボックス内のラベルは編集可能です。ステートのプロパティの変更 を参照してください。

参考

関連するトピック