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