主要内容

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

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

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

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

ステートの作成

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

メモ

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

ステートのグループ化

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

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

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

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

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

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

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

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

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

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

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

サブステート構造の指定

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

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

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

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

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

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

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

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

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

メモ

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

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

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

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

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

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

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

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

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

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

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

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

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

プロパティ

説明

名前

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

実行順序

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

監視用データの作成

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

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

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

  • 自動

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

  • インライン

    ステート関数は常に親関数にインライン化されます。ただし,親関数が漸化式の一部でない場合に限ります。生成代码中的内联状态函数(金宝app仿真软件编码器)を参照してください。

  • 関数

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

ラベル

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

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

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

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

プロパティ

説明

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

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

テストポイント

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

ログ名

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

データ点の制限

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

間引き

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

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

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

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

プロパティ

説明

説明

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

ドキュメントリンク

URLアドレスまたは一般のMATLABコマンドを入力します。たとえば,www.tatmou.commailto: email_address编辑/规范/数据/ 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

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

キーワード

エントリー

説明

該当なし

名前

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

条目または

条目アクション

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

または

在アクション

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

退出または前女友

退出アクション

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

绑定

データまたはイベント

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

event_or_message_name

および

在event_nameアクション

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

および

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

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

名前の入力

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

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

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

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

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

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

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

アクションの入力

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

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

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

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

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

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

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

    ev1:退出();

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

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

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

ヒント

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

参考

関連するトピック