Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

hasChangedTo

指定した値へのデータの変化を検出する

説明

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

引数data_nameには次を指定できます。

  • スカラー変数。

  • 行列または行列の要素。

    • data_nameが行列の場合、演算子がtrueを返すのは、演算子がdata_nameのいずれかの要素における変化を検出し、data_nameの新しい値がvalueと等しい場合です。

    • 数字、または定数の整数として評価される式を使用して、行列の要素にインデックス付けします。ベクトルおよび行列でサポートされている演算を参照してください。

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

    • data_nameが構造体の場合、変化検出演算子がtrueを返すのは、演算子がdata_nameのいずれかの要素における変化を検出し、data_nameの新しい値がvalueと等しい場合です。

    • ドット表記を使用して構造体内のフィールドにインデックス付けします。Stateflow 構造体へのインデックス付けと値の割り当てを参照してください。

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

引数data_nameには、自明ではない式やカスタム コード変数は指定できません。

メモ

MATLAB®のスタンドアロン チャートは、行列の要素または構造体内のフィールドでの変化検出をサポートしません。

引数valueには、data_nameと同程度の値として解決される任意の式を指定できます。

  • data_nameがスカラーの場合、valueはスカラー値として解決されなければなりません。

  • data_nameが行列の場合、valueは、data_nameと同じ次元の行列値として解決されなければなりません。

    あるいは、C をアクション言語として使用するチャートで、valueをスカラー値として解決することができます。チャートはスカラー拡張を使用して、要素がすべてvalueによって指定されている値に等しい行列とdata_nameを比較します。行列のすべての要素への値の代入を参照してください。

  • data_nameが構造体の場合、valueは、フィールドの仕様がdata_nameと正確に一致する構造体の値として解決されなければなりません。

すべて展開する

最後のタイム ステップまたは入力イベント以降にMのいずれかの要素の値が変化し、行列Mの現在の値がmatrixValueに等しい場合にステートから遷移します。

[hasChangedTo(M,matrixValue)]

Stateflow chart that uses the hasChangedTo operator in a transition.

最後のタイム ステップまたは入力イベント以降、行列Mの行 1、列 3 の要素の値が7に変化した場合にステートから遷移します。

MATLAB をアクション言語として使用するチャートの場合、次を使用します。

[hasChangedTo(M(1,3),7)]

Stateflow chart that uses the hasChangedTo operator in a transition.

C をアクション言語として使用するチャートの場合、次を使用します。

[hasChangedTo(M[0][2],7)]

Stateflow chart that uses the hasChangedTo operator in a transition.

最後のタイム ステップまたは入力イベント以降に構造体structのいずれかのフィールドの値が変化し、structの現在の値がstructValueに等しい場合にステートから遷移します。

[hasChangedTo(struct,structValue)]

Stateflow chart that uses the hasChangedTo operator in a transition.

最後のタイム ステップまたは入力イベント以降にフィールドstruct.fieldが値5に変化した場合にステートから遷移します。

[hasChangedTo(struct.field,5)]

Stateflow chart that uses the hasChangedTo operator in a transition.

ヒント

  • 同じタイム ステップで複数の入力イベントが発生する場合、hasChangedTo演算子は入力イベント間のデータ値の変化を検出できます。

  • チャートがデータ オブジェクトに書き込む際にデータ値が変化しない場合、hasChangedTo演算子はfalseを返します。

  • Stateflow®チャートのタイプにより、変化検出演算子がサポートするデータの範囲が決定します。

    • MATLAB のスタンドアロン Stateflow チャート:[ローカル]のみ

    • 金宝app®モデルで、MATLAB をアクション言語として使用するチャートの場合:[入力]のみ

    • 金宝app仿真软件モデルでCをアクション言語として使用するチャートの場合:[入力][出力][ローカル]、または[データ ストア メモリ]

  • MATLAB のスタンドアロン チャートでは、関数stepの呼び出しで指定されたデータの変化は現在のタイム ステップより前に発生するため、変化検出演算子でこのような変化を検出できます。たとえば、xがゼロと等しい場合、次のコマンドを使用してチャートchを実行すると式hasChangedTo(x,1)trueを返します。

    step(ch,'x',1);
    一方、同じタイム ステップでのステートまたは遷移アクションでの代入により発生したデータの変化を変化検出演算子で検出することはできません。代わりに、この演算子は次のタイム ステップの開始時における値の変化を検出します。

  • Simulink モデルのチャートで、[チャート起動ごとに出力を初期化]チャート オプションを有効にした場合は、出力をhasChanged演算子の引数として使用すると必ずfalseが返されます。詳細については、チャート起動ごとに出力を初期化を参照してください。

  • hasChangedToを使用するチャート内で行優先の配列レイアウトが有効になっている場合、コード生成でエラーが発生します。hasChangedToを使用するチャート内でコードを生成する前に、列優先の配列レイアウトを有効にします。生成コード内の行列の配列レイアウトを選択を参照してください。

バージョン履歴

R2007a で導入