Requirements Table ブロックを使用したデータの変化の検出
Requirements Table ブロックでは、タイム ステップ間でのデータの値の変化を検出できます。変化検出演算子を使用して、データの値が変化した時点を判別できます。
変化検出演算子
データの変化を検出するには、次の表に示す演算子を使用します。
| 演算子 | 構文 | 説明 |
|---|---|---|
hasChanged | tf = hasChanged(data_name) | 現在のタイム ステップの開始時における data_name の値が前のタイム ステップの開始時における data_name の値と異なる場合に 1 (true) を返します。それ以外の場合、演算子は 0 (false) を返します。 |
hasChangedFrom | tf = hasChangedFrom(data_name,value) | data_name の値が前のタイム ステップの開始時点では指定した value と等しく、現在のタイム ステップの開始時点では別の値になっている場合に 1 (true) を返します。それ以外の場合、演算子は 0 (false) を返します。 |
hasChangedTo | tf = hasChangedTo(data_name,value) | data_name の値が前のタイム ステップの開始時点では指定した value と異なり、現在のタイム ステップの開始時点では value と等しくなっている場合に 1 (true) を返します。それ以外の場合、演算子は 0 (false) を返します。 |
入力引数 data_name は Requirements Table ブロックで定義されたデータで、以下として指定されます。
スカラー
行列または行列の要素
構造体または構造体のフィールド
構造体のフィールドまたは行列の要素の有効な組み合わせ
hasChangedFrom 演算子と hasChangedTo 演算子の場合、引数 value は data_name と同程度の値として解決される式にする必要があります。たとえば、data_name が行列の場合、value は data_name と同じ次元の行列値として解決されなければなりません。
変化検出をもつ Requirements Table ブロックの例
この例では、入力信号における特定の変化が演算子 hasChanged、hasChangedFrom、および hasChangedTo でどのように検出されるかを示します。この例では、Ramp (Simulink)ブロックから Requirements Table ブロックに離散増分時間信号を送信します。

このモデルは、ステップ サイズ 1 の固定ステップ ソルバーを使用しています。この信号はタイム ステップごとに 1 ずつインクリメントします。ブロックは、入力 u の以下の変化について解析します。
前のタイム ステップからの変化
値
3からの変化値
3への変化
信号をチェックするために、ブロックは 3 つの変化検出演算子を呼び出し、6 つの要件を指定します。それぞれの変化検出演算子で、出力データ y1、y2、および y3 の値を判定します。
hasChanged(u)がtrueである場合、y1は1になります。それ以外の場合、y1は0になります。hasChangedFrom(u,3)がtrueである場合、y2は1になります。それ以外の場合、y2は0になります。hasChangedTo(u,3)がtrueである場合、y3は1になります。それ以外の場合、y3は0になります。

シミュレーション中に、ブロックに対する入力信号と出力信号がScope (Simulink)ブロックで表示されます。
uの値はタイム ステップごとに1ずつ増加します。時間
t = 1で、y1の値が0から1に変化します。uはそれ以降も引き続きタイム ステップごとに変化するため、y1の値は1のままになります。時間
t = 4で、uの値が3から4に変化すると、y2の値が0から1に変化します。y2の値は、1 タイム ステップ後に0に戻ります。時間
t = 3で、uの値が2から3に変化すると、y3の値が0から1に変化します。y3の値は、1 タイム ステップ後に0に戻ります。
