Main Content

メッセージ送信による Stateflow チャートとの通信

Simulink® モデルの Stateflow® チャート内またはチャート間で通信するには、メッセージを使用します。"メッセージ" は、ローカルで、またはチャート間でデータを通信する Stateflow オブジェクトです。送信側チャートから、データが含まれるメッセージを送信または転送できます。受信側チャートでは、キューでメッセージが受信され、チャートによる評価が可能になるまで保持されます。

Simulink model with two Stateflow charts that communicate using a message.

メッセージは、データとイベントの機能の一部を同時に備えています。メッセージはデータと同様に、数値およびテキスト情報を送信できます。メッセージはイベントと同様に、遷移およびステート アクションをトリガーできます。ただし、

  • メッセージによってチャートの起動がトリガーされることはありません。代わりに、メッセージは、チャートが起動するまでキューに入れられます。チャートは起動すると、キュー内のメッセージに応答できます。

  • 受信側チャートが即時に応答できない場合でも、メッセージは失われません。

詳細については、Stateflow のメッセージ、イベント、データ間の相違の表示を参照してください。

チャート遷移またはステート アクションによってメッセージが評価されると、チャートは、キューにメッセージが含まれているかどうかを特定します。含まれている場合、チャートはそのメッセージをキューから削除します。メッセージは、タイム ステップが終了するか、メッセージがチャートによって転送または廃棄されるまで有効なままです。メッセージが有効な間は、他の遷移やアクションからメッセージ データへのアクセスが可能で、チャートがキューから別のメッセージを削除することはありません。現在のタイム ステップの終了時に、チャートは有効なメッセージをすべて破棄します。

チャートでのメッセージの定義

Stateflow チャートにメッセージを追加するには、[シンボル] ペイン、Stateflow エディターのメニュー、またはモデル エクスプローラーを使用できます。

[シンボル] ペインを使用したメッセージの追加

  1. [モデル化] タブの [データの設計] で、[[シンボル] ペイン] を選択します。

  2. [メッセージの作成] アイコン をクリックします。

  3. 新規メッセージの行の [タイプ] で、アイコンをクリックして以下を選択します。

    • Input Message

    • Local Message

    • Output Message

  4. メッセージの名前を編集します。

  5. 入力メッセージと出力メッセージの場合は、[端子] フィールドをクリックして端子番号を選択します。

  6. メッセージのプロパティを指定するには、[プロパティ インスペクター] を開きます。[シンボル] ペインで、メッセージの行を右クリックして [探索] を選択します。詳細については、メッセージのプロパティの設定を参照してください。

Stateflow エディターのメニューを使用したメッセージの追加

  1. Stateflow エディターで、追加するメッセージのスコープに対応するオプションを選択します。

    スコープオプション
    入力[モデル化] タブの [データの設計] で、[メッセージ入力] を選択します。
    出力[モデル化] タブの [データの設計] で、[メッセージ出力] を選択します。
    ローカル[モデル化] タブの [データの設計] で、[メッセージ] を選択します。

  2. [メッセージ] ダイアログ ボックスで、データ プロパティを指定します。詳細については、メッセージのプロパティの設定を参照してください。

モデル エクスプローラーを使用したメッセージの追加

  1. [モデル化] タブの [データの設計] で、[モデル エクスプローラー] を選択します。

  2. [モデルの階層構造] ペインで、表示対象の新規メッセージがある Stateflow 階層のオブジェクトを選択します。選択したオブジェクトは、新しいメッセージの親になります。

  3. モデル エクスプローラーのメニューで、[追加][メッセージ] を選択します。既定の定義が設定された新しいメッセージが、モデル エクスプローラーの [コンテンツ] ペインに表示されます。

  4. [メッセージ] ペインで、メッセージのプロパティを指定します。詳細については、メッセージのプロパティの設定を参照してください。

Stateflow メッセージの有効期間

Stateflow メッセージの有効期間は限られています。有効期間は、send 演算子を使用して受信側キューにメッセージを送信したときに始まります。メッセージは、遷移またはステート on アクションによって評価されるか、チャートによって receive 演算子を使用して受信されるまでキュー内に留まります。

メッセージは、チャートによって評価または受信されたときに有効になります。メッセージは、次のときまで有効なままになります。

  • 現在のタイム ステップが終了し、残りの有効なメッセージをチャートが破棄するとき。

  • チャートが forward 演算子を使用してメッセージを別のキューに転送するとき。メッセージの有効期間は新しいキューで継続されます。

  • チャートが discard を使用してメッセージを廃棄するとき。

メッセージが有効な間は、他の遷移およびアクションがメッセージを評価し、そのデータにアクセスすることができます。メッセージが有効かどうかをチェックするには、isvalid 演算子を使用します。

シミュレーション時にメッセージの送受信を表示するには、Sequence Viewer ブロックを Simulink モデルに追加します。Sequence Viewer ブロックには以下が表示されます。

  • 送信されたメッセージ

  • 受信されたメッセージ

  • 転送されたメッセージ

  • 除外されたメッセージ

  • 破棄されたメッセージ

  • 廃棄されたメッセージ

詳細については、Sequence Viewer を使用したメッセージ、イベント、エンティティの可視化を参照してください。

メッセージの制限

以下ではメッセージを使用できません。

  • Moore チャート

  • Atomic サブチャート

  • ブレークポイント条件式

  • entry アクション

  • [初期化時に指定されたチャートを実行 (入力)] を有効にした状態でのデフォルト遷移

C をアクション言語として使用するチャートのメッセージでは、マルチワードの固定小数点データはサポートされません。

ローカル メッセージを含むチャートは、エクスターナル モード シミュレーションまたはラピッド アクセラレータ モード シミュレーションをサポートしません。

参考

| | | | | (Simulink) |

関連するトピック