Main Content

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

絶対時間と経過時間の計算

タイマーについて

特定のブロックでは、"絶対" 時間 (すなわち、プログラムの実行開始時間から現在時刻までの時間) または "経過" 時間 (2 つのトリガー イベント間で経過した時間など) のいずれかの値が要求されます。リアルタイム モデル (rtModel) のデータ構造体をサポートするターゲットによって、絶対時間または経過時間を要求するブロックで効率的な時間計算サービスが可能になります。絶対時間と経過時間のタイマーの機能は以下のとおりです。

  • タイマーは、符号なし整数として生成コードで実装されます。

  • マルチレート モデルでは、ほとんどの場合、レートごとに 1 つのタイマーが割り当てられます。指定されたレートで実行中のブロックがタイマーを必要としない場合、タイマーはそのレートに割り当てられません。この場合、タイマーに割り当てられたメモリは最小化され、タイマーを維持するためのオーバーヘッドも非常に少なくなります。

  • Triggered Subsystem 内でのブロックの使用に関する経過時間カウンターの割り当ては、最小化され、さらにメモリ使用量とオーバーヘッドも減少します。

  • S-Function および TLC API によって、S-Function はシミュレーションおよびコード生成時にタイマーにアクセスできます。

  • タイマーのワード サイズは、モデル コンフィギュレーション パラメーター [アプリケーションのライフスパン (日)] で設定するユーザー指定の最大カウンター値によって決定されます。この値を指定すると、タイマーはオーバーフローしません。詳細については、時間カウンターに対するメモリの割り当ての制御を参照してください。

絶対時間とその制限事項については、絶対時間の制限事項についてを参照してください。

周期的タスクおよび非同期タスクのタイマー

"周期的" タスク (すなわち、モデルの基本レートまたはサブレートで実行されるタスク) 内で実行されるブロックのタイミング サービス。

コード ジェネレーターでは、モデルの周期的なタイミング ソースについて実行が "非同期的な" ブロックのタイマーもサポートしています。以下のトピックを参照してください。

タイマーの割り当て

絶対時間または経過時間のデータが必要な S-Function ブロックを作成または管理する場合、要件 (プログラムによるタイマーへのアクセスを参照) を登録しなければなりません。マルチレート モデルでは、タイマーはレートごとに割り当てられます。たとえば、次のような構造のモデルについて検討します。

  • モデルに A、B、および C の 3 つのレートが存在します。

  • レート B で実行中のブロックは絶対時間と経過時間を必要としません。

  • レート C で実行中の 2 つのブロックでは、絶対時間の要件を登録します。

  • レート A で実行中の 1 つのブロックでは、絶対時間の要件を登録します。

この場合、レート A と C でそれぞれ実行される 2 つのタイマーが生成されました。タイミング エンジンは、レート A と C に関連付けられたタスクが実行されると、タイマーを更新します。レート A と C で実行されるブロックはレート A と C に関連付けられたタイマーから時間データを取得します。

生成コードの整数タイマー

生成コードでは、絶対時間および経過時間のタイマーが符号なし整数として実装されます。既定のサイズは 64 ビットです。これはモデル コンフィギュレーション パラメーター [アプリケーションのライフスパン (日)][inf] に設定するとタイマーに割り当てられるメモリ量です。サンプル レートが 1000 MHz のアプリケーションの場合、64 ビット カウンターは 500 年を超える期間オーバーフローしません。詳細については、非同期タスクにおけるタイマーおよび時間カウンターに対するメモリの割り当ての制御を参照してください。

Triggered Subsystem の経過時間カウンター

Discrete-Time Integrator ブロックなどの一部のブロックで実行される計算には、前のブロックの実行からの経過時間 (デルタ T) が必要となります。経過時間のデータが必要なブロックは、要件を登録しなければなりません (プログラムによるタイマーへのアクセスを参照)。次に、トリガーされたサブシステムは、必要に応じて、1 つの経過時間カウンターを割り当て、管理します。このタイマーは、個々のブロック レベルではなく、サブシステム レベルで機能します。タイマーは、Triggered Subsystem (または、Triggered Subsystem 内で条件なしで実行されたサブシステム) に経過時間データを必要とする 1 つ以上のブロックが含まれていると生成されます。

メモ

簡易初期化モードを実行している場合、経過時間は、サブシステムが有効時にリセットされるよう設定されているかどうかにかかわらず、有効になった後の最初の実行でリセットされます。詳細については、指定不足の初期化の検出を参照してください。

関連するトピック