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_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 ブロックが存在しないからです。破線で表される信号線をすべてモデルから削除します。
新しいモデルの実行
新しいモデルは、以下のようになります。
新しいモデルのシミュレーションを実行すると、結果が元の設計の結果と一致します。