Contenu principal

hasChangedTo

Détecter les changements dans les données d’une valeur spécifiée dans un diagramme Stateflow

Description

tf = hasChangedTo(data,value) renvoie 1 (true) si la valeur de data n’est pas égale à value au début du pas de temps précédent et est égale à value au début du pas de temps actuel. Sinon, l’opérateur renvoie 0 (false).

exemple

Exemples

développer tout

Effectue une transition hors de l’état si un élément de M a changé de valeur depuis le dernier pas de temps ou événement d’entrée et si la valeur actuelle de la matrice M est égale à matrixValue.

[hasChangedTo(M,matrixValue)]

Stateflow chart that uses the hasChangedTo operator in a transition.

Effectue une transition hors de l’état si l’élément de la ligne 1 et colonne 3 de la matrice M a changé et est passé à la valeur 7 depuis le dernier pas de temps ou événement d’entrée.

Dans les diagrammes utilisant MATLAB® comme langage d’action, utilisez :

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

Stateflow chart that uses the hasChangedTo operator in a transition.

Dans les diagrammes utilisant le C comme langage d’action, utilisez :

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

Stateflow chart that uses the hasChangedTo operator in a transition.

Effectue une transition hors de l’état si un champ de la structure struct a changé de valeur depuis le dernier pas de temps ou événement d’entrée et si la valeur actuelle de struct est égale à structValue.

[hasChangedTo(struct,structValue)]

Stateflow chart that uses the hasChangedTo operator in a transition.

Effectue une transition hors de l’état si le champ struct.field a changé et est passé à la valeur 5 depuis le dernier pas de temps ou événement d’entrée.

[hasChangedTo(struct.field,5)]

Stateflow chart that uses the hasChangedTo operator in a transition.

Arguments d'entrée

développer tout

Données Stateflow®, spécifiées comme :

  • Scalaires

  • Matrice ou un élément d’une matrice

  • Structure ou un champ dans une structure

  • Combinaison valide de champs de structure ou d’éléments de matrice

Si data est une matrice, l’opérateur renvoie true quand il détecte un changement dans l’un des éléments de data. Vous pouvez également indexer les éléments d’une matrice avec des nombres ou des expressions correspondant à un entier. Consultez Opérations pour les vecteurs et matrices dans Stateflow.

Si data est une structure, l’opérateur renvoie true quand il détecte un changement dans l’un des champs de data. Vous pouvez également indexer les champs dans une structure en utilisant la notation par points. Consultez Index and Assign Values to Stateflow Structures.

L’argument data ne peut pas être une expression non triviale ou une variable de code personnalisé.

Les diagrammes autonomes dans MATLAB ne supportent pas la détection de changements dans un élément de la matrice ou un champ dans une structure.

Valeur des données au pas de temps actuel, spécifié comme étant du même type de données que data. value doit être une expression qui résout en une valeur comparable à data :

  • Si data est un scalaire, alors value doit se résoudre en scalaire.

  • Si data est une matrice, alors value doit se résoudre en une matrice de mêmes dimensions que data.

    Dans un diagramme utilisant le C comme langage d’action, value peut également se résoudre en valeur scalaire. Ce diagramme utilise l’expansion scalaire pour comparer data à une matrice dont les éléments sont tous égaux à la valeur spécifiée par value. Consultez Attribuer des valeurs à tous les éléments d’une matrice.

  • Si data est une structure, alors value doit se résoudre en structure dont la spécification de champs correspond exactement à data.

Limitations

  • Ne peut pas être utilisé dans un tableau de vérité Stateflow.

Conseils

  • Si plusieurs événements d’entrée se produisent dans le même pas de temps, l’opérateur hasChangedTo peut détecter des changements dans la valeur des données entre événements d’entrée.

  • Si le diagramme écrit sur l’objet de données, mais ne change pas la valeur des données, l’opérateur hasChangedTo renvoie false.

  • Le type de diagramme Stateflow détermine l’étendue des données supportées par les opérateurs de détection de changements :

    • Diagrammes Stateflow autonomes dans MATLAB : Local uniquement

    • Dans les modèles Simulink®, diagrammes utilisant MATLAB comme langage d’action : Input uniquement

    • Dans les modèles Simulink, diagrammes utilisant le C comme langage d’action : Input, Output, Local ou Data Store Memory

  • Dans un diagramme autonome dans MATLAB, un opérateur de détection de changements peut détecter des changements dans des données spécifiées dans un appel à la fonction step parce que ces changements se produisent avant le début du pas de temps actuel. Par exemple, si x est égal à zéro, l’expression hasChangedTo(x,1) renvoie true lorsque vous exécutez le diagramme ch avec la commande :

    step(ch,x=1);
    En revanche, un opérateur de détection de changements ne peut pas détecter de changements dans les données causés par les affectations dans les actions d’état ou de transition dans le même pas de temps. L’opérateur détecte à la place le changement de valeur au début du prochain pas de temps.

  • Dans un diagramme dans un modèle Simulink, si vous activez l’option de diagramme Initialize Outputs Every Time Chart Wakes Up, utiliser une sortie comme argument de l’opérateur hasChanged renvoie toujours false. Pour plus d’informations, veuillez consulter Initialize outputs every time chart wakes up.

  • Quand la disposition de tableau Row-Major est activée dans les diagrammes utilisant hasChangedTo, la génération de code produit une erreur. Avant de générer du code dans les diagrammes utilisant hasChangedTo, activez la disposition de tableau Column-major. Consultez Select Array Layout for Matrices in Generated Code.

Historique des versions

Introduit dans R2007a