ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

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

チュートリアルの目的

このチュートリアルの目的は、Simulink® 関数を Stateflow® チャートで使用して、sf_temporal_logic_scheduler という名前のモデルの設計を改善することです。

モデルの設計を改善する理由

sf_temporal_logic_scheduler モデルには、Stateflow チャートと 3 つの Function-Call Subsystem が含まれています。これらのブロックは、以下のように相互作用します。

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

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

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

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

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

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

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

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

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

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

    メモ:   変換ステップを実行しないで新しいモデルに直接アクセスするには、MATLAB® コマンド プロンプトで「sf_temporal_logic_scheduler_with_sl_fcns」と入力します。

モデルを開く

MATLAB コマンド プロンプトで「sf_temporal_logic_scheduler」と入力します。モデルのシミュレーションを実行すると、以下の結果がスコープに表示されます。

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

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 つのデータを定義します。(詳細は、データの追加を参照)。

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

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

  3. モデルで、y3 の Outport をスコープの Inport に接続します。

      ヒント:   Scope ブロックを反転するには、右クリックし、コンテキスト メニューから [回転と反転][ブロックの反転] を選択します。

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

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

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

新しいモデルの実行

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

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

この情報は役に立ちましたか?