Machine à état

bonjour,
s'il vous plait je souhaite avoir une idée plus claire sur le principe d'une machine à état donc ma question est la suivante:
le passage d'un état à l'autre se fait automatquement ou bien avec un évènemet utilisateur? sachant que j'ai une structure condition avec 3 état (énum) et  j'ai insérer la structure condtion dans une boucle while.
merci pour vos réponses 

Duplicate post.

Similar Messages

  • Machine à états et noeuds de propriété

    Bonjour,
    je suis en train de réaliser un programme qui permet de "piloter" un moteur.
    Il s'articule de la manière suivante:
    - une boucle qui gère une machine à état et qui traite, entre autre, l'envoi d'une commande de pwm qui imposera la vitesse de rotation du moteur.
    - une seconde boucle qui permet l'acquisition de données destinées à la gestion des erreurs
    - une troisième boucle qui gère les différentes phases de pilotage du moteur.
    Tout fonctionne très bien à une chose près. C'est le changement de valeur du bouton ON qui  détermine l'envoi ou l'arrêt de l'envoi du pwm (boucle 1). Cependant, dans la boucle 3, lorsqu'une erreur est détectée, le moteur doit s'éteindre, et c'est ce qui se produit. MAIS, malgré le fait que lors de la dectection d'une erreur, j'impose par noeud de propriété, au bouton ON de reprendre la valeur faux, ça n'a pas d'impact dans ma machine à état et la commande du pwm ne repasse pas à zéro comme je le souhaiterais.
    Comment faire pour imposer que le pwm repasse à 0 quand une erreur est détectée?
    Si quelqu'un a une solution, ça m'aiderait beaucoup.
    Je vous mets en pièce jointe mon programme, en espérant qu'il soit assez lisible et compréhensible.
    merci d'avance
    Anne
    Résolu !
    Accéder à la solution.
    Pièces jointes :
    Dossier WESTTsev 11 02 2011.zip ‏776 KB

    Bonjour,
    Plusieurs possibilités:
    1. utiliser votre sous VI de gestion du moteur dans la condition erreur pour l'arreter
    2. le noeud de proriété valeur ne sera pas géré comme un événement utilisateur dans votre structure évenement ne le gère pas, dans ce cas utilisez le noeud de propriété Valeur (signalisation) et cela revient à créer un événement utilisateur donc géré par la structure événment.
    Cordialement
    Greg S.
    CNRS
    LV 7.1 8.2 8.6 2009 2011 2012 2013
    LPMC - CNRS
    N'oubliez pas de complimenter cela fait toujours plaisir.

  • Utilisation boucle for avec la machine état

    Bonjour,
    Je viens vous demander quelques conseils d'utilisation du boucle for avec la machine état. Voici le vi ci-joint. Je souhaiterai faire 5 fois la machine état mais à chaque étape de la machine état j'incrémente un tour de boucle et cela ne fait pas 5 fois la machine état. Avez vous une idée pour réaliser cela? Merci d'avance.    
    Pièces jointes :
    essais-boucle-for.vi ‏12 KB

    Salut,
    J'ai testé ton VI pour essayer de comprendre ce que tu cherche à obtenir. En partant de ta constante start en entrée de boucle, tu obtiens la valeur 4 pour "i" et 0 pour "j" ce qui, au vu de ton diagramme, est normal.
    En fait, le premier tour d'une boucle FOR est 0, puis s'incrémente. Ainsi, si tu lui demande de faire 5 tour de boucle, le premier tour sera le n°0, puis 1, etc... jusqu'à 4.
    Je ne sais pas si j'ai été très clair et si cela répond à ta question mais au vu de ce que tu décris je pense que c'est cela.
    Autrement n'hesite pas à me donner plus de détail =)
    @ +

  • 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
    Pièces jointes :
    Alarme_Alerte_bis.vi ‏28 KB

    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.
    Pièces jointes :
    variable_glob.jpg ‏17 KB
    shunt.jpg ‏42 KB

  • 2 Structure événement dans machine à état

    Bonjour ,
    J'utilise 2 structures événements dans une structure d'état mais je n'arrive pas à affecter 2 actions différente (par 2 fois) avec le même booléen .
    Les action arrivent simultanément sans que j'ai pu faire les deux actions l'une après l'autre.
    J'ai mis en fichier attaché ,un résumé de mon application
    Comment faire , une idée ?
    PS je veux garder deux structures évenements car j'ai plusieurs pages
    merci
    Michel
    Pièces jointes :
    Two_event.vi ‏13 KB

    Bonsoir,
    Regarde si s'est ce que tu veux faire.
    Bon courage.
    Philippe B.
    Certified Associate Developer / Dépt Moyens d'essais
    www.ingenia-system.com
    Pièces jointes :
    Two_event.vi ‏12 KB

  • Detection evennement port serie

    Bonjour à tous,
    Je cherche à réaliser une série de test permettant de valider la communication RS avec des instruments.
    La machine état est lancée par un evennement "software" (reception de caractères sur le port COM - valeur numérique).
    Concernant la machine à état lancé par cet evennement, je pensais utiliser une structure producteur / consommateur mais je ne sais pas du tout comment généré le départ des tests.
    J'utilise LV2010...
    Quelqu'un peut-il m'aider?
    Résolu !
    Accéder à la solution.

    Bonjour,
    J'ai bien modifié mon programme en suivant vos conseils, cependant, je rencontre toujours les mêmes problèmes:
    L'exécution du programme se bloque après la fonction Visa Close et la 2ème séquence ne s'exécute pas.
    J'ai placé ma structure event au même niveau que la boucle while principale car autrement, le programme ne pourrait être quitté que s'il y a un événement sur le port série.
    Une autre possibilité serait de placer la structure event dans la boucle while mais le problème est que je ne pourrais déclencher qu'une seule fois l'événement sur le port série.
    J'ai l'impression qu'il y a un conflit entre la fonction événement sur le bouton quitter et la fonction Visa Wait on Event.
    Pièces jointes :
    Top_Main.vi ‏135 KB

  • Programme à étapes

    Bonjour à tous,
    Je travaille depuis quelques mois sur Labview 8.2. J'ai écrit un programme qui gère différents instruments (générateur de courant DC, générateur micro-ondes, débitmètres...) J'ai un raque NI Compact DAQ, des cartes d'acquisitions et des relais.
    Le programme actuel est séquencé en 3 parties. 1ere partie : ouverture des voies, 2eme partie : actions (lecture; écriture...) avec une boucle While, 3eme partie : arrêt des taches.
    Mon programme fonctionne correctement mais n'est pas terminé.
    Je voudrais à présent créer une fonction qui me permettrait d'exécuter mon programme plusieurs fois en intégrant une cellule temps.
    Je donne en exemple mon programme, j'ai plusieurs paramètres configurables (des consignes et des interrupteurs pour activer les consignes).
    Je clique sur une icône 'Étape 1" (que je n'ai pas encore) et je règle les paramètres dans les cellules de consigne. Je souhaiterai que ma première étape soit l'allumage de mes débitmètres et l'allumage du chauffage pendant 10 minutes (fonction temps qui n'est pas encore intégrée) . 
    Je fais de même pour l'étape 2, je clique sur "Etape 2" et configure le temps de l'étape, les débitmètres, le chauffage mais j'ajoute une consigne pour les micro-ondes.
    Je clique sur étape 3 et ainsi de suite. Je souhaite au total avoir 10 étapes.
    Donc après la configuration, je reviens sur "étape 1" et je clique sur "start" (que je n'ai pas encore) et là, le programme se lance, un compteur se met en route (que je n'ai pas également). Seuls les instruments que j'ai configuré démarrent. Au bout de 10 minutes, le programme passe à l'étape 2 etc...
    Quel(s) outil(s) me permettrait de faire se genre de programmation? Est ce qu'il serait possible d'avoir un exemple d'un programme de ce type? Je peux également poster une version simplifiée du programme pour vous donner une idée de ce que j'ai déjà fait.
    Je vous remercie d'avance pour votre aide

    Bonjour;
    Je travaille toujours sur mon projet et je ne trouve pas une machine à états qui correspond à ce que j'ai besoin.
    Ma version de Labview me limite car il y a des exemples que je ne peux pas lire (version supérieure à la mienne)
    J'ai joins un document Word de mon programme avec les cases qui me manquent, un start et stop du programme selectionné, le temps de chaque étape à définir et le nombre d'étapes également à définir. Toutes les autres cellules sont des paramètres que je souhaite modifier pour chaque étape. Exemple, poule l'étape 1 je veux un débit total de gaz égale à 100 sccm et l'étape 2 uniquement 50 sccm.
    Est ce que l'on peut me proposer un exemple simple svp?
    Merci d'avance pour votre aide
    Pièces jointes :
    Programme à étape.doc ‏145 KB

  • Plantage labview 8.2.1

    bonjour
    suite a l'achat d'un nouvel ordi, j'ai installé Labview 8.2.1 sur cet ordi. Ensuite, je peux faire tourner un programme, qui marchait tres bien sur l'ancien PC. Néanmoins, sur le nouveau, lorsque je le fais tourner, il y a bug: l'écran reste figé, au bout d'environ 20 minutes, impossible de bouger la souris. Le seul moyen est de le forcer a  s'éteindre pour de nouveau pour avoir la main. Ce programme labview marche suivant le principe de machine état.
    L'ordi est neuf, et en même temps que labview, j'ai 2 autres logiciels qui tournent, un pour le controle d'un flux de gaz, et un pour le contrôle d'une caméra
    j'espere etre clair;
    je ne vois pas trop d'un vient le problème sachant que je n'avais pas de bug sur l'ancien pc
    romain
    Résolu !
    Accéder à la solution.

    bonjour
    le programme utilisé provient du forum http://forums.ni.com/t5/Discussions-de-produit-de-NI/contr%C3%B4le-d-un-laser-avec-une-rampe/td-p/13... ou ci joint
    concernat le systme d'exploitation:
    windows XP pro
    bien cordialement
    Romain
    Pièces jointes :
    Dossier machine.zip ‏147 KB

  • Problème architecture commande onglets

    Bonjour à tous ,
    Je réalise un programme permettant d'effectuer des scénarii de tests avec 3 onglets :
    - création/modification scenario
    - scénario en cours
    - campagne de tests qui consiste à boucler des scénarii
    Pour cela j'utilise une commande onglet en sélecteur de condition.
    Dans chaque case, j'ai placé mes sous VIs associés.
    Problème : Le VI ne s'exécute pas et ne s'arrête pas quand je navigue sur mes différents onglets.
    Cdt
    Pièces jointes :
    Mode_Auto_Final.vi ‏60 KB

    aznnath11 a écrit :
    Lorsque l'utilisateur navigue un onglet, je souhaite que cela déclenche le VI contenu dans cet onglet
    Ou sinon mettre un bouton M/A pour chaque VI par exemple ?
    Ah, si tu veux faire ça, le plus simple est de passer ton onglet en contrôle (au lieu de indicateur) et de faire une machine à états ; chaque fois que la valeur de l'onglet change, tu va dans un état différent dans lequel tu exécute le code que tu souhaites.
    When my feet touch the ground each morning the devil thinks "bloody hell... He's up again!"

  • Structure à évènement: problème de coordination temporelle

    Bonjour,
    Ce VI nécessite l'intervention de l'utilisateur pour fonctionner. L'utilisateur a le choix de cliquer sur 2 ronds de coté qui lui donne accès après un temps variable (et suivant un clic lorsque le délai est écoulé) à 1 point.
    Il peut répondre sur un rond et changer pour l'autre mais pour ceci je souhaite qu'il réponde au préalable un certain nombre de fois sur un autre rond qui est placé lui au milieu. Prenons un exemple: il clique 1 fois à droite, le bouton de gauche doit disparaitre. Si il veut cliquer à gauche, il doit cliquer n fois sur le bouton de centre et ensuite le bouton gauche apparait et le droit disparait.
    Là mon vi ne fonctionne pas comme ça. Déjà je n'arrive pas à programmer l'exigence d'appuyer plusieurs fois sur le bouton de centre. Ensuite, je dois appuyer sur le bouton centre + sur le bouton droit pour faire disparaitre ce bouton et apparaitre le bouton gauche.
    Merci d'avance pour votre aide et en espérant que mes explications soient claires. 
    Pièces jointes :
    Choose_Left_Or_Right COD essai.vi ‏27 KB

    Tape machine à état dans l'aide LabVIEW, et tu as pas mal d'explication sur le sujet.
    Concrètement, tu définis un modèle dans lequel tu créés des états et des transitions entre les états. Le mieux est de commencer par faire un schéma avec tous tes états et leurs propriété, ensuite tu définis les transitions (les conditions pour passer d'un état à l'autre), et ensuite tu passes au codage.
    Cordialement
    Benoît C.
    Certified LabVIEW Associate Developer

  • Transférer un tableau dans une structure évenement

    bonjour,
    Je souhaite commander l'acquistion et l'enregistrement des mesures par eux booléens.
    L'acquisition commence via une structure évenementielle lorsque qu'on change l'état du booléen "acquisition", les données sont mises dans un tableau.
    J'aimerais commander l"enregitrement via un autre évenement.
    Seulement, lorsque je clique sur un des booléens, le deuxiéme marche bien mais ne commande plsur rien
    et
    Je n'arrive pas a récupérer mon tableaude valeurs (j'ai essayé avec des fils et des variables locales.)
    Merci
    Pièces jointes :
    Capture.PNG ‏29 KB
    Capture1.PNG ‏20 KB

    Bonjour,
    Lorsque l'on souhaite transférer des données entre plusieurs itération d'une boucle le mieux est d'utiliser un registre à décalage.
    Pour le code, je pense que tu devrais jeter un coup d'oeil aux machines à états pour revoir l'architecture de ton soft
    Ce n'est pas génial de mettre une boucle dans un évênement, qui ne doit contenir que du code 'rapide' à exécuter, comme un changement d'état de ta machine à état.
    Un dernier points, il ne faut pas mettre de boucle comme ici sans aucune temporisation, elle va consommer tout ton processeur pour tourner à fond.
    Cordialement,
    Simon D.
    CLA | Certified LabVIEW Architect
    CTA | Certified TestStand Architect

  • Moyenne

    Bonjour,
    Je désire utiliser un boitier cDAQ-9178 équipé de 4 modules NI-9213 pour réaliser des acquisitions de température à partir de thermocouple K. En tout, il y aura 64 thermocouples de branchés au boitier.
    Le VI que j'ai essayé de coder consiste à:
    - acquérir les données des 64 voies via l'assistant DAQ-MX à raison d'un point par seconde et par voie (1Hz/S). Le Vi de test se contente pour le moment de 16 voies.
    - permettre à l'utilisateur de visualiser en temps réel les valeurs de température sur un graphe déroulant
    - réaliser une acquisition moyennée pour un temps spécifié par l'utilisateur (120s idéalement mais l'assistant DAQ crashe à l'issue de la boucle d'acquisition pour ce temps). Je réalise mes tests pour des temps de l'ordre de quelques secondes ( 5 à 10 secondes)
    - "L'algo" pour l'acquisition moyennée est le suivant
     Si Rec vaut TRUE, on rentre dans la structure conditionnelle d'enregistrement. Celle-ci comporte une séquence déroulée permettant
    1. d'initialiser un tableau 2D me permettant de stocker au fil de l'acquisition les 16 voies acquises par l'assistant
    2. une boucle While permettant d'ajouter au tableau 2D les valeurs lues par l'assistant. Cette boucle continue tant que le temps d'enregistrement spécifié par l'utilisateur n'est pas atteint.
    3. Suppression de la première ligne de 0 du tableau 2D résultant de son initialisation et initialisation d'un tableau 1D, tableau_moyenne
    4. calcul de la moyenne de chaque colonne du tableau 2D (i.e. chaque voie d'acquisition) et stockage du résultat dans tableau_moyenne
    5. Suppression du premier item 0 du tableau_moyenne résultant de son initialisation
    6. bascule de REC à FALSE
    Mon problème vient du fait que les valeurs acquises ne sont pas transmises dans ma boucle d'enregistrement, la matrice des données acquises ne comporte que la même valeur pour chaque ligne de temps acquise.
    autre problème annexe: le graphe ne se rafraichit pas au cours de l'enregistrement (mais je pense que c'est normal au vu de la structure du programme)
    Cordialement
    Pièces jointes :
    AcquitTk_test.vi ‏148 KB

    Bonjour,
    Je n'ai pas réussi à utiliser une machine à états mais j'ai réussi à faire ce que je voulais de cette manière (Cf VI joint).
    Afin de fignoler l'interface, j'aurais souhaité que l'utilisateur puisse activer/désactiver l'affichage de certaines voies sur le graphe déroulant.
    Je n'ai pas trouvé de manière simple de le faire (propriétés du graphe, choix des tracés à afficher?)
    dois-je convertir mes données dynamiques issues de l'Assistant DAQMx en tableau 1D, l'indexer et construire autant de checkbox que de voies d'acquisition permettant, en fonction de leur état coché/décoché, l'affichage ou non dans le graphe déroulant?
    Pièces jointes :
    AcquitTk_test2.vi ‏358 KB

  • Problème d'enregistrement avec clavier midi

    1 Quand j'enregistre un instrument virtuel avec un clavier midi dans la première mesure la notation rythmique est systématiquement  fausse alors que dans les autres mesures elle est en place.
    2 Beaucoup plus embêtant  ; à la lecture la première note écrite n'est pas audible alors que toutes les autres le sont....
    Serait ce un bugg ?

    Geogeo4207 a écrit :
    Sur mon programme je dois lire une vidéo et un son en même temps (synchronisation)
    Mais j'aimerais aussi créer une barre avec un pointeur pour voir défiler le temps (comme dans VLC) et ensuite pouvoir bouger ce pointeur afin de lancer ma video à n'importe quelle moment, toujours avec le son associé.
    C'est faisable, mais ça ne sera surement pas simple. Un bon sujet de stage
    Il faut que tu ailles un peu plus loin que la "simple" machine à états. Cherche un peu du côté des architectures Producer/Consumer associées à une structure événements.
    Geogeo4207 a écrit :
    J'ai un collègue de classe qui , il me semble, est actuellement en stage chez Saphir. Peut-être l'avez vous vu...
    Il me semble qu'il arrive la semaine prochaine.
    Après vérification c'est un stagiaire GEII de Grenoble qui arrive la semaine prochaine et à ma connaissance il n'y à pas d'autre stagiaire à SAPHIR en ce moment. Ce doit-être un autre SAPHIR.
    Cordialement, 
    Olivier JOURDAN
    SAPHIR | Certified LabVIEW Architect | Topaze on NI Community | LabVIEW add-ons on NI Community | Follow me on Twitter

  • Comment utiliser le même graph

    Bonjour,
    Voici mon problème: j'ai une structure condition avec plusieurs états. Dans chaque état, une boucle while tourne et permet d'afficher en temps réel un signal d'acquisition.
    Sur la face avant j'ai donc N graphiques correspondant chacun au signal d'acquisition correspondant à mes N conditions. Bien entendu une seule condition est active à chaque fois et les autres graphiques n'affichent donc rien.
    Est-il possible d'utiliser un unique graphique qui serait une espèce de "graphique global" à la manière des variables globales ?
    Merci d'avance.
    Résolu !
    Accéder à la solution.

    Merci pour cette réponse rapide.
    Je me trompe peut-être mais je ne pense pas que ceci puisse résoudre mon problème.
    Le problème est que les graphs affichent en temps réel (ils sont dans la boucle while), le cluster de tableau fonctionnerait si les graph étaient à l'extérieur du while non ?
    Pour résumer, j'ai une machine à état à l'intérieur de laquelle il y a une boucle while pour chaque état, et à l'intérieur de chaque boucle while, un graph.
    En gros je change juste la source de données affichées pour chaque état et j'aurais juste voulu avoir 1 seul graph au lieu de X graphs (X états).

  • VISA, envoi automatique de commandes à la suite...

    Bonjour à tous,
    Je souhaite envoyer des commandes en VISA les unes à la suite des autres avec une attente de réponse ( quasi immédiate ) d'un nombre d'octets indéfini. Auriez vous une idée de la façon de faire ? 
    Ma façon de faire ne fais passer la seconde commande qu'une fois sur 100.... 
    Merci de votre aide.

    Bonjour,
    et merci d'avoir posté sur nos forums.
    Quel moyen de programmation utilisez-vous pour automatiser vos écritures/lectures ?
    Est-ce que vos commandes envoyées sont identiques ? Si c'est le cas, vous pouvez simplement cadencer vos fonctions VISA Write et VISA Write dans une boucle while.
    Dans le cas contraire, vous pouvez gérer l'envoi de vos diverses commandes par une séquence, ou par une machine à état. Je vous renvoie ici pour cette dernière méthode, supposant que vous développez sous LabVIEW.
    Par ailleurs, concernant le nombre d'octets à lire, il peut être indéfini en détectant par exemple la fin de la lecture sur un caractère de terminaison (\r ou \n).
    Cordialement,
    Eric M. - Application Engineering Specialist
    Certified LabVIEW Architect
    Certified LabWindows™/CVI Developer

Maybe you are looking for

  • How to find origin of scrolled UITableView

    Hi, I'm using self.view.frame within my tableViewController to get the origin of its UITableView If I scroll the table up (i.e. second row is now shown on top of the screen), self.view.frame continues to return an origin of {0,0} instead of {0, -80}

  • List menu in oracle forms

    hi every body,, i face problem in dropdown list, i want to create employee list take date from database(daynamic) and another list it inclouded department number, when i change any list it will effct to seconde list. plz, help me if also you can prov

  • Sony's Cineframe vs progressive

    a) Given footage in 1080i and *cineframe on * ( and I think this is relevant for FX1, FX7, A1 ++) - what would the correct settings be for a native project in ppro? Progressive or interlaced ? b) assuming same footage - what would the correct setting

  • S_ALR_87012357 - User Fields

    Hi, I have a query wrt the transaction S_ALR_87012357 In Output Lists tab, if we select configure layout, we can select additional fields as per requirement. However, there are certain additional fields like User field 1, 2, 3.. etc.. which I guess,

  • VCAP or VCIX

    Hi Friends I'm currently holding VCP-NV & VCP5-DCV certifications ( Valid until march 2017), I am planning to progress further on both the tracks, appreciate your helps to plan my journey I was about to take certs in this order VCAP5-DCA, VCAP5-DCD t