このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
複数コントローラーの実行スケジュール
このチュートリアルでは、Simulink® 関数を Stateflow® チャートで使用して、3 つの Function-Call Subsystem を含むモデルの設計を改善します。モデル sf_temporal_logic_scheduler
では、次が行われます。
このチャートは出力イベント
A1
、A2
、およびA3
をブロードキャストして、Function-Call Subsystem をトリガーします。サブシステム A1、A2、および 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 関数をチャートに追加
Simulink 関数を Temporal Logic Scheduler チャートに追加するには、以下の手順に従います。
Simulink モデルで、右下隅の A1 ブロックを右クリックし、コンテキスト メニューから [切り取り] を選択します。
Temporal Logic Scheduler チャートを開きます。
チャートで、いずれかのステートの外側を右クリックし、コンテキスト メニューから [貼り付け] を選択します。
新しい Simulink 関数を展開して、シグネチャが関数ボックス内に収まるようにします。
ヒント
関数のフォント サイズを変更するには、関数ボックスを右クリックし、[フォント サイズ] メニューから新しいサイズを選択します。
Simulink 関数の名前を
A1
からf1
に変更します。変更するには、関数ボックスに「y = f1(u)
」と入力します。以下のケースについて、手順 1 ~ 5 を繰り返します。
A2 の内容を
f2
という名前の Simulink 関数にコピーA3 の内容を
f3
という名前の Simulink 関数にコピー
メモ
ステート
FastScheduler
とSlowScheduler
の両方で関数出力へのアクセスが必要とされるため、新しい関数はチャート レベルに存在します。
チャート データのスコープを変更
モデル エクスプローラーで、チャートレベル データ y
のスコープを [ローカル]
に変更します。これにより、このデータの計算がチャート内で行われるようになります。
チャート内のステート アクションを更新
Stateflow エディターで、ステート アクション内のイベント ブロードキャストを関数呼び出しで置き換えることができます。
Simulink 関数
f1
、f2
、およびf3
を呼び出すように、FastScheduler
とSlowScheduler
のステート アクションを編集します。両方のステートで、各
during
アクションを以下のように更新します。du: y = u1-y2;
データをチャートに追加
FastScheduler
と SlowScheduler
の on every
ステートについて、3 つのデータを定義します。(詳細は、Stateflow データの追加を参照)。
ローカル データ
y1
とy2
をチャートに追加します。出力データ
y3
をチャートに追加します。モデルの
y3
の出力をスコープに接続します。ヒント
Scope ブロックを反転させるには、そのブロックを選択します。次に、ツールストリップの [書式設定] タブで、[左右を反転] をクリックします。
モデル内の未使用の項目を削除
モデル エクスプローラーで、出力イベント
A1
、A2
、およびA3
と入力データu2
を削除します。削除理由は、Function-Call Subsystem が存在しないからです。破線で表される信号線をすべてモデルから削除します。
新しいモデルの実行
新しいモデルは、以下のようになります。
新しいモデルのシミュレーションを実行すると、結果が元の設計の結果と一致します。