主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

実行順序の制御と表示

モデルの"実行順序"とは,金宝app仿真软件®がシミュレーション中にブロックの出力メソッドを呼び出す順番です。金宝app模拟は、この順序をモデルの更新中に決定します。モデルの更新を開始するには、[モデル化]タブで[モデルの更新]をクリックします。金宝app仿真软件はシミュレーション中にもモデルを更新します。

この実行順序を設定することはできませんが,非バーチャルブロックに優先順位を割り当て,対応するブロック線図内のその他のブロックに対する相対的な実行順序を指示することができます。金宝app仿真软件は,データの依存関係と競合がない限り,ブロック優先順位の設定を守ろうとします。設定した優先順位の結果を確認するか,モデルをデバッグするには,非バーチャルブロックとサブシステムの実行順序を表示して確認することができます。

メモ

ブロック メソッドと実行の詳細は、以下を参照してください。

実行順序ビューアー

[デバッグ]タブで(情報のオーバーレイ][実行順序]を選択します。金宝app仿真软件エディターの右側のペイン内に実行順序ビューアーが開きます。

実行順序ビューアーには、現在のシステムのタスクのリストが表示されます。

[システム インデックス]の各値は、たとえば、ある非バーチャル サブシステム内のブロックなど、その他のブロックとは独立して実行されるブロックのグループに対応します。モデル内で、[システム インデックス]の値は一意です。モデル参照階層では同一の[システム インデックス]の値を複数回使用できますが、その階層の各モデル内では一意に保たれます。サブシステムがモデル内の同一のシステムの一部であるかを調べるには、その[システム インデックス]値を比較します。

[タスクID)列にリストされる各タスクは,共通のサンプルレートをもつブロックのグループに対応しています。固定ステップサイズの場合,金宝app仿真软件が離散レートのブロックを1つのタスクで実行するか複数のタスクで実行するかは,[各離散レートを個別のタスクとして扱う]コンフィギュレーションパラメーターによって決まります。

実行順序ビューアーでタスクを選択すると、そのタスクに属するブロックが強調表示され、その実行順序が表示されます。既定では、金宝app模拟はアクティブなブロック線図に対応する最初のタスクを選択します。

タスクの一部として実行されるブロックがアクティブなブロック線図に含まれない場合,そのタスクを実行順序ビューアーで選択することはできません。アクティブなブロック線図には,そのタスクの一部であるバーチャルブロック(输入ブロックなど)が含まれることがあります。

強調表示と実行順序を非表示にするには、[強調表示をクリア]ボタンをクリックします。

ブロックからタスクへの移動

ブロックが実行するタスクを表示するには,ブロックをクリックします。

所选子系统块有一个信息覆盖,上面写着“任务:0,1”。该信息覆盖包含每个任务编号的链接。

ラベルに表示されるタスク番号はリンクになっており,クリックすると,実行順序ビューアーの対応するタスクが選択されます。モデルに多数のタスクがある場合,実行順序ビューアーのタスクリストをスクロールする代わりにこのリンクを使用できます。

ブロック間でタスクを比較するには、複数のブロックを選択します。

実行順序の注釈

金宝app仿真软件は,各非バーチャルブロックの右上に番号を表示します。これらの番号はブロックが実行される順序を示します。最初に実行されるブロックが最小の実行順序(通常,1)を持ちます。表示される実行順序の番号が飛んでいることがありますが,ブロックは常に表示された番号順に実行されます。あるタスクに実行順序1、2、4が表示されていると仮定します。1のラベルの付いたブロックは 2 のラベルの付いたブロックより先に実行され、2 のラベルの付いたブロックは 4 のラベルの付いたブロックより先に実行されます。

たとえば,vdpモデルで,ブロックの実行順序は19までの範囲で、各非バーチャル ブロックに実行順序が付けられます。

バーチャルサブシステムおよび非バーチャルサブシステム

バーチャル子系统ブロックはグラフィックス上でのみ存在し、実行されることがありません。したがって、これらは実行順序に含まれません。バーチャル サブシステム内のブロックは、ルートレベル モデルのコンテキストの実行順序を持ちます。バーチャル サブシステムでは、サブシステム内のブロック実行順序のリストが中かっこ {} 内に表示されます。

非バーチャル子系统ブロックは機能的に存在しており,1つのユニットとして実行されます。1つの実行順序を持ち、親モデルとは異なるシステム インデックスを持ちます。非バーチャル サブシステム内のブロックは、親モデルとは独立した独自の実行順序を持ちます。

たとえば、次のモデルには、「汽车动力学」という名前のバーチャル サブシステムと、「离散巡航控制器」という名前の 原子的非バーチャル サブシステムが含まれています。

バーチャルな 汽车动力学サブシステムに含まれるブロックの実行順序のリストが、中かっこで囲んで表示されています。その中に含まれるブロックは、ルート レベルで実行されます。积分器ブロックが最初に実行され,その出力をルートレベルモデル内の范围ブロック(2番目に実行される)に送信します。

非バーチャルな 离散巡航控制器サブシステムは単一の実行順序 (5) を持ちます。これは、このサブシステムとその中のブロックがルート レベルのブロックに対して 5.番目に実行されることを示します。

メモ

モデルコンフィギュレーションによっては,仿金宝app真软件は非表示の非バーチャルサブシステムをモデルに挿入できます。結果として,非表示の子系统ブロック内部の表示ブロックには、現在のシステム インデックスとは異なるシステム インデックスを指定できます。たとえば、(条件付き入力分岐実行)コンフィギュレーション パラメーターを選択すると、金宝app模拟で作成される非表示で非バーチャルのサブシステムが、並べ替えられた実行順序に影響を与えます。

代数ループ

代数ループ内のブロックは非表示の非バーチャルサブシステムに移動します。非表示のサブシステムの実行順序はその他のブロックのコンテキスト内で決定され,次に非表示のサブシステム内のブロックの実行順序が決定されます。

関数呼び出しサブシステムとアクション サブシステム

関数呼び出しサブシステムとアクションサブシステムにおいて,サブシステムの実行はイニシエーターの実行に関連付けられています。そのため,サブシステムとそのイニシエーターは実行順序を共有します。

エクスポート関数モデルのルートレベルで,関数呼び出しの実行順序には接頭辞Fが付けられます。

詳細については,エクスポート関数モデルの概要を参照してください。

バスと複数のイニシエーター

ブロックへの異なる実行パスに基づいてブロックが複数回実行される場合、ブロックは複数の実行順序を持ちます。以下に例を示します。

  • バスに接続されたブロックは、そのバスが含む各信号に対応する実行順序を持ちます。

  • 複数のイニシエーターを持つ関数呼び出しサブシステムまたはアクションサブシステムは,各イニシエーターに対応する実行順序を持ちます。

金宝appの実行順序の判定方法

金宝app仿真软件は,タスクベースの並べ替えを使用して,派生サンプル時間情報に基づいてブロックと端子の実行順序を設定します。タスクベースの並べ替えにより,ブロックの実行順序の決定プロセスが効率化および単純化されます。

タスクベースの並べ替えを使用すると、次のようになります。

  • タスクはサンプル時間に基づいて個別に並べ替えられる。

  • すべてのタスクに対し,フラットにして並べ替えられたブロックの1つのリストの代わりに,複数の並べ替えられたリストが生成される。

  • レート変換の処理が簡易化される。

  • さまざまなタスクのブロックに関連する偽のデータ依存性違反が回避される。

  • コード生成結果は効率的なレートグループにある。

  • 1つのサブシステムが複数のタスクの異なる並べ替えリストに属することができる。

直達端子による実行順序への影響

実行順序がブロック間のデータの従属関係を確実に反映するように,金宝app仿真软件は,ブロック出力端子のブロック入力端子に対する従属関係に従って,ブロック入力端子を分類します。その現在値により1つのブロック出力の現在値が判定される入力端子は,直達端子呼ばれます。直達端子をもつブロックの例は以下のとおりです。

直達入力をもたないブロックの例は以下のとおりです。

  • 积分器——出力値はその状態の関数に該当します。

  • 常数——入力値をもちません。

  • 内存——出力値は前のタイムステップからの入力値に依存します。

ブロックの実行順序を決定するルール

ブロックを並べ替えるには,金宝app仿真软件は次のルールを使用します。

  • ブロックが別のブロックの直達端子に接続されている場合,実行順序内でそれが接続されるブロックの前になければなりません。

    このルールにより、金宝app模拟が現在の入力を要求するブロック メソッドを呼び出すときに、ブロックへの直達入力が確実に有効になります。

  • 直達入力をもたないブロックは,それが接続される直達入力をもつブロックの前にある限り,実行順序のどこにあってもかまいません。

    直達端子をもたないすべてのブロックを実行順序の先頭に置くことで,このルールを満たすことができます。これにより仿金宝app真软件は,並べ替えプロセスでこれらのブロックを無視することができます。

これらのルールを適用すると、実行順序が作成されます。直達端子をもたないブロックは任意の順序でリストの先頭にあります。その次に直達端子をもつブロックが、それらが接続するブロックに有効な入力を指定するために必要な順番で続きます。

以下のモデルはこの結果を説明します。次のブロックには直達がないため,ルートレベルシステムの実行順序の最初に示されます。

  • 汽车动力学バーチャルサブシステムの积分器ブロック

  • ルートレベル モデルの 速度ブロック

离散巡航控制器子系统にある直達端子をもつすべての获得ブロックは,それらが接続する总和ブロックより前に実行されます。

非同期タスクを含むモデルでブロックの実行順序を決定するルール

シミュレーションにおいて,あるタスク内のブロックの並べ替え順序を決定するときに最も高い優先順位を持つのは,非同期関数呼び出しイニシエーターです。詳細については,非同期のサンプル時間および率转换ブロックと异步ブロック(金宝app仿真软件编码器)を参照してください。

金宝app仿真软件は,次のルールを使用して,非同期のサンプル時間をもつモデルでブロックの実行順序を決定します。

  • 対応するレート変換ブロックで共有される離散レートによって非同期関数呼び出しイニシエーターがトリガーされた場合、共通の離散レートのタスク内で、その非同期関数呼び出しイニシエーターが 1.番目に並べ替えられます。

    たとえば,以下のモデルでは,離散レートD1によってトリガーされる非同期関数呼び出しイニシエーターが1つあります。この離散タスク内で,非同期関数呼び出しイニシエーターが1番目に並べ替えられます。率转换ブロックは、非同期レートA1と離散レートD1の間の変換を行います。

  • 率转换ブロックが努普に削減された場合、率转换ブロックは実行されず、離散タスク内の並べ替え順序における位置は、接続先の上流または下流の離散ブロックに伝達されます。

    たとえば、上のモデルにおいて、RTB2努普に削減されるため,並べ替え順序における位置は,下流の获得ブロックに伝達されます。

  • 2つの非同期関数呼び出しイニシエーターが共通の離散レートタスクを共有している場合,最も高い優先順位を持つ非同期関数呼び出しイニシエーターが離散レートタスクの中で最初に実行されます。

    たとえば,下のモデルにおいて,2つの非同期関数呼び出しイニシエーターは同じ離散レートD1によってトリガーされます。タスクの優先度が高い方が先に並べ替えられます。

  • タスクベースの並べ替えは、非同期サンプル時間の和集合をサポートしていません。複数の非同期サンプル時間の和集合をもつモデルは、既定でグローバルな実行順序になります。つまり、すべてのブロックが単一のタスク内で並べ替えられます。

数据存储内存ブロックに関連する実行順序の変更のチェック

モデルのアップグレード

レガシ(ブロック)の並べ替えではなくタスクベースの並べ替えを使用して,数据存储存储器ブロックに関連する相対的な実行順序を変更できます。アップグレードアドバイザーのチェックでは,仿金宝app真软件の前のバージョンからモデルを更新するときに変更を検出し,元の実行順序を維持するためのオプションを提供します。

  1. アップグレードアドバイザーを開きます。[モデル化]タブで[モデルアドバイザー][アップグレードアドバイザー]を選択します。

  2. [数据存储读取]ブロックと 数据存储写入ブロックの相対的な実行順序のチェック]のチェックボックスをオンにします。

  3. (このチェックを実行)をクリックします。

  4. [結果]テーブルで変更を確認します。元の実行順序を保持する場合、[変更]をクリックします。

コード生成

モデルがコード生成用にコンパイルされると,生成コードでの数据存储读取ブロックと数据存储写入ブロックの相対的な実行順序が、ノーマル シミュレーション モードでの順序と異なる場合があります。モデル アドバイザーのチェックでは、これらの違いを検出して、生成コードの順序に合わせてノーマル シミュレーション モードの実行順序を変更するオプションを提供します。

  1. モデル アドバイザーを開きます。[モデル化]タブで,[モデルアドバイザー][製品別][金宝appSimulink编码器]を選択します。

  2. [数据存储读取]ブロックと 数据存储写入ブロックの相対的な実行順序の変更をチェック]のチェックボックスをオンにします。

  3. (このチェックを実行)をクリックします。

  4. [結果]テーブルで変更を確認します。不一致がリストされ、生成コードの実行順序に合わせてノーマル シミュレーションの実行順序を変更する場合は、[ブロックの優先順位の変更)をクリックします。

関連するトピック