Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

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_1sSS1、および 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")

参考

関連するトピック