Main Content

サンプル時間のタイプ

離散サンプル時間

離散サンプル時間をもつブロックの場合、Simulink® では次の時間にブロックの出力または更新メソッドを実行します。

tn=nTs+|To|,

ここで、サンプル時間の周期 Ts は常にゼロより大きく、シミュレーション時間 Tsim より小さくなります。周期数 (n) は整数で、次を満たさなければなりません。

0nTsimTs.

シミュレーションの進行中、Simulink は tn のこれらの各固定間隔で 1 回だけブロック出力を計算します。Simulink が任意のサンプル時間に対してブロックの出力メソッドを実行するこれらのシミュレーション時間は、"サンプル時間ヒット" と呼ばれます。離散サンプル時間は、サンプル時間ヒットが既知の情報である唯一のタイプです。

最初のサンプル ヒット時間を遅延させる必要がある場合は、オフセット To を定義できます。

Unit Delay ブロックは離散サンプル時間をもつブロックの例です。

連続サンプル時間

連続サンプル時間ヒットはメジャー タイム ステップとマイナー タイム ステップに分けられます。マイナー タイム ステップは、メジャー タイム ステップの下位区分です。ソルバーは、各メジャー タイム ステップでの結果を生成します。ソルバーは、マイナー タイム ステップでの結果を使ってメジャー タイム ステップでの結果の精度を向上させます。

選択する ODE ソルバーは、すべての連続状態をシミュレーション開始時間から任意のメジャー タイム ステップまたはマイナー タイム ステップまで統合します。ソルバーは、マイナー ステップの時間を判断し、マイナー タイム ステップでの結果を使用して、メジャー タイム ステップでの結果の精度を向上させます。表示されるのはメジャー タイム ステップのブロック出力のみです。

Derivative などのブロックの連続サンプル時間を指定するには、[サンプル時間] パラメーターに「[0, 0]」または「0」と入力します。

継承サンプル時間

ブロックのサンプル時間が [–1 0] または –1 に設定されている場合、サンプル時間は "継承" され、モデル内のブロックのコンテキストに基づいて最適なサンプル時間が Simulink によって決定されます。Simulink では、継承サンプル時間をもつブロックのサンプル時間はコンパイル時に決定されます。継承された設定はコンパイル時に上書きされるため、[サンプル時間の凡例] では、コンパイルされたモデルに継承サンプル時間 [-1 0] が表示されることはありません。詳細については、サンプル時間情報の表示を参照してください。

一部のブロックはサンプル時間を既定で継承します。これらのブロックでは、継承されていない値を指定しない限り、パラメーターは表示されません。たとえば、Gain ブロックや Rounding Function ブロックでは、サンプル時間パラメーターは表示されず、サンプル時間を既定で継承します。これらのブロックの [サンプル時間] パラメーターは変更しないことをお勧めします。詳細については、サンプル時間が推奨されないブロックを参照してください。

継承されたすべてのブロックは、サンプル時間の伝播のプロセスの影響を受けます。詳細については、伝播が継承サンプル時間に影響を与える方法を参照してください。

マイナー ステップに固定

ブロックのサンプル時間が [0 1] の場合、ブロックは "固定マイナー ステップ" のサンプル時間をもちます。このサンプル時間では、ブロックはマイナー タイム ステップで実行されません。ブロックはメジャー タイム ステップでのみ実行されます。固定マイナー ステップのサンプル時間により、メジャー ステップ間で出力を変更できないブロックの不要な計算が除去されます。

ブロックは固定マイナー ステップのサンプル時間に明示的に設定できますが、多くの場合、この条件は継承サンプル時間として、または連続サンプル時間の指定への変更として設定されます。固定マイナー ステップのサンプル時間は、固定ステップ ソルバーを使用するシステムでの最速離散レートと同等です。固定ステップ ソルバーを使用する場合、固定マイナー ステップのサンプル時間は最速の離散サンプル時間に変換されます。

定数サンプル時間

Simulink では、"定数" はシンボリック名またはシンボリック式であり、その値はアルゴリズム外または監視制御を通じてのみ変更できます。Constant ブロックなどのブロックは、モデルを通常実行している間はその出力が変化することはなく、常に一定であると見なされます。

Simulink は定数サンプル時間をこれらのブロックに割り当てます。ブロックの出力メソッドは次のタイミングで実行されます。

  • シミュレーションの開始時

  • 環境内での実行時の変更への応答 (パラメーターの調整など)

定数サンプル時間の場合、ブロックのサンプル時間の割り当ては [inf 0] または inf です。

定数サンプル時間を許可するブロックについては、ブロックに連続状態または離散状態がないことと、条件付き実行サブシステムの出力端子にブロックが接続されていないことが必要です。詳細については、Enabled Subsystem の使用を参照してください。

Simulink ブロック ライブラリには、MATLAB S-Function ブロック、Level-2 MATLAB S-Function ブロック、C S-Function ブロックなど、異なるサンプル レートで出力を行う端子をもつさまざまなブロックが含まれています。このようなブロックの端子には、定数サンプル時間をもつものがあります。

可変サンプル時間

可変サンプル時間を使用するブロックは、ブロックが指定する暗黙的なサンプル時間パラメーターをもっています。このブロックは、その実行時期をソフトウェアに伝えます。コンパイルされたサンプル時間は [–2 Tvo] で、Tvo は一意の可変オフセットです。

Hit Scheduler ブロックと Pulse Generator ブロックはどちらも可変サンプル時間をもちます。可変サンプル時間は可変ステップ ソルバーでのみサポートされています。Hit Scheduler ブロックは固定ステップ ソルバーではサポートされていません。固定ステップ ソルバーを使用して Pulse Generator ブロックを含むモデルをシミュレーションする場合は、そのブロックによって離散サンプル時間が指定されます。

独自のブロックを記述して変数サンプル時間を使用する方法については、C MEX S-Function Examplesを参照してください。

制御可能なサンプル時間

分解能 Tbase をもつ制御可能なサンプル時間を使用するようにブロックを設定できます。Tbase は、ブロック実行間の最小許容時間間隔です。独自の C S-Function ブロックで Tbase を設定するには、関数 ssSetControllableSampleTime を使用します。

ブロックで制御可能なサンプル時間を使用する場合は、ブロックを Tbase の n 倍で実行するよう動的に設定できます。ブロックの次の実行時間は以下のようになります。

Tnext = n Tbase + T

関数 ssSetNumTicksToNextHitForControllableSampleTime を使用して、C S-Function ブロックで n を設定できます。

トリガー サンプル時間

ブロックが Function-Call Subsystem や Enabled Subsystem などの Triggered Subsystem に含まれている場合、そのブロックは定数であるか、トリガー サンプル時間をもちます。ただし、非同期の関数呼び出しの場合は除きます。トリガー サンプル時間のタイプを明示的に指定することはできません。コンパイル中にトリガー サンプル時間を使用するには、ブロックのサンプル時間を継承 (–1) に設定します。それにより、ブロックがシミュレーション中に実行される特定の時間が決まります。

非同期のサンプル時間

非同期のサンプル時間はトリガー サンプル時間に似ています。Simulink エンジンは定期的にブロックを実行しないので、どちらの場合も継承サンプル時間を指定する必要があります。代わりに、ランタイム条件によってブロックの実行時期が決定されます。非同期のサンプル時間の場合は、S-Function が非同期の関数呼び出しを行います。

これらのサンプル時間タイプの違いは次のとおりです。

  • Function-Call Subsystem のみが非同期のサンプル時間をもつことができます Function-Call Subsystem の使用を参照してください。

  • 関数呼び出し信号ソースは、オプション SS_OPTION_ASYNCHRONOUS をもつ S-Function です。

  • 非同期のサンプル時間は、バーチャル ブロックが非同期の S-Function サブシステムまたは非同期の Function-Call Subsystem に接続されている場合にも発生することがあります。

  • 非同期のサンプル時間はコードを生成する一部のアプリケーションで重要です。非同期イベント (Simulink Coder)を参照してください。

  • サンプル時間は [1,n] です。

ブロックを使用して、非同期のイベントを処理するコードをモデリングし、生成する方法の詳細については、Rate Transitions ブロックと Asynchronous ブロック (Simulink Coder)を参照してください。

関連するトピック