Contenu principal

La traduction de cette page n'est pas à jour. Cliquez ici pour voir la dernière version en anglais.

hasChanged

Détecter un changement depuis le dernier pas de temps dans un diagramme Stateflow

Description

tf = hasChanged(data) renvoie 1 (true) si la valeur de data au début du pas de temps actuel est différente de la valeur de data au début du dernier pas de temps où le diagramme s’est activé. Sinon, l’opérateur renvoie 0 (false).

exemple

Exemples

développer tout

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

[hasChanged(M)]

Stateflow chart that uses the hasChanged 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é de valeur depuis le dernier pas de temps ou événement d’entrée.

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

[hasChanged(M(1,3))]

Stateflow chart that uses the hasChanged operator in a transition.

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

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

Stateflow chart that uses the hasChanged 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.

[hasChanged(struct)]

Stateflow chart that uses the hasChanged operator in a transition.

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

[hasChanged(struct.field)]

Stateflow chart that uses the hasChanged 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.

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 hasChanged 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 hasChanged 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 hasChanged(x) 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 hasChanged, la génération de code produit une erreur. Avant de générer du code dans les diagrammes utilisant hasChanged, activez la disposition de tableau Column-major. Consultez Select Array Layout for Matrices in Generated Code.

Historique des versions

Introduit dans R2007a