Main Content

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

このチュートリアルでは、Simulink® 関数を Stateflow® チャートで使用して、3 つの Function-Call Subsystem を含むモデルの設計を改善します。モデル sf_temporal_logic_scheduler では、次が行われます。

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

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

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

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

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

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

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

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

メモ

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

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

モデルを開く

sf_temporal_logic_scheduler モデルを開きます。

openExample("stateflow/TemporalLogicSchedulerExample")

Simulink model with three function-call subsystems.

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

Scope showing three slow executions and two fast executions.

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

Simulink 関数をチャートに追加

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

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

    Simulink model after subsystem A1 is removed.

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

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

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

    Stateflow chart after Simulink function A1 is added.

    ヒント

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

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

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

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

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

    Stateflow chart with three Simulink functions.

    メモ

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

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

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

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

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

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

    Stateflow chart with calls to Simulink functions.

  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. 破線で表される信号線をすべてモデルから削除します。

新しいモデルの実行

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

Modified Simulink model without function-call subsystems.

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

関連するトピック