Simulink 関数を使用したチャートの設計
このチュートリアルでは、Simulink® 関数を Stateflow® チャートで使用して、Function-Call Subsystem を含むモデルの設計を改善します。以下の場合に、Function-Call Subsystem をチャート内の Simulink 関数で置き換えることができます。
サブシステムが、チャートで必要とされる計算を実行する。
モデル内の他のブロックは、サブシステム出力にアクセスする必要がありません。
詳細については、Stateflow チャートでの Simulink 関数の再利用を参照してください。
メモ
変換手順をスキップするには、次のように入力して、変更されたモデルを開くことができます。
openExample("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_th と down_th) が入力としてチャートに戻ります。
シミュレーションの終了後、それらの結果が engine RPM Scope ブロックに表示されます。

Simulink 関数をチャートに追加
Simulink 関数を shift_logic チャートに追加するには、以下の手順に従います。
Simulink モデルで、左下隅の Threshold Calculation ブロックを右クリックし、コンテキスト メニューから [切り取り] を選択します。

shift_logic チャートを開きます。
チャートで、
selection_stateの下を右クリックし、コンテキスト メニューから [貼り付け] を選択します。新しい Simulink 関数を展開して、シグネチャが関数ボックス内に収まるようにします。

ヒント
関数のフォント サイズを変更するには、関数ボックスを右クリックし、[フォント サイズ] メニューから新しいサイズを選択します。
selection_stateの境界を広げて、新しい関数が入るようにします。
メモ
この関数はチャート レベルではなくこのステートに存在しますが、その理由は、チャート内の他のステートで、関数出力
up_thとdown_thが必要とされないからです。Simulink 関数のステートへのバインドを参照してください。Simulink 関数の名前を
Threshold_Calculationからcalc_thresholdに変更します。変更するには、関数ボックスに「[down_th, up_th] = calc_threshold(gear, throttle)」と入力します。
チャート データのスコープを変更
モデル エクスプローラーで、チャートレベル データ up_th と down_th のスコープを [ローカル] に変更します。これにより、これらのデータの計算がチャート内で行われるようになります。
チャート内のステート アクションを更新
Stateflow エディターで、Simulink 関数 calc_threshold を呼び出すように、selection_state 内の during アクションを変更します。
during: [down_th, up_th] = calc_threshold(gear, throttle);

データをチャートに追加
関数 calc_threshold には throttle を入力として使用するため、そのデータをチャート入力として定義しなければなりません (詳細は、Stateflow データの追加を参照)。
[端子] プロパティを 1 にして、入力データ
throttleをチャートに追加します。端子 1 を使用することで、Simulink モデルで信号線が重なり合うことを回避できます。
Simulink モデルで、
throttleの信号線を Engine ブロックの入力と shift_logic チャートの入力の間に追加します。
モデル内の未使用の項目を削除
モデル エクスプローラーで、関数呼び出し出力イベント
CALC_THを削除します。削除理由は、Threshold Calculation ブロックが存在しないからです。破線で表される信号線をすべてモデルから削除します。
新しいモデルの実行
新しいモデルは、以下のようになります。

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