Vi récursif - vitesse

Bonjour à tous,
Un VI récursif "toto" ... à l'intérieur des sous-VIs.
"toto" est le "main_récursif", et est, bien entendu, configuré en "shared clone".
mais les sous-VIs internes ...
La vitesse d'exécution la plus élevée de "toto" (soit "toto" et l'ensemble de ses sous-VIs")
se présente quand la totalité des sous-VIs sont configurés en "Preallocated clone reentrant + inline subVI"
ordre de grandeur :
si tous les sous-VIs sont en "shared clone" : 37 sec
si tous les sous-VIs sont en "Preallocated clone reentrant + inline subVI" : 13 sec
soit, globalement, 3x plus vite.
(les résultats obtenus en sortie de "toto" sont parfaits dans les deux cas)
Pourquoi ?
Je comprends que l'option "inline subVI" me fasse gagner en vitesse.
Mais "Preallocated clone reentrant" ???? ... pourquoi "preallocated clone" me fait gagner autant de vitesse par rapport à "shared clone" ?
"toto" est un VI récursif, donc le compilateur de Labview ne connaît pas (au départ) le nombre d'imbrications.
Quand "toto" appelle "toto" (recursivité), Labview doit donc réallouer un clone pour chaque sous-VIs (ou pas ???? je ne sais pas)
Cette "pré-allocation" ne conserne (je pense) que l'espace mémoire et non le code.
Quoi qu'il en soit, ces nouvelles pré-allocation à chaque appel de toto (par toto) devrait me faire perdre du temps, or j'en gagne.
Dans la doc disponible sur labview,
je trouve des infos sur "preallocated clone", sur "inline subvi" ... mais très peu sur les deux en même temps.
Il me manque manifestement des éléments de compréhension.
Si un d'entre vous peut m'éclairer, ce serait un gros "plus" pour moi.
merci.

pas "inline et récursif" .... mais .... "inline et preallocated clone"
Je ne parle pas du VI principal ... seul ce VI principal fait appel à lui-même.
mais dans le code de ce "VI principal", il y a des sous-VIs (ces sous-VIs ne font pas appel à eux-même)
Quand je parle de "preallocated clone + inline", je parle uniquement des sous-VIs.
autrement dit :
A est récursif ... A fait appel à A
A est configuré : shared clone (obligé pour un VI récursif)
dans A, j'ai un sous-VI B.
B est configuré : preallocated clone + inline
J'insiste sur le fait que le sous-VI B n'est PAS récursif ... puisque B n'appelle pas B
Mais B fait partie du code de A ... qui lui est récursif, puisque A fait appel à A.
Un VI récursif (shared clone)  peut parfaitement contenir un sous-VI configuré preallocated+inline,
LV accepte sans problème et cela tourne parfaitement.
du concret ?
il s'agit du code de mon chessgame ... en particulier ChessCore.vi
ChessCore.vi (qui est récursif) contient des sous-VIs.
Si ces sous-VIs sont "preallocated clone+ inline" ... ChessCore.vi tourne 2,5 à 3 fois plus vite que si ces sous-VIs sont "shared clone".
un VI récursif DOIT obligatoirement être configuré "shared clone".
Mais ... ! ... les sous-VIs contenus dans ce "main_récursif" ne doivent pas être obligatoirement configurés de la même façon.
Un sous-VI faisant partie du code d'un VI récursif peut parfaitement être "non-réentrant".
Et c'est bien là la source de mon étonnement et de ma question.
Plusieurs configurations sont possibles pour les sous-VIs (non-réentrant, shared, shared inline, preallocated, preallocated inline)
C'est quand je configure l'ensemble des sous-VIs en "preallocated+inline" que ChessCore est le plus rapide (avec une grosse différence)
Pourquoi ?
Quand on préalloue, le temps d'appel est constant, alors que lorsqu'on partage des clones,
on peut se retrouver dans la situation où l'on attend la libération d'un clone ou la création d'un nouveau clone
Serait-ce là la raison ?

Similar Messages

  • Calcul de vitesse à partir d'un signal de position filtré

    Bonjour,
    J'ai un système de caméras qui me donne la position (en Z) d'un point au cours du temps (en temps réel). J'aurais aimé filtrer le signal obtenu puis calculer la vitesse de ce point (toujours en temps réel).
    Pour la vitesse, j'ai trouvé ce sous-VI (j'en profite pour remercier son auteur) qui permet d'effectuer le calcul de la dérivée de la position avec l'aide d'un registre à décalage.
    Mon problème est que je ne récupère qu'une série de valeurs que j'affiche au fur et à mesure dans un graphique, mais pas sous forme de données dynamiques type signal que je pourrais filtrer.
    Je ne sais pas comment faire.
    Quelqu'un aurait-il une piste pour m'aider ?
    Merci d'avance,
    (Je précise que je débute en LabVIEW.)

    Bonjour,
    Voici un exemple (en pièce jointe) qui devrait répondre à votre attente :
    Cordialement,
    Message Edité par Maxime MULLER le 07-04-2008 06:10 AM
    Pièces jointes :
    exemple1.JPG ‏63 KB
    exemple.vi ‏19 KB

  • Calculer une vitesse d'un objet sur une vidéo.

             Bonjour, voila je vous explique mon probleme je cherche à calculer la vitesse automatiquement d'un objet dans une vidéo avec une application labview. Je commence à avoir des idées et je partirais je le Motion dans labvieqw mais après je bloc donc si vous auriez des idées ou meme des solutions je suis preneur.
    Merci pour les future réponse. 

    Bonjour,
    NI Motion est un ensemble de commandes logicielles de haut niveau pour la communication avec les contrôleurs d’axes (type moteurs), donc je ne crois pas que ce soit l’outil que vous recherchiez.
    Votre application va nécessiter un traitement automatisé d’images (peut-être même de l’acquisition d’images?), ce qui peut être effectué avec NI Vision Builder : http://www.ni.com/vision/software/vbai/f/.
    Cette courte vidéo illustre le type d’application réalisable avec NI Vision Builder : https://www.youtube.com/watch?v=e7QJLMvHE1Y. Peut-être cela va-t-il vous inspirer…

  • Mesure de vitesse avec un codeur incrémental

    Bonjour,
    Je souhaite mesurer la vitesse de rotation d'un moteur sur lequel il y a un codeur incrémental HEDS 5540 (3 canaux, 500 impulsions par tour) à l'aide de LabView 8.6 et d'un banc NI cDAQ-9172.
    J'ai câblé les fils de mon codeur sur une carte NI9401.
    Avec l'assistant DAQ, j'ai fait Acquérir des signaux -> Entrée numérique -> Entrée de ligne et j'ai sélectionné : cDAQ1Mod1/port0/line0 à 3.
    Sur ma face-avant j'ai 3 leds (voie A, voie B et voie I) qui s'allument ou s'éteignent en fonction de la rotation de l'arbre du moteur.
    Ma question est : comment mesurer (ou calculer) la vitesse de rotation de l'arbre ?
    Codeur HEDS 5540 : datasheet et data sheet 2
    Mezrci d'avance !

    tu as répondu à ce post dans celui-ci
    Temps entre 2 changement​s d'états
    non ??
    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

  • Vitesse labview

    nous avons une application qui fonction sur une machine avec une version labview 5.1.
    nous souhaitons la remettre sur un nouveau PC avec labview 6i, mais nous ne retrouvons pas la vitesse de fonctionnement normale.
    nous avons desactiver la fonction multi thead qui etait desactivé avant mais ca n'a pas suffit.
    nous pensons qu'il y a d'autres parametres à modifier soit dans labview ou dans windows 2000, avez vous des conseils à nous donner.

    Bonjour,
    Lorsque vous avez mis à jour LabVIEW, avez-vous pensé à mettre à jour les drivers NI également?
    Maintenant, pour optimiser et accroître les performances d'une application LabVIEW, il existe plusieurs points à suivre ou à éviter.
    Ci-joints quelques documents qui vous aideront sûrement à augmenter les performances de votre application :
    http://zone.ni.com/devzone/learningcenter.nsf/03f7c60f17aad210862567a90054a26c/d4708bc2f1e4100586256c2c00505344?OpenDocument
    http://zone.ni.com/devzone/learningcenter.nsf/03f7c60f17aad210862567a90054a26c/5e017f18a8d3fcea86256ee80056c707?OpenDocument
    http://zone.ni.com/devzone/learningcenter.nsf/03f7c60f17aad210862567a90054a26c/31e92019625d489886256931007940cb?OpenDocument
    Concernant l'optimisation d'application LV
    sous 2000, je vous conseille de bien lire ce document :
    http://zone.ni.com/devzone/conceptd.nsf/webmain/D2E196C7416F373A862568690074C759?opendocument
    Sanaa T
    National Instrument

  • Conversion accélération vitesse et déplacement

    Boujours à tous,
    je viens vers vous, car comme le titre l'indique je dispose d'un accéléromètre qui renvoie un signal en v ( 120mv /g) . Je souhaite à l'aide de mon entrée analogique qui receptionne la valeur de mon accélération obtenir le déplacement et la vitesse. Je sais que je dois réaliser une double intégration. Je veux également réaliser une acquisition continue de l'acc déplacement et vitesse... Cependant jusqu'à présent et malgrés de nombreux exemples que j'ai pu observer je ne trouve pas chaussure à mon pied. Il semblerait que je mesure un bruit assez important, je songeais surement à réaliser une autocorrélation...
    ci-joint mon Vi . Quelqu'un peut-il me dépanner ou me transmettre un exemple de Vi correspondant à mon application . car je ne trouve que des exemples "théoriques".
    Cordialement
    Attachments:
    Accel to Vel & Disp.vi ‏3581 KB

    Bonjour emmamto,
    Voici un diagramme qui réalise le calcul que tu souhaite (si je ne me suis pas trompé ;-)
    Concernant ta seconde question je ne suis pas certain de bien la comprendre... si le tension vient d'un capteur tu devrai trouver dans la doc la relation entre les deux qui est en général un relation du type ax+b. Pour implémenter cela en LabVIEW tu peux utiliser les fonctions de la palette Numérique
    PS: Je crois que ce forum est trés similaire
    Benjamin R.
    R&D Software Development Manager
    http://www.fluigent.com/

  • Comment changer la couleur de fond d'un control type indicateur de vitesse ?

    Bonjour à tous,
    Je suis à la recherche de 2 choses pour une interface graphique pour une chaine d'acqusition.
    La première :
     - Comment changer la couleur de fond d'un indicateur de type "Gauge" pour donner une allure d'indicateur de vitesse.
    La deuxième :
    - J'aimerais afficher également cette vitesse de façon alphanumérique comme les afficheurs digitaux.
    Comment puis-je faire celà
    Merci à vous
    Bonne journée
    Z.

    Merci de la réponse en fouillant j'ai trouvé une partie de la réponse par contre pour l'affichage digital j'aimerais un affichage de ce type (cf pièce jointe)
    Pièces jointes :
    XL_Digital.jpg ‏5 KB

  • Affichage de la vitesse avec le signal d'un anémomètre

    Bonjour à tous je suis débutant dans LabView et j ai besoin d'aide car je n arrive pas à transformer mon signal en chiffre numérique proportionnel à mon signal pour avoir la vitesse du vent.
    j ai réalisé mon shéma entier avec mon anémomètre ma carte N.I Carte 6211 et je l ai connecté grace à un cable USB à l ordinateur de base j ai reussi a afficher mon signal sur un graph avec l assistant DAQ et recupere mon signal (pièces jointes-schéma bassique).
    Maintenant je dois utiliser le signal pour le transformer en chiffre numérique proportionnel à mon signal pour avoir la vitesse du vent.
    Pièces jointes :
    Programme version 1.vi ‏54 KB

    Bonjour,
    Tout d'abord je tiens à vous faire remarquer que nous vous apportons de l'aide bénévolement. Le "et vite" me semble donc malvenu... Quoiqu'il en soit, si votre but est juste de récupérer la valeur numérique en sortie de votre tâche DAQmx vous avez 2 solutions déjà données ci-dessus :
    Utiliser le VI "Convertir des données dynamiques" pour obtenir un tableau, image des vos mesures
    Créer une tâches DAQmx et effectuer une lecture des échantillons à l'aide du VI "DAQmx - Lire"
    Je vous invite à prendre une bonne demi heure pour faire plusieurs essais et bien comprendre le fonctionnement de l'acquisition via carte DAQ.
    Pour le traitement des données ensuite, la majorité des outils nécessaires au calcul sont présents dans les palettes "Numérique" ou "Comparaison".
    Maxime
    Certified LabVIEW Associate Developper

  • Compter nombre de tours_capteur de vitesse

    Bonjour,
    Voila, j'utilise LabView 7.1, j'utilise les modules Fieldpoint, le FP-AI-100 pour mon acquisition.
    Mon souci étant que je n'arrive pas à faire l'acquisition de mon capteur de vitesse inductif qui me renvoi une valeur haute et une valeur basse (0 - 16mA)
    Après plusieurs recherches sur le forum, je n'ai pas réussi à trouver et à appliquer ce que je voulais.
    J'aimerais qu'un compteur soit incrémenté à chaque fois qu'un seuil est atteint. De manière à pouvoir en déduire ma vitesse de rotation.
    Si quelqu'un peut m'aider ..
    En vous remerciant d'avance.
    Jimmy

    A chaque fois qu'un seuil est atteint, pour dire, à chaque fois que la valeur 14mA est atteinte en sortie de mon capteur, sur un front montant.
    Le capteur me renvoi du 0-16mA mais pas en binaire, dépendant de l'intensité de la source metallique se trouvant dans son champ d'action.
    Mais j'ai trouvé hier soir ce dont j'avais besoin, voici ce dont j'avais besoin (j'ai remplacé l'entrée booleenne par l'acquisition Fieldpoint de mon capteur inductif)
    Merci en tous cas :-)
    Message Edité par Jimmy89 le 04-11-2007 02:17 AM
    Attachments:
    essai.vi ‏25 KB

  • Comment optimiser vitesse de boucle pour grab

    Bonjour,
    J'ai construis un VI qui a pour but de faire le grab d'une camera GigE (1946*1436 ; 40FPS), de pouvoir faire un zoom sur une ROI et de piloter 2 boitiers de commande de platines de translation (GPIB).
    Le problème que j'ai est le suivant :
    La vitesse de boucle (même sans évenements) est trop lente car lorsque je regarde le fichier avi enregistré, je n'ai pas les 40FPS.
    Lorsque je n'avais pas encore mis la commande des platines de translation dans ce programme, tout était OK.
    La question est : comment optimiser mon programme pour supprimer ce problème?
    Ci-joint : le vi en question
    Merci
    Pièces jointes :
    Pilotage Manip Detection-sans texte sur video.vi ‏259 KB

    Bonjour,
    Sous LabVIEW dans le menu Aide>recherche d'exemple, vous avez à disposition de nombreux exemple dont certain propre à l'acquisition d'image (E/S matérielles>IMAQdx. Vous pouvez réaliser un test avec un exemple réalisant un grab cela vous permettra de déterminer si la vitesse d'acquisition est correct.
    Un autre point important est le format d'enregistrement, afin de gagner en efficacité il est préférable d'enregistrer les données en brut (Raw) ceci afin d'économiser du temps sur la sauvegarde de chaque image. Le format AVI est trés répandu mais sera consommateur de temps car il faut compreser chaque image qui sera sauvegardé.
    Je vous suggére donc de réaliser des essais avec l'exemple qui se trouve dans C:\Program Files\National Instruments\LabVIEW 2011\examples\IMAQ\IMAQdx Examples.llb\Low-Level Grab Raw Data.vi afin de vérifier les performances d'acquisition et de stockage de votre systéme PC avant d'intégrer cette fonctionnalité à votre application par la suite.
    Cordialement,
    Christophe S.
    FSE East of France І Certified LabVIEW Associate Developer І National Instruments France

  • Pourquoi mon iphone 4s chauffe et se decharge vitesse grand v

    Pourquoi mon iphone 4S chauffe et sse decharge vitesse grand v
    Je reviens d'espagne et la bas il ne l'a pas fait j'y comprends rien
    y a t-il quelqu'un qui a la solution  Je suis chez bouygues
    cordialement

  • Position angulaire + vitesse moteur sur NI myRIO

    Bonjour!
    Je suis venu demander un peu d'aide, je suis nouveau sur Labview et je travaille sur un projet avec l'appareil NI myRIO et la commande d'un moteur.
    De mon programme en pièce jointe, j'obtiens de l'encoder express VI un compteur.
    J'aimerais à partir de ce compteur déduire la position angulaire ainsi que la vitesse.Le coeffiscient "228" correspond au nombre de pas pour 1 tour, soi 360°
    J'ai essayé 2 méthodes mais je n'obtiens rien. Je pense avoir la bonne logique mais comme je découvre le logiciel je reste bloqué sur ça...
    Si quelqu'un pouvait m'aider ce serait fort aimable.

    J'ai complétement retravaillé l'ancien programme et j'ai obtenu la vitesse du moteur par rapport à la position angulaire.
    J'ai voulu ajouter un PID afin de faire un système en BF.
    En utilisant le rapport cyclique comme commande qui évolue de 0 à 1.
    Mais je n'arrive pas à identifier comment récupérer justement l'erreur qui est exploitable pour rendre ma commande juste.
    J'ai mis le fichier en pièce jointe.
     

  • NI softmotion: vitesse du moteur est limité à 51rev/sec

    Bonjour à tous,
    Dans mon application, j'utilise un CompactRio NI9074, un module NI9514, un AKD EtherCAT et NI SoftMotion 2012 pour piloter un servo-moteur de AKM23F. J'ai réussi à piloter le moteur sous le mode de SCAN Interface et de FPGA Interface séparément, mais le problème c'est: la vitesse du moteur ne peut pas dépasser à 51 rev/sec, si j'augemente sa vitesse, il s'arrête dans quelques secondes et une erreur "Position error occured" apparait sur le "Interactive test panel".   Quelqu'un a déjà rencontré ce problème ?
    Merci d'avance pour votre aide!

    Bonjour!
    Le RT Servo Drive appel le VI du FPGA: Du coup on ne devrait normalement pas l'appeler directement.
    Le RT Servo Drive va seulement faire la configuration de l'axe. Il faut le lancer avant que vous ouvriez le test panel.
    Après il faut utiliser le interactive test panel pour vraiment le piloter. La dans le deuxième registre, vous avez un champ pour la vitesse en rev/sec. Dans le premier registre il faut aussi noter combien de révolution vous aimeriez faire. Après quand vous appuyez sur play, le moteur devrait tourner.
    Le manual suivant dans une bonne description, comment utiliser le SoftMotion avec cRIO et le FPGA:
    Using the NI SoftMotion Axis Interface - July 2009 - National Instruments
    http://digital.ni.com/manuals.nsf/websearch/383F3C​8B73ADA618862576010057570B
    Veuillez regarder aussi le lien suivant pour plus des informations:
    Introduction to LabVIEW NI SoftMotion and C Series Drive Interfaces - National Instruments
    http://www.ni.com/tutorial/9666/en/#toc8
    Vous pouvez aussi essayer les autres examples dans le projet. Est-ce qu'ils marchent?
    J'espère que ça aide pour resoudre votre problème.
    Salutations
    Corinne

  • Testand: Vitesse d'exécution de NI-Testand

    Bonjour,
    Voilà depuis que je suis passé à la version 4.5.1 de NI-Testand, mais séquences s'exécutent lentement, pas à la vitesse voulue. J'ai donc la plus part de mes tests qui se retrouvent Fail à cause ça.
    J'aimerais savoir comment augmenter la vitesse d'exécution d'une séquence sur NI-Testand ?
    Merci d'avance.

    Bonjour,
    L'option Disable tracing (désactiver la trace) va augmenter significativemment la vitesse d'exécution.
    Cette partie du forum est en Anglais au passage...
    Cordialement,
    Rodéric L
    Certified LabVIEW Architect

  • Problème vitesse exportation Adobe Premiere Pro CS6

    Bonjour,
    Je viens d'acquérir Adobe Premiere Pro CS6. J'étais auparavant sur Adobe Premiere Pro CS5.5.
    Dans la précédente version, lorsque j'exportais des vidéos d'environ 10 minutes au format H.264 destiné aux Ipad en grand écran, 25 images par seconde, mon exportation se faisant en 10 minutes à peine avec un fichier de 100Mo à peu près.
    Maintenant, pour un export au format H.264 pour Ipad 480p 25 images par seconde, le poids reste identique mais c'est plus 10 minutes mais 1 heure d'exportation !!
    C'est juste pas possible donc j'ai sans doute loupé un épisode, je vois pas d'autres raisons. Est-ce possible de retrouver la rapidité de CS5.5 ? Je suis du coup extrêmement pénalisé dans mon travail, obligé de faire tourner l'ordinateur toute la nuit pour exporter 10 vidéos.
    Merci pour votre aide.

    You still want to apply the hack in order for Premiere Pro to use your card for GPU acceleration.
    With Premiere Pro closed, delete the following file. Then reopen Premiere Pro and in Project Settings, ensure that you have it set for CUDA.
    C:\Program Files\Adobe\Adobe Premiere Pro CC\cuda_supported_cards.txt

Maybe you are looking for