このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
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
に戻ります。