Main Content

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

Simulink 関数を使用したチャートの設計

このチュートリアルでは、Simulink® 関数を Stateflow® チャートで使用して、Function-Call Subsystem を含むモデルの設計を改善します。以下の場合に、Function-Call Subsystem をチャート内の Simulink 関数で置き換えることができます。

  • サブシステムが、チャートで必要とされる計算を実行する。

  • モデル内の他のブロックは、サブシステム出力にアクセスする必要がありません。

Simulink 関数は、MATLAB® 内のスタンドアロンの Stateflow チャートではサポートされません。詳細については、Stateflow チャートでの Simulink 関数の再利用を参照してください。

メモ

変換手順をスキップするには、次のように入力して、変更されたモデルを開くことができます。

openExample("stateflow/AutomaticTransmissionLegacyExample", ...
    supportingFile="old_sf_car_with_sl_function"))

モデルを開く

モデル old_sf_car を開きます。このモデルには、Threshold Calculation という名前の Function-Call Subsystem と、shift_logic という名前の Stateflow チャートが含まれています。

このモデルを実行すると、このチャートは出力イベント CALC_TH をブロードキャストして、Function-Call Subsystem をトリガーします。このサブシステムは shift_logic チャートに 2 つの値を内挿します。サブシステム出力 (up_thdown_th) が入力としてチャートに戻ります。

シミュレーションの終了後、それらの結果が engine RPM Scope ブロックに表示されます。

Simulink 関数をチャートに追加

Simulink 関数を shift_logic チャートに追加するには、以下の手順に従います。

  1. Simulink モデルで、左下隅の Threshold Calculation ブロックを右クリックし、コンテキスト メニューから [切り取り] を選択します。

    Simulink model after Threshold Calculation subsystem is removed.

  2. shift_logic チャートを開きます。

  3. チャートで、selection_state の下を右クリックし、コンテキスト メニューから [貼り付け] を選択します。

  4. 新しい Simulink 関数を展開して、シグネチャが関数ボックス内に収まるようにします。

    Stateflow chart after Simulink function is added.

    ヒント

    関数のフォント サイズを変更するには、関数ボックスを右クリックし、[フォント サイズ] メニューから新しいサイズを選択します。

  5. selection_state の境界を広げて、新しい関数が入るようにします。

    Stateflow chart with a Simulink function inside a state.

    メモ

    この関数はチャート レベルではなくこのステートに存在しますが、その理由は、チャート内の他のステートで、関数出力 up_thdown_th が必要とされないからです。Simulink 関数のステートへのバインドを参照してください。

  6. Simulink 関数の名前を Threshold_Calculation から calc_threshold に変更します。変更するには、関数ボックスに「[down_th, up_th] = calc_threshold(gear, throttle)」と入力します。

チャート データのスコープを変更

モデル エクスプローラーで、チャートレベル データ up_thdown_th のスコープを [ローカル] に変更します。これにより、これらのデータの計算がチャート内で行われるようになります。

チャート内のステート アクションを更新

Stateflow エディターで、Simulink 関数 calc_threshold を呼び出すように、selection_state 内の during アクションを変更します。

during: [down_th, up_th] = calc_threshold(gear, throttle);

Stateflow chart with modified during action in state selection_state.

データをチャートに追加

関数 calc_threshold には throttle を入力として使用するため、そのデータをチャート入力として定義しなければなりません (詳細は、Stateflow データの追加を参照)。

  1. [端子] プロパティを 1 にして、入力データ throttle をチャートに追加します。

    端子 1 を使用することで、Simulink モデルで信号線が重なり合うことを回避できます。

  2. Simulink モデルで、throttle の信号線を Engine ブロックの入力と shift_logic チャートの入力の間に追加します。

モデル内の未使用の項目を削除

  1. モデル エクスプローラーで、関数呼び出し出力イベント CALC_TH を削除します。削除理由は、Threshold Calculation ブロックが存在しないからです。

  2. 破線で表される信号線をすべてモデルから削除します。

新しいモデルの実行

新しいモデルは、以下のようになります。

Modified Simulink model without function-call subsystems.

新しいモデルのシミュレーションを実行すると、結果が元の設計の結果と一致します。

関連するトピック