Parallélisme FPGA - Génération / Echantillonnage

Bonjour à tous,
Je travail actuellement sur une application sensé générér un signal sinusoïdale à fréquence variable, qui sera alors envoyé dans un procédé de commande. Cette même application doit alors échantillonnée la sortie de ce procédé.
Les deux partie marche parfaitement séparement, mais une fois ensemble, je constate des sauts sur l'oscilloscope du sinus généré ainsi que sur l'échantillonnage...
J'ai essayer de jouer sur les fréquences d'échantillonnage, mais rien n'y fais...
Quelqu'un aurait une idée de où le probleme peut venir?
Cordialement,
Nathan
P.S.: Vous trouverez en piece jointes mes codes, c'est peut etre plus pratique pour dépanner
Résolu !
Accéder à la solution.
Pièces jointes :
Regul Num.zip ‏389 KB

En général c'est une jolie preuve par 3 selon la profondeur de la FIFO, la fréquence d'acquisition FPGA (ou génération), et le temps de cycle côté RT.
Exemple : si j'acquiers dans le FPGA 1 échantillon toutes les 10µS, et je l'envoie dans ma FIFO DMA, côté RT je dois faire en sorte de lire 1000 éléments toutes les 10ms (arbitrairement) (à condition d'avoir une FIFO FPGA suffisamment grande pour qu'elle envoie les données vers le controleur au fil de l'eau sans en perdre).
Dans la pratique, pour lire ces 1000 éléments, il y a plusieurs méthodes, l'essentiel est de ne pas perdre de données, de ne pas avoir un CPU à 100% et de ne pas laisser les FIFOs se remplir.
Une illustration complète dans le classique cRIO Dev Guide :
- http://www.ni.com/compactriodevguide/f/
La leçon 3 contient notamment un exemple.
--Eric
Eric M. - Application Engineering Specialist
Certified LabVIEW Architect
Certified LabWindows™/CVI Developer

Similar Messages

  • Parallélisme et vitesse

    On pourrait "à première vue" s'attendre à ce que le code "B" soit plus rapide que le code "A"
    Parallélisme contre séquentiel .... cela semblerait "logique".
    Et bien pas du tout ... le code "A" est 2x plus rapide que le code "B". (curieux, non ?)
    ma supposition :
    LabVIEW crée effectivement des tâches // ....
    mais prend plus de temps "à créer" les contextes nécessaires à ces différentes tâches paralèlles ... que le gain de temps apporté.
    Le totale étant négatif. (pure supposition !)
    Un d'entre vous est-il du même avis ? .... ou peut-être une autre théorie sur ce comportement ?

    ouadji a écrit :
    franchement rien de très tordu dans ces 3 VIs. 
    mais  ...
    les 3 VIs (et les sous-VIs) ... tout est configuré en " pré-allocated réentrant + inline"
    et sans le inline... tu as quoi comme résultat?
    j'aimerai bien avoir le code...
    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

  • Création d'alarme multi-voie​s

    Bonjour je débute sur Lab-View et bien entendu plein de questions se posent, pour ne pas faire un post à ralonge je me contenterai d'une seule pour l'instant
    - Je fais l'acquisiton d'une trentaine de voies de mesures en temps-réel cadencé à 2Hz.
    - Chacune de ces voies possède des valeurs limites (min et max) configurables en début d'essai.
    - En cours d'essai je dois avertir l'utilisateur du dépassement de ces dernières.
    J'ai créé un sous-VI pour la comparaison et l'affichage du dépassement, seulement pour effectuer cette comparaison sur l'ensemble des voies je suis obligé de le recopier par autant de comparaison que je souhaite faire.
    Actuellement, je renseigne les limites dans le VI principal qui me sert aussi pour l'acquisition et l'affichage, pour extraire les voies du signal je passe par l'outil "désassembler des signaux" et je multiplie mon sous-VI pour la comparaison, ce qui me parait extrêment lourd.
    Comment simplifier cette opération ? Le problème étant de "promener" toutes mes valeurs de limites et de les associées à chacune des voies de mesures sans créer un sous-VI à 30 entrées et/ou 30 sorties et créer une boucle qui me permet de sélectionner la voie de mesure correspondante.
    J'espère être clair dans mes explications et merci par avance pour les indications que vous pourriez me fournir, partant de pas grand chose je prends toutes les sources de conseils

    Bonjour,
       Vos explications sont claires :-)
        Si vous souhaitez "promener" les valeurs des limites avec les données de chaque voie (donc des données de différents types : tableaux 1D de doubles ou waveform + 2 doubles), je ne vois que la solution du cluster : un cluster rassemblant les données et leurs valeurs limites associées.
       Pour condenser le tout, vous pourriez créer un tableau de 30 éléments, dont chaque élément correpondrait à 1 voie (données+limites). Vous pourriez alors modifier votre sous-VI pour qu'il prenne en entrée non pas une seule voie mais le tableau de 30 voies. C'est le sous-VI qui serait alors chargé d'effectuer une boucle sur le nombre de voies et d'extraire pour chacune d'elles les différentes composantes (données 1D + limites) afin de faire les comparaisons. Le tableau de données serait un peu lourd, mais vous n'auriez qu'un seul appel à faire à votre sous-VI. A noter qu'utiliser cette technique brisera tout parallélisme des calculs sur les différentes voies (si toutefois votre sous-VI était réentrant...); celles-ci ne seront traitées que les unes après les autres.
       Cette solution offre une plus grande compacité de votre code, mais diminura probablement les performances de votre application en terme de rapidité de calcul... Pour optimiser le temps de calcul, penser à utiliser le polymorphisme des fonctions de comparaisons dans labVIEW (vous pouvez comparer un scalaire à un tableau)!
       Cordialement,

  • Problème de ralentisse​ment sous LabVIEW 7.0

    Bonjour,
    nous rencontrons actuellement un phénomène de ralentissement sur une application développée sous LabVIEW 7.0.
    Description des ressources et de la configuration utilisée (pour info) :
    LabVIEW 7.0
    NI-DAQ 8.0.1
    2 cartes PCI-6229 avec :
    une acquisition analogique à 10 kHz - échantillons prélevés par bloc de 1000
    une acquisition de type codeur
    des entrées/sorties TOR
    2 cartes PCI-6528 (entrées/sorties TOR)
    1 carte MOXA C168H (carte ISA 8 ports série)
    2 cartes Exotest PCI pour dialogue LIN et Ligne K
    L'application tourne en mode debug (= il ne s'agit pas d'un exécutable)
    Application d'environ 350 VIs
    Utilisation (a priori à bon escient) de la réentrance, du parallélisme, de sémaphores, ... (en bref, il s'agit d'une application multi-tâches classique)
    Description des symptômes :
    Le ralentissment constaté n'est pas systématique. L'application tourne en général parfaitement, mais parfois, dès le lancement de celle-ci, parfois après 10 minutes, parfois après une heure, et parfois plus, nous constatons un fort ralentissement de l'application. Cela se traduit par le ralentissement du déroulement de notre séquenceur (il s'agit d'une application pour un banc de test).
    Nous ne constatons aucune augmentation du taux d'occupation du CPU, et aucune augmentation de mémoire.
    La difficulté principale de notre problème est que nous ne savons absolument ce qui peut provoquer un ralentissement si soudain, si imprévisible et qui ne se traduit pas par un taux d'occupation du CPU élevé.
    Actions déjà faites :
    Nous avons utilisé l'outil d'observation de profil des VIs (Outils > Avancé > Optimisation de VIs...) mais n'avons rien constaté d'aberrant.
    Nous avons lu (et appliqué) les principes de la documentation suivante : http://forums.ni.com/attachments/ni/250/7849/1/prf​rmnc.pdf
    La (les) question(s) :
    Un tel phénomène a-t-il déjà été rencontré ?
    Avez-vous des conseils particuliers (autres que ceux contenus dans le document ci-dessus) ?
    Pensez-vous à une action particulière à réaliser ?
    Merci par avance !

    Bonjour,
    Obtenez vous un code d'erreur? A quelle étape s'arrête la création de votre executable ?
    je vous envoie un lien qui traite de probleme d'executable avec les boitiers USB
    http://digital.ni.com/public.nsf/websearch/129BE1A90E522E3886256F24007606F4?OpenDocument
    Cordialement
    Alexandre D
    NIF

  • Acquisition et génération en parallèle

    Un sujet probablement un peu récurrant mais je ne trouve pas vraiment de réponse adaptée à ce que j'essaye de faire.
    Nous avons des cartes PCMCIA 6036E et nous faisons sur le terrain des mesures de pressions, déplacement,... via nos capteurs.
    Déjà pour commencer, nous ne sommes pas dans le kHz, une simple acquisition à 100Hz voir 500Hz parfois pour piéger un défaut nous suffit.
    Mais nous devons générer en parallèle des acquisitions, la génération de signaux assez simples par ailleurs une rampe (très lente,~20min) ou un simple carré.
    Dans le dernier code que j'ai fait, çà marche dans les valeurs numériques à l'écran et pourtant la réalité physique sur le bornier me donne un retard aléatoire du début de génération de mon signal !!! En résumé, il y a déjà un retard à l'alumage de ma boucle mais en plus quand le programme donne un échantillon en génération de 2V par exemple et qu'il l'écrit dans le fichier d'enregistrement, en fait à la sortie il y a au moins 0.3 V de moins. C'est le bon signal mais en retard.
    Mon code n'est sûrement pas un exemple et je ne suis qu'un programmeur occasionel mais je sèche ce coup-ci.
    Quelqu'un a t'il un exemple simple d'acquisition (jusqu'à 16 voies) et génération de signal sur des fréquences assez basses ?
    Merci,

    Bonjour,
    Merci d’avoir posté votre question sur les forums de
    National Instruments.
    Afin de vous aider au mieux j’aurais besoin de quelques
    précisions supplémentaires par rapport à la façon dont vous réalisez votre
    application.
    Pour réaliser l’acquisition de données, utilisez-vous notre
    driver DAQmx ou bien DAQ traditionnel ?
    L’acquisition et la génération se font elles en continu, ou
    point à point et l’écriture sur fichier se fait elle dans la même boucle ?
    Si vous travaillez en mode continu, la carte est en quelque
    sorte autonome et il est donc possible que l’écriture sur fichier ne se passe
    pas exactement simultanément avec la génération.
    En fonction de vos réponses, je serais plus à même de vous
    orienter vers un exemple correspondant au mieux à vos besoins.
    Je vous remercie par avance pour votre réponse,
    Bien cordialement,
    Guillaume H.
    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;}
    >> NIDays 2011, le mardi 8 février au CNIT de Paris La Défense

  • FPGA et I/O : comment bien faire ?

    Bonjour,
    J'essaie en vain de lire tous mes capteurs en programmation FPGA sur C-RIO 9022 avec un chassis C-RIO 9113.
    Je souhaite utiliser le FPGA pour prendre une série de 250 mesures (sur 27 capteurs) sur un pas de temps très court, et ne conserver que la moyenne. Pour cela j'utilise 2 cartes NI-9205.
    Je me heurte à 2 méthodes qui ne fonctionnent pas :
        (1) Soit je fait une structure séquence de 27 séquences, et dans chacune je fais une boucle de lecture de mon capteur avec un moyennage (Image Erreur_compilation_FPGA.bmp). Dans ce cas je n'arrive pas à compiler, j'ai le message d'erreur suivant : "ERRORack:2310 - Too many comps of type "DSP48E" found to fit this device." J'imagine que la carte FPGA n'est pas dimensionnée pour mon besoin.
        (2) Soit je fait une boucle sur chacune de mes entrées, avec dans chacune une boucle de lecture de mon capteur avec un moyennage (image Erreur_refnum_dynamique.bmp). Pour boucler sur mes entrées, je voulais utiliser un tableau de taille fixe avec les refnum de mes entrées. Dans ce cas le vi n'est même pas exécutable, j'ai l'erreur "Fil de liaison : Possibilité de refnum dynamique non supportée pour la cible actuelle".
    La seule solution que j'ai trouvé mais qui ne me semble pas très "propre" est de faire 3 VIs FPGA utilisants la méthode (1) avec seulement 9 capteurs chacun. Dans ce cas la compilation fonctionne, et lorsque je souhaite faire la mesure j'appelle successivement mes 3 VIs depuis un Vi en RT.
    Voyez vous une solution qui me permettrait de n'avoir qu'un seul VI FPGA qui tourne en boucle, et un Vi RT qui récupère régulièrement les mesures pour les enregistrer ?
    Si je ne me trompe pas il n'est pas possible d'avoir plusieurs VI FPGA qui tournent en même temps ?
    Merci,
    Nicolas

    Bonjour,
    J'étais déjà tombé sur ces discussions, mais elles ne me semblent pas très positives.
    J'avoue être un peu perdu sur la discussion concernant les DSPs, et la solution proposée concernant les refnums dynamiques semble être celle qui me génère l'erreur DSPs.
    Je ne sais pas si j'ai réussi à attacher mes pièces jointes, mais l'idée est de faire autant de boucles que j'ai d'entrées (successivement, pas en parallèle), et une moyenne sur les mesures.
    Du coup je n'ai pas besoin que mes boucles tournent en parallèle, je voudrais donc théoriquement réutiliser la même boucle de moyennage, en changeant pour chaque mesure l'entrée et la sortie.
    Je ne sais pas si je suis clair, j'espère que les images seront plus parlantes.
    Merci
    Nicolas
    Pièces jointes :
    Erreur_refnum_dynamique.jpg ‏152 KB
    Erreur_compilation_FPGA.jpg ‏152 KB

  • FPGA FFT and filtering

    Hi, I have an application in which I need to collect a lot of (50+) narrowband spectral components from an analog input datastream. I am using a PXIe-7965R FlexRIO FPGA board and an NI-5732 digitizer adapter module. There are a couple of ways I could implement this, but I'm not sure which would be more efficient or plausible. The input datastream would be a 1D array of either 16kS or 32kS from the digitizer, and I would need to filter very specific frequency components out and sum them. Here are the options I was considering:
    1. Take a Fourier transform of the data set, then generate a binary mask to multiply with the Fourier transformed result, effectively giving only the desired frequency components. The product array could then be summed for the final result. The main problem with this method is that I have not been able to find an FFT IP for LV FPGA that supports 1D input arrays longer than 8 kS. Does one exist? Additionally, there is the question of whether a longer FFT could fit on the FPGA.
    2. Create a lot of time domain narrowband filters (Butterworth?) and sum the results of all of the filters. I am not sure if this would be less resources than the FFT or not. It would certainly be more cumbersome, considering I would have to implement 50+ filters on the input sequence.
    I'm very new to LV FPGA and FPGAs in general, so I'd appreciate any comments or suggestions anyone may have for my application.
    Thanks,
    Ryan

    Ryan,
    I do not have any experience with FPGA so I am not addressing those aspects of your questions.
    Have you verified that your numbers make sense?  When I read your question my gut reaction was, "Can this even work?" "Is there enough data in 16 K or 32 K samples to extract that inforamtion?"  What is the range of frequencies in the datastream?  What is the sample rate?  What is the required resolution?  Can two or more components ever be closer together than the specified resolution? (Even if you do not care about resolving them in this case, which you cannot, overlapping signals might complicate the analysis). Are the frequencies of the components known? If so, are the frequencies rational fractions of the sample rate?  Do any of the components vary in amplitude or frequency during one sample set?
    I think that an FFT-based system will be the way to go. Multiple filters with narrow enough bandwidths would be a real mess, hard to get working well, and not versatile.
    Lynn

  • Pb gestion de référence FPGA dans LV RT

    Bonjour,
    J'utilise LV 2011f1 avec un compactRIO 9081.
    Voici ma problématique:
    J'ai un FPGA VI compilé qui permet l'acquisition ou la génération de signaux sur plusieurs cartes E/S. Dans ma boucle déterministe (pour le régulateur), je fais un appel à ce VI via le bloc "Open FPGA reference".
    Par contre j'ai découpé en sous-vi les différentes acquisitions et générations de signaux. Pour pouvoir avoir accès aux différents controls, il me faut ouvrir le FPGA à chaque fois dans les sous-VI. Donc j'ai 4-5 "Open FPGA reference" dans des VI différents pointant sur la même référence de FPGA VI.
    Je "ferme" la référence FPGA seulement sur le VI Père. Je ne sais pas si c'est la meilleure solution ou si je dois "ouvrir et fermer" le FPGA VI dans chaque sous-VI. 
    Pour information, l'accès aux sous-VI est séquentiel. 
    Merci de votre retour
    Nicolas
    Solved!
    Go to Solution.

    It would be much better to open the FPGA VI Reference only once when your code starts, then pass that reference to the subVIs.  Use the "Bind to Type Definition" feature of Open FPGA VI Reference and place the bound type definition as the reference control in your subVIs.
    That said, in answer to your original question, it is best to close each reference that you open, but I'm not sure exactly what effect closing an FPGA reference has nor whether it is actually necessary here.

  • Multitache : acquisition et génération sur même norme VISA

    Bonjour,
    Dans le cadre de l'utilisation de tes fonctions DAQ, il faut que tu crées une voie virtuelle pour l'acquisition, et une pour la génération du signal.
    Bonne journée,
    Michael

    Bonjour,
    J'utilise des centrales DAQ U2356A d'agilent pour faire des acquisitions analogiques. Ces centrales possèdent 2 connecteurs : l'un contient des entrées analogiques, l'autre des DIO numériques. Je dois configurer une DIO numérique en output, émettre un signal alternant état haut/bas toutes les 50 ms, et reboucler (physiquement) cette DIO sur une entrée analogique du connecteur 1 , afin de faire l'acquisition du signal carré.
    Les deux fonctions d'acquisition et de génération fonctionnent indépendamment, mais quand j'essaye de les mettre en parallèle, j'ai l'impression que la génération continue monopolise la norme VISA et empêche l'acquisition de se faire. En lançant le soft (cf scrennshot du VI en PJ) la génération commence à se lancer normalement, mais j'obtiens l'erreur suivante pour l'acquisition :
    L'erreur -1073807305 s'est produite à : VISA Read dans Agilent U2300 Series.lvlib:Read (AI Waveform Single Channel).vi
    Raisons possibles :
    VISA: (Hex 0xBFFF0037) Le périphérique indique qu'une erreur de protocole d'entrée s'est produite durant le transfert.
    Je me demande s'il est possible d'utiliser une même norme VISA en parallèle (je ne souhaite pas faire de séquentiel) pour deux tâches différentes ? Sinon, y aurait-il une solution à mon problème ? Je tiens à signaler que le problème est le même en multithread (acquisition et génération dans 2 VIs différents).
    Merci pour votre aide,

  • Générer une implusion avec "Sine Wave Generator" en FPGA

    Bonjour,
    Content de vous rejoindre sur ce forum. Tout nouveau en Labview (pas très à l'aise avec certaines notions), je voudrai soliciter votre aide. En fait, je veux créer une impulsion de 100Hz avec la fonction " Sine Wave Generator" de FPGA. En simulation j'ai réussi mais dès que je compile en target il m'affiche ce message : "Top-level clock rate does not match rate for which the Sine Wave Generator VI was configured. Reconfigure the Sine Wave Generator or the top-level clock so that their rates match. You also might need to modify computed values for the frequency (cycles/tick) input."  
    Je change donc FPGA clock rate et je choisis 40MHz (la seule qu'il me propose). Mais dans ce cas, je me perds pour retouver mon impulsion (qui doit durer une période 0.01sec). J'ai essayé de jouer sur le nombre d'échantillons en changeant le nombre d'itérations de la boucle For afin de générer toujours une période ( pièces jointes)  mais ça marche pas!!!
    Pourriez vous m'aider à déchiffrer ce problème?
    Merci d'avance
    Pièces jointes :
    burst sine.png ‏372 KB
    burst sine_40MHz.png ‏336 KB

    Bonjour M2IM,
    En mode simulation, on utilise une fonctionnalité appelée "Interactive Execution" car l'exeuction/affichage ne peut être géré à une fréquence élévé (40 MHz dans le cas de la Top Level Clock par défaut).
    En mode FPGA target, la vitesse est plus élevé et donc uniquement certains points du sinus seront afficher mais le signal electrique lui sera bien un sinus.
    Je t'invite à regarder le lien ci-dessous qui reprend quasiment la problématique que tu rencontres:
    Generate a sine with LabView FPGA and connect it to an AOModule
    Bonne journée,
    Valentin
    Certified TestStand Architect
    Certified LabVIEW 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;}
    Travaux Pratiques d'initiation à LabVIEW et à la mesure
    Du 2 au 23 octobre, partout en France

  • COMMUNICATION SUR FPGA ENTRE VI MAIN ET SOUS VI

    Bonjour, je travaille sur le vi de communication série 232 téléchargeable chez NI. Mon soucis consiste à modifier des entrées (1 U32, 1 U16 et 1 BOOLEEN) entre le vi main et le sous vi de com série. Quelle est la meilleur méthode pour ce genre d'opération.
    Merci
    Ludo

    Bonjour,
    N'ayant pas de retour direct, veuillez trouver dans un premier temps des documents qui seraient suceptibles de vous aider :
    1) Developing Digital Communication Interfaces with LabVIEW FPGA (Part 1)
    http://www.ni.com/white-paper/5385/en
    2) Developing Digital Communication Interfaces with LabVIEW FPGA (Part 2)
    http://www.ni.com/white-paper/5411/en
    3) Efficient Development and Debugging with LabVIEW FPGA
    http://www.ni.com/white-paper/7445/en
    4) Nouveautés du Module NI LabVIEW FPGA
    http://www.ni.com/white-paper/12950/fr
    5) FPGA Control on CompactRIO Sample Project Documentation
    http://www.ni.com/white-paper/14137/en
    En espérant que cela sera utile,
    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

  • Overwrite FPGA RT

    Bonjour,
    Je cherche à transferé des données depuis le FPGA d'un CompactRio vers la partie RT via une FIFO DMA, cependant lors du transfert, la fonction pour obtenir le status des lectrue I/O ("Get Read I/O Status") me retourne un overwrite vrai.
    Je pense que cela vient de ma partie RT qui ne peut pas suivre la reception de la FIFO mais je ne sais pas comment résoudre ce problème. 
    Quelqu'un aurait-il une idée?
    Cordialement,
    Nathan
    Résolu !
    Accéder à la solution.
    Pièces jointes :
    Ampli Wehnelt - RT.vi ‏240 KB
    Ampli Wehnelt - FPGA.vi ‏141 KB

    Alors au final le problème venait non pas de la partie RT mais du coté FPGA.
    Lors de l'ecriture des données dans la FIFO, il fallait préciser le nombre d'itération qu'il faut pour la boucle FOR; pour ce faire il faut utiliser la méthode FIFO - Obtenir le nombre d'éléments a écrire - et cabler la sortie de cette fonction sur le nombre d'itération de la boucle FOR:
    Bonne continuation a tous,
    Nathan

  • 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

  • NI 9403 pwm / mli fpga mode

    Bonjour à tous,
    J'ai déjà une expérience de labview et je désire générer une pwm à une fréquence de 1KHz avec un NI 9024 + NI 9403, et ceux avec 100 valeurs différentes de rapport cyclique.
    Pour cela je réalise dans mon fpga, de façon cyclique, 100 itérations d'une boucle de 1 us ou je met à jour l'état logique de la sortie en fonction du rapport cyclique donné en consigne. Pour cela, je compare la consigne à un registre de comptage qui s'incrémente à chaque itération de la boucle et qui se remet à 0 au bout de la 100 em, si la consigne est supérieure au registre de comptage, je met la sortie à 1 sinon je la met à 0.
    Je ne sais pas si c'est la méthode usuelle sous labview, mais je me suis inspiré de celle que l'on m'a enseignée sur d'autres systèmes de contrôles. J'ai d’ailleurs utilisé le même code sur une carte sbRIO 9632, et cela marchait très bien.
    Je fais donc le test sur mon cRIO et obtient alors une fréquence de 760.455 Hz (et la fréquence ne change pas). Auriez vous, s'il vous plaît, une idée de ceux à quoi cela pourrait être du ??
    Solved!
    Go to Solution.

    problème résolu (si ça peut aider quelqu'un, un jour):
    La vitesse max de rafraichissement des DIO est trop faible (une grosse dizaine de us). Ce qui est trop lent pour générer corectement des pwm pour des fréquence supérieur à 1 kHz. Merci quand même, bonne journée à tous.

  • Communication bidirectionnelle sur port parall�le en java ?

    J'ai test� l'emploi de l'api java.comm, mais il est impossible de changer le mode SPP (undirectionnel) par d�faut du port.
    J'ai regard� au niveau des JNIs pour employer une dll salvatrice, mais elles ne r�serv�es que pour les langages qui ont la chance d'avoir leur interface avec cette dll. (g�n�ralement, il s'agit du langage C, et VB)
    Bref, je ne vois aucune solution pour une communication bidirectionnelle et je n'ai pas le droit � d'autres recours que le langage Java.
    Merci de votre aide.
    Un �tudiant en informatique.

    Si tu n'as pas eu de probl�me avec cette api pour une communication bidirectionnelle sur le port parall�le, peut-�tre que ce code contient une erreur d'emploie.
    * Programme �crit le 22 et 23 avril 2002.
    * Programme g�rant la communication avec le port parall�le en utilisant l'api java.comm
    * Ce programme r�alise les actions suivantes qui sont effectu�s sur la machine locale:
    * Teste la pr�sence d'un port parall�le, si celui-ci est pr�sent:
    * R�cup�ration du nom du port
    * R�cup�ration du mode de port (SPP, PS2, ECP, ...)
    * Tentative d'association � un flux de sortie
    * Tentative d'association � un flux d'entr�e
    * Envoie des donn�es sur le port
    * Pour fonctionner, il est n�cessaire de disposer d'un pilote de p�riph�rique sur port parall�le,
    * et d'avoir correctement installer l'api java.comm
    import java.io.*;
    import java.util.*;
    import javax.comm.*;
    public class TestLpt1 {
    static Enumeration portList;
    static CommPortIdentifier portId;
    static String messageString = "Texte envoy� en sortie sur le port parall�le... (60 octets)\n";
    static String ApplicationName = "TestLpt1";
    static ParallelPort parallelPort;
    static OutputStream outputStream;
    static InputStream inputStream;
    public static void main(String[] args) {
    portList = CommPortIdentifier.getPortIdentifiers();
    while (portList.hasMoreElements()) {
    portId = (CommPortIdentifier) portList.nextElement();
    // Recherche d'un port parall�le nomm� lpt1
    if (portId.getPortType() == CommPortIdentifier.PORT_PARALLEL&&
    portId.getName().equals("LPT1")) {
         System.out.println("Il y a un port parall�le nomm�: "+portId.getName());
         try {
              // Ouverture de ce port
              parallelPort = (ParallelPort)portId.open(TestLpt1.ApplicationName, 2000);
              System.out.println("\nTentative d'appropriation du port par l'application TestLpt1...");
              System.out.println("Le port est appropri� � "+portId.getCurrentOwner());
         catch (PortInUseException e) {
              System.out.println("Le port est utilis� par une autre application.");
         // tentative de reconnaissance du mode utilis�
         switch(parallelPort.getMode()) {
              case ParallelPort.LPT_MODE_PS2:
                        System.out.println("\nLe port est actuellement en mode PS2");
                        break;
                   case ParallelPort.LPT_MODE_EPP:
                        System.out.println("\nLe port est actuellement en mode EPP");
                        break;
                   case ParallelPort.LPT_MODE_ECP:
                        System.out.println("\nLe port est actuellement en mode ECP");
                        break;
                   case ParallelPort.LPT_MODE_NIBBLE:
                        System.out.println("\nLe port est actuellement en mode NIBBLE");
                        break;
                   case ParallelPort.LPT_MODE_SPP:
                        System.out.println("\nLe port est actuellement en mode SPP");
                        try {
                             SetModeECP();
                        catch (UnsupportedCommOperationException e) {
                             System.out.println("Cannot set port at ECP mode");
                        break;
                   default:
                        System.out.println("\nLe mode du port est inconnu.");
                        break;
         try {
              // cr�ation d'un flux de sortie
              outputStream = parallelPort.getOutputStream();
              System.out.println("-> Open ouput stream");
         } catch (IOException e) {
         System.out.println("X Cannot open ouput stream");
    try {
         // cr�ation d'un flux d'entr�e
         inputStream = parallelPort.getInputStream();
         System.out.println("-> Open input stream");
    } catch (IOException e) {
         System.out.println("X Cannot open input stream");
    try {
         // �criture vers le port parall�le
    outputStream.write(messageString.getBytes());
    System.out.println("\nPrint to parallel port");
    System.out.println("Fin normale du programme.");
    catch (IOException e) {
         System.out.println("\nCannot print to parallel port");
    } // fin du if
    } // fin du while
    } // fin du main
    public static void SetModeECP() throws UnsupportedCommOperationException {
         // Fonction qui permettra de passer le port en mode ECP
    parallelPort.setMode(ParallelPort.LPT_MODE_ECP);
    } // fin de la classe
    Merci de tes commentaires.
    La fonction setMode(int) n'est pas utilis� car elle est incapable de changer le mode du port.

Maybe you are looking for

  • 10.5.7: Automatic Software Update Feature No Longer Works

    Ever since I installed 10.5.7 the automatic Software Update feature no longer works. (Manual updates work fine.) For example, here's what happened today with Safari 4.0.2: 1. After powering up I got the Software Update icon on the Dock. 2. I clicked

  • Home button on iPad2 no longer works after iOS 7 upgrade

    I upgraded my iPad2 to iOS 7 today.  The home button no longer works.  I've powered it down and back up as well as restarted it but it's still not working.  Any suggestion greatly appreciated. About to fly to China and was looking forward to watching

  • PMS: Creation of new filter values

    Dear Reader, I am working on a PMS implementation where one particular appraisal template has multiple appraisers. The only way I can attach and identify between multiple appraisers is by creating new filters in table T77HAP_FLT_SEL. I plan to then u

  • Tables for Po number and corresponding invoice number

    Hi can Any buddy help me to find the PO number and its corresponding Invoice document number from table LFB1. LFB1->PO->Invoice num. thanks imran

  • How to display dynamic information in Portal

    Hi all, I want ro display News flash in my portal, I want to do that by the help of xmlFormsBuilder, i want that the background of the news is an image and it keep changing and news keep flashing from Left to right as we have in normal HTML webpage c