ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

サンプル時間のタイプ

離散サンプル時間

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

tn=nTs+|To|

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

0nTsimTs

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

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

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

連続サンプル時間

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

Derivative などのブロックを連続として指定するには、[0, 0] または 0 をブロック ダイアログの [サンプル時間] フィールドに入力します。

マイナー ステップに固定

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

ブロックはマイナー ステップに固定されるように明示的に設定できますが、通常 Simulink ではこの条件を継承サンプル時間または 0 (連続) のユーザー指定への変更として設定します。この設定は、固定ステップ ソルバーを使用したときの最速離散レートと同等であり、したがってそのレートに変換されます。

継承サンプル時間

ブロックのサンプル時間が [–1, 0] または –1 に設定されている場合、サンプル時間は "継承" され、モデル内のブロック コンテキストに基づいて最適なサンプル時間が Simulink によって決定されます。Simulink ではコンパイルの段階でこのタスクを実行します。継承された元の設定が、コンパイルされたモデルに表示されることはありません。したがって、[サンプル時間の凡例] には継承された ([–1, 0]) は表示されません (サンプル時間情報の表示を参照)。

サンプル時間が既定で継承される (-1) ブロックがいくつかあります。これらのブロックでは、パラメーターが継承されていない値に設定されない限り、パラメーターはブロックのダイアログ ボックスに表示されません。このようなブロックの例には、Gain ブロックや Rounding Function ブロックがあります。適切なモデル化のために、これらのブロックの [サンプル時間] パラメーターは変更しないことをお勧めします。詳細については、サンプル時間が推奨されないブロックを参照してください。

継承されたすべてのブロックは、伝播が継承サンプル時間に影響を与える方法に説明されているように、サンプル時間の伝播のプロセスの影響を受けます。

定数サンプル時間

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

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

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

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

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

定数サンプル時間を許可するブロックに対しては、次の条件が適用されます。

  • ブロックに連続状態または離散状態がない。

  • 条件付き実行サブシステムの出力端子にブロックが接続されていない (Enabled Subsystem の使用を参照)。

S-Function ブロック

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

可変サンプル時間

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

Pulse Generator ブロックは可変サンプル時間をもつブロックの例です。Simulink では可変ステップ ソルバーに対してのみ可変サンプル時間をサポートしているので、固定ステップ ソルバーを使用している場合は、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、Enabled and Triggered または Iterator など) のサブシステムに含まれている場合、そのブロックは定数であるか、トリガー サンプル時間をもちます。トリガー サンプル時間のタイプを明示的に指定することはできません。ただし、コンパイル中にトリガーのタイプを使用するには、ブロックのサンプル時間を継承 (–1) に設定しなければなりません。Simulink はそれにより、ブロックがシミュレーション中にその出力を計算する特定の時間を決定します。1 つの例外は、次の項で説明するように、サブシステムが非同期の Function Call の場合です。

非同期のサンプル時間

非同期のサンプル時間はトリガー サンプル時間に似ています。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)を参照してください。

参考

| |