明示的な分割を使用したモデルの分割
同時実行用に構成されたモデルがある場合、タスクを追加して分割を作成し、明示的な分割を使用して個々のタスクを分割にマッピングできます。これにより、モデルの異なる部分をアーキテクチャの異なる部分に対して実行できるようになります。詳細については、モデルの暗黙的な分割と明示的な分割を参照してください。
明示的な分割の必要条件
明示的な分割を使用するには、以下の必要条件を満たさなければなりません。
同時実行用にモデルを設定します。詳細については、同時実行用のモデルの構成を参照してください。
モデルのルート レベルにあるすべてのブロックを、次のタイプのブロックのいずれかに変換します。
Model ブロックを使用して参照されるモデル
サブシステム ブロック
MATLAB® System ブロック
MATLAB Function ブロック
Stateflow® チャート
詳細については、モデルの暗黙的な分割と明示的な分割を参照してください。
メモ
参照モデルを使用する場合は、最上位モデルのモデル コンフィギュレーション パラメーターを参照モデルに複製します。すべての参照モデルに対して単一のコンフィギュレーション参照の使用を検討してください。詳細については、モデル コンフィギュレーション セットを参照してください。
モデルを展開するターゲット アーキテクチャを選択します。詳細については、ターゲット アーキテクチャの指定を参照してください。
周期的トリガーとタスクの追加
周期的に実行する必要のあるモデルでコンポーネントの周期的タスクを追加します。トリガー ベースで実行される非周期的タスクを追加するには、非周期的トリガーとタスクの追加を参照してください。
モデル実行の同時性を高めることによる影響を調べる必要がある場合は、追加の周期的タスクをモデルで作成します。
[同時実行] ダイアログ ボックスで、[周期的] ノードを右クリックして [タスクの追加] を選択します。
コンフィギュレーション実行の階層構造にタスク ノードが表示されます。
このタスク ノードを選択して、タスクの名前と周期を入力したら、[適用] をクリックします。
タスク ノードの名前が入力した名前に変更されます。
必要に応じてタスクの色を指定します。この色はブロックからタスクへのマッピングを表します。色を割り当てないと、Simulink® によって既定の色が選択されます。モデルに対してサンプル時間の色分け表示を有効にする場合、ソフトウェアはその設定を守ります。
必要に応じて [適用] をクリックします。
追加の周期的トリガーを作成するには、[周期的なトリガーの追加] 記号をクリックします。独自のトリガー ソースをもつ複数の周期的トリガーを作成することもできます。
メモ
周期的トリガーにより、複数のタイマーなど複数の周期的割り込みソースを表すことができます。トリガーの周期性は、スケジュールをトリガーするタスクのベース レートまたはトリガーの周期です。トリガー間でのデータ転送は、[Ensure Data Integrity Only]
タイプに限定されます。周期的トリガーにマッピングされたブロックでは、ert.tlc
および grt.tlc
システム ターゲット ファイルのコードのみ生成できます。
タスクとトリガーを削除するには、ペインでそれらを右クリックし、[削除] を選択します。
周期的タスクとトリガー構成が完了したら、非周期的 (割り込み) タスクを必要に応じて構成します。非周期的タスクが必要でない場合は、タスク、トリガー、ノードへのブロックのマッピングに進みます。
非周期的トリガーとタスクの追加
実行が割り込みベースのモデルでコンポーネントの非周期的タスクを追加します。実行が周期的に行われる周期的タスクを追加するには、周期的トリガーとタスクの追加を参照してください。
非周期的トリガーを作成するには、[同時実行] ダイアログ ボックスで [同時実行] ノードを右クリックして、[非周期的トリガーを追加] 記号をクリックします。
[Interrupt
N
] という名前のノードがコンフィギュレーション ツリー階層に表示されます。ここで、N
は整数です。[Interrupt] を選択します。
このノードは、システムの非周期的トリガーを表します。
トリガーの名前を指定して、非周期的トリガーのソースを構成します。展開ターゲットに応じて、
[POSIX 信号 (Linux/VxWorks 6.x)]
と[イベント (Windows)]
のいずれかを選択します。POSIX® 信号を選択した場合は、非周期的イベントの提供に使用する信号番号を指定します。Windows® イベントを選択した場合は、イベントの名前を指定します。[適用] をクリックします。
ソフトウェアは、可能な限り早急に非周期的トリガーを処理します。タスクを使用してトリガーの応答を処理する場合は、次の手順に従います。
[割り込み] ノードを右クリックして、[タスクの追加] を選択します。
新しいタスク ノードが [割り込み] ノードの下に表示されます。
新しいタスク ノードの名前を指定します。
必要に応じてタスクの色を指定します。この色はブロックからタスクへのマッピングを表します。色を割り当てないと、Simulink によって既定の色が選択されます。
[適用] をクリックします。
タスクとトリガーを削除するには、ペインでそれらを右クリックし、[削除] を選択します。
タスクとトリガーを作成したら、これらのタスクへ実行コンポーネントをマッピングします。詳細については、タスク、トリガー、ノードへのブロックのマッピングを参照してください。
ヒント
非周期的タスク用にモデルを設定するには、Model ブロックの関数呼び出し端子を Asynchronous Task Specification (Simulink Coder) ブロックに接続します。次に、Asynchronous Task Specification (Simulink Coder) ブロックを非周期的トリガーにマッピングします。割り込みのマッピングの詳細については、タスク、トリガー、ノードへのブロックのマッピングを参照してください。
タスク、トリガー、ノードへのブロックのマッピング
タスクとトリガーを作成した後に、これらの実行要素に分割を明示的に割り当てることができます。
[同時実行] ダイアログ ボックスで [タスクとマッピング] ノードをクリックします。
[タスクとマッピング] ペインが表示されます。Model ブロックをモデルに追加すると、その新しいブロックがテーブルに表示され、さらに [select task] エントリがその下に表示されます。
タスクをブロックに追加する必要がある場合は、[Name] 列でブロックの下のタスクを右クリックして、[新しいエントリの追加] を選択します。
エントリにタスクを割り当てるには、[Name] 列のボックスをクリックして、リストからエントリを選択します。たとえば、周期的タスクと非周期的トリガーが特定のブロックにマッピングされています。
ブロックからタスクへのマッピング記号が、周期的なタスクまたはトリガーの場合は Model ブロックの左上隅に表示され、非周期的なタスクまたはトリガーの場合は Inport ブロックの左上隅に表示されます。
Model ブロックを複数のタスクに割り当てている場合は、複数のタスク記号が左上隅に表示されます。
ブロックから [同時実行] ダイアログ ボックスを表示するには、ブロックからタスクへのマッピング記号をクリックします。
[適用] をクリックします。
メモ
システム タスクではマッピングをインクリメンタルに実行できます。周期的トリガーが 1 つしかない場合、Simulink は、タスク、トリガー、ハードウェア ノードに明示的にマッピングしていないいずれかの Model ブロック、Subsystem ブロックまたは MATLAB System ブロックをシステムで作成されたタスクに割り当てます。Simulink はモデルの各レートに対して最大 1 つのシステム タスクしか作成しません。複数の周期的トリガーが作成されている場合は、Model ブロック分割、サブシステム、または MATLAB System ブロックをタスク、トリガー、ハードウェア ノードに明示的にマッピングします。
連続ブロックを含む Model ブロック分割は同じ周期的トリガーにマッピングします。
Model ブロックはハードウェア ノードにのみマッピングできます。また、Model ブロックをハードウェア ノードにマッピングし、Model ブロックに複数の周期的サンプル時間が含まれている場合は、[コンフィギュレーション パラメーター] ダイアログ ボックスの [ソルバー] ペインで [ターゲット上でタスクの同時実行を許可] チェック ボックスをオフにします。
マッピングが完了したら、モデルを再びシミュレートします。