Structure producteur Consommateur

Bonjour,
Avec Labview, je réalise une acquisition USB avec une carte commerciale non NI.
Actuellement, j'utilise une structure classique, c'est à dire, acquisition, affichage et traitement.
Cependant, j'ai 32 voies d'acquisition USB.
A chaque voie, j'ai un sous-vi qui me réalise l'acquisitions de la voie.
Pour résumer, je souhaiterais optimiser mon programme d'un point de vue acquisition de données, et limiter au maximum le temps mort entre 2 acquisitions.
C'est pourquoi j'envisage d'utiliser une structure Producteur / Consommateur. Je n'ai jamais utilisé ce type de structure et les exemples que j'ai trouvé utilisent une acquisition DAQmx.
Ma 1ère question, est-il possible d'utiliser cette structure avec une acquisition non DAQmx ?
Quels conseils avec vous à me donner, et par hasard, avec vous un bon lien ou tuto expliquant le mode de programmation de ce type de structure.
Merci d'avance

Bonjour,
Je pense que le choix d'une structure producteur consommateur est une bonne solution par rapport à ce que tu souhaite faire.
Je te conseille d'utiliser une boucle d'acquisition et une boucle de traitement et d'affichage. Je te conseille de transmettre les données de tes acquisitions à la boucle de traitement et d'affichage à l'aide d'une file d'attente (FIFO).
Cette structure peut être utilisée pour des acquisitions non DAQmx (par exemple USB, série, VISA...).
Je ne sais pas si tu as beaucoup d'étapes de traitement, mais tu pourrais utiliser des structures machine à état pour tes deux boucles. Voici un liens concernant les machines à états :
http://zone.ni.com/devzone/cda/tut/p/id/3024
Cordialement.

Similar Messages

  • Structure Producteur Consommateur et Sous-Vi parallèles

    Bonjour,
    Je souhaite développer une application permettant de piloter plusieurs source/multimètre en GPIB et effectuant des opérations en parallèle mais indépendantes entre elles.
    Le pilotage de ces sources se ferait sur une seule face avant avec plusieurs onglets suivant la source. Je pensais partir sur une structure du type producteur consommateur avec des sous-vi en parallèles gérant chacun une source.
    J'ai donc commencé à réaliser cette structure en m'appuyant sur la très célèbre doc de expressionflow
    Cependant, je rencontre 2 problèmes que je n'arrive pas à résoudre :
    - Une erreur 1 apparait lors de l'execution suite à l'ajout d'un élément dans la file d'attente par le vi parallèle.
    - La fonction d'envoi de message ne fonctionne pas du premier coup, il faut appuyer deux fois sur Send pour transmettre le message.
    Je joins mon programme qui sera certainement plus parlant que de longues explications.
    Merci pour vos avis.
    Attachments:
    ECLab.zip ‏138 KB

    Hello,
    I want to develop an application to control multiple source/multimeter by GPIB and performing operations in parallel but each ones independently.
    The control of these sources would be on a single front panel with multiple tabs depending on the source. I thought from a producer/consumer model with parallel sub-vi, each one managing one source.
    So I began to realize this structure with the famous doc of expressionflow
    However, I encounter two problems I can not solve:
    - An error 1 appears on execution due to the addition of an element in the queue by the parallel vi.
    - The function of sending message does not work the first time, you must press twice on Send to send the message.
    I have attached my program that will certainly be more clear than long explanations.
    Thank you for your opinion.
    Attachments:
    ECLab.zip ‏138 KB

  • Problème producteur/ consommateur avec file d'attente en programmation objet

    Bonjour,
    Comment programmer une structure producteur consommateur en orientée objet?
    Avez-vous quelques exemples?
    merci pour votre aide

    Jette un coup d'oeil la dessus  : https://decibel.ni.com/content/groups/actor-framework-2011
    Olivier JOURDAN
    SAPHIR | Certified LabVIEW Architect | Topaze on NI Community | LabVIEW add-ons on NI Community | Follow me on Twitter

  • Choix de structure pour une IHM

    Bonjour,
    Je m'essaye actuellement au Xcontrol et tente une IHM un peu poussé que mes habituelles.
    Comme vous pouvez le voir dans mon programme j'utilise les splitters pour passer d'une "fenêtre" `l'autre lorsque l'on appuie sur les graphiques.
    Ma question est la suivante : faut il que je gère aussi ces mouvements comme des Xcontrols ? dans ce cas cela signifierait gérer tout la face avant en tant que Xcontrol non ? ou dois je tout laisser comme avant ?
    Je cherche juste à partir dans la meilleure direction pour la suite de mes développements.
    Merci d'avance !
    (normalement toutes les pièces se trouve dans le dossier)
    Résolu !
    Accéder à la solution.
    Pièces jointes :
    IHM.zip ‏435 KB

    Salut,
    il n’y a pas l’ensemble du code, mais si je comprends bien tu veux faire un effet « slider » « swipe screen », pour décaler ta page avec un effet de mouvement et tu veux le gérer avec des splitters.
    Je réponds non à la question : je gère aussi ces mouvements comme des Xcontrols 
    Pour info, pour le principe, je pense qu’il y a plus simple, tu as une fenêtre, qui a une origine, tu changes programmatiquement l’origine. Je te conseille de regarder le projet de
    http://chrislarson.me/content/chris-larson/labview-vi-ipad-style-page-swiping
    même si l'ensemble du code n'est pas à prendre en exemple.
    J'ai codé une IHM qui gére plusieurs pages avec une gestion tactile, comme le soft de Chris.
    La gestion n'est pas un objet graphique, de type XControl, mais un process (ou actor ou acteur ou programme informatique) qui gére, en parallèle du reste du code, les actions (états, message) que lui produit ue autre structure.
    Donc structure producteur-consommateur, avec un structure "event" dans le code IHM du Main, qui produit sur détection d'actions de l'utilisateur sur l'IHM, par exemple par FIFO, à une deuximée boucle while en // (le deuximème process) des actions. Sur les actions, la deuxième boucle va gérer le "déplacer l'origine" de la fenêtre".
    Tu peux le coder facilement sur un base de QMH (ou QDMH), cf les templates de projet de LabVIEW.
    J'ai commencer, il y a quelques temps, à encapsuler le code de gestion "swipe" dans un code autonome, type Actor de l'actor framework, mais je n'ai pas terminé, par manque de temps, mais il faudrait... si je le termine je te le donne...
    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

  • Detection evennement port serie

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

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

  • Comment choisir sa caméra IP ?

    Bonjour,
    Je travaille actuellement sur l'amélioration d'un programme sous vision.
    Il s'agit d'un programme qui avait été dévellopé pour le concour robotique des NI days.
    L'idée était de visualiser les couleurs du rubic's cube, et de déterminer de qu'elle côté elles se trouvaient afin de pouvoir le positionner par la suite sur la bonne face.
    Malheureusement, au finale nous n'avons pas put l'utiliser car il n'était pas au point et que nous manquions de temps.
    J'aimerai maintenant l'améliorer ce pourquoi j'aurai quelques questions :
    1. La caméra utilisé (Axis M1011 : http://www.axis.com/fr/files/datasheet/ds_m10_40707_fr_1009_lo.pdf) ne me parait pas approprié pour détecter précisement différentes couleur à au moins 2m et suffisament rapidement. En sachant que l'idée est de faire un positionnement en temps réel, il faut pouvoir détecter différent élément côté à côte, faire du suivit de ligne etc ...
    Quel est votre avis sur le choix de la caméra ? n'en faudrait-il pas une plus rapide avec une meilleurs résolution ou tout dépend-il du programme ?
    2. Le programme qui a été concu par mes collègues me parait lui même lent au niveau de l'analyse. Que pourrais je faire pour l'améliorer ?
    De plus, si vous aviez des sites web ou des tutos pour que je puisse progresser en vision, cela m'aiderai beaucoup.
    Merci d'avance pour vos réponses !
    Attachments:
    CameraIP.vi ‏91 KB
    TraitImage.vi ‏50 KB
    Initialize.vi ‏24 KB

    Bonjour,
    1) Au niveau des conseils pour votre caméra, je vous invite vivement à contacter National Instruments au 0157662424 et demander le service commercial, ils sauront vous diriger vers le matériel adéquat. Maintenant, j'attendrai d'abord, si j'étais vous, d'améliorer votre code et de vérifier si le souci provient bien du matériel. Vous m'aviez fait part de temps réel, j'espère que vous avez soit une smart caméra ou une cible temps réel comme un compact RIO ou une sBRIO.
    2) J'ai regardé votre programme, vous devriez utiliser une structure producteur consommateur. Dans la boucle producteur, vous venez récupérer votre image, vous transmettez les infos via une FIFO dans la boucle consommateur, enfin vous réalisez votre traitement dans cette boucle. L'exécution de votre code sera beaucoup plus optimale.
    Ce que je vous propose de faire, c'est de vous rendre sur notre site www.ni.com, en haut à droite, vous avez un onglet de recherche. Si vous tapez producteur consommateur (essayez également en anglais) ou vision (essayez également "OCR", fonction de reconnaissance), vous aurez à votre disposition une grande quantité d'informations et d'exemples.
    Je vous souhaite une bonne continuation,
    Cordialement,
    Matthieu RICORD
    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;}
    Été de LabVIEW 2014
    12 présentations en ligne, du 30 juin au 18 juillet

  • Vider la RAM

    Bonjour,
    J explique mon probleme, je fais l acquisition de 32 signaux analogiques que je dois afficher et enregistrer
    Pour cela j utilise une structure producteur consommateur.
    Dans le producteur je lis mes signaux et je les affiche avec des 5 graphes deroulants.
    Dans ma boucle consommateur, j enregistre les signaux a la frequence d echantillonage d entree et je les reechantillone pour les enregistrer a une frequence d echantillonage plus basse.
    Mon probleme est que j ai beau mettre n importe quelle valeur de sample to read avec n importe quelle frequence d echantillonage, j obtiendrais toujours le message comme quoi mes donnees ont ete ecrasees au bout d un moment. Bien sur ce moment change en fonction de ces deux parametres. De plus lorsque j observe la consommation de la memoire avec le windows task manager, elle augmente tout doucement jusqu a obtention de l erreur.
    Je ne pense pas que cela vienne de la taille de mon buffer vu que la taille de ma RAM augmente au fur et a mesure.
    Je me demandais si cela ne venait pas de boucle consommatrice qui consomme trop le processeur et empecher donc de lire le buffer correctement. et donc si il ne fallait pas utiliser un cadencement. Si telle est la reponse, j aimerais savoir ou est ce que je dois mettre ce cadencement, dans la boucle consommatrice ou productrice?
    Et si ca ne vient pas de ca de quoi cela peut il venir?
    Merci de votre reponse, en esperant que j ai bien detaille mon programme;
    Je vous mets en piece jointe mon VI (je ne sais pas si il fonctionne correctement car j ai fais des modifications chez moi et je n ai pas pu les teste encore en entreprise)
    Pièces jointes :
    acquisition.vi ‏100 KB
    Log_Channels_(SubVI).vi ‏15 KB

    Alors... Il y a pas mal de chose à dire, je vais commencer par un petit conseil général : il faut éviter de faire de diagrammes trop grand, ça complique la lecture et le débogage, pour cela il faut faire des sous-vis, bcp de sous-vis! En outre, cela permet d'éviter de dupliquer du code.
    Je ne comprends pas très bien l'utilité d'enregistrer 2 fichiers, un avec toutes les données et un autre avec les données sous échantillonnées, pourquoi faire ça?
    Pour ce qui est du cadencement, je ne pense pas que le problème se pose de cette manière. La boucle d'acquisition est cadencée implicitement par la fonction d'acquisition (si Facq = 10kHz et nb de point = 1k, la boucle va tourner à environ 100ms, un poil plus lentement lorsque "start acquisition" est vrai, car il faut mettre les données des 32 voies dans la queue, en passant 32*8*1000/1024 = 250, un bloc acquis représente 250kByte). Je ne pense pas que le problème vienne de cette boucle.
    Dans la boucle "consumer", il y a quelque petites maladresses :
    - la multiplication par le ration est faite 2 fois et sur chaque voies (une fois avant l'affichage et une fois avant l'enregistrement)
    - l'indexation et la concaténation des tableaux de voies n'est pas nécessaire
    - l'enregistrement n'a pas besoins d'être dans une boucle, la fonction "write tdms" accepte les tableaux de waveform en entrée
    Pouvez vous en dire un peu plus sûr l'erreur qui se produit? Dans quelle boucle, après combien de temps, etc... et surtout quelle est la cadence à laquelle la boucle "consumer" tourne effectivement, si elle met plus de 100ms pour s'exécuter il y aura toujours un moment où le système va manquer de mémoire la queue se rempli plus vite qu'elle n'est vidée...
    Hope this helps
    When my feet touch the ground each morning the devil thinks "bloody hell... He's up again!"

  • Updating Continuous contour data à partir d'un fichier .txt

    Bonjour,
               J'ai une trajectoire dans un fichier .txt (environ 3000 points à une fréquence de 100Hz) que je veux lire et updaté la commande à l'actionneur à coup de 40 éléments. En me basant sur l'exemple Continuous Axis Contour Move, y a-t-il quelqu'un qui a une idée de comment faire intégrer l'envoi des données?
    Merci

    Bonjour Math50,
    Merci d'avoir posté sur le forum de National Instruments.
    L'idée de départ pour résoudre votre problème est de remplacer, dans l'exemple, la sinus( ou autre) générée, par les points (40 ou autres en fonction de la table déclarée) qui proviennent de votre fichier texte.
    En terme d'architecture, soit vous réalisez la lecture au sein de votre boucle while, ce que vous pourrez faire avec les VI E/S sur fichier (ASCII); soit en utilisant une structure producteur/consommateur qui vous permet de lire votre fichier texte dans une premiere boucle (productrice), d'envoyer les points dans une pile (FIFO) et de les récupérer dans la boucle (consommatrice) pour les utiliser.
    Bonne journée,
    Flo
    Open Diagram First

  • Svp correction de programme

    Bonjour,
    je suis un stagiaire qui a besoin de votre aide car on m'a donné le projet en retard.
    cela fait plus 6 semaines que je suis sur le projet, il me reste jusqu'a vendredi pour finir !!
    j'ai avancé mais je suis maintenant bloqué
    le but de mon projet est de piloter une alim stablisé via une carte 6008: 
    si vous regarder la face avant de mon programme ci-joint vous devez comprendre son fonctionnement.
    mes question sont:
    - je veux affaicher les information du tableau dans le graphique(c-a-d la tension udebut qui évolue jusqu'a avoir ufin en fonction du temps(h,m,s))
    - pour la partie demarer acq je veux envoyé les infos du tableau au nidaq
    - et si vous avez des conseils n'hésitez pas je suis novice sur labview.
     il me sreste que 3 jours ça sera très sympa de m'aider.
    je suis un stage qui a déja posté des message ici mais j'ai perdu mon mdp donc j'ai changé de compte
    merci d'avance 
    a.maxime
    Pièces jointes :
    commande carte ni 6008.vi ‏121 KB

    Bonjour maxmus77,
    Tous d’abord, vous ne pouvez pas imbriquer une structure événement dans une autre structure événement.
    Préférez l'utilisation d'une structure de type Machine à état avec gestion d'événement, ou une structure producteur consommateur avec gestion d'événement.
    Machine à états simple
    http://www.ni.com/white-paper/14120/fr/
    Application Design Patterns: Producer/Consumer
    http://www.ni.com/white-paper/3023/en/
    Que voulez vous faire exactement avec votre USB 6008. Si vous êtes extrêmement pressé, Je vous conseille de consulter les exemples DAQmx présent dans LabVIEW.
    Cordialement, 
    Sabri JATLAOUI - Certified LabVIEW Developer

  • Win8 Interface?

    Bonjour a tous
    Pour l'un de mes projet et pour des projets à venir, je souhaiterais réaliser des interfaces avec un style qui rappel Windows8 ou un style que l'on peut retrouver sur tablette en général...
    Je viens de réaliser une première IHM dans ce style, je me pose cependant la question de savoir si ma facon de réaliser ce type d'interface ne risque pas de provoquer une certaine "lourdeur" dans l'exécution du reste du programme?
    J'ai actuellement une state machine dédié exclusivement au comportement de mon IHM, celle ci gère les 4 Splitters (haut, bas, gauche et droite) de mon IHM, leur position en cas de redimensionnement de la fenêntre, leur facon de se déployé ect...
    Je pense ajouter le reste de mon code dans une autre state machine qui tournera en parrallel de celle ci mais avant de continuer dans ma lancer et si possible pousser encore plus loin se style d'IHM, je voulais avoir votre avis sur la question.
    Ma question est celle ci, l'utilisation de splitter pour créer diffrente "page" ne risque pas de faire ramer mon programme? et il préférable d'utiliser une boite à onglet comme je fais d'habitude? => prob de la boite a onglet, je perd cette effet de slide que j'aime bcp... Utilisez vous les splitters? si dans chaque "page" je met bcp de variable, cela risque t il de ramer?
    Je vous joint le VI de mon interface en v2014 et 2010 ca sera bcp plus parlant.
    Merci d'avance de vos avis
    A+
    Pièces jointes :
    IHM W8 2014.vi ‏562 KB
    IHM W8.vi ‏562 KB

    Re bonjour et merci de vos réponses,
    Je viens de modifier mon code vers une structure Producteur/Consommateur comme vous me l'avez conseillé.
    J'ai ensuite ajouté quelques petites choses comme, les boutons qui s'agrandisse au passage de la souris (petit effet sympa jtrouve )
    J'ai aussi tenté d'effectuer un ajustement automatique de la positions de mes boutons au cas ou l'utilisateur déciderait d'agrandir la fenêtre. Cela marche plutot pas mal pour tout mes boutons sauf pour un, le bouton "retouraccueil1" situé dans le "menugauche" ne s'encre pas correctement sur le bord droit de la fenêtre. Je ne comprend pas trop les coordonnées que je récupère pour ce bouton...
    Je voudrais réaliser cette options pour mon interface car quand je développe un banc de test, la résolution du PC cible n'est pas toujours la même, ce qui m'oblige d'habitude à remanier moi même l'interface... J'ai entendu parler d'une option qui permet de faire cela dans les options du VI (2 cases à cochés) mais dans un premier temps: je ne peux pas coché la 2ème case si j'utilise des splitters et dans un second temps il parait que l'adaptation n'est pas vraiment optimiser... Je n'ai donc même pas testé cette option...
    En ajoutant ces quelques options, je me rend vite compte que mon VI commence à bien se compliquer alors que je ne gère la position que  de quelques boutons... (voir le "init" de la boucle condition pour comprendre, ca devient un peu usine à gaz quand même....) Alors je me dit que si il faut que je m'amuse à gérer tout mes futurs indicateurs/commandes pour qu'ils se placent correctement au redimenssionnement de la fenêtre ca va tres vite devenir pénible juste pour un soucis d'esthétique et risque aussi de devenir assez lourd pour les PC cible qui ne sont pas des bêtes de course vous vous doutez bien...
    Alors... Pensez vous que m'a facon de faire est correct? si non, Connaissez vous une méthode qui me permettrez de réaliser la même chose de manière plus "propre" et moins comsomateur de ressource?
    Si vous trouvez que ma méthode utilisé n'est pas si mal et que je peux continuer dans cette voix: pour le reste de mon programme ( la partie controle et mesure ect) je repars sur une autre structure Producteur/Consommateur en parallel de celle pour mon IHM ou alors j'intègre mon programme dans celle ci?
    Merci d'avance à tout ceux qui pourrais me donner des conseils sur la marche a suivre pour réaliser une interface qui se rapproche un peu de ce qu'on peu trouver de nos jours sur nos PC ou tablette.
    PS: Le but de ce projet serait de me créer un modèle d'interface "standard' que je viendrais compléter en fonction des besoins du Banc de test demandé. Tout mes futurs banc de test serait basé sur ce modèle d'interface.
    Dans ma société, je suis seul à m'occuper des bancs de test, mon chef me demande un banc qui soit capable d'effectuer telle ou telle mesure et c'est tout, il me laisse carte blanche pour le reste
    Pièces jointes :
    IHM W8 2013.vi ‏694 KB

  • Depuis peu quand je veux imprimer la pochette d'un cd que j'ai gravé , la page arriére avec les titres s'imprime mal tout est presque superposé,j'ai éssayé sur d'autre pc et sur deux imprimants différente toujour le méme probléme

    depuis peu quand je veux imprimer la pochette du cd que je viens de graver ,la face avant imprime bien les pochette des musiques qui sont dessus mais pas l'autre partie avec les titres qui sont imprimé presque superposé donc illisible ; j'ai eu la méme chose avec mes autre pc et les deux imprimantes que je posséde !!!  pouvez vous m'aider merci

    Bonjour,
    Si tu utilises le mode d'acquisition continue, c'est alors que tu utilises la méthode que j'ai appelé bufferisé. Celle non bufferisé etant "Un point, sur demande".
    En revanche, je te conseille de définir un buffeur de plus d'un point sur la fonction de cadencement (entrée échantillons par voie), car de cette manière, le driver va créer un buffeur de réception des acquisitions faites par la carte. Dans le cas où tu voudrais aller un peu plus vite, le buffeur sera à même de gérer l'arrivée des points.
    Ce qui n'empêche pas de ne lire qu'un point lors de l'appel de la fonction DAQmx Lire.vi
    Un autre conseil, c'est par rapport au timeout que tu utilises pour la fonction de lecture. Tu as dit que le temps entre 2 points peut parfois être très long. Or, si tu mets un tiemout trop court, la fonction te retournera une erreur, mais si tu le mets très long, c'est ton programme qui risque de ne pas réagir tant qu'un point n'est pas disponible. Cela peut être très gênant si tu es obligé d'attendre 1h entre le moment ou tu appuyes sur ton bouton stop de ta boucle while, et le moment où ta fonction s'arrête et te permet de réellement quitter la boucle.
    Pour pallier à ce problème, je te conseille d'utiliser un petit Timeout, mais de venir tester le code d'erreur -200284 (equivalent au timeout) et de ne pas utiliser la donnée issue de la fonction de lecture lorsque cette ereeur apparait, mais de néanmoins continuer à exécuter ta boucle.
    Ca, plus la structure producteur/consommateur...je pense que tu es sur la bonne voie.
    Cordialement,
    Olivier L. | Certified LabVIEW Developer

  • Probleme écriture sur disque

    J'utilise des cartes USB 9234 pour faire de l'enregistrement dynamique en continu (jusqu'a 51.2kEch/s x 4 voies)
    mon application utilise directement la DLL DAQMX.
    Depuis quelques temps je rencontre des problémes sur les PC's équipés de disque SSD sous W7.
    leur temps de latence intempestif interdit l'écriture en temps voulu sur le disque.
    comment puis-je contourner le probléme ?
    merci
    Résolu !
    Accéder à la solution.

    Bonjour,
    Je ne connais pas Delphi XE mais comme Helmut je me demande si vous utilisez une structure producteur-consommateur.
    Le Wear Leveling est un standard dès qu'on utilise de la mémoire flash. Son but est d'étendre la durée de vie de ce type de mémoire. Nous avons d'ailleurs une documentation à ce propos ici.
    Bien qu'il concerne LabVIEW et nos cibles Temps-Réel, ce tutoriel pourrait vous guider afin d'optimiser les accès mémoire. Entre autre, l'idée de bufferiser les données dans la RAM pourrait être intéressante. Vous pourriez faire moins d'accès fichier en enregistrant plus d'un coup.
    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...

  • Recherche exemple simple sur Actor Frameworks

    Bonjour,
    Je recherche un exemple très simple utilisant la programmation Objet avec le module Actor Frameworks, tous les exemples que j'ai pu trouver utilisant ce module me paraissent un peu complexes.
    Mon application consiste à utiliser une structure Producteur/consommateur en POO.
    Comment utiliser cette structure Producteur/Consommateur avec Actor Frameworks.
    Merci pour votre aide.

    Olivier JOURDAN a écrit :
    [...] AF est un très bon framework [...]
    [...] Pour bien comprendre son utilisation il faut déjà une bonne maitrise des concepts liés à l'OOP[...]
    [...] Les exemples les plus simples se trouverons sur le groupe  Actor Framework du NI Community.[...]
    [...] s'il est puissant, l'AF nécessite une bonne connaissance de LV[...]
    Perso je suis d'accord avec Olivier (comme toujours), l'AF est très puissant mais pas simple d'utilisation.
    La NI community me semble être le meilleur endroit pour trouver des informations. Il y a notement le document
    « READ THIS FIRST to get started with Actor Framework" by ElijahK in Actor Framework 2011 [...] We've uploaded a lot of different documents to this web community to discuss the Actor Framework. This gives you a summary of the documents so you know where to start. [...]
    Un producteur consommateur avec structure événementielle et file d'attente (type cluster : état + donnée) est plus simple à utiliser. Question évolutivité il n’y a pas de problème.
    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 d'acquisition et de traitement de donnée analogique

    Bonjour,
    Je dois faire l'acquisition de données provenant d'un encodeur angulaire ( pour mesurer la position d'un pendule) avec une carte NI PCI-6013 je prend mes données sur N échantillons à raison de 5000 échantillons à une fréquence de 50kHz. Je dois donc afficher l'angle en continue et si l'utilisateur le souhaite enregistrer, au temps souhaité et à une fréquence de : 10,100,1000,10000 Khz,  la position en fonction du temps. Tout marche bien pour afficher l'angle en continue mais voilà dès que j'enregistre et que j'affiche le graphe en fonction du temps les données sont saccadées ( print screen en pièce jointe).
    Je suis débutant sur labview et c'est la première fois que je fais de l'acquisition. Je met mon vi en pièce jointe toute remarque est bonne à prendre ne serais-ce que pour simplifier mon programme.
    Je vous remercie d'avance
    Pièces jointes :
    Pendulesimple2012.JPG ‏136 KB
    PenduleSimple2012V1.01.vi ‏73 KB

    Bonjour Plantes,
    Dans votre programme, vous utilisez un assistant DAQ en échantillonnage fini, intégré dans une boucle While, certainement pour faire de l'acquisition en continue.
    Pourquoi ne pas utiliser directement un échantillonnage continu?
    Votre problème est certainement lié à la manière dont vous construisez vos tableaux (de manière dynamique), ce faisant LabVIEW à besoin de faire des réallocations mémoire constante pour remplir ces tableaux. Ce qui engendre un temps qui aura tendance à augmenter tout le long de l'exécution de votre application.
    Aussi, le fait de passer de gros tableaux à votre Graph XY, demande du temps à LabVIEW pour rafraichir votre FaceAvant ce qui peut donner cette sensation de saccade.
    Pour éviter cela, je vous encourage à utiliser une structure producteur/consommateur décrite ci-après. Cette Architecture permet de faire dans une boucle votre acquisition de données de manière continue ou non, et ensuite de déporter le traitement des données dans une autre boucle (consommatrice). Ce faisant votre acquisition de données n'est pas impactée par le temps de traitement des données.
    Ceci étant dit, je vous encourage à prendre connaissance des éléments suivant, qui vous permettrons de mieux comprendre comment fonctionne LabVIEW et comment utiliser de manière efficace la programmation DAQ, et les architectures associées:
    1 . Getting Started with NI LabVIEW Student Training
    2 . LabVIEW Application Design Patterns
    3 . Learn 10 Functions in NI-DAQmx and Handle 80 Percent of Your Data Acquisition Applications
    4 . Getting Started with NI-DAQmx: Main Page
    Je vous souhaite une bonne journée,
    Rémi D.
    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;}
    >> Les rencontres techniques de NI - Mesures et acquisition de données : de la théorie à la mise en ...

  • Port usb- Structure

    Bonjour à tous,
    Je suis actuellement en stage dans une petite entreprise. Je me consacre à créer un programme qui va automatiser la calibration de leur capteur en température.
    Les capteur communique par une liaison rs232 transformé par une clef usb: USB-*‐série le FT232R en USB grace à un ftdi inséré sur les carte.
    Ma première question est quelle est la structure la plus adapté pour pouvoir calibrer une multitude de capteur en même temps? Est ce l'utilisation de VI rendez vous en fin de stabilisation des capteur.? Ou plutôt une structure Maître esclave? Producteur consommateur?
    Dans un second temps lorsque je lance mon programme j'arrive à lire les info renvoyé par mes capteurs mais lorsque que j’arrête le programme je suis obliger de quitter le programme et de débrancher rebrancher mon capteur au port usb. J'aimerai pouvoir effectuer ce reboutage des com usb de façon automatique. Cela est'il possible?
    Merci
    Cordialement
    RA

    Google translate:
    I bought a MD313 (2011 MacBook pro 13" i5) MacBook pro this summer. But after connecting my [USB] fan, the port only works with the fan. When I plug one USB, no signal connection. For 1 external hard drive, there is only noise in the motor drive and the light flashes, by contrast on the mac, nothing is displayed, as if I have nothing connected.
    I tried to alt Cmd PR but nothing has changed
    Could you advise me how to solve this problem please?
    Thank you in advance for your answers.

Maybe you are looking for