Problème arrêt boucle esclave

Bonjour,
Je rencontre un problème pour l'arrêt de ma boucle esclave. Pourtant, j'ai 3 boucles while avec un booléen et des varaibles locales pour arrêter ces boucles.
Néanmoins, dans une boucle esclave, j'ai une tempo, et celle-ci doit être terminée pour que mon programme s'arrête.
Or, je cherche à arrêter mon programme instantanément ou presque ( quelques secondes au maximum ).
Ci-joint une image pour comprendre mon problème et mon VI.
Résolu !
Accéder à la solution.
Pièces jointes :
Mode _Auto_Cluster.vi ‏151 KB
Erreur_arrêt.JPG ‏142 KB

Je comprends mieux votre explication comme cela, oui cela pourrait fonctionner mais dans mon VI, ce n'est pas un temps d'attente de 60 secondes.
Le 60 sert à convertir en min, le temps d'attente correspond donc au temps du palier (temporisation) multiplié par le 60.
J'ai testé avec une structure event mais le programme se bloque.
Donc, soit il faudrait un nouveau moyen pour la temporisation ou un moyen d'arrêter mon case même si l'attente est en cours d'execution.
Cependant, je n'ai pas trop d'idée là-dessus..
Pièces jointes :
Erreur_arrêt.JPG ‏142 KB

Similar Messages

  • Arrêter boucle while pour appeler un VI

    Bonjour,
    Je rencontre un problème pour l'appel d'un VI. En effet j'ai deux boucles while, une servant à configurer mon port COM  (plusieurs configurations sont disponibles via un enum) et l'autre servant à appeler le VI souhaité.
    Comment faire pour pouvoir appeler le VI ?
    Ci-joint une image de mon diagramme, et sinon mon VI est "Interface_HM"
    Cdt
    Résolu !
    Accéder à la solution.
    Pièces jointes :
    PASTEC 1.0.zip ‏524 KB
    Interface_HM.JPG ‏56 KB

    Bonjour aznnath11,
    D’après l’image que vous m’avez envoyez, je pense qu’il y a un souci au niveau de la programmation.
    La deuxième boucle ne s’exécutera seulement lorsque la première aura finie de s’exécutée.
    En effet le principe de flux de donnée di qu’Un nœud du diagramme s'exécute lorsqu'il a reçu toutes ses entrées de données. Ors la condition d’arrêt de la première boucle ne passe jamais à vrai et donc ne s’arrêtera jamais.
    Pour que deux boucles s’exécutent en parallèles et communiquent entre elles, il faut utiliser une communication Asynchrone.
    Je vous propose donc de consulter cette vidéo de 20 minutes et notamment les parties sur les boucles maître/esclave et  producteur/consommateur
    http://www.ni.com/webcast/1102/fr/
    Je vous souhaite une bonne journée,
    Cordialement,
    Sabri JATLAOUI - Certified LabVIEW Developer

  • Problème arrêt programme

     Je me permets de vous contacter pour un problème de programme sur lequel je bute depuis une semaine. Vous trouverez en fichier le programme sous labView 2009.
    Pour résumé, ce programme fait l'acquisition de trois tensions analogiques et une entrée numérique DIO0 via un boitier USB6009 et la programmation d'une tension analogique sur la voie AO0.
    J'ai une première boucle de lecture des valeurs qui s'opère toute les 500ms
    J'ai une structure évenement "Start Process" qui me permet de tracer un graphique X,Y avec X le temps en cours et Y une valeur analogique
    Mon problème principal est le suivant:
    Lorsque le programme "Process" se termine, la seule boucle qui continue à tourner est la boucle d'acquisition des tensions et d'affichage des tensions analogiques sur des indicateurs en face avant.
    Lorsque je clique alors sur le bouton "Cancel", j'obtiens un sablier sur le PC et je n'ai plus la main sur le PC même en fermant LabView, je dois rebooter!! je n'arrive pas à voir et à isoler le problème même en phase animation de l'execution ( ampoule)? ou alors l'erreur est tellement grosse que je ne la vois pas!!
    Pouvez vous m'aider car je commence à m'arracher les cheveux
    Autre petit détail, moins important celui-là, je n'arrive pas à trouver la procédure pour effacer un graphique afin qu'il n'y en ait qu'un seul de visible sur le graphe?
    En vous remerciant d'avance...
    Attachments:
    MonProjet.ZIP ‏185 KB

    Dupliqué >> http://forums.ni.com/t5/Discussions-de-produit-de-NI/Probl%C3%A8me-arr%C3%AAt-programme-acquisition-...

  • Problème arrêt programme acquisition USB6009

    Je me permets de vous contacter pour un problème de programme sur lequel je bute depuis une semaine. Vous trouverez en fichier le programme sous labView 2009.
    Pour résumé, ce programme fait l'acquisition de trois tensions analogiques et une entrée numérique DIO0 via un boitier USB6009 et la programmation d'une tension analogique sur la voie AO0.
    J'ai une première boucle de lecture des valeurs qui s'opère toute les 500ms
    J'ai une structure évenement "Start Process" qui me permet de tracer un graphique X,Y avec X le temps en cours et Y une valeur analogique
    Mon problème principal est le suivant:
    Lorsque le programme "Process" se termine, la seule boucle qui continue à tourner est la boucle d'acquisition des tensions et d'affichage des tensions analogiques sur des indicateurs en face avant.
    Lorsque je clique alors sur le bouton "Cancel", j'obtiens un sablier sur le PC et je n'ai plus la main sur le PC même en fermant LabView, je dois rebooter!! je n'arrive pas à voir et à isoler le problème même en phase animation de l'execution ( ampoule)? ou alors l'erreur est tellement grosse que je ne la vois pas!!
    Pouvez vous m'aider car je commence à m'arracher les cheveux
    Autre petit détail, moins important celui-là, je n'arrive pas à trouver la procédure pour effacer un graphique afin qu'il n'y en ait qu'un seul de visible sur le graphe?
    En vous remerciant d'avance
    Pièces jointes :
    MonProjet.ZIP ‏185 KB

    Première chose, quand tu remets ton booléen à la fin du programme c'est mieux de le faire en début de programme, au cas ou tu ai un problème lors d'une éxécution, sinon tu as un bug aussi à l'exécution suivante.
    Pourquoi n'utiliserais tu pas une occurence pour synchroniser tes boucles?
    Sinon d'un point d evue graphique tu pourrais améliorer ton programme afin qu'il soit plus facile à maintenir (commentaires, sous VI, label sur les cables, merger les erreurs, j'aurais aussi récupéré le status des erreurs pour la condition d'arrêt avec un ou pour s'ajouiter à ton bouton stop)
    Rodéric L
    Certified LabVIEW Architect

  • Arrêter boucle consomatrice

    Bonjour
    J'ai developpé un programme sous LabVIEW 8.5, avec une boucle architecture productrice consomatrice. Dans ma boucle productrice je récuprère des données (provenant d'une cartre NI 6210), puis je traite les données dans la boucle consomatrice.
    Le traitement consiste en gros à:
       - détecter une surtension
       - choisir certaines données
       - enregistrer les données sur le PC.
    Pour passer de la boucle productrice à la boucle consomatrice j'utilise une file d'attente et un buffer (voir les pièces jointes).
    Je souhaite arrêter uniquement la boucle consommatrice en gardant le fonctionnement de la boucle prouctrice. L'arrèt est provoqué par un bit d'un autre programme. Par contre je ne souhaite pas garder les données en file d'attente lors de cet arrèt. Avez-vous des idées ou une solution pour résoudre mon problème?
    Merci à tous
    Damien
    Pièces jointes :
    producteur consommateur.JPG ‏26 KB
    Boucle Conso Traitement.JPG ‏511 KB

    Bonjour
    J'ai essayé de changer le time out mais je n'arrive toujours pas à arrèter la boucle consommatrice.
    J'arrive à arrèter la boucle poductrice mais pas la deuxième. Je vais donc vous envoyer mon projet peut etre que cela sera plus facile pour comprendre (je suis désolé mais je suis plutot débutant en labview alors mon programme est un peu dur à lire...)
    Lancement du projet:
    1. lancer "ENREGISTREUR DE DEFAUTS.lvproj"
    2. lancer "Acquisition de données 14 voies 8cas 4.vi"
    3. un fois "Acquisition de données 14 voies 8cas 4.vi" démarré, "Lecture tableau + envoie variables partagées 4.vi" doit se lancer automatiquement
    Explication des programme
    1. "Acquisition de données 14 voies 8cas 4.vi" réalise l'acquisition de 14 tensions (les tension proviennent d'une carte NI6210). Ces tension sont ensuite traitées de la façon suivante:
                - controle de dépassement de seuil sur les 9 première tensions. Si nous avons un dépassement
                - on enregistre 250ms avant le dépassement de seuil et 350 ms après le dépassement
                - les données enregistées (14 tensions) sont stockées dans des fichiers .txt
    2 A partir de ce moment le deuxième programme rentre en jeux ("Lecture tableau + envoie variables partagées 4.vi"). Ce programme lit les fichiers .txt vus précédement et met les données à disposition du serveur "Variable.Engine". Cela me permet de récupérer les données avec un client OPC.
    Le problème de mon application est que je voudrais arrèter les boucles consommatrice et productice de mon premier programme le temps quelle soient traitées par le client OPC.
    En gros je voudrais arrèter mon programme lorsque j'ai une surtension et que mes fichiers .txt sont utilisables (que j'ai enregistré 600ms 250ms +350ms, et redémarrer mon programme sur un ordre du client OPC.
    J'éspère avoir été assez clair et que quelqu'un pourra m'aider
    Merci
    Damien
    Pièces jointes :
    Enregistreur de défauts.7z ‏1190 KB

  • Problème arrêt acquisitio​n sur graphique CVI

    Bonjour,
    voici mon problème :
       je fais l'acquisition de température en continue mais je souhaiterais l'arrêter aprés un certain temps
    Le problème c'est que plus je diminue mon sleep plus plus l'acquisition sur le graphique mets de tempsà s'arrêter
    voici mon programme
    #include "graphessai.h"
    #include <windows.h>
    #include <NIDAQmx.h>
    #include <formatio.h>
    #include <analysis.h>
    #include <ansi_c.h>
    #include <cvirte.h>    
    #include <userint.h>
    #define echelletc                30
    #define offsettc                -50
    #define nbpointtc                10
    #define NUM_PLOTS           20100
    #define ABS_DATE_TIME_FORMAT_STRING "%X  %B %#d, %Y"
    #define REL_DATE_TIME_FORMAT_STRING "%#M:%S.%3f"
    #define MSG_FORMAT_STRING "Current window: %s  -  %s"
    static int PanelHandle, PlotArray[NUM_PLOTS] = { 0 }, CurrentPlotIndex;
    static double StartTime;
    static void TakeSample (void);
    double tc1[10];
    double tc_mean;
    double curTime;
    TaskHandle tc1_task; 
    int main (int argc, char *argv[])
        if (InitCVIRTE (0, argv, 0) == 0)
            return -1;  /* out of memory */
        if ((PanelHandle = LoadPanel (0, "Graphessai.uir", PANEL)) < 0)
            return -1;
        DAQmxCreateTask("TC1",&tc1_task);
        DAQmxCreateAIVoltageChan (tc1_task, "PXI1Slot5/ai6", "", DAQmx_Val_RSE, 0, 10, DAQmx_Val_Volts, "");
        DisplayPanel (PanelHandle);
        RunUserInterface ();
        DiscardPanel (PanelHandle);
        return 0;
    int CVICALLBACK QuitCallback (int panel, int control, int event,
            void *callbackData, int eventData1, int eventData2)
        switch (event)
        case EVENT_COMMIT:
            QuitUserInterface (0);
            break;
        return 0;
    static void TakeSample (void)
        double value;
        double i;
        for(i=0;i<20/0.001;i++){
                DAQmxReadAnalogF64 (tc1_task, 10, 10.0, DAQmx_Val_GroupByChannel, tc1, 10, NULL, 0);
        Mean (tc1, 10, &tc_mean);
         if (StartTime == 0.)
            StartTime = curTime;
        GetCurrentDateTime (&curTime);
        value = tc_mean * echelletc+offsettc; 
        // gPlotArray is a circular buffer; if we've looped around, discard the old plot
        if (PlotArray[CurrentPlotIndex])
            DeleteGraphPlot (PanelHandle, PANEL_GRAPH, PlotArray[CurrentPlotIndex], VAL_DELAYED_DRAW);
       PlotArray[CurrentPlotIndex] =PlotXY (PanelHandle, PANEL_GRAPH, &curTime, &value, 1, VAL_DOUBLE,
            VAL_DOUBLE, VAL_CONNECTED_POINTS, VAL_EMPTY_DIAMOND, VAL_SOLID, 1, VAL_RED);
                  Sleep (1);   
            if (++CurrentPlotIndex == NUM_PLOTS)
            CurrentPlotIndex = 0;
    int CVICALLBACK START (int panel, int control, int event,
            void *callbackData, int eventData1, int eventData2)
        switch (event)
            case EVENT_COMMIT:
             TakeSample ();
                break;
        return 0;
    j'aimerais que l'acquisition s'arrête au bout de 20 SEcondes (juste pour l'exemple plus tard il faudra que je l'arrête au bout de 24 h)) mais mon programme s'arrête environ 25 minutes plus tard
    si quelqu'un à une idée elle serait la bienvenue
    Cordialement

    Bonjour,
    Je n'utilise pas DAQmx pour mes applications du coup je ne l'ai pas installé et je n'ai pas accés à l'aide. Cependant ces fonctionalités étaient déjà disponibles dans le driver précédent (NIDAQ). D'après les quelques documents présent sur le site de NI, la création de mémoire tampon se fait certainement à l'initialisation de la tache d'acquisition (fonction DAQmxCfgSampClkTiming je pense). Le lancement de la tache se fera avec DAQmxStartTask et l'arret avec DAQmxStopTask puis DAQmxClearTask. Pour la lecture des données et le rafraichissement du graphe, il est possible de créer un évenement qui sera déclenché tout les N échantillons acquis (fonction DAQmxRegisterEveryNSamplesEvent). C'est dans la fonction associée a cet évènement qu'il faudra utiliser la fonction "xxxRead" pour lire vos échantillons et les afficher. A vous de dimensionner la mémoire tampon et le nombre d'échantillons qui provoquent l'évènement afin d'obtenir un rafraichissement du graphe plusieurs fois par seconde. J'espère que cela va vous aider ... sans carte d'acquisition et sans aide sur l'API de DAQmx je ne peux pas vous en dire beaucoup plus !  Fouillez dans les exemples de code, il y a certainement un exemple d'acquisition avec mémoire tampon (Buffered acquisition) et un autre sur les évènements DAQmx.
    cordialement,
    Stéphane        
    Labwindows/CVI user since version 4.0

  • Problème arrêt acquisition sur graphique CVI

    bonjour,
    je refais ce poste car je viens de m'apercevoir que je l'avais mis dans le forum anglais
      je fais l'acquisition de température en continue mais je souhaiterais l'arrêter aprés un certain temps
    Le problème c'est que plus je diminue mon sleep plus plus l'acquisition sur le graphique mets de tempsà s'arrêter
    voici mon programme
    #include "graphessai.h"
    #include <windows.h>
    #include <NIDAQmx.h>
    #include <formatio.h>
    #include <analysis.h>
    #include <ansi_c.h>
    #include <cvirte.h>    
    #include <userint.h>
    #define echelletc                30
    #define offsettc                -50
    #define nbpointtc                10
    #define NUM_PLOTS           20100
    #define ABS_DATE_TIME_FORMAT_STRING "%X  %B %#d, %Y"
    #define REL_DATE_TIME_FORMAT_STRING "%#M:%S.%3f"
    #define MSG_FORMAT_STRING "Current window: %s  -  %s"
    static int PanelHandle, PlotArray[NUM_PLOTS] = { 0 }, CurrentPlotIndex;
    static double StartTime;
    static void TakeSample (void);
    double tc1[10];
    double tc_mean;
    double curTime;
    TaskHandle tc1_task; 
    int main (int argc, char *argv[])
        if (InitCVIRTE (0, argv, 0) == 0)
            return -1;  /* out of memory */
        if ((PanelHandle = LoadPanel (0, "Graphessai.uir", PANEL)) < 0)
            return -1;
        DAQmxCreateTask("TC1",&tc1_task);
        DAQmxCreateAIVoltageChan (tc1_task, "PXI1Slot5/ai6", "", DAQmx_Val_RSE, 0, 10, DAQmx_Val_Volts, "");
        DisplayPanel (PanelHandle);
        RunUserInterface ();
        DiscardPanel (PanelHandle);
        return 0;
    int CVICALLBACK QuitCallback (int panel, int control, int event,
            void *callbackData, int eventData1, int eventData2)
        switch (event)
        case EVENT_COMMIT:
            QuitUserInterface (0);
            break;
        return 0;
    static void TakeSample (void)
        double value;
        double i;
        for(i=0;i<20/0.001;i++){
                DAQmxReadAnalogF64 (tc1_task, 10, 10.0, DAQmx_Val_GroupByChannel, tc1, 10, NULL, 0);
        Mean (tc1, 10, &tc_mean);
         if (StartTime == 0.)
            StartTime = curTime;
        GetCurrentDateTime (&curTime);
        value = tc_mean * echelletc+offsettc; 
        // gPlotArray is a circular buffer; if we've looped around, discard the old plot
        if (PlotArray[CurrentPlotIndex])
            DeleteGraphPlot (PanelHandle, PANEL_GRAPH, PlotArray[CurrentPlotIndex], VAL_DELAYED_DRAW);
       PlotArray[CurrentPlotIndex] =PlotXY (PanelHandle, PANEL_GRAPH, &curTime, &value, 1, VAL_DOUBLE,
            VAL_DOUBLE, VAL_CONNECTED_POINTS, VAL_EMPTY_DIAMOND, VAL_SOLID, 1, VAL_RED);
                  Sleep (1);   
            if (++CurrentPlotIndex == NUM_PLOTS)
            CurrentPlotIndex = 0;
    int CVICALLBACK START (int panel, int control, int event,
            void *callbackData, int eventData1, int eventData2)
        switch (event)
            case EVENT_COMMIT:
             TakeSample ();
                break;
        return 0;
    j'aimerais que l'acquisition s'arrête au bout de 20 SEcondes (juste pour l'exemple plus tard il faudra que je l'arrête au bout de 24 h)) mais mon programme s'arrête environ 25 minutes plus tard
    si quelqu'un à une idée elle serait la bienvenue
     Lounette m'a conseillé d'utiliser des mémoires tampons mais je n'ai aucune idée de comment ça marche
    Cordialement

    Bonjour,
    Je pense que le plus "simple" serait d'utiliser les threads.
    En effet tu pourrais soit créer un seul thread avec l'acquisition via DAQmx et l'affichage. Soit créer deux threads un pour l'acquisition qui envoyera ces données à l'autre thread via une file d'attente (Thread Safe Queue). On parle souvent d'architecture producteur / consommateur pour les problèmes LabVIEW.
    Dans tout les cas tu pourras facilement arrêter un thread via les fonctions adéquates comme CmtTerminateThreadPoolThread . Sans avoir de soucis pour attendre l'arrêter de la fonction.
    Je te conseil cet article : http://zone.ni.com/devzone/cda/tut/p/id/3663#toc3
    Cela demande plus de temps de développement mais ça peut être utile.
    Cordialement,
    Da Helmut

  • Séquence évènement-Arrêt boucle while interne.

    Bonjour,
    J'ai une séquence évènement lancé par le changement d'état d'un  bouton "Marche".
    Dans cette séquence évènement une boucle While est démarrée et trace des données sur un graph  .
    A partir de ce moment LV ne rend pas la main pour une autre action comme l'arrêt par  "Stop" .
    Peux t'on arrêter cette boucle while ? Si oui, comment ?
    Merci
    Cordialement.
    Pièces jointes :
    Essai1.vi ‏13 KB

    Je suis d’accord avec Rodéric L, tu n’utilises pas la structure évènementiel correctement. Le but est effectivement de programmer des détections d’actions, principalement utilisateur. Le code doit pouvoir réagir rapidement, pour que l’IHM soit réactive, par exemple si appui sur un bouton stop…
    Dans ton cas, l’IHM se bloque car lorsque tu programmes un évènement (édition de l’évènement) par défaut il y a une option « bloque l’IHM tant que le code dans l’évènement n’est pas terminé » (je n’ai pas LV ouvert alors je n’ai pas le texte exacte), mais c’est en bas à gauche dans l’édition de l’évènement.
    Par exemple si tu programmes un évènement sans code mais juste avec un wait de 10 minutes, ton IHM sera bloquée pendant 10 minutes. Par contre si tu désactives l'option d'attendre, alors la structure évènement va exécuter le code d'attendre 10 minutes, mais tu peux toujours agir sur l'IHM, et la structure mémorise les évènements à exécuter.
    Par contre je pense que tu dois pouvoir faire fonctionner ton exemple, en désactivant le blocage de l’IHM tant que l’évènement n’est pas terminé, et comme ton bouton stop est dans le même état….
    >>>> Mais ton code ne sera pas évolutif et il est condamné à ne plus rien faire d’autre.
    La solution réside dans une autre structure de code, par exemple de type producteur consommateur, avec comme producteur la structure évènementielle. Tu peux regarder dans les exemples de NI dans Fichier > nouveaux (je crois, je n’ai toujours pas LV d’ouvert !)
    Luc Desruelle | Voir mon profil | LabVIEW Code & blog
    Co-auteur livre LabVIEW : Programmation et applications
    CLA : Certified LabVIEW Architect / Certifié Architecte LabVIEW
    CLD : Certified LabVIEW Developer / Certifié Développeur LabVIEW

  • Problème VI express + boucle

    Bonjour, 
    Je suis actuellement en train de réaliser un programme de mesure sous Labview, mais je rencontre un problème avec les VI express.
    Voici comment fonctionne mon programme:
    Sur un premier écran on rentre les paramètres de la mesure
    Pour cette 1ere etape, j'ai fait une boucle while: tant qu'on appuie pas sur start measurement, on reste dans la boucle et dans la page.
    Une fois qu'on appuie sur start measurement, on passe à la seconde page qui permet de visualiser la mesure en cours.
    Le mesure s'effectue à partir d'un assistant DAQ dont les paramètres ont été définis sur le premier écran, et je trace un spectre de puissance avec un moyennage en utilisant un VI express.
    Sur le troisieme ecran j'affiche le résultat du moyennage. Avec un bouton pour terminer la mesure .
    Donc en résumé mon programme est constitué de 3 étapes:
    La première sert à entrer les paramètres de mesure
    Le seconde sert à réaliser la mesure
    La troisième à afficher les résultats. 
    Tout cela fonctionne correctement.
    Le problème que je rencontre et que si je mets ce programme dans une boucle, afin de faire plusieurs mesures sans relancer le programme, les VI Express (assistant DAQ et Moyennage) ne se réinitialisent pas. 
    En effet, l'assistant DAQ ne prend pas en compte les nouveaux paramètres de mesure, et le VI FFT+moyennage ne se relance pas . 
    Comment faire pour que ces VI se réinitialisent à la fin de chaque mesure ? 
    Je vous remercie d'avance pour votre aide
    Arthur
    (Le VI en pièce jointe) 

    Bonjour Arthur,
    Avant de répondre à votre question, je me permets quelques remarques pour améliorer votre code.
    Je vous encourage à utiliser une architecture Machine à état  plutôt que votre strucutre séquence, je vous joins un document qui explique cette architecture :
    http://www.ni.com/white-paper/2926/en/
    Ensuite les assistants DAQ sont très pratiques mais dans votre cas l'utilisation des fonctions DAQmx seraient plus appropiées et vous permettraient plus de flexibilité. Vous trouverez dans ces autres documents plus d'information : 
    http://www.ni.com/white-paper/2835/en/
    http://www.ni.com/tutorial/4656/en/
    Pour ce qui est du VI FFT, pouvez vous tenter en mettant l'entrée refaire un moyennage à vrai.
    N'hésitez pas si vous avez des questions.
    Cordialement,

  • Problème itération boucle for

    Bonjour à tous !
    Je suis en train de faire un petit programme de détection de pics. J'aimerais éliminer certaines détections qui n'en sont pas.
    Je vous joins une image de ma boucle for. Mon problème c'est que j'obtiens bien ma première détection (t0), et ensuite j'ai la dernière (t(n-1)) qui est bien vérifier avec la condition >1, mais par contre je n'arrive pas a avoir toutes celles du milieu.
    Ex : 1 / 1.5 / 3 / 5.5 / 6
    J'obtiens 1 et 5.5, mais pas le 3 !!
    Aidez moi s'il vous plait, je ne comprends pas pourquoi !!!
    J'espère être claire...
    Merci d'avance pour vos réponses
    Pièces jointes :
    bouclefor.jpg ‏45 KB

    Youpiiii !!!!
    Merci merci merci !!!!
    En fait je viens de trouver la solution à mon problème, c'était tellement simple que ça me déprime d'avoir passé la journée à cherché...
    Je me suis inspiré de votre aide, et en fait j'ai créé un tableau décalé de un en rajoutant un 0, puis j'ai soustrait les deux !!! Du coup je me retrouvais avec un tableau de valeur à comparer à 1...
    Pourquoi faire simple quand on peut faire compliqué !!!
    Encore merci de votre aide, vous venez de sauvez une partie de mon stage !!!
    Pièces jointes :
    decalage.jpg ‏42 KB

  • Modifier la condition de fin d'une boucle for

    Bonjour à tous,
    Je bute sur un problème qui est de modifier la condtion de fin d'une boucle for. Voici mons soucis, je dipose de deux boucles for imbriquées : l'une est nommée maître et l'autre esclave. Je souhaite qu'après avoir lancé le vi l'utlisateur puisse modifier la valeur de fin de la boucle esclave alors que la boucle maître se trouve toujours à l'indice n.
    En résumé :
    condition avant lancement du vi, "cpt boucle maître" = 10 et "cpt boucle esclave" = 100
    lacement du vi
    lorsque la boucle maître est à l'indice 7 par exemple, que l'indice de la boucle esclave se trouve à l'indice 70.  Si l'utilsateur modifie la valeur "cpt boucle esclave" et la met 200 en validant par le bouton "Valider nouvelle valeur boucle esclave", il faut que la boucle esclave aille jusqu'à l'indice 200 pour l'indice 7 de la boucle maître. Si ce n'est pas possible, il faut que la valeur 200 soit prise en compte pour l'indice 8 de la boucle maître.
    Une de mes contraintes étant de conserve le cluster.
    En vous remerciant
    Djamel
    Résolu !
    Accéder à la solution.
    Pièces jointes :
    boucle maitre esclave.vi ‏10 KB

    Au risque de paraître un peu pédant, je te renvoie vers les règles de développement : http://www.ni.com/pdf/manuals/321393d.pdf
    page 6-10 : Avoid the use of local variables when you can use a wire to transfer
    data. Every local variable that reads the data makes a copy of the data.
    page 6-11 : Use global and local variables as sparingly as possible. You can use
    both global and local variables to write VIs very efficiently. However,
    if you misuse or abuse global and local variables, particularly with data
    types, the memory usage of the VI increases and the performance is
    affected.
    Additionally, you can encounter race conditions when reading from
    and writing to global variables in the same application. These race
    conditions are difficult to debug since there is no data dependency
    between different instances of the same global variable on the block
    diagram.
    Consider using functional global variables instead of global variables.
    Functional global variables do not create extra copies of data and allow
    certain actions such as initialize, read, write, and empty. Refer to the
    Using LabVIEW to Create Multithreaded VIs for Maximum
    Performance and Reliability Application Note for more information
    on using functional global variables.
    Si l'anglais n'est pas ton fort : il existe peut être une bonne âme pour t'aider
    When my feet touch the ground each morning the devil thinks "bloody hell... He's up again!"

  • Problème enregistrement fichier txt

    Bonjour à tous,
    J'ai réalisé un VI me permettant d'acquérir deux données (Température enceinte climatique, Température de consigne) et via un cadencement maître esclave, je peux traiter ces données.
    Parmis le traitement, je réalise un enregistrement. Néanmoins, je n'avais pas penser à insérer le "temps" (axe des X sur mon graphe), comment pourrait-on l'ajouter ?
    De plus, dans mon fichier txt, les données sont légèrement décalés sur la droite, j'ai suivi l'exemple de la formation Labview Basics II mais je rencontre un petit problème pour ça..
    Ci joint mon VI où j'initialise mes valeurs et mon MAIN, où la boucle maître du milieu et la boucle esclave en haut sont concernés.
    Merci pour toute aide.
    Cordialement
    Pièces jointes :
    Initialisation_Analyse.vi ‏24 KB
    Mode _Manuel_BIS.vi ‏103 KB

    est ce que ta fréquence d'acquitition est fixe?
    tu utilises un chart pour afficher tes courbes, le chart c'est pratique car tu lui donnes les nouveaux points à chaque tour de boucle et il gère l'historique tout seul, par contre le delta X entre deux point n'est pas géré, donc si ta fréquence de rafraîchissement du chart est fixe pas de soucis il faut simplement que tu dises à ton chart que est le facteur de multiplication pour l'échelle X, clic droit sur le chart >> propriétés >> échelles :
    pour ton enregistrement dans ton fichier je ne vois pas le problème... la seule chose que j'ai vu, c'est un tabulation en trop à la fin de la ligne d'entête.
    When my feet touch the ground each morning the devil thinks "bloody hell... He's up again!"

  • Comment synchroniser l'arrêt de time structure?

    Bonjour,
    J'ai plusieurs time loop en parallèle dans des subVI différents. J'ai synchronisé leur depart à l'aide du bloc "Synchronise Times Structure Starts".
    Ces time loop n'ont pas la même durée de vie. Lorsque l'une d'entres elles s'arrêtent, cela entraine une erreur de temps réel sur une autre qui est du, à mon avis, au traitement de la fin du VI.
    Je souhaiterais donc pouvoir faire attendre le post traitement de chaque time loop à l'intérieur de mes VI afin de ne pas perturber les time loop encore en cours.
    Est-ce possible et comment ?
    Merci par avance

    Bonjour,
    Je trouve tout de même curieux que du simple code empêche la bonne exécution de vos boucles cadencées. A moins que vous ayez des ressources partagées utilisées dans ces boucles ou que vous ayez utilisé la propriété de priorité des VIs, votre boucle candencée devrait toujours être prioritaire par rapport au code.
    Néanmoins, si vous souhaitez synchroniser l'arrêt des boucles :
    - dans vos boucles se finissant rapidement, vous pouvez récupérer le booléen qui déclenche l'arrêt pour éviter l'exécution de votre code (structure condition) et envoyer un signal (variable partagée avec option FIFO RT activée par exemple) à une boucle qui serait la boucle maître. Ainsi vous signalez que ces boucles "esclaves" sont prêtes à s'arrêter
    - dans la boucle maître, vous déterminez quand arrêter toutes vos boucles grâces aux variables partagées et vous déclenchez l'arrêt de celles-ci grâce au VI "Arrêter une structure candencée"
    Cordialement,
    Mathieu P. | Certified LabVIEW Associate Developer
    National Instruments France
    #adMrkt{text-align: center;font-size:11px; font-weight: bold;} #adMrkt a {text-decoration: none;} #adMrkt a:hover{font-size: 9px;} #adMrkt a span{display: none;} #adMrkt a:hover span{display: block;}
    Journées techniques : des fondamentaux aux dernières technologies pour la mesure et le contrôle/comm...

  • Problème DAQmx buffer + convertion

    Bonjour,
    Alors voila mon problème:
    Je fais l'acquisition d'accéléromètres par le module 9234 avec un compactDAQ 9174. Je veux faire une acquisition avec des échantillons en continue. J'ai un traitement du signal pour obtenir un spectre en dB ou je fais une moyenne de 12 spectres à afficher.
    Lorsque je suis en continue, je ne peux faire le contrôle qu'une fois car après il me marque problème de buffer, alors je voudrais savoir comment réinitialiser le buffer avant chaque contrôle??? ou alors avoir une aide pour ce sujet!!!
    De plus, je souhaite générer le code labview au lieu du vi express pour pouvoir intéragir avec la sensibilité et les paramètres d'acquisition mais là aussi j'ai un problème, comme vous pouvez le voir sur mon image jointe, l'assistantDAQ est converti correctement seulement quand je lance le contrôle il ne se passe rien, je pense qu'il ya un problème avec la boucle!!!
    Donc voilà en gros, je laisse une image et les vi a disposition, et le but principale est que mon contrôle des 12 spectres moyenné soient plus rapide en passant par l'acquisition continue et en vidant le buffer, qu'en passant par l'acquisition de N echantillons où la ça marche très bien mais le temps est beaucoup trop long!!
    Merci et n'hésitez pas à me contacter pour plus d'inof
    Arnaud
    Pièces jointes :
    Convertion DAQmx.jpg ‏233 KB
    Acquisition signal Ambiance.zip ‏233 KB

    Je viens de corriger un problème, en faite quand je générais le code, et que je lançais le contrôle, je ne sortais jamais de la boucle, du coup j'ai mis une constante a vrai et ça marche!!
    Cependant, j'ai toujours le même problème à savoir la rapidité, quand je suis avec le vi express, mon traitement des 12 spectres se fait en 400ms et dès que je génére le code, la ça explose et ça met 2s à faire le meme travail!!!
    Alors faudrait que quelqu'un m'explique pourquoi, parce que je suis perdu là!!!
    Merci

  • Curseur se balade tout seul sur l'écran

    Assez stupéfaite du mauvais service Apple en France.
    J'ai un problème avec mon iphone. Apple me répond que la garantie matérielle est d'1 an alors que c'est faux (garantie légale en France = 2 ans).
    J'ai aussi un problème avec mon MacBookPro acheté en mars 2011 aux USA (curseur se balade tout seul sur l'écran alors que je ne suis pas en réseau et je n'utilise pas de souris). J'ai signalé le problème à Apple en février à Londres (rendez-vous Genius Bar). Il n'a pas pu être résolu.
    Comme ça fonctionnait de nouveau, j'ai attendu. Et là rebelote, donc j'appelle Apple et on me répond que je dois payer si je veux résoudre le problème et que de toute façon Apple France n'a pas de traces de mon rendez-vous dans l'Apple Store de Londres! Lorsque j'ai répondu que j'avais une confirmation email du rendez-vous, on me dit : "Rien ne nous prouve que vous y êtes allée"! et on me dit que c'est sûr que si je vais sur les forums, je trouverai des gens qui se plaignent du problème de curseurs mais qu'en somme personne ou presque ne se plaint de ce problème directement chez Apple!! Bravo. En gros : Apple c'est des produits géniaux et si t'as un problème, arrête de te plaindre. :-o
    Le service Apple USA était bien meilleur.
    Quelqu'un a pu résoudre ce problème ?

    Your initial post deals with the iPhone warranty.  Forum participants have no control over Apple warranties.
    You then relate a problem with your cursor which you state that could not be resolved by the Apple genius bar.  If they cannot solve it, certainly forum participants are not likely to succeed either.
    Then you bring up an issue that of an appointment, whether it took place or not, with Apple.  We cannot intervene or assist you in that issue because we are not Apple employees.  We are Apple customers just like you.
    All I can advise you is to escalate your issues to the higher levels of Apple management.  We are not in a position to assist you.
    Ciao.

Maybe you are looking for

  • Startup disk/memory problem

    Having an annoying issue. Over time as I use my computer the activity monitor shows memory (ram) decreases. For example, I surf the internet for 1 -2 hours, the available memory slowly decreases until I get an error telling me to force quit safari du

  • Adding PHP pages, not showing dynamic content?

    Hi all, I'm new and hoping I don't get ripped apart for a question that seems simple. I've looked a lot though and can't seem to find an exact scenario like this. I recently took over a PHP site for a friend that was built in Dreamweaver CS3. There's

  • Error after starting AE

    Heay guys, every time i start After Effects i get a error .... I tried everything .... Maybe you can help me ? PC Specs: intel xeon e3-1231v3 GTX 970 16gb Ram If you need informations tell me

  • Unloading Images

    I'm relatively new at this and having a difficult time. I'm trying to create an image gallery that dynamically loads, but also removes the loaded image when a new thumbnail is clicked. I have a remove child instance, but that only works for one image

  • Adobe Pagemaker installation

    I can't install Adobe Acrobat Distiller 6, needed by Adobe Pagemaker 7 to export pagemaker documents as pdfs, because I have a later version of Distiller, Adobe Acrobat Distiller IX. When I try to install I get the message "Setup has detected that yo