le 06-27-2014 08:38 AM
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
le 06-27-2014 09:12 AM
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?
le 06-27-2014 09:49 AM
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
le 06-30-2014 02:51 AM
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.
le 06-30-2014 03:08 AM
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
le 06-30-2014 04:14 AM
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.
le 06-30-2014 04:30 AM
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.
le 06-30-2014 05:19 AM
Dans le premier cas mentionné, j'ai utilisé une VGF dans le VI ci-joint, cela est-il correct ?
Cdt