Main Content

複数コントローラーの実行スケジュール

Simulink® 関数は、ユーザーが Simulink ブロックを入力し、ステートと遷移のアクションにおいて呼び出すグラフィカル オブジェクトです。Simulink 関数は、MATLAB® 内のスタンドアロンの Stateflow® チャートではサポートされません。詳細については、Stateflow チャートでの Simulink 関数の再利用を参照してください。

チュートリアルの目的

このチュートリアルの目的は、Simulink 関数を Stateflow チャートで使用して、sf_temporal_logic_scheduler という名前のモデルの設計を改善することです。このモデルには、Stateflow チャートと 3 つの Function-Call Subsystem が含まれています。これらのブロックは、以下のように相互作用します。

  • このチャートは出力イベント A1A2、および A3 をブロードキャストして、Function-Call Subsystem をトリガーします。

  • サブシステム A1A2、および A3 は、チャートで定義された様々なレートで実行されます。

  • サブシステム出力がチャートに直接送られます。

    モデル内の他のブロックは、サブシステム出力にアクセスしません。

以下の場合に、Function-Call Subsystem を Simulink 関数で置き換えることができます。

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

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

Simulink 関数を使用するためのモデル編集

以下の節では、Simulink モデル内の Function-Call Subsystem ブロックを Stateflow チャート内の Simulink 関数で置き換える方法について説明します。この手順を実行すると、モデル内のオブジェクトの数を減らしても、同じシミュレーション結果が得られるようになります。

手順タスク参照
1モデルを開きます。モデルを開く
2Function-Call Subsystem の内容をチャート内の Simulink 関数に移動します。Simulink 関数をチャートに追加
3特定のチャートレベル データのスコープを [ローカル] に変更します。チャート データのスコープを変更
4イベント ブロードキャストを関数呼び出しで置き換えます。チャート内のステート アクションを更新
5関数の入出力が定義されていることを確認します。データをチャートに追加
6モデル内の未使用の項目を削除します。モデル内の未使用の項目を削除

メモ

変換手順をスキップするには、次のように入力して新しいモデルにアクセスできます。

openExample("stateflow/TemporalLogicSchedulerExample", ...
    supportingFile="sf_temporal_logic_scheduler_with_sl_fcns")

モデルを開く

sf_temporal_logic_scheduler モデルを開きます。

openExample("stateflow/TemporalLogicSchedulerExample")

モデルのシミュレーションを実行すると、以下の結果がスコープに表示されます。

詳細については、サブシステムを特定の時間に実行させるスケジューリングを参照してください。

Simulink 関数をチャートに追加

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

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

  2. Temporal Logic Scheduler チャートを開きます。

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

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

    ヒント

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

  5. Simulink 関数の名前を A1 から f1 に変更します。変更するには、関数ボックスに「y = f1(u)」と入力します。

  6. 以下のケースについて、手順 1 ~ 5 を繰り返します。

    • A2 の内容を f2 という名前の Simulink 関数にコピー

    • A3 の内容を f3 という名前の Simulink 関数にコピー

    メモ

    ステート FastSchedulerSlowScheduler の両方で関数出力へのアクセスが必要とされるため、新しい関数はチャート レベルに存在します。

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

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

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

Stateflow エディターで、ステート アクション内のイベント ブロードキャストを関数呼び出しで置き換えることができます。

  1. Simulink 関数 f1f2、および f3 を呼び出すように、FastSchedulerSlowScheduler のステート アクションを編集します。

  2. 両方のステートで、各 during アクションを以下のように更新します。

    du: y = u1-y2;

データをチャートに追加

FastSchedulerSlowScheduleron every ステートについて、3 つのデータを定義します。(詳細は、Stateflow データの追加を参照)。

  1. ローカル データ y1y2 をチャートに追加します。

  2. 出力データ y3 をチャートに追加します。

  3. モデルの y3 の出力をスコープに接続します。

    ヒント

    Scope ブロックを反転させるには、そのブロックを選択します。次に、ツールストリップの [書式設定] タブで、[左右を反転] Flip left-right button をクリックします。

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

  1. モデル エクスプローラーで、出力イベント A1A2、および A3 と入力データ u2 を削除します。削除理由は、Function-Call Subsystem が存在しないからです。

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

新しいモデルの実行

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

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

関連するトピック