Main Content

Requirements Table ブロックを使用したデータの変化の検出

R2022a 以降

Requirements Table ブロックでは、タイム ステップ間でのデータの値の変化を検出できます。変化検出演算子を使用して、データの値が変化した時点を判別できます。

変化検出演算子

データの変化を検出するには、次の表に示す演算子を使用します。

演算子構文説明
hasChangedtf = hasChanged(data_name)現在のタイム ステップの開始時における data_name の値が前のタイム ステップの開始時における data_name の値と異なる場合に 1 (true) を返します。それ以外の場合、演算子は 0 (false) を返します。
hasChangedFromtf = hasChangedFrom(data_name,value)data_name の値が前のタイム ステップの開始時点では指定した value と等しく、現在のタイム ステップの開始時点では別の値になっている場合に 1 (true) を返します。それ以外の場合、演算子は 0 (false) を返します。
hasChangedTotf = hasChangedTo(data_name,value)data_name の値が前のタイム ステップの開始時点では指定した value と異なり、現在のタイム ステップの開始時点では value と等しくなっている場合に 1 (true) を返します。それ以外の場合、演算子は 0 (false) を返します。

入力引数 data_nameRequirements Table ブロックで定義されたデータで、以下として指定されます。

  • スカラー

  • 行列または行列の要素

  • 構造体または構造体のフィールド

  • 構造体のフィールドまたは行列の要素の有効な組み合わせ

hasChangedFrom 演算子と hasChangedTo 演算子の場合、引数 valuedata_name と同程度の値として解決される式にする必要があります。たとえば、data_name が行列の場合、valuedata_name と同じ次元の行列値として解決されなければなりません。

変化検出をもつ Requirements Table ブロックの例

この例では、入力信号における特定の変化が演算子 hasChangedhasChangedFrom、および hasChangedTo でどのように検出されるかを示します。この例では、Ramp (Simulink)ブロックから Requirements Table ブロックに離散増分時間信号を送信します。

このモデルは、ステップ サイズ 1 の固定ステップ ソルバーを使用しています。この信号はタイム ステップごとに 1 ずつインクリメントします。ブロックは、入力 u の以下の変化について解析します。

  • 前のタイム ステップからの変化

  • 3 からの変化

  • 3 への変化

信号をチェックするために、ブロックは 3 つの変化検出演算子を呼び出し、6 つの要件を指定します。それぞれの変化検出演算子で、出力データ y1y2、および y3 の値を判定します。

  • hasChanged(u)true である場合、y11 になります。それ以外の場合、y10 になります。

  • hasChangedFrom(u,3)true である場合、y21 になります。それ以外の場合、y20 になります。

  • hasChangedTo(u,3)true である場合、y31 になります。それ以外の場合、y30 になります。

シミュレーション中に、ブロックに対する入力信号と出力信号が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 に戻ります。

参考

関連するトピック