Main Content

分割のスケジューリング

以下の 2 つの例では、モデルの分割、分割のスケジューリング、分割スケジュールの編集前後でのシミュレーションの解析を行うワークフローについて説明します。

スケジュール エディターを使用したエクスポート関数モデルのスケジュール

この例では、エクスポート関数モデルにおける関数呼び出しの順序をスケジュール エディターを使用して表示および編集する方法を示します。エクスポート関数モデルでは、いずれのモデルでも同様に、目的の機能が Function-Call Subsystem としてモデル化されます。これらの Function-Call Subsystem で、スケジュール エディターによってスケジュールされる分割を定義します。

スケジュール エディターを使用すると、関数呼び出しのスケジュールを簡単に表示および編集できます。システムの動作はそれらの分割の順序に応じて変わります。この例では、順序を変更してモデルをシミュレートし、システムの動作に対する影響を観察します。シミュレーションでスケジュールの編集による影響を確認するために、スケジューリングの前と後でモデルのシミュレーションを比較します。

参照エクスポート関数モデルからの分割の作成

エクスポート関数モデルのスケジュールを表示および編集するには、そのモデルを参照します。

open_system('ThrottlePositionControlTop.slx');

ThrottlePositionControl が参照エクスポート関数モデルです。既定では、それぞれの関数にそれらの関数のトリガーに使用できる入力端子があります。それらの端子はスケジュール エディターで自動的に処理されます。スケジュール エディターを使用するには、[次を使用してレートをスケジュール] パラメーターを [スケジュール エディター] に設定します。

set_param('ThrottlePositionControlTop/ThrottleControl','ScheduleRatesWith','Schedule Editor');

シミュレーションのベースラインの確立

スケジューリングによるモデルの動作への影響を観察するには、スケジュールを編集する前にモデルをシミュレートしてベースラインを確立します。モデルのシミュレーションを実行します。

sim('ThrottlePositionControlTop');

スケジュール エディターを開く

スケジュール エディターを開くには、[モデル化] タブの [設計] セクションで [スケジュール エディター] をクリックします。スケジュール エディターでは、モデルの各コンポーネントが分割として表されます。ブロック線図を更新すると分割が表示されます。分割はモデルにおけるエントリポイントです。スケジュール エディターには、それらの分割の順序とデータ通信が示されます。矢印は分割間のデータ接続であり、データ フローを示します。破線は、接続元の実行順序が接続先よりも後であるため遅延があることを示します。実線は、接続元の実行順序が接続先よりも前であるため遅延がないことを示します。

分割のスケジュールの編集

[順序] ペインには、特定のタイム ステップで実行される分割の順序が示されます。分割の順序が不完全な状態であると仮定します。この場合、遅延を解消するためには、分割 ThrottleControl.ActuatorRun5ms を分割 ThrottleControl.ControllerRun5ms よりも後に実行します。

[順序] ペインで、ThrottleControl.ActuatorRun5msThrottleControl.ControllerRun5ms の後ろへドラッグします。分割 ThrottleControl.ControllerRun5ms と分割 ThrottleControl.ActuatorRun5ms の間の遅延が依存関係に変わることを確認します。これにより、ThrottleControl.ControllerRun5msThrottleControl.ActuatorRun5ms の実行間の遅延がなくなります。

非周期的分割の実行のスケジュール

このエクスポート関数モデルには、制約なしの分割 AccelerationPedalPositionSensor が含まれています。制約なしの分割を離散分割としてシミュレートするようにスケジュールするとします。分割 ThrottleControl.AppSnsrRun を [0:0.02:100] に実行するようにスケジュールして、それぞれの時間の動作を観察します。制約なしの分割をクリックし、プロパティ インスペクターで [トリガー] に「[(1:5000)*.02]」と入力します。

シミュレーション データ インスペクターでの実行の比較

次に、変更したスケジュールでモデルをシミュレートします。

シミュレーション データ インスペクターを開きます。2 つの実行を選択して比較します。スケジュールの変更によるモデルの動作への影響を確認できます。

Copyright 2018-2022 The MathWorks, Inc.

スケジュール エディターを使用したレートベース モデルのスケジューリング

この例では、スケジュール エディターを使用してレートベース モデルを分割する方法を示します。分割は、独立して実行することができるモデルのコンポーネントです。この例では、サブシステムを分割に変換して、そのスケジュールを表示および編集します。

スケジュール エディターを使用すると、分割のスケジュールを簡単に表示および編集できます。システムの動作はそれらの分割の順序に応じて変わります。この例では、シミュレーション時にこのモデルをスケジューリングした場合の影響を観察します。モデルの分割とスケジューリングの影響を確認するために、分割の作成およびスケジューリングの実行前と実行後でモデルのシミュレーションを比較します。

モデルを開いて、シミュレーションのベースラインを確立

スロットル位置制御システムのモデルを開いて、そのモデルをシミュレートし、比較のためのベースラインを確立します。

open_system('ScheduleEditorWithSubsystemPartitions');
sim('ScheduleEditorWithSubsystemPartitions');

スケジュール エディターを開いて、分割を作成

スケジュール エディターを開くには、[モデル化] タブの [設計] セクションで [スケジュール エディター] をクリックします。[分割の管理] を使用して、モデル内のサブシステムから分割を作成します。ThrottlePositionControl のすべてのサブシステムを選択して、[分割の管理] パネルの上部にある [分割の作成] アイコンをクリックします。分割の名前とそのサンプル時間を指定します。ブロック線図を更新すると、分割がスケジュール エディターに表示されます。

矢印は分割間のデータ接続であり、データ フローを示します。破線は常に、接続元の実行順序が接続先よりも後であるため遅延があることを示します。実線は、接続元の実行順序が接続先よりも前であるため遅延がないことを示します。

分割のスケジュールの編集

[順序] には、特定のタイム ステップで実行される分割の順序が示されます。分割の順序が不完全な状態であると仮定します。この場合、分割 ControllerRun5ms の前に分割 ActuatorRun5ms を実行します。ActuatorRun5msControllerRun5ms より前の順番になるようドラッグします。ControllerRun5msActuatorRun5ms の分割間の依存関係が遅延に変化することを確認します。

シミュレーション データ インスペクターでの実行の比較

次に、変更したスケジュールでモデルをシミュレートします。

シミュレーション データ インスペクターを開きます。2 つの実行を選択して比較します。スケジュールの変更によるモデルの動作への影響を確認できます。

参考

関連するトピック