Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

hasChanged

Stateflow チャートで最後のタイム ステップ以降のデータの変化を検出

説明

tf = hasChanged(data) は、現在のタイム ステップの開始時における data の値が、チャートが起動した最後のタイム ステップの開始時における data の値と異なる場合、1 (true) を返します。それ以外の場合、演算子は 0 (false) を返します。

すべて展開する

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

[hasChanged(M)]

Stateflow chart that uses the hasChanged operator in a transition.

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

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

[hasChanged(M(1,3))]

Stateflow chart that uses the hasChanged operator in a transition.

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

[hasChanged(M[0][2])]

Stateflow chart that uses the hasChanged operator in a transition.

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

[hasChanged(struct)]

Stateflow chart that uses the hasChanged operator in a transition.

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

[hasChanged(struct.field)]

Stateflow chart that uses the hasChanged operator in a transition.

入力引数

すべて展開する

Stateflow® データ。次のいずれかとして指定します。

  • スカラー

  • 行列または行列の要素

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

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

data が行列の場合、演算子は data のいずれかの要素で変化を検出すると true を返します。数字、または整数になる式を使用して、行列の要素にインデックスを付けることもできます。Stateflow でのベクトルおよび行列の演算を参照してください。

data が構造体の場合、演算子は data のいずれかのフィールドで変化を検出すると true を返します。ドット表記を使用して、構造体のフィールドにインデックスを付けることもできます。Stateflow 構造体へのインデックス付けと値の割り当てを参照してください。

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

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

制限

  • Stateflow の真理値表の内部では使用できません。

ヒント

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

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

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

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

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

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

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

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

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

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

バージョン履歴

R2007a で導入