イベントのブロードキャストによるモデル コンポーネントの同期
"イベント" とは、以下のいずれかのオブジェクトのアクションをトリガーできる Stateflow® オブジェクトです。
Stateflow チャート内のパラレル ステート
別の Stateflow チャート
Simulink® の Triggered Subsystem または Function-Call Subsystem
シミュレーション目的では、Stateflow チャート内のイベント数に制限はありません。ただし、コード生成の場合は、基となる C コンパイラによって、イベント数が理論上 231-1 個に制限されています。
イベントのタイプ
"暗黙的イベント" とは、チャート実行時にブロードキャストされる組み込みイベントです。これらのイベントは、明示的に定義またはトリガーされることのない暗黙的イベントです。詳細については、暗黙的イベントを使用したチャート動作の制御を参照してください。
"明示的なイベント" とは、明示的に定義するイベントです。明示的イベントには、次のいずれかのタイプを指定できます。
タイプ | 説明 |
---|---|
入力イベント | チャート外から Stateflow チャートへブロードキャストされるイベント。詳細については、入力イベントの送信による Stateflow チャートのアクティブ化とStateflow チャートを使用したヒューマンマシン インターフェイスのロジックの設計を参照してください。 |
ローカル イベント | Stateflow チャートの任意の場所で発生できるイベントですが、親オブジェクトおよびその子オブジェクト内でのみ表示されます。ローカル イベントは、MATLAB® 内のスタンドアロンの Stateflow チャートではサポートされません。詳細については、ローカル イベントをブロードキャストしてパラレル ステートを同期を参照してください。 |
出力イベント | Stateflow チャートで発生するイベントですが、Simulink ブロックにブロードキャストされます。出力イベントは、MATLAB 内のスタンドアロンの Stateflow チャートではサポートされません。詳細については、出力イベントの送信による Simulink ブロックのアクティブ化を参照してください。 |
ローカル イベントは、以下の Stateflow 階層のレベルで定義できます。
階層のレベル | 表示 |
---|---|
チャート | ローカル イベントは、チャートと、そのすべてのステートおよびサブステートで表示されます。 |
サブチャート | ローカル イベントは、サブチャートと、そのすべてのステートおよびサブステートで表示されます。 |
ステート | ローカル イベントは、ステートおよびそのすべてのサブステートで表示されます。 |
チャートでのイベントの定義
Stateflow チャートにイベントを追加するには、[シンボル] ペイン、Stateflow エディターのメニュー、またはモデル エクスプローラーを使用できます。
[シンボル] ペインを使用したイベントの追加
[モデル化] タブの [データの設計] で、[[シンボル] ペイン] を選択します。
[イベントの作成] アイコン をクリックします。
新規イベントの行にある [タイプ] で、アイコンをクリックして以下を選択します。
Input Event
Local Event
Output Event
イベントの名前を編集します。
入出力イベントの場合は、[端子] フィールドをクリックして端子番号を選択します。
イベントのプロパティを指定するには、[プロパティ インスペクター] を開きます。[シンボル] ペインで、イベントの行を右クリックして [探索] を選択します。詳細については、イベントのプロパティの設定を参照してください。
Stateflow エディターのメニューを使用したイベントの追加
Simulink モデルの Stateflow チャートで、追加するイベントのタイプに対応するメニュー オプションを選択します。
タイプ メニュー オプション 入力イベント [モデル化] タブの [データの設計] で、[イベント入力] をクリックします。 出力イベント [モデル化] タブの [データの設計] で、[イベント出力] をクリックします。 ローカル イベント [モデル化] タブの [データの設計] で、[ローカル イベント] をクリックします。 [イベント] ダイアログ ボックスで、データ プロパティを指定します。詳細については、イベントのプロパティの設定を参照してください。
モデル エクスプローラーを使用したイベントの追加
[モデル化] タブの [データの設計] で、[モデル エクスプローラー] を選択します。
[モデルの階層構造] ペインで、表示対象の新規イベントがある Stateflow 階層のオブジェクトを選択します。選択したオブジェクトは、新しいイベントの親になります。
モデル エクスプローラーのメニューで、[追加] 、 [イベント] を選択します。既定の定義が設定された新しいイベントが、モデル エクスプローラーの [コンテンツ] ペインに表示されます。
[イベント] ペインで、イベントのプロパティを指定します。詳細については、イベントのプロパティの設定を参照してください。
Stateflow チャートからのイベント情報へのアクセス
入力イベントやローカル イベントのプロパティを表示することや、出力イベントの出力先を Stateflow チャートから直接開くことができます。対象のイベントを含むステートまたは遷移を右クリックして、[探索] を選択します。コンテキスト メニューに、ステートまたは遷移内で解決されているすべてのシンボルの名前とスコープがリストされます。コンテキスト メニューから入力イベントまたはローカル イベントを選択すると、そのプロパティがモデル エクスプローラーに表示されます。コンテキスト メニューから出力イベントを選択すると、そのイベントに関連付けられている Simulink サブシステムまたは Stateflow チャートが開きます。
Stateflow チャートでイベントを使用する場合のベスト プラクティス
send
コマンドを使用して、アクションで明示的イベントをブロードキャストする
ステートまたは遷移アクションでローカル イベントまたは出力イベントをブロードキャストするには、send
演算子を使用します。たとえば、遷移が有効な時点で出力イベントをブロードキャストする場合、イベント名を条件アクションとして使用しないようにします。
{output_event;}
代わりに、send
演算子を呼び出します。
{send(output_event);}
どちらのアクションも有効ではありますが、send
演算子を使用すると、チャートが読みやすくなり、明示的イベントをデータと取り違えることがなくなります。
条件付きアクションをトリガーする明示的イベントの使用は避ける
次の場合は、イベントではなく遷移に条件を使用します。
条件文を表す場合。たとえば
[x < 1]
や[x == 0]
など。データ値の変更を表す場合。たとえば
[hasChanged(x)]
など。
ステート アクティビティをチェックする目的で暗黙的なイベント enter
を使用することは避ける
ステート アクティビティをチェックするには、暗黙的イベント enter
ではなく in
演算子を使用します。詳細については、in 演算子を使用したステート アクティビティのチェックを参照してください。
エッジ トリガー入力イベントと関数呼び出し入力イベントをチャート内に混在させない
エッジ トリガーを使用する入力イベントと関数呼び出しを使用する入力イベントを混在させると、コンパイル時にエラーが発生します。