IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

LabVIEW Discussion :

Optimisation de programmes


Sujet :

LabVIEW

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 61
    Points : 10
    Points
    10
    Par défaut Optimisation de programmes
    Bonjour,
    je commence par vous joindre mon vi en pièce jointe.
    Il s'agit d'un programme pour un banc d'endurance, on applique une pression que l'on définie en face avant avec un régulateur dans une gaine, sur laquelle on applique une compression à l'aide d'un vérin.
    Tout ceci cadencé par un cycle défini à l'aide des signaux arbitraire express ("Signal Vérin", "Signal Pression"). Et bien entendu ces cycles doivent se répéter N fois, donc boucle for.

    Je cherche à optimiser ce programme en y ajoutant une boucle while tout autour de celui-ci, cependant je cherche à mettre ma condition de fin de boucle while, je voulais que le programme s'arrete dès lors où les N cycles soient atteint, c'est à dire, dès que la boucle for est fini.
    Pour ce faire j'ai mis un indicateur au niveau du terminal d'itération, je compare cette valeur à celle entré dans le terminal N de décompte de cette boucle, (différence en l'indicateur et la commande est la majuscule sur le "C" de cycle) au niveau de la condition d'arret de la boucle while.

    Cependant en réalisant ceci, la méthode de calcule de labview me fait refaire N cycle, c'est à dire, si j'entre par exemple 2 cycles, il va m'en réaliser 4.
    Je ne vois pas trop comment faire, je suis assez débutant sur labview.
    C'est pourquoi je fait appel à vous.

    En attente d'une réponse,
    Cordialement Tedd' Chap's.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Avril 2010
    Messages : 210
    Points : 338
    Points
    338
    Par défaut
    Salut,

    Je pense que le problème viens du fait que lorsque tu sors de tes boucles FOR, tu as les terminaux "Réglage" et "Marche/Arret" dans une certaine configuration, ce qui fait que tu repars pour un tour d'essai/configuration.
    Si c'est bien ça :
    • Le plus simple serais de forcer tes terminaux à une configuration quand la condition de la boucle While est VRAI.

    • Le plus propre serais de faire une mini machine d'états avec un état attente.


    Losaque

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 61
    Points : 10
    Points
    10
    Par défaut
    Le problème vient du terminal de condition de la grosse boucle while, sur celle-ci j'entre le calcul suivant (Si le nombre d'itération de ma boucle for (la plus grosse) est égal au nombre inscrit dans le terminal N décompte alors arrêt de la boucle while), cependant le programme ne s'arrête pas à ce moment, mais réalise une dernière fois le sous-programme.

    Je sais pas si je suis très clair.

    J'ai crois qu'à la fin du cycle il va réanalyser cette condition (Nbr cycle=Nbr Cycle=> arrêt de la boucle while) il va donc envoyé 1 (arrêt de la boucle) mais il fini toute l'analyse c'est à dire tout le programme. Il me fait tout 2 fois.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 61
    Points : 10
    Points
    10
    Par défaut
    Merci pour votre aide,
    Cordialement Tedd' Chap's.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 61
    Points : 10
    Points
    10
    Par défaut
    Au départ j'avais mis sur la condition de boucle de la grosse boucle while, une constante faux, tout le programme était automatisé c'était sympa, je pouvais jouer avec mes boutons réglage et marche/arrêt, cependant quand je réalisais mon cycles, il ne s'arrêtais pas (normal je dois dire ) c'est pourquoi il fallait que je remplace cette constante faux, par une condition qui me dirait : "dès que le cycle est fini on stop tout".
    J'ai donc eu l'idée d'utiliser ma boucle for qui réalise mon N cycle pour faire stopper le programme.

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Avril 2010
    Messages : 210
    Points : 338
    Points
    338
    Par défaut
    Re,

    Ca y est, j'ai ouvert les yeux et j'ai enfin compris ...
    Le problème viens du fait que tu ne respectes pas le flux de donnée de LV à cause des variables locales. Dans ton cas, tu lis ta variable locale NbrCycles au mauvais moment (trop tôt), ce qui fait qu'elle n'est pas encore actualiser et donc contient la valeur précédente. Pour résoudre ce problème, tire un fil plutôt que d'utiliser des variables locales (Bouuuuhhh !!! ).

    Losaque

    P.S : Je te conseilles de faire des distinctions plus évidente qu'un "c" et un "C" pour ton programme final ... Merci d'avance pour ton hypothétique successeur.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 61
    Points : 10
    Points
    10
    Par défaut
    A oui d'accord très bien.
    Cependant si je tire mon fil en partant du terminal d'itération de ma boucle for, pour aller rejoindre le calcul "=" au niveau du terminal condition de la boucle while, je passe à travers 2 boucles conditions vrai/faux, la rouge et la verte, et donc je me retrouve avec des erreurs de diagramme au niveau des tunnels non raccordés.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 61
    Points : 10
    Points
    10
    Par défaut
    PS : j'ai effectué un changement sur leur nom , merci.

    Tedd' Chap's

  9. #9
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Avril 2010
    Messages : 210
    Points : 338
    Points
    338
    Par défaut
    Re,

    En sortant de ta boucle FOR, clic droit sur le tunnel => Désactiver l'indexation (si activée !! ça dépend de ta configuration de LV.), sinon tu vas te retrouver avec un tableau en sortie.
    En sortant de tes structures conditions, soit tu clic droit sur le tunnel => Utiliser la valeur par défaut si non cablé (valeur 0 de base, sauf si changement de la configuration de l'indicateur/commande).
    soit tu met une constante "0" (plus clair à mon goût, au moins je suis sur de ce qui sort).
    Le but étant de ne pouvoir sortir qu'après l’exécution des boucle FOR.

    Losaque

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 61
    Points : 10
    Points
    10
    Par défaut
    A oui, ok super !
    J'ai découvert récemment les variables locales alors j'en ai mis partout j'ai trouvé ça super classe, mais j'en ai effectivement oublié la logique LV au niveau des flux de données.

    Donc ça marche plutôt pas mal, en réalisant une procédure normal c'est à dire :
    - exécuter le programme, réglage puis marche, tout se passe bien on a le bon nombre de cycle c'est super.

    Cependant si on ne le laisse pas finir les cycles et qu'on l’arrête avec "Marche/Arrêt", et qu'ensuite on veut reprendre en appuyant sur Marche, là y'a un petit bug, j'ai donc mis 2 conditions de réinitialisation sur les 2 signaux arbitraire express, (puisque c'est eux qui gère 1 cycle).

    Ça marche !
    Cependant si je demande par exemple 3 cycles, j'attend qu'il en réalise 2 et à ce moment là si j'appuie sur Arrêt, le programme se coupe car la boucle for envoie 3 boucle de faite, comment je pourrai résoudre ce souci, as-tu une idée?

    Je ne sais pas si j'ai été très clair, redemande moi si tu n'as pas compris certain passage

    Encore une fois merci pour ton aide,
    Cordialement Tedd' Chap's.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 61
    Points : 10
    Points
    10
    Par défaut
    Je t'envoie en pièce jointe le nouveau VI avec les modifs.

    PS : Il a le même nom désolé.
    Fichiers attachés Fichiers attachés

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 61
    Points : 10
    Points
    10
    Par défaut
    Ok c'est bon j'ai réussi à obtenir se que je voulais, j'ai rajouté une boucle condition vrai/faux au niveau du terminal d'itération.
    Je t'ai envoyé en pièce jointe le nouveau VI.

    Maintenant j'aimerai pouvoir définir mes signaux arbitraire express "Signal Vérin" et "Signal Pression" en face-avant. Peut être avec une commande onglet où on pourrais rentrer dans le tableau de chaque signal les valeurs souhaité, et y voir le nombre de points.
    Quelque chose comme ça, sa serrai parfait
    Par contre je ne vois pas du tout comment je pourrai procéder.
    Aurais-tu une idée?

    Merci une fois de plus,
    Cordialement Tedd' Chap's.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 61
    Points : 10
    Points
    10
    Par défaut
    J'ai de nouveau oublié le VI.
    Je te le joins ici.
    Fichiers attachés Fichiers attachés

  14. #14
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Avril 2010
    Messages : 210
    Points : 338
    Points
    338
    Par défaut
    Pour ce genre de VI, tu peux faire un clic droit dessus et choisir "Ouvrir la face avant" => "Convertir". En faisant cela, tu auras accès aux données que tu lui envoi sans passer par l'interface de LV.

    Pour remplir le tableau de valeur, soit tu demande à l'opérateur de le rentrer à la main (qui a dit chiant ???), soit tu prépare des fichiers représentant des tableaux tout fait et tu les charge directement (en fonction du choix de l'opérateur (moins de liberté sur le signal à faire).

    A toi de voir,

    Losaque

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 61
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Alors j'avais déjà essayé de faire ça, cependant je me retrouve avec une nouvelle face-avant sur laquelle je n'ai rien à modifier. (pas de tableau de valeur, ni l'indicateur "nbr de point" et non plus charger un signal)
    Je t'ai joins un screen shot, de se que j'obtient.

    Un fois de plus, merci
    Cordialement Tedd' Chap's.
    Images attachées Images attachées  

  16. #16
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Avril 2010
    Messages : 210
    Points : 338
    Points
    338
    Par défaut
    Et bien avec ca, tu peux modifier les entrées sorties comme sur un sous VI classique : clic droit sur l’icône de ta face avant => Visualiser le connecteur
    Images attachées Images attachées  

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 61
    Points : 10
    Points
    10
    Par défaut
    Re,
    Ok d'accord, cependant je vous avouerai que je ne comprends pas bien le fonctionnement là.

    Se que je souhaite faire, c'est pouvoir changer les valeurs du tableau de données sur chaque signal en ayant l'aperçu, sur ma face-avant (la même face-avant que le programme)

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 61
    Points : 10
    Points
    10
    Par défaut
    On affichant la face avant, en le convertissant et en affichant les connecteurs, je ne vois pas comment changer les valeurs d'entrées du tableau signal, afin de créer différents nos cycles.
    Serais-tu me l'expliquer ?

    Cordialement Tedd' Chap's.

  19. #19
    Membre averti
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Avril 2010
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes

    Informations forums :
    Inscription : Avril 2010
    Messages : 210
    Points : 338
    Points
    338
    Par défaut
    Salut,

    Le but est de passer le tableau configurant le signal a partir de ton VI principal. Une fois que tu as affiché le connecteur du VI, tu peux choisir de mettre ton tableau en "entrée". Pour cela tu convertis le tableau ("data" de souvenir) en commande (clic droit sur le tableau => changer en commande), puis tu clique sur un connecteur libre de ton VI et ensuite sur le tableau en face avant : tu peux maintenant faire passer, du Vi principal au sous-VI, le tableau que tu souhaite.

    Pour la visualisation des valeurs de ton tableau, tu peux mettre un graphe qui affiche la courbe représentée par ces valeurs (lors d'une phase remplissage par exemple ...).

    J'espère n'avoir pas été trop flou.

    Losaque

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 61
    Points : 10
    Points
    10
    Par défaut
    Ok d'accord je commence à comprendre le système.
    Cependant dans le diagramme de mon signal, je remplace le tableau en commande, ça c'est ok.
    Je l'ajoute sur mes connecteurs pour l'avoir sur mon programme initial, ça c'est toujours bon. Ensuite je l'enregistre, et je le place dans mon programme initial.

    Ensuite au niveau de ma face-avant, je crée un tableau matrice réelle c'est ça?

    Pour le graph je dois mettre un graph au niveau de Data, c'est bien ça?

    Merci pour ton aide,
    Cordialement Tedd' Chap's.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Optimiser un programme VB
    Par Eausport dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 05/06/2009, 16h56
  2. [Macro] optimisation de programmes SAS
    Par bar_79 dans le forum Macro
    Réponses: 4
    Dernier message: 25/11/2008, 16h51
  3. Optimiser des programmes .net
    Par TSalm dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 06/03/2008, 13h19
  4. Optimiser un programme java
    Par piteon dans le forum Général Java
    Réponses: 27
    Dernier message: 05/08/2007, 21h01
  5. Réponses: 9
    Dernier message: 07/11/2006, 15h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo