このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
Simulink システムにおけるタスクとブロックの実行順序のレポート
この例では、モデルによって実行されるすべてのタスクに関する情報と、各タスクでブロックが実行される順序を表示するレポートの作成方法を説明します。
Treat each discrete rate as a separate taskコンフィギュレーション パラメーターが選択されている場合、ブロックの実行はサンプル時間に基づいて異なるタスクに分けることができます。非同期割り込みやイベントトリガー サブシステムなどの特定のブロックを含むエクスポート関数モデルおよびシステムでも、ブロックの実行が異なるタスクにグループ化されます。Simulink® におけるタスク情報とブロック実行順序の表示の詳細については、実行順序の制御と表示を参照してください。
次のイメージは、サンプル モデル slreportgen_demo_ExecutionOrder
のブロック線図と、そのモデルのタスク概要およびブロック実行順序を示しています。
このモデルは連続システムであるため、メイン タスク Cont
のサンプル時間値は 0
です。すべてのモデルで、定数ブロックが Constant
タスクに分けられます。
MultiplyMu
は非バーチャル サブシステムです。既定では、ブロックの実行順序リスト内の非バーチャル サブシステム エントリには、そのサブシステムのブロックの実行順序リストへのリンクが含まれています。あるいは、サブシステム ブロックを入れ子形式のリストとして表示するように ExecutionOrder
レポーター オプションを構成できます。
モデルを開く
モデルを開きます。この例ではシングルタスク モデルを使用します。つまり、定数ブロックを除くすべてのブロックが同じタスクで実行されます。
model = "slreportgen_ExecutionOrder_example";
open_system(model);
レポートの設定
長い完全修飾クラス名を使用せずに済むよう、Report Generator の API パッケージをインポートします。
import mlreportgen.report.* import slreportgen.report.* import slreportgen.finder.*
Simulink レポート オブジェクトを作成して開きます。Microsoft® Word、HTML、または単一ファイルの HTML のレポートを作成するには、"pdf"
を "docx"
、"html"
、または "html-file"
にそれぞれ変更します。
rpt = slreportgen.report.Report(model + "_Report","pdf"); open(rpt);
タイトル ページと目次を追加します。
titlepage = TitlePage("Title",model + ": Execution Order Report","Author","Jane Doe"); add(rpt,titlepage); toc = TableOfContents(); add(rpt, toc);
タスクとブロックの実行順序に関するレポート
モデル内のすべてのシステムを検索し、ループ処理します。
finder = SystemDiagramFinder(model);
while hasNext(finder)
system = next(finder);
新しい章を作成し、ブロック線図の結果を追加します。
ch = Chapter("Title",sprintf("System %s",system.Name)); add(ch,system);
システムがブロック線図または非バーチャル サブシステムである場合にのみ、システムの実行順序をレポートします。バーチャル サブシステム内のブロックは親のブロック実行順序でレポートされます。
isNonvirtualSubsystem = strcmp(system.Type, "Simulink.SubSystem") ... && strcmp(get_param(system.Object, "IsSubsystemVirtual"), "off"); if strcmp(system.Type,"Simulink.BlockDiagram") || isNonvirtualSubsystem
Execution Order
節と ExecutionOrder
レポーターを作成します。
eoSect = Section("Execution Order");
eoRptr = ExecutionOrder(system);
サブシステムの場合は、タスクの詳細がレポートされないように ExecutionOrder
オプションを設定します。この情報は親ブロック線図の実行順序で既にレポートされているためです。
if isNonvirtualSubsystem eoRptr.ShowTaskDetails = false; end
ExecutionOrder
レポーターを Execution Order
章に追加し、その章をレポートに追加します。
add(eoSect,eoRptr);
add(ch,eoSect);
end
節を作成し、システムの各ブロックについての詳細を含めます。ExecutionOrder
ブロックの実行順序リストに含まれるブロックは、この節の対応するブロック詳細にリンクされています。
blkSect = Section("Blocks");
blkFinder = BlockFinder(system);
results = find(blkFinder);
add(blkSect,results);
add(ch,blkSect);
章をレポートに追加します。
add(rpt,ch);
end
レポートを閉じて表示
close(rpt); rptview(rpt);
サンプル レポートの表示
他のタイプのモデルについて実行順序がどのようにレポートされるかを確認するには、この例で使用可能なサンプル レポートを表示してください。
マルチタスク モデル
サンプル モデル slreportgen_demo_Multitasking
は、各離散サンプル時間を個別のタスクとして扱うように構成されています。ブロック In1_1s
、SS1
、および SS2
のサンプル時間は 1 秒で、ブロック In2_2s
のサンプル時間は 2 秒です。
モデルは、サンプル時間で色分けされたブロックを表示するようにも構成されています。1 秒のサンプル時間で実行されるブロックは赤色、2 秒のサンプル時間で実行されるブロックは緑色です。Integrator
ブロックと 2 つのサブシステムの間にあるレート変換ブロックなど、マルチレート ブロックは黄色です。モデルをプログラムでこのように構成するには、次のコマンドを実行します。
set_param(model, "SampleTimeColors", "on");
このモデルの実行順序では 2 つのタスクがレポートされます。タスクの詳細テーブルの Trigger
列には、各タスクのサンプル時間 (秒単位) のレポートが示されます。
モデル ブロックはタスクで分けられます。レート変換ブロックは両方のタスクで実行されるため、両方のリストに含まれます。ただし、タスク D1
ではその出力端子のみが実行され、タスク D2
ではその入力端子のみが実行されます。
サンプル レポート全体を表示するには、次のコマンドを実行します。
rptview("slreportgen_demo_Multitasking_Report.pdf")
非周期的なタスク
非同期割り込みやイベント リスナーによって作成されたタスクなど、一部のタスクはサンプル時間に基づいて実行されません。たとえば、サンプル モデル slreportgen_demo_InitResetTerm
では、実行がイベント リスナーによって制御される 3 つのサブシステムを使用します。各イベント リスナーは、初期化関数、リセット関数、または終了関数呼び出しイベントの受信時にサブシステムを実行するように構成されています。
初期化イベント、リセット イベント、および終了イベントは実行順序内で個別のタスクとしてレポートされます。それらの実行はモデルのサンプル時間に直接依存しないため、タスク テーブルで順序番号が付けられていません。SourceBlock
列は、タスクを定義するブロックを示します。
サンプル レポート全体を表示するには、次のコマンドを実行します。
rptview("slreportgen_demo_InitResetTerm_Report.pdf")
条件付き実行
サンプル モデル slreportgen_demo_ConditionalExecution
には、モデル内の特定のサブシステムが実行されるタイミングを制御する If ブロックと Function-Call Generator ブロックが含まれています。
条件付き実行サブシステムは、必ずしもタイム ステップごとに実行されるとは限らないため、ブロックの実行順序リストでレポートされません。代わりに、ブロックの実行順序リストの後にレポートされる Conditional Execution
テーブルに含まれます。
サンプル レポート全体を表示するには、次のコマンドを実行します。
rptview("slreportgen_demo_ConditionalExecution_Report.pdf")
参考
slreportgen.report.ExecutionOrder