Registre à décalage, problème d'initialisation

Bonjour,
Sur l'image en PJ, j'ai réalisé un registre à décalage pour ma T_Consigne.
Je souhaite l'initialiser avec la 1ère valeur relevée et ensuite comparer ma dernière valeur en mémoire avec ma nouvelle valeur.
Néanmoins, à chaque itération, la valeur est à nouveau initialisée avec la nouvelle..
Pourtant l'initialisation ne se fait qu'une seule fois?
Résolu !
Accéder à la solution.
Pièces jointes :
Registre à décalage.JPG ‏91 KB

salut, j'étais en train d'écrire, et j'ai vu la réponse de ouadji, qui effectivement ouadji est bonne :
le fond :
> pour être utilisé dans la boucle, les contrôles doivent être dans la boucle
> il te faut un case "init", au démarrage, qui va servir à lire la valeur des contrôles et initialiser les registres à déclages
la forme : une image permet de regarder rapidement, un exemple permet de comprendre ton problème.
A+
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

Similar Messages

  • Registre à décalage et initialisation DMM

    Bonjour,
    Je developpe actuellement un logiciel permettant le contrôle d'étalonnage de capteur de pression avec des carte PXI 4065.
    La structure de mon programme est un registre à décalage, plusieurs étapes me permettant d'initialiser les matériels que j'utilise (générateur de pression étalon et cartes multimétre).
    Afin de réaliser des mesures de qualité, je dois respecter un temps de chauffe matériel et pour cela initialiser la communication quelques étapes avant de réaliser ma mesure.
    Malheureusement, je n'arrive pas à garder "fermé" le contact de ma carte au moment de la mesure, celle-ci se réinitialise de façon systématique au moment de l'acquisition de la valeur.
    Est-il possible de lire uniquement la valeur sans recharger la configuration hardware dans la carte d'acquisition. (Je suis obligé d'utiliser un bloc Initiate sinon j'ai une erreur "handle instrument error" avant le bloc read)
    D'avance merci!
    Cordialement

    Hello Pod_Bol,
    The issue is you're reinitializing the DMM.  I recommend wiring the DMM session handle from NI-DMM Initiate to a front panel indicator, so you can pass the session handle to the Mesure subVI.  It would look something like this:
    Of course, you could also accomplish this by closing the session in one VI and then reinitializing it in another without resetting the device, but this is sloppy coding:
    General comments:
    -Are you using the PXI-4060?  The PXI-4060 is the only PXI DMM NI sells that has a 200mV range.  If you're using any PXI-407x DMM, I recommend using the 100mV for better sensitivity (if your measurement is less than 100mV, of course) or specifically set the 1V range.  As your code is written, requesting the 200mV range on a PXI-407x DMM will coerce to the 1V range.
    -The flat sequence structure in Mode measure.jpg is unneccessary.
    -There is no reason to add a delay to the DMM while calling commit (ExpressVI inside Vrai case structure).
    -There's probably a better way to store the data than in the dynamic data array you're generating from each measurement. 
    Are you possibly trying to acquire multiple data points from the DMM?  If so, I recommend using the excellent NI-DMM Example VIs, located here:
    Example Finder»Hardware Input and Output»Modular Instruments»NI-DMM»Multi-Point Measurements
    Let us know if you have any other questions and I'm happy to clarify.  Have a great day!
    -John Sullivan
    Analog Engineer

  • Boucle FOR dans une boucle while avec un registre à décalage

    Bonjour à tous,
    je rencontre un problème au niveau de l'indexation de l'execution de mes commandes.
    Lorsque j'exécute mon programme, seulement la dernière commande est prise en compte.
    Faut-il enlever mon registre à décalage? Changer le mode du tunnel ?
    Cordialement
    Pièces jointes :
    Boucle FOR, while.JPG ‏134 KB

    ça peut avoir son utilité lorsque le diagramme est conséquent et illisible
    alors c'est que tu "reprends en main" le diagram d'un autre .... 
    sinon... si c'est le tien ... il ne sera jamais illisible.
    Et si tu veux "gagner du temps" ... je t'assure ... cable "propre" du premier coup.
    Lisibilité, compréhensibilité, évolutivité ... tu seras gagnant à tous les coups. (à 1000%)
    Sans compter "le coup d'oeil" quand "un autre" ouvrira ton code.
    Avant d'aller plus loin et de comprendre quoi que ce soit dans ce que tu as fait ...
    la propreté de ton diagram sera "ta signature".
    Ah oui ... un diagramme aussi propre que ça ... ça ne peut être que Geoffrey !
    ça l'fait non ?  

  • Comment ça marche un registre à décalage qui remplace une variable globale

    Bonjour,
    L'utilisation des variables Globales n'est pas conseillée.
    Pour les éviter, il existe une méthode qui consiste à utiliser une boucle While composée d'un registre à décalage non initialiser.
    J'aurais besoin de comprendre comment LabView gère les registres à décalage. Lorsqu'on modifie la valeur du registre (pour remplacer la fonction écriture vers globale), comment et où LabView stocke-il l'information ?
    Merci pour vos nombreuses réponses.
    AKIRA.

    Bonjour,
    Lorsque l'on utilise un registre à décalage, la variable est stockée dans la RAM mais il n'est pas possible de savoir où exactement car cela permettrait de la changer, ce qui n'est pas le but d'un registre à décalage car il sert à protéger les valeurs stockées.
    Cordialement
    David S.| 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 LabVIEW 2012 : du 27 septembre au 22 novembre
    2 sessions en parallèle : Débuter a...

  • Fonctionne​ment registre à décalage

    Bonjour,
    Pour éviter d'utiliser les variables globales, il est conseillé d'utiliser un VI composé d'une boucle While avec un registre à décalage non initialisé.
    Comment et où sont stockées les informations du registre à décalage ? En quoi finalement cette méthode améliore l'usage de la mémoire comparativement à la variable globale classique ? 
    Merci pour vos nombreuse réponses.
    Slts
    Solved!
    Go to Solution.

    Merci de ne pas soumettre plusiers copies de la meme question.  Vous avez poser la question en francais dans un forum qui est majorite anglophone; il existe aussi un forum francophone.
    En plus, votre question n'est pas completement logique.  La registre a decalage stocke des donnees en soi - c'est la fonction d'une registre a decalage.
    Une registre a decalage non initialise n'est pas forcement mieux qu'une variable globale - par exemple l'acces a une variable globale est plus vite.  L'avantage d'une registre a decalage est qu'il est possible de faire des actions plus complexe que lire et ecrire sans la risque d'une "race condition" (je ne connais pas la bonne traduction de cette phrase).  Une presentation sur l'usage des registres a decalage: https://decibel.ni.com/content/docs/DOC-21226
    Translation of the original question into English:
    Hello,
    To avoid using global variables, the use of a VI containing a While loop with an uninitialized shift register is recommended.
    Where and how is the data stored in a shift register?  How does this method improve memory use compared to a global variable?
    Thanks for your many replies.

  • Problème d'initialisation Itunes/Iphone

    J'ai initialisé mon pc, puis installé à nouveau Itunes et depuis la synchronisation avec mon Iphone 5 n'est plus possible. Je n'arrive plus à transféré les fichiers et Itunes ne reconnaît pas mon Iphone

    la réponse est une utilisation "classique" des registres à décalages. Initialiser au départ. Si tu ne fais pas l'initialisation, le registre mémorise alors la donnée, cela est appelé "FGV", variable globale fonctionnelle, cela devient une zone mémoire.
    Tu peux noter la réponse comme solution, cela aidera d'autres personnes dans la recherche, et tu peux aussi mettre des "compliments" à ceux qui ont répondus.
    Bon we A+
    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

  • Comment remplacer un registre à décalager par une variable globale

    Bonjour tout le monde,
    Je vous sollicite encore une fois par manque d'expérience....
    Alors cette fois-ci j'ai un VI qui va acquérir une tension et faire la moyenne de celle-ci, mais mon problème est que j'utilise une boucle while avec un registre à décalage et d'après mon tuteur c'est à cause de cette boucle que je n'obtiens pas les résultats escontés.
    Il m'a donc conseillé de supprimer ma boucle while et de mette une variable globale qui gère la période de moyennage à la place de mon registre à décalage. 
    Le souci c'est que je ne connais ni d'adem ni d'eve cette variable...
    Est-ce que quelqu'un aurait l'amabilité de m'expliquer un peu cmt ça fonctionne parce que je ne trouve pas mon bonheur dans les exemples et les autres sujets?
    Et surtout est-ce la bonne solution?
    REM: le VI a été créé par une autre personne je n'est fais que de modifier la partie moyennage, donc les autres variables globales ne sont pas de moi.
    Merci d'avance!
    Attachments:
    VI_TEST2.vi ‏50 KB
    VI_TEST2.vi ‏50 KB

    Bonjour à toi,
    Tu trouveras ci-dessous un exemple d'implémentation d'une variable globale fonctionnelle :
    Basic Functional Global Variable Example
    J'ai regardé ton programme mais je ne suis pas sûr d'avoir bien compris ce qu'il devait faire, aussi je ne peux pas te conseiller entre les deux solutions, essaye avec la variable globale fonctionnelle cela sera de toute facon un bon exercice d'apprentissage.
    Pour le reste du programme, il est en principe fortement déconseillé d'utiliser des structures séquences déroulées. Il vaut mieux, si on veut s'assurer du bon déroulement de son programme, utiliser une structure de machine à état ou bien tout simplement le flux de données, principe natif de LabVIEW :
    Programmation par flux de données dans LabVIEW
    Machine à états simple
    J'espère que cela t'aidera,
    Bonne journée,
    M-Junior

  • Registre à décalage

    Bonjour,
    J'ai développé récemment une IHM dans le cadre de mes études d'ingénieur. Cette IHM devait envoyer des commandes de tensions vers une carte électronique via une liaison RS232. La carte électronique envoyant ensuite cette commande de tension sur une ou plusieurs voies (24 au totale) afin de polariser une antenne.
    J'ai donc mis 24 controls numérique (pour l'envoi de la valeur de tension/ un par voie) ainsi que 24 cases à cocher (pour la sélection des voies) sur mon IHM. J'ai ensuite mis une structure évenement (avec un évenement sur chaque sélection de la case à coché pour l'envoi de la valeur de la tension) je stock ensuite les 24 valeurs dans un tableau. Lorsque j'appuis sur le bouton "envoi", je "dépile" mon tableau dans le VI d'envoie sur la liaison RS232. Un programme sur la carte électronique se chargant ensuite du traitement des valeurs différentes de 0V pour envoie vers l'antenne.
    J'ai don du utilisé 24 registres à décalage pour avoir accés à chaque valeur dans tous les évenements de ma strucuture évenement. Je suis finalement arrivé à une IHM parfaitement fonctionnelle mais je me posais la question s'il n'existait pas d'autre alternative que le registre à décalage pour mon IHM (parce que j'en ai passé des heures à relier chaque ligne de mes registre à décalage). Même question pour l'utilisation du tableau.
    J'epère avoir été clair.
    Merci
    Benjamin
     

    " extraire un à un les éléments d'un Cluster" ... ?
    il n'est pas possible " d'indexer " un Cluster.
    par contre, si tous les éléments du cluster sont du même type, tu peux convertir ton Cluster en Tableau ("cluser to array" dans la palette cluster)
    et ensuite ... indexer le Tableau obtenu.
    attention, les éléments dans le Tableau se trouveront dans l'ordre dans lequel il se trouve dans le cluster
    Tu me diras .... bein oui, je m'en doute :-)
    attention ... l'ordre dans le cluster n'est pas oblibatoirement l'ordre avec lequel ils sont graphiquement visibles (dans le cluster)
    Au départ ... l'ordre dans un cluster est l'ordre suivant lequel tu introduis les éléments dans le cluster.
    ensuite .... tu peux réorganiser cet ordre ... clic droit sur le bord du cluster + reorder controls in cluster.

  • Variable ou Registre à décalage ?

    Bonjour à Tous,
    J'ai des questions sur le choix entre variable ou registre à décalage.
    Exemple :   
             Dans une boucle While, il y a une machine d'état comportant 10 Conditions. A la condition 1, vous générez un indicateur comprenant un résultat que vous voulez utiliser dans les conditions 8 et 9.
    Les questions à répondre sont les suivantes :
    - Vous choisissez quoi : registre à décalage ou variable ?
    - Lequel est le moins gourmand en ressource ?
    - Si vous choisissez la variable, a partir de combien de conditions dans lequelles vous avez besoin de ce résultat vous passerez à un registre à décalage ?
    Merci beaucoup, si possible répondre au trois questions
    Résolu !
    Accéder à la solution.

    Bonjour,
    Le concept majeur de la programmation sous LabVIEW est le concept de flux de donnees, le fait d'utiliser une variable locale va casser ce concept via les noeuds "lire/ecrire dans une variable locale...".
    L'utilisation d'un registre a decalage va permetre d'assurer la continuite de ce flux de donnees a travers la boucle while.
    C'est donc la meilleure methode a suivre et ne prendra pas plus de memoire au cours de l'execution du VI qu'une variable locale.
    Dans certains cas on pourra meme remplacer le registre a decalage par un noeud de retroaction.
    Cordialement,
    Da Helmut

  • Problème d'initialisation d'un tableau URGENT

    Bonsoir, je travail sous Labview 2011.
    Mon problème c'est que dans mon programme ("snake2-3") je ne parviens pas à initialiser le tableau en sortie qui contient les points de coordonnées de mon snake.
    Cela me sert pour détecter mes collisions.
    Merci pour votre aide,
    Cordialement,
    Solved!
    Go to Solution.
    Attachments:
    Projet1.zip ‏178 KB

    Comment veux-tu initialiser ce tableau, et avec quelles valeurs?  D'ou viennent ces valeurs?  La facon la plus sera de connecter une constante en dehors de la boucle au "shift register" (je utilise la version anglaise de LabVIEW, je n'ai aucune idee comment sa s'appele en francais).
    En general, l'utilisation de variables globales et de "sequence structures" est fortement decourager en LabVIEW.
    How are you trying to initialize the array, and with what values?  Where do those values come from?  The easiest way to initialize a shift register is to connect a constant to the shift register outside the loop.
    In general, the use of global variables and sequence structures is not recommended in LabVIEW.

  • Problème réinitialisation carte PCI6503

    Bonjour
    J'ai créé un programme pour contrôler des câbles, mon programme fonctionne correctement mais au bout d'un moment, il ne fonctionne plus, la carte ne lit plus de valeur. Même si j'alimente une sortie de la carte, je n'obtiens rien en entrée. Pour pouvoir continuer de contrôler, je dois réinitialiser la carte PCI 6503. 
    Je voudrais donc savoir pourquoi la carte perd sa fonctionnalité et pourquoi suis je obliger de la réinitialiser ?
    Cordialement

    Bonjour Audrey,
    Votre programme doit-il s'exécuter en continu ? Si tel est le cas l'architecture utilisée n'est pas optimisée, dans le sens où à chaque itération de boucle vous recréez les tâches d'acquisition et de génération.
    De plus, les VI DAQmx sont placés à l'intérieur de structures à séquence déroulée, qui ne terminent leur exécution qu'une fois tout le code situé à l'intérieur terminé, il est donc très probable que lorsque vous avez l'impression de ne rien lire, le programme est occupé à d'autres fonctions.
    Quoi qu'il en soit, afin d'identifier l'origine matérielle ou logicielle de cette problématique, je vous propose de tester l'exemple "Continuous Read Digital Channel - Internal Clock" disponible au lien suivant : https://decibel.ni.com/content/docs/DOC-12376 et de me faire ainsi part de votre retour quant au comportement de la lecture des entrées numériques de votre PCI-6503.
    Cordialement
    Mathieu_T
    Certified LabVIEW Developer
    Certified TestStand 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;}
    LabVIEW Tour
    Journées Techniques dans 10 villes en France, du 4 au 20 novembre 2014

  • Problème graphe en temps relatif

    Bonjour,
    J'ai crée un VI d'acquisition de tension avec un port USB NI9219 qui mesure différentes tension d'entrée à une fréquence élevée(ex : 100 Hz). De plus mon VI enregistre les mesures que lorsque la tension mesurée change de 0,01v. Le VI trace également les courbes de tension dans un graphe déroulant qui comporte tous les points enregistrés (et seulement ceux la) depuis le lancement de l'application.
    C'est sur ce point que je n'arrive pas à avoir un graphe déroulant avec plusieurs courbes (4 maximum) avec une échelle des x en temps relatif. C'est à dire de t=0 (ex : minutes) jusqu'a t=fin du VI
    Lorsque je met les x en temps relatif il ne me met pas de temps mais des valeurs abérantes. De plus il n'incrémente pas du temps éffectué entre 2 mesures, il incrémente le temps de 1.
    (ex : on a t=5min entre 2 mesure enregistrées mais la courbe incréménte le temps de 1 sur la valeur abérante).
    Avez vous des solutions pour mon problème. Merci.
    Cordialement.
    Solved!
    Go to Solution.

    Cette valeur correspond à l'heure de la mesure, 952500:36:41 correspondant à 14h36 et 41s.
    Cela permet d'horodater les points plus précisément.
    Si vous souhaitez recréer votre échelle de temps en X, il faudra modifier le T0 de votre courbe.
    Pour cela vous allez devoir utiliser la fonction Construire une waveform permettant d’insérer votre courbe et aussi de modifier le t0, on insère cette fonction dans une boucle For afin de traiter les 4 courbes.
    Au départ du VI on initialise un registre à décalage à 0 afin que nos premiers points commencent à 0, puis on devra multiplier l’horloge d’échantillonnage par le nombre de point afin de définir le t0 des tours de boucles suivants.
    Cela devrait résoudre votre probléme.
    Cordialement
    Christophe S.
    FSE East of France І Certified LabVIEW Associate Developer І National Instruments France

  • Problème inactivité VISA GPIB

    Bonjour,
    Je travail sous LB8.5
    J'utilise une centrale d'acquisition AGILENT 34980A pour switcher sur 32 pièces dans un banc de mesure.
    Mon programme est du type séquentiel dans une boucle infinie ( je fait un tas de mesure, j'enregistre, je switch sur la pièce suivante et rebelote tant que je donne pas un ordre pour passer dans un sous-programme.)
    Le switch est donc réalisé par cette centrale GPIB et j'utilise les commandes VISA.
    Dans une certaine configuration, la centrale est inutilisée pendant 10h ( dans ma boucle infinie ) puis je passe dans un sous-programme2 qui lui la ré-utilise. La centrale se " fige " dans le sous-programme2 . On dirait qu'elle ne répond plus et je dois la rebooter ou lancer un autre programme pour qu'elle réagisse.
    Voila sur l'image les conditions de ma liasion VISA pendant 10h. Je suis en " attente " entre 2 " registre à décalage ". Est ce que je dois mettre un flush ou autre chose pour pas avoir ce probleme ?
    Merci.
    Résolu !
    Accéder à la solution.
    Pièces jointes :
    problème.JPG ‏24 KB

    Merci pour votre réponse.
    Ci-joint mon projet complet. Le programme se déroule de la manière suivante :
    (1) " check modif "  ====> (2) " Switch&mesure ====> (3) " Switch& get data.
    (1) " check modif " me permet de remplir des tableaux avec toutes les informations que j'ai besoin ( numéro de série, statut en fonction de la consomation...)
    (2) " Switch&mesure " a deux fonctions :
    - sur des pièces en calibration, il ne fait rien ( il ne switch pas dessus dons il n'utilise pas la centrale avec les fonctions GPIB VISA.
    - sur les autres pièces ( dérive ), il switch dessus pour réalisé une mesure de fréquence ( utilisation de la centrale).
    (3) "Switch&get data permet de récuperer les fichier TXT de calibration des pièces en calibration quand elle est terminée ( au bout de 10h ).
    Quand j'ai au moins une pièce qui n'est pas en calibration, j'ai aucun problème car la centrale switch constament sur la pièce en dérive pendant le cycle de calibration. Dans sous-VI (3), la centrale switch sur toutes les positions ou il y avait des pièces en calibration pour récupérer les valeurs.
    Quand toutes les pièces sont en calibration, la centrale ne fait rien ( la liaison GPIB VISA est entre les registres à décalage dans la boucle While pendant 10h). Quand le cycle est fini, on passe dans le sous-VI (3) "Switch&get data" qui lui à besoin de la centrale pour switcher sur les position. Après 10h d'inactivité, la centrale ne répond pas aux commandes VISA du sous-programme (3).
    Est-ce que c'est plus claire comme ça ?
    Pièces jointes :
    banc.zip ‏436 KB

  • Problème de positionnement des blocs sous IllustratorCC

    Bonjour,
    Voici mon problème, les coordonnées (X et Y) que je rentre sous IllustratorCC pour caler les blocs changent de manière aléatoire et je ne peux plus entrer des positions précises.
    Je pense que ce pro
    blème est survenu après une remise à zéro des règles sur un plan de travail mais difficile à dire...
    Merci d'avance !

    Bonjour Safira,
     Pour sauvegarder vos mesures entre chaque tours de boucles, je vous conseil d'utiliser un registre à décalage qui permet de réaliser cette opération. Ainsi en utilisant le VI "Insérer dans un tableau" vous allez pouvoir sauvegarder vos mesures durant toute l'exécution de votre acquisition.
    Aussi, il faut bien que vous preniez en compte que votre acquisition ne sera pas déterministe, en effet, puisque vous dépendez du système d'exploitation sur lequel tourne votre application, et qui va gérer lui même la priorité de votre application, et donc sa vitesse d'exécution. Ce qui ne garantira pas que votre acquisition se fasse exactement toutes les secondes.
    Mais pour ce cadencement, je pense qu'il ne devrait pas y'avoir de problème.
    Cordialement,
    Pièces jointes :
    exemple.vi ‏7 KB

  • Problème boucle while bouton

    bonjour,
    je voudrais arrêter une boucle while quand un bouton  change de valeur ( qu'il soit sur on ou off peu importe , juste qu'il change de valeur) et je ne sais pas comment faire.
    Pouvez-vous m'aider ?
     Meri d'avance !!
    Julie

    Bonjour,
    Je vois plusieurs possibilités pour résoudre ton problème :
    - Tu peux mettre une structure d'évènement qui détectera ton changement de valeur (après configuration de ta structure bien sûr)
    - Tu peux également mettre un registre à décalage sur ta boucle While afin de détecter une différence entre ton bouton et le retour du registre...
    Bastien

Maybe you are looking for

  • Correct Representation of CIs in SCSM via SCOM DA

    As a test we built a simple DA for Exchange/Email in SCOM with one component each - our MP's are all good including the dependencies.  However, when bringing the data over from SCOM into SCSM, the components (serves) identified in the DA are listed a

  • Crystal reports VS OBIP

    Hi All, Can anyone provide me some advantages and disadvantages for Crystal reports VS OBIP?? Thanks in Advance. Cheers, San

  • How do you get values of local machine running applet on remote server?

    Hi, I have an applet that runs great running the html file on my local machine from a root directory. I've placed my code(java, class, and html files) on the web server and loaded the applet onto a page. The results are merely: "Computer Name: localh

  • Generate java source cod/ contect menu

    I am new to JDeveloper, so please excuse the ignorance. I am using JDeveloper 9.0.3.10.35 and UML modelers 9.0.3.9.4. I am going through the JDeveloper tutorial( Modeling Java Classes tutorial). I design a Class model and i try to generate java sourc

  • Upload Failed. The server storage quota has been exceeded

    Dear All, I have an Excel file on Document library which is more than 100Mb. I am working with it daily (Simple edit, update and save). Since yesterday I am getting error message "Upload Failed. The server storage quota has been exceeded. Save a copy