Discussions au sujet de NI LabVIEW

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

Architecture Machine à états

Bonjour,

 

Utilisant l'architecture d'une machine à états pour traiter mes données d'acquisition de Température, je rencontre un problème pour ne pas réexécuter tout mes états à chaque itération.

 

Dans mon cas, je souhaite que lorsque l'état "Palier" est vraie, les états "Palier" et "T_Réelle = T_C Palier_bas"ou "T_Réelle = T_C Palier_haut" ne se répète pas jusqu'à ce que le minuteur dans l'état "Stabilisation_étuve_Palier_bas" renvoie condition vraie.

 

Cdt

0 Compliments
Message 1 sur 8
5 103 Visites

Hello aznnath11,

Que veux-tu dire par "lorsque l'état "Palier" est vrai, les états "T_Réelle=T_C Palier_bas" ou "T_Réelle = T_C Palier_haut"  ne se répètent pas"?
Dans une machine à états simple, on ne peut atteindre qu'un état à la fois.

Par ailleurs, il n'est pas nécessaire de passer par tous les états, tu l'as bien compris puisque tu utilises correctement le Enum via le registre à décalage...

Pourrais-tu mieux formuler la question?

Bilsix.
0 Compliments
Message 2 sur 8
5 100 Visites

Bonjour Bilsix,

 

En fait, dans mon VI principal, j'envoie des données une à une via une file d'attente.

 

Puis mon logiciel réalise un test sur une condition (T_Réelle = T_Consigne ?) lorsque cette condition est remplie, je souhaite que mon logiciel ne réalise plus ce test à chaque itération jusqu'à ce que mon minuteur renvoie la condition vrai (c'est-à-dire que le temps est écoulé).

 

Cdt

 

0 Compliments
Message 3 sur 8
5 093 Visites

D'accord, je crois avoir compris... (Mais je ne suis pas sur ^^)

La première idée qui me vient à l'esprit est de passer par une variable globale booléenne "T_Réelle=T_Consigne" pour pointer vers différents états dans la machine à états en fonction de sa valeur.
Lorsque T_Réelle=T_Consigne, la variable passera à True pour shunter les états qui réalisent ce test. Une fois le "minuteur" écoulé, il suffira de faire passer la variable globale à False pour repasser par l'état qui réalise ce test.

Ca semble rudimentaire, mais fonctionnel.

Bilsix.
Tout télécharger
Message 4 sur 8
5 066 Visites

Oui vous avez très bien compris ce que je souhaite faire !

 

Tout d'abord, merci pour le temps que vous m'avez accordé. 

 

Je pense que cela pourrait fonctionner, pourrait-on également utiliser une VGF ?

 

Cdt

 

 

 

0 Compliments
Message 5 sur 8
5 055 Visites

En fait il y a une condition en plus, il peut y avoir soit un "palier haut" ou un "palier bas" comme l'illustre le diagramme ci-joint.. 

 

Je souhaiterai réaliser la même chose mais avec cette condition en plus.

0 Compliments
Message 6 sur 8
5 035 Visites

Ok, donc en réalité, la condition pour sauter certains états est que "T_Réelle soit dans l'intervalle [T_Consigne - x ; T_Consigne +x]"...
Ca change effectivement un peu de la condition "T_Réelle=T_Consigne".

Du coup l'utilisation de 2 VGF peut faire l'affaire:

- La première indique si T_Réelle > T_Consigne_Haute

- La seconde indique si T_Réelle < T_Consigne_Basse

La VGF est effectivement une alternative bien plus intéressante que les variables globales par ailleurs.

Bilsix.
Message 7 sur 8
5 028 Visites

Dans le premier cas mentionné, j'ai utilisé une VGF dans le VI ci-joint, cela est-il correct ?

 

Cdt

0 Compliments
Message 8 sur 8
5 015 Visites