Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

Simulink ベースのステートの作成と編集

周期的ダイナミクスと連続時間ダイナミクスを切り替えるシステムをモデル化するには、Simulink® ベースのステートを使用します。Simulink ベースのステートは、MATLAB® 内のスタンドアロンの Stateflow® チャートではサポートされません。詳細については、ステートとしての Simulink サブシステムを参照してください。

Simulink ベースのステートは、オブジェクト パレットを使用して作成できます。別の Simulink モデルからのシステムを再利用するには、Enabled Subsystem をコピーして貼り付けます。サブシステムを複数の Stateflow チャートで再利用するには、ライブラリに保存されている Action Subsystem をコピーして貼り付けます。

Simulink ベースのステートの作成

Simulink ベースのステートを作成するには、次のいずれかを行います。

  • Simulink ベースのステート パレット アイコンを使用して、空の Simulink ベースのステートを作成する。

  • Enabled Subsystem または Action Subsystem を Stateflow チャートにコピーすることにより、別のモデルから Simulink ベースのステートを作成する。

  • ライブラリから Action Subsystem を Stateflow チャートにコピーすることにより、リンクされた Simulink ベースのステートを作成する。

空の Simulink ベースのステートの作成

  1. オブジェクト パレットで、Simulink ステート アイコン をクリックします。

  2. チャート キャンバスで、新しい Simulink ベースのステートの位置をクリックします。

  3. ステートの名前を入力します。この例では、このステートで平坦な地面を走る棒高跳び選手をモデル化するため、ステート ラベルは Run_up です。Simulink ベースのステートは Action Subsystem であるため、新しいステートに Action Port が表示されます。

    Stateflow chart with a Simulink based state called Run_up.

  4. Simulink サブシステムを作成します。このサブシステムは棒高跳び選手の直交座標を出力します。このモデルの詳細については、ブロックの状態データへのアクセスを参照してください。

    Simulink subsystem with a constant block and two integrator blocks.

Enabled Subsystem からの Simulink ベースのステートの作成

Simulink ベースのステートを Stateflow チャートに作成するには、別の Simulink モデルから Enabled Subsystem をコピーします。新しい Simulink ベースのステートを作成しなくても、Simulink モデルからのコンポーネントを Stateflow チャートで再利用できます。

1. モデル sf_clutch_enabled_subsystems を開きます。

2.モデルから、Slipping ブロックを Stateflow チャートにコピーします。

3. Simulink サブシステムの入力端子と出力端子が、未定義シンボルとして Stateflow チャートに表示されます。対応する入力データと出力データを Stateflow チャートに追加するには、[シンボル] ペインを開き、[未定義のシンボルを解決] ボタンをクリックします。詳細については、[シンボル] ペインを使用したシンボルの解決を参照してください。

リンクされた Simulink ベースのステートの作成

リンクされた Simulink ベースのステートを Stateflow チャートに作成するには、ライブラリから Action Subsystem を Stateflow にコピーします。ライブラリ ブロックが更新されると、そのブロックを含むすべての Stateflow チャートに変更内容が反映されます。

  1. ライブラリ モデル sf_pole_vault_lib を開きます。

    openExample("stateflow/PoleVaulterExample", ...
        supportingFile="sf_pole_vault_lib")
  2. ライブラリ ブロック Run_up をコピーして Stateflow チャートに貼り付けます。

    Stateflow chart with a Simulink based state called Run_up.

  3. リンクされているサブシステムの左下隅にリンクを表示するには、[デバッグ] タブで [情報のオーバーレイ][すべてのリンクを表示] を選択します。

    Simulink based state showing a link.

  4. この Simulink サブシステムの出力端子 xy は、未定義シンボルとして Stateflow チャートに表示されます。対応する出力データを Stateflow チャートに追加するには、[未定義のシンボルを解決] ボタン をクリックします。

入力端子と出力端子の作成

Simulink ベースのステートを使用する場合、Simulink サブシステムの入力端子と出力端子は Stateflow チャート レベルの入力データと出力データに接続されます。この接続により、最上位レベルの Simulink モデルは、Simulink ベースのステートに含まれるサブシステムからデータを読み取ることができるようになります。

空の Simulink ベースのステートを作成すると、Stateflow は、親の Stateflow チャート内に存在する入力と出力に対応する入力と出力を Simulink サブシステム内に作成します。しかし、Simulink ベースのステートを作成した後に、これに入力端子と出力端子を追加する場合は、対応する入力データと出力データを Stateflow チャート内に作成しなければなりません。

Simulink ベースのステートに追加の入力端子と出力端子を作成するには、次を行います。

  1. Simulink ベースのステートを開きます。

  2. Simulink キャンバスをクリックし、in1 と入力して Enter キーを押します。未定義の入力端子が作成されます。

  3. 未定義シンボル in1 が、Stateflow チャートの [シンボル] ペインに表示されます。未定義シンボルを解決するには、[未定義のシンボルを解決] ボタン をクリックします。

  4. In1 という名前のチャート入力端子が作成されます。

追加の出力端子の作成

次の例では、モデル sf_pole_vault に追加の出力端子を作成します。

  1. モデル sf_pole_vault を開きます。

    openExample("stateflow/PoleVaulterExample")
  2. チャート PoleVaulter を開き、Simulink ベースのステート Take_off をクリックします。

  3. Simulink ベースのステートのキャンバスをクリックし、out1 と入力して Enter キーを押します。未定義の出力端子が作成されます。出力端子の名前を theta_out に変更し、theta の信号に接続します。

    Simulink subsystem with a new output block called theta_out.

  4. PoleVaulter[シンボル] ペインに theta_out の未定義シンボルが表示されます。未定義シンボルを解決するには、[未定義のシンボルを解決] ボタン をクリックします。

    Symbols pane showing an unresolved symbol theta_out.

  5. Stateflow は、theta_out というチャート内に出力端子 theta_out に対応する出力を作成します。

データの編集の詳細については、データ、イベント、メッセージの追加および変更を参照してください。

関連するトピック