分割の作成
モデルの分割
分割は、アトミック タスクとして独立して実行されるモデルのコンポーネントです。マルチタスク モデルで、分割はモデル コンポーネントから作成されます。周期的分割は、モデル内でサンプル時間の関数としてスケジュールされます。エクスポート関数モデルでは、ルートの関数呼び出しの入力は分割として定義されます。これらの分割にはスケジュールが関連付けられており、分割の実行順序を示しています。
分割を利用すると、明示的に制御できるモデルの部分を区切ることができます。周期的分割は、モデル内で特定のレートで実行されるコンポーネントであると考えることができます。非周期的分割は、指定されたヒット時間にまたは指定されたイベントで実行されるコンポーネントです。これらの分割のスケジュールはシミュレーションとコード生成に影響を与えます。
スケジュール エディターでは、モデルを分割し、その分割を操作することができます。スケジュール エディターには、分割、分割間の接続、分割の順序が表示されます。
3 種類の分割があります。
分割のタイプ | イメージ | 説明 |
---|---|---|
暗黙的 | | Simulink® により自動的に作成されます。基本レートで実行されているブロックが暗黙的な分割として現れます。 |
周期的 | | Atomic サブシステムや Model ブロックのユーザー定義された分割。周期的分割はエクスポート関数で定義することもできます。これらの分割はサンプル時間に基づいて実行されるため、その実行は周期的です。 |
非周期的 | | 非周期的分割は、制約がなく、いつでも実行できるように作成することができる分割です。スケジュール エディターの [プロパティ インスペクター] で、非周期的分割の実行時に使用する hit times を指定します。スケジュール エディターでイベントを使用して、非周期的分割の実行をスケジュールすることもできます。 |
モデル内で基本レートで実行されているブロックがスケジュール エディターで暗黙的な分割として表示されます。基本レートはモデル内で最も高速な離散レートです。D1 は基本レートを示します。D1 注釈はタイミング凡例にも表示されます。D1 分割または暗黙的分割は、順序において常に最初の離散分割のままです。
モデルに既に存在している既定の分割も暗黙的な分割です。
分割の色はそのレートと一致します。
レートベース モデルからの分割の作成
分割はマルチタスク、固定ステップ、可変ステップのソルバー モデルでのみ有効化されます。マルチタスク実行モードを選択するには、[ソルバー] ペインの [ソルバー] セクションで、[タイプ] として [固定ステップ]
または [可変ステップ]
を選択します。[コンフィギュレーション パラメーター] ダイアログ ボックスの [ソルバー] ペインで [各離散レートを個別のタスクとして扱う] チェック ボックスをオンにします。マルチタスク実行モードの詳細については、時間ベースのスケジューリングとコード生成 (Embedded Coder)を参照してください。
ベスト プラクティスとして、[ソルバー] ペインで [データ転送に対するレート変換を自動的に取り扱う] 設定を有効にします。[データ転送に対するレート変換を自動的に取り扱う] をオンにすると、レート変換の検出時に、Simulink によって Rate Transition ブロックがブロック間に挿入されます。Simulink は、非同期タスクと周期的タスクのレート変換を処理します。データ転送のデータ整合性と確定性を確保するよう設定された非表示のブロックが Simulink によって追加されます。[各離散レートを個別のタスクとして扱う] をオンにすると、Simulink は異なるレートで動作するモデルに対してマルチタスク実行を選択します。タスクの優先順位に基づいて、シミュレーションの段階ごとに同じ実行優先順位のブロックがまとめて処理されることも指定します (たとえば、出力の計算と状態の更新など)。
スケジュール エディターで既定の分割を確認するには、スケジュール エディターを開きます。[モデル化] タブで [スケジュール エディター] をクリックします。ツールストリップの アイコンをクリックし、ブロック線図を更新します。モデル内の既定の分割は暗黙的な分割と呼ばれます。Atomic サブシステムまたは Model ブロックを使用してモデル内で分割を作成することもできます。
[分割の管理] を使用した分割の作成
スケジュール エディターで、[分割の管理] パネルを使用して分割を作成します。[分割の管理] パネルを開くには、スケジュール エディターのツールストリップで [分割の管理] をクリックします。[分割の管理] で行った変更がモデルに適用され、ブロック線図の更新後に分割が作成されます。[分割の管理] には、明示的に分割できる Subsystem ブロックと Model ブロックが含まれるモデルの階層構造が示されます。
Subsystem ブロックから分割を作成するには、サブシステムを選択して をクリックします。Model ブロックから分割を作成するには、Model ブロックを選択して をクリックします。分割名を [分割の名前] 列、サンプル時間を [サンプル時間] 列に入力します。分割するモデル内のすべての Subsystem ブロックと Model ブロックに対して手順を繰り返します。ブロック線図を更新すると、作成された分割がスケジュール エディターに表示されます。推定されるデータ依存関係と順序を示した分割がグラフに表示されます。
メモ
[分割の管理] パネルを使用して分割を作成することで、Subsystem ブロックや Model ブロックのパラメーターが変更されます。
次の例では、分割用にモデルを設定したり、スケジュール エディターの [分割の管理] パネルを使用して分割を作成する方法を示します。
フォールトトレラント燃料制御システムのモデル化のモデル例
sldemo_fuelsys
を開きます。openExample('simulink_automotive/ModelingAFaultTolerantFuelControlSystemExample') sldemo_fuelsys
スケジュール エディターを開きます。
スケジュール エディターは、[モデル化] タブで [スケジュール エディター] をクリックすると開きます。既定の分割を表示するには、スケジュール エディターで [ブロック線図の更新] をクリックします。Simulink によって自動的に作成された 2 つの暗黙的な分割がスケジュール エディターに表示されます。
分割を作成します。
[分割の管理] パネルを開きます。パネルで、
fuel_rate_control
サブシステムを展開します。airflow_calc
サブシステムを選択して、 をクリックします。既定の分割名とサンプル時間を変更するには、既定の名前とサンプル時間をクリックします。fuel_calc
サブシステムの分割を作成するには、fuel_calc
サブシステムを選択して、 をクリックします。[分割の管理] パネルには、既定の分割名とサンプル時間が表示されています。
ブロック線図を更新すると、新しく作成された分割が表示されます。
Atomic サブシステム ブロックからの分割の作成
Atomic サブシステムを分割できます。Atomic サブシステムは、ブロック メソッドの実行順序を決定する際に、Simulink によって 1 つの単位として扱われます (分割はマルチタスクの固定ステップ ソルバー モデルと可変ステップ ソルバー モデルでのみ有効化されます)。Atomic サブシステム ブロックから分割を作成するには、[ブロック パラメーター] ダイアログ ボックスに移動します。[名前を付けてスケジュール] ドロップダウンから [周期的分割]
を選択します。分割に名前と離散サンプル時間を指定して、[OK] をクリックします。これにより、このブロックの明示的な分割が作成されます。この分割をスケジュール エディターで確認するには、ブロック線図を更新します。モデル内の信号に基づいて、分割が接続と共にグラフと [順序] に表示されます。
Model ブロックからの分割の作成
Model ブロックから分割を作成するには、[モデル イベントのシミュレーション] で、[次を使用してレートをスケジュール] ドロップダウンから [レートのスケジュール] と [スケジュール エディター]
を選択します。参照モデルからの分割を有効にすると、参照モデルに存在するすべての Model ブロックから分割が作成されます。これらの分割はモデル ブロック名によってスコープが設定されます。この分割をスケジュール エディターで確認するには、ブロック線図を更新します。モデルの設計に基づいて、分割が接続と共にグラフと [順序] 列に表示されます。
エクスポート関数の分割
エクスポート関数モデルでは、モデル内に存在する関数呼び出しから分割が作成されます。エクスポート関数モデルで関数呼び出しから分割を作成するには、最上位モデルのエクスポート関数モデルを参照します。ブロック パラメーターを使用して、スケジュール エディターで Model ブロックをスケジューリングします。次に、分割が関数呼び出しから作成され、その順序はスケジュール エディターによって決定されます。
エクスポート関数モデルを作成する。
エクスポート関数モデルを参照する Model ブロックを追加する。
エクスポート関数モデルを分割するようにパラメーターを設定する。
Model ブロックからエクスポート関数モデルを参照することで、モデル自体を変更することなく関数呼び出しを分割できます。エクスポート関数モデルの Simulink 関数はスケジューリングできず、スケジュール エディターに分割として表示されません。
Model ブロックを新しい Simulink モデルに追加します。[モデル名] ボックスで、エクスポート関数モデルの名前を入力します。たとえば、エクスポート関数モデルの作成で作成したエクスポート関数モデルを使用します。
スケジュール エディターの使用を有効にするには、マルチタスクになるようにモデルを設定します。モデル コンフィギュレーション パラメーターを開きます。[ソルバー] ペインの [ソルバーの選択] で、[タイプ] を
[固定ステップ]
に設定します。[各離散レートを個別のタスクとして扱う] パラメーターと [データ転送に対するレート変換を自動的に取り扱う] パラメーターをオンにします。[OK] をクリックします。モデルで分割が有効化されます。メモ
Inport ブロックが自動的に作成されるため、サブシステムをモデルに変換しないでください。
Outport ブロックを [output_100ms] 端子と [output_10ms] 端子に追加して、シミュレーション データを MATLAB® に保存します。この例では、エクスポート関数モデルで、両方の関数呼び出しのサンプル時間を -1 に設定します。
Sine Wave ブロックを追加してデータ入力を設定します。[振幅] を
2
、[サンプル時間] を0.01
に設定します。エクスポート関数モデルの関数呼び出しを分割するには、Model ブロックの [ブロック パラメーター] ダイアログ ボックスで、[次を使用してレートをスケジュール] ドロップダウン メニューから
[スケジュール エディター]
オプションを選択します。スケジュール エディターを開いてブロック線図を更新し、関数呼び出しを分割として表示します。