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

Similar Messages

  • 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,

  • 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

  • Générer train d'impulsion - décaler ce train - trigger ACQUISITIONs avec train décaler - Récupérer les échantillons

    Je dispose d'une carte NI-6220 M et avec DAQMX et Labview 7.1 je cherche à :
    - Générer un train de 280 impulsions à 200 Hz pour commandre un système extérieur.
    - Décaler ce train d'impulsion de 0.5 ms pour trigger 280 ACQUISITION  de 5 échantillons à 2000 Hz
    - Numériser 2 voies analogiques (5 échantillons à 2000 Hz à chaque impulsion)
    - Récupérer les échantillons numérisés
    Je manque d'expérience dans l'utilisation de cette carte et NI-DAQMX
    Quelles sont les pins d'entrée et sortie à utiliser.
    Un grand merci à ceux qui peuvent m'apporter une aide.

    Bonjour,
    Quel beau projet dites-moi? Je vous joins, si vous ne l'avez pas déjà le détail des pins des séries M. (M Series Help/Specifications and device/NI-6220/Pinout)
    Génération sur compteur 0 <-> pin 2 (PFI 12) OU compteur 1 <-> pin 40 (PFI 13)
    Pour ce qui est de la programmation, je ne saurais vous conseiller de regarder dans LabView/Aide/Recherche d'exemples. Dans le répertoire Entrée-Sorties matériel/DAQmx/ vous retrouvez toutes les tâches possibles de déclenchement d'acquisition, de génération de train d'impulsion, d'acquisition sur plusieurs voies....
    Je vous souhaite bon courage
    David D. - Ingénieur d'Applications - NI France
    Attachments:
    M series.zip ‏1895 KB

  • Timers Multithread sous CVI

    Bonjour,
    J'ai plusieurs questions concernant mon programme avec LabWindows CVI 9.0 et 4 cartes NI PCI 6229, sous Windows XP et dual core Intel 3GHz.
    Je souhaite réaliser un programme qui réalise une boucle d’asservissement et également un contrôle et affichage sur des acquisitions. Je n’ai malheureusement pas le choix sur l’OS et je ne peux pas m’orienter sur une solution temps réel.
    Pour cela, je souhaite réaliser
    -          une boucle qui gère l’asservissement (acquisition sur 20 entrées, calcul sur ces acquisitions, et génération sur 10 sorties, tout ceci en 10ms, c’est la BOUCLE CRITIQUE)
    -          une boucle pour le contrôle (simple contrôle sur ces acquisitions: comparaison à une valeur seuil, 10ms)
    -          une boucle pour l’affichage (affichage des résultats sur la face avant des contrôles OK ou non OK, toutes les 200ms)
    Je souhaitais à la base utiliser 3 timers asynchrones de CVI, mais je me suis aperçu qu’on ne pouvait utiliser qu’un seul Timer asynchrone à la fois.
    J’ai donc vu qu’il y avait une autre solution, le multithread en utilisant les thread pool. Cette solution m’intéresse, car je souhaiterai mettre la boucle critique dans 1 thread sur le 1er coeur, la boucle de contrôle dans un 2ème thread sur le 2ème coeur, et la boucle d’affichage dans un 3ème thread sur le 2ème coeur.
    La boucle d’asservissement est la boucle critique et doit être de 10ms à +/- 2ms.
    Les autres bouclent ne sont pas critiques et peuvent avoir un décalage de +/- 10ms, le but est de ne pas perdre de données et de contrôler toutes les acquisitions. Un affichage toute les 200ms suffit.
    Voilà j’ai alors 2 questions :
    -          est-ce que mon approche (timers en multithread et diviser sur les 2 cœurs) convient pour mon application ?
    -          et comment mettre un timer classique dans un thread spécifique ? J’ai vu qu’il fallait utiliser «CmtScheduleThreadPoolFunction (int Pool_Handle, ThreadFunctionPtr Thread_Function, void *Thread_Function_Data, int *Thread_Function_ID)” Mais cette fonction appelle une fonction de type “CVICALLBACK FonctionThread(void *functionData)” et mon timer classique est de type “CVICALLBACK Timer_Classique (int panel, int control, int event, void *callbackData, int eventData1, int eventData2)” Comment donc appeler un timer classique avec une fonction CmtScheduleThreadPoolFunction ? Faut-il procéder d’une autre manière ?
    Je vous remercie de votre aide.
    Cordialement,
    Hédi.

    Bonjour,
    L'approche multi-thread est en effet la bonne, dès qu'il faut séparer plusieurs tâches. Je vous invite à consulter cet article du Rebel Site, qui traite du multithread et constitue une référence en la matière. Attention, le multithread n'implique pas obligatoirement une gestion multicoeur. Il faut pour le mettre en oeuvre passer par l'API de Windows.
    Est-il bien nécessaire de faire de du contrôle 10ms? (deuxième boucle) Au quel cas, je ne suis pas absolument sûr qu'il faille créer un thread séparé. Si cette tâche peut supporter un cadencement plus lent, il serait plus malin de venir la traiter dans le troisième thread.
    Il serait intéressant d'utiliser une Thread Safe Queue pour faire circuler les données d'un thread à l'autre. Ce mécanisme permettra de ne pas perdre de données. D'autre part, vous pouvez alors installer une callback sur un nombre d'éléments dans la TSQ (Thread Safe Queue) et venir déclencher la callback associée à cette TSQ dès que 20 éléments sont présents pour piloter le troisième thread depuis le premier.
    Dans cette configuration, il n'y a plus besoin que d'un timer, pour la partie temps critique - bien que sous Windows, on ne puisse pas garantir le déterminisme d'une boucle à 10ms - les autres thread étant 'esclave' du premier.
    Cordialement,
    .mrLeft{float:left} .mrInfo{border-left:solid 1px #989898;font-size:x-small;color:#989898}
    Mathieu R.  
      CTD - Certified TestStand Developer / Développeur TestStand Certifié  
      CLAD - Certified LabVIEW Associate Developer  

  • 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.

  • Comment faire pour synchroniser une sortie numérique sur une horloge?(pci6602)

    Bonjour,
    je voudrais faire des sorties numériques sur une ligne donnée (carte PCI 6602), ces sorties étant réalisées pour chaque front descendant d'une horloge. En clair, je voudrais synchroniser la sortie d'une valeur numérique sur le front descendant d'une horloge : comment faire ?

    Bonjour,
    Générer des mots numériques ou une valeur binaire (sur une ligne ou un port) avec un cadencement matériel (horloge compteur sur front montant ou descendant) n'est pas possible avec une carte 6602 seule car elle n'a pas été conçue dans ce but. La carte possède 8 compteurs mais n'a pas de ligne ou port programmable en acquisition ou génération (cadencement logiciel ou matériel). Pour ce type d'opération d'E/S numériques, les cartes PCI-DIO-32-HS, PCI-6533 et PCI-6534 ont été spécialement conçues. Elle permettent de faire de la génération sur 8, 16 ou 32 bits (1,2, ou 4 ports) jusqu'à 20 Mo/S (pour la 6534) et avec un cadencement matériel (horloge interne ou externe avec choix du type de front déclenchant le transfert). L'horloge peut provenir par exemple de votre carte compteur PCI-6602.
    Enfin, une bonne solution serait d'utiliser une carte Serie M qui intègre à la fois des compteurs (génération d'horloge) et un port 8 bits (génération numérique sur une ligne ou le port entier). Le cadencement numérique matériel est possible avec les cartes Série M. Ce type de carte serait donc un bon compromis pour ce que vous souhaitez faire.
    Cf "Correlated I/O" dans le tutorial ci-dessous:
    * M Series – The New Data Acquisition Standard – Frequently Asked Questions
    http://zone.ni.com/devzone/conceptd.nsf/webmain/9c71859eb70d6e2586256ed7007ccf7f?OpenDocument
    Bonne continuation
    Matthieu Gourssies
    National Instruments France

  • NI9403:Acquisition & Génération bufferisée

    Bonjour,
    Je souhaite réaliser une acquisition / génération avec un module 9403 en cDAQ sous Visual C++.
    J’ai modifié un des exemples NI DAQMX Ansi C (le code est ci dessous) de manière à initialiser la tache DI et la tache DO. Cependant, je suis confronté à un problème de routage de clock.
    * ANSI C Example program:
    * ContReadDigChan-ExtClk.c
    * Example Category:
    * DI
    * Description:
    * This example demonstrates how to input a continuous digital
    * waveform using an external clock.
    * Instructions for Running:
    * 1. Select the physical channel to correspond to where your
    * signal is input on the DAQ device.
    * 2. Select the Clock Source for the acquistion.
    * 3. Set the approximate Rate of the external clock. This allows
    * the internal characteristics of the acquisition to be as
    * efficient as possible. Also set the Samples to Read control.
    * This will determine how many samples are read each time. This
    * also determines how many points are plotted on the graph each
    * iteration.
    * Steps:
    * 1. Create a task.
    * 2. Create a Digital Input channel.
    * 3. Define the parameters for an External Clock Source.
    * Additionally, set the sample mode to be continuous.
    * 4. Call the Start function to start the acquisition.
    * 5. Read the waveform data continuously until the user hits the
    * stop button or an error occurs.
    * 6. Call the Clear Task function to clear the Task.
    * 7. Display an error if any.
    * I/O Connections Overview:
    * Make sure your signal input terminal matches the Physical
    * Channel I/O control. Also, make sure your external clock
    * terminal matches the Physical Channel I/O Control. For further
    * connection information, refer to your hardware reference manual.
    #include <stdio.h>
    #include <NIDAQmx.h>
    #define DAQmxErrChk(functionCall) if( DAQmxFailed(error=(functionCall)) ) goto Error; else
    int32 CVICALLBACK DoneCallback(TaskHandle taskHandle, int32 status, void *callbackData);
    int main(void)
    int32 error=0;
    TaskHandle DItaskHandle=0,DOtaskHandle=0;
    uInt32 data[1000],dataOut[1000];
    int32 sampsRead,totalRead=0;
    char errBuff[2048]={'\0'};
    int i;
    // DAQmx Configure Code
    DAQmxErrChk (DAQmxCreateTask("TacheDI",&DItaskHandle));
    DAQmxErrChk (DAQmxCreateDIChan(DItaskHandle,"cDAQ1Mod8/port0/line0:15","",DAQmx_Val_ChanForAllLines));
    DAQmxErrChk (DAQmxCfgSampClkTiming(DItaskHandle,NULL,10000.0,DAQmx_Val_Rising,DAQmx_Val_ContSamps,1000));
    DAQmxErrChk (DAQmxCreateTask("TacheDO",&DOtaskHandle));
    DAQmxErrChk (DAQmxCreateDOChan(DOtaskHandle,"cDAQ1Mod8/port0/line16:31","",DAQmx_Val_ChanForAllLines));
    DAQmxErrChk (DAQmxCfgSampClkTiming(DOtaskHandle,NULL,10000.0,DAQmx_Val_Rising,DAQmx_Val_ContSamps,1000));
    // DAQmx Start Code
    DAQmxErrChk (DAQmxStartTask(DItaskHandle));
    for(i=0;i<1000;++i)
    dataOut[i] = i;
    DAQmxErrChk (DAQmxRegisterDoneEvent(DOtaskHandle,0,DoneCallback,NULL));
    DAQmxErrChk (DAQmxWriteDigitalU16(DOtaskHandle,1000,0,10.0,DAQmx_Val_GroupByChannel,dataOut,NULL,NULL));
    DAQmxErrChk (DAQmxStartTask(DOtaskHandle));
    printf("Acquiring samples continuously. Press Ctrl+C to interrupt\n");
    while( 1 ) {
    // DAQmx Read Code
    DAQmxErrChk (DAQmxReadDigitalU16(DItaskHandle,1000,10.0,DAQmx_Val_GroupByChannel,data,1000,&sampsRead,NULL));
    if( sampsRead>0 ) {
    totalRead += sampsRead;
    printf("Acquired %d samples. Total %d\r",sampsRead,totalRead);
    fflush(stdout);
    printf("\nAcquired %d total samples.\n",totalRead);
    Error:
    if( DAQmxFailed(error) )
    DAQmxGetExtendedErrorInfo(errBuff,2048);
    if( DItaskHandle!=0 ) {
    // DAQmx Stop Code
    DAQmxStopTask(DItaskHandle);
    DAQmxClearTask(DItaskHandle);
    if( DOtaskHandle!=0 ) {
    // DAQmx Stop Code
    DAQmxStopTask(DOtaskHandle);
    DAQmxClearTask(DOtaskHandle);
    if( DAQmxFailed(error) )
    printf("DAQmx Error: %s\n",errBuff);
    printf("End of program, press Enter key to quit\n");
    getchar();
    return 0;
    int32 CVICALLBACK DoneCallback(TaskHandle taskHandle, int32 status, void *callbackData)
    int32 error=0;
    char errBuff[2048]={'\0'};
    static int count=0;
    int i;
    uInt32 dataOut[1000];
    for(i=0;i<1000;++i)
    dataOut[i] = i+count;
    count++;
    DAQmxErrChk (DAQmxWriteDigitalU16(taskHandle,1000,0,10.0,DAQmx_Val_GroupByChannel,dataOut,NULL,NULL));
    // Check to see if an error stopped the task.
    DAQmxErrChk (status);
    Error:
    if( DAQmxFailed(error) ) {
    DAQmxGetExtendedErrorInfo(errBuff,2048);
    DAQmxClearTask(taskHandle);
    printf("DAQmx Error: %s\n",errBuff);
    return 0;
    Voici le message d’erreur obtenu:
    Specified route cannot be satisfied, because it requires resources that are currently in use by another route.
    Source Device: cDAQ1
    Source Terminal: do/SampleClock
    Destination Device: cDAQ1
    Destination Terminal: Slot8/ConvertPulse
    Required Resources in Use by
    Task Name: TacheDI
    Source Device: cDAQ1
    Source Terminal: di/SampleClock
    Destination Device: cDAQ1
    Destination Terminal: Slot8/ ConvertPulse
    Task Name: TacheDO
    Status Code : -89137
    Comment puis-je procéder pour effectuer à la fois une init de la carte en mode DI et DO avec la clock interne ?

    Re jmali666,
    Je vous renvoi vers le lien de la datasheet de ce module: Datasheet 9403
    En fait vous ne pouvez cadencer matériellement que si vous ne faites qu'une lecture OU qu'une écriture comme il est spécifié dans la Datasheet.
    Si vous faites les deux cumulées, alors il vous faudra cadencer logiciellement.
    J'ai fait qlq tests (reproduction de votre erreur) sur labview et je vous le confirme. Veuillez trouvez ci joint des captures d'écrans.
    Cordialement
    Pierre_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;}
    LabVIEW Tour
    Journées Techniques dans 10 villes en France, du 4 au 20 novembre 2014

  • Mise en oeuvre d'une tache d'acquisition analogique sur plusieurs cartes (6321/6323) et de plusieurs taches de génération analogique sur ces memes cartes (LabWindows CVI10 sous Windows SEVEN)

    Objet : Impossibilité de faire tourner une tache de mesure analogique sur deux cartes 6321, lorsque une ou plusieurs tache(s) de génération analogiques sur ces mêmes cartes existe(nt)…
    Configuration NI :
    Dev1 = Dev2 = carte 6321
    Code de création de la tache de mesure analogique :
                DAQmxCreateTask("",&AIRecordingtaskHandle);
           DAQmxCreateAIVoltageChan(AIRecordingtaskHandle,chan,"",DAQmx_Val_NRSE,min,max,DAQmx_Val_Volts,NULL);
           DAQmxCfgSampClkTiming (AIRecordingtaskHandle, "", rate, DAQmx_Val_Rising, DAQmx_Val_FiniteSamps, sampsPerChan);
           DAQmxGetTaskAttribute(AIRecordingtaskHandle,DAQmx_Task_NumChans,&gNumChannels);
    Chan vaut : "Dev1/ai0, Dev1/ai1, Dev1/ai2, Dev2/ai1"
    Code de création des taches de génération analogique :
           DAQmxErrChk (DAQmxCreateTask("",&AOtaskHandle_C1_DAC0));
           DAQmxErrChk (DAQmxCreateAOVoltageChan (AOtaskHandle_C1_DAC0, chan, "", min, max,DAQmx_Val_Volts, ""));  // chan vaut Dev1/ao0
           DAQmxErrChk (DAQmxCreateTask("",&AOtaskHandle_C1_DAC1));
           DAQmxErrChk (DAQmxCreateAOVoltageChan (AOtaskHandle_C1_DAC1, chan, "", min, max,DAQmx_Val_Volts, "")); // chan vaut Dev1/ao1
           DAQmxErrChk (DAQmxCreateTask("",&AOtaskHandle_C2_DAC0));
           DAQmxErrChk (DAQmxCreateAOVoltageChan (AOtaskHandle_C2_DAC0, chan, "", min, max,DAQmx_Val_Volts, "")); // chan vaut Dev2/ao0
    Au premier ReadBinary, le système sort en erreur avec le message suivant : voir pièce jointe
    Notre compréhension de cette erreur : dans le cas où on met en œuvre une tache de mesure analogique sur plus d'une carte, couplée à une ou plusieurs tache(s) de génération analogique sur ces mêmes cartes, il est impossible d'utiliser l'horloge interne pour le cadencement des CAN/CNA.
    Nous avons effectué plusieurs tests :
    Modifications des horloges interne lors de la configuration des taches : "/Dev1/ai/SampleClock" pour la tache de mesure et "Devk/ao/SampleClock" pour les taches de génération analogique : erreur.
    Abandon d'une des taches de génération analogique : même erreur
    Abandon de l'ensemble des taches de génération analogique (la tache de mesure analogique couvre des voies issues des cartes Dev1 et Dev2): pas d'erreur
    Suppression des voies de la carte Dev2 dans la tache d'acquisition analogique : plus d'erreur
    Merci d'avance
    Pièces jointes :
    MsgErreur NIDAQmx.JPG ‏38 KB

    Bonjour Sisyphe42, 
    Les exemples en PJ montrent comment faire du multi-tâches et du multi-cartes sous CVI.
    Cordialement 
    Sabri JATLAOUI - Certified LabVIEW Developer
    Pièces jointes :
    ContAI-ReadDigChan.c ‏8 KB
    SynchAI-AO.c ‏9 KB
    ContinuousAI.c ‏11 KB

  • 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

  • Labwindows/CVI multitaches: acquisition et contrôle d'instrument

    Bonjour a tous,
    Dans le cadre d'un développement sous labwindows/CVI je suis amené à réaliser une acquisition tout en contrôlant autre un instrument. Je pense que la solution est le multi taches.
    Mon problème est que je ne connais pas du tout cette méthode, et je souhaiterais savoir si s'est une solution viable pour à la fois lancer une acquisition pendant que je contrôle un instrument (reset de son alimentation). Dans le cas contraire, pouvez vous m'indiquer une solution, avec la démarche a réaliser?
    Je sais réaliser une synchronisation entre une génération et une acquisition mais dans ce cas, il faut gérer une carte d'acquisition et un autre instrument. Comment faire??
    Je vous remercie
    Cordialement,
    Julien_B

    Hello,
    La bonne vieille recherche d'exemples (Help-> Find Examples) reste toujours efficace. Je vous suggère d'aller faire un tour dans la partie MultiThreading. On y trouve toutes les principales fonctions pour créer des threads et y exécuter du code (en parallèle, donc !).
    Cet article est aussi un bon départ.
    Cdt,
    Eric M. - Application Engineering Specialist
    Certified LabVIEW Architect
    Certified LabWindows™/CVI Developer

  • Peut-on lancer une acquisition dans un serveur TCPIP sans stopper la communicationTCPIP?

    Dans le cadre d'une communicationTCPIP, je veux que lorsque le serveur reçoit une commande donnée, il lance une acquisition sans rompre la liaisonTCPIP. Or,si je fais une boucle,on reste bloqué dans la boucle, si je n'en fais pas, l'acquisition se fait sur une seule itération.Comment puis-je concilier les deux? Merci

    Bonjour,
    Quel outil utilisez vous ? LabVIEW,CVI,Visual ...?
    Une solution consisterait à utiliser deux boucles en paralèlle sous LabVIEW ou deux thread si vous utilisez le C ou C++ et mettre en oeuvre un mécanisme de synchronisation tel que la notification.
    Par exemple en LabVIEW, une boucle sera à l'écoute des vos trames TCP/IP si cette trame concerne une requête d'aquistion vous pouvez envoyer un message de notification à la deuxième boucle qui va se "reveiller" à ce moment là. Il existe plusieurs exemples sous LabVIEW.
    J'espères que ces éléments vous permettront d'avancer.
    Sincères salutations.
    Salissou ISSA
    Ingénieur d'application
    National Instruments France

  • Bloquage boutons FA pendant une acquisition

    Bonjour,
    j'utilise un VI sous forme machine d'état pour réaliser une acquisition de données que j'affiche dans un graphe déroulant  et que j'enregistre ou non dans un fichier selon l'état d'un selecteur booléen. seulement quand je passe dans l'état experience (celui dans lequel l'acquisition est réalisée) j'ai toute la FA qui se bloque (plus d'accès aux boutons ou au zoom sur le graph déroulant) alors que les résultats s'affichent bien sur le graphe. D'où celà peut il provenir.
    Merci
    PS: je joins le jpg de l'état Experience de mon VI si celà peut aider.
    Sebastien DEVISSCHER - Nerys

    Bonjour Seb,
    Je n'ai pas trouvé dans l'image que vous montrez le problème dont vous parlez. A savoir le blocage des boutons durant l'acquisition.
    Par contre, il je vois un autre problème quant à votre code : vous effectuez des tâches en parallèle :
    les tâches de récupération de données DAQmx, l'enregistrement et la structure évènement peuvent s'effectuer dans n'importe quel ordre.
    Il serait judicieux de les effectuer dans un ordre maîtrisé, en utilisant par exemple le chemin d'erreur.
    Plutot que de relier toutes les erreurs à la fin, relier les tâches entre elles via le chemin d'erreur.
    De plus, étant donné que la structure évènement a un évènement sur le bouton "enregistrer", il faudrait mettre cet enregistrement (je parle de la structure conditionnelle) dans la structure évènement (dans l'évènement "timeout") pour éviter un conflit entre l'enregistrement et son départ (et sa fin, j'imagine).
    Néanmoins ces problèmes ne sont peut-être pas la solution de votre problème. Et si ce n'était pas le cas, il serait peut-être nécessaire de voir plus de code que votre image.

  • Account 'contra account: Acquisition value' could not be found.

    Hi Guru,
    I am trying to transfer the Asset balance from one company code asset to another company code asset by using the T_code ABT1N but it is through the below error.
    Account 'contra account: Acquisition value' could not be found.
    Message no: AU 133
    Diagnosis
    When creating the accounting document, the system could not find a account'contra account: Acquisition value' for the company code ABC.
    Procedure
    Enter this account in the account determination for asset accounting.
    Please give me the needful suggestion to resolve this error.
    Thanks in Advance
    Vasavi
    Moderator: Maintain the accounts in AO90. Please, avoid asking basic questions

    Hi,
    what ever posting done in asset sub ledger is parally updated in financial accounting G/l. For updating we need to assign G/L accounts to subsidary ledger. so go AO90 and assing g/l account against contra accounts.
    Thanks & Regards
    Sunitha

  • Problème installation et configuration d'un système d'acquisition de donnée sous MAX

    Bonjour, je suis un nouveau utilisateur de labview ( version d'évaluation 2010).
    J'ai téléchargé sur ni.com des exercices et le troisième exercice me fait utiliser MAX (Measurement & Automation Explorer v4.7)
    Il est écrit qu'aprè avoir lancé MAX :"Agrandissez l’onglet Périphériques et interfaces et sélectionnez Périphériques NI-DAQmx." puis de faire un clic droit sur "Périphériques et interfaces" et de créer le nouveau périphérique NI-DAQmx (celui-ci sera simulé)
    Il se trouve que je n'ai à gauche que l'onglet "Logiciels" dans "Système" et aucun onglet dans "Systèmes déportés"...
    Pourriez-vous m'indiquer comment faire apparaître l'onglet "Périphériques et interfaces"?
    Avec mes remerciements

    Bonjour Ordino,
    Le drivers NI DAQmx 9.2.2 est bien compatible avec Windows Vista 32 bits, néanmoins certains éléments sont à prendre en considération:
    NI-DAQmx 9.2.2 - Windows 7 64 bit/7 x86/Server 2003 R2 (32-bit)/XP x86/Vista x64/Vista x86/Server 2008 R2 (64-bit)
    Vista x86 = Vista 32bits
    Support de logiciels dans NI-DAQmx 9.2.2
    Support de systèmes d'exploitation
    Les systèmes d'exploitation suivants sont supportés par NI-DAQmx 9.2.2 :
    Windows 7 (32 et 64 bits)
    Windows Vista Professionnel (32 et 64 bits)
    Windows XP Service Pack 2 ou version ultérieure
    Windows Server 2003 R2 (32 bits)
    Windows Server 2008 R2 (64 bits)
    NI-DAQmx ne supporte pas les comptes invités sous Windows 7/Vista/XP. Vous devez vous connecter à un compte administrateur ou un compte utilisateur pour pouvoir utiliser NI-DAQmx sous ces systèmes d'exploitation.
    Attention  Si vous avez fait une mise à niveau de votre système pour passer d'une version antérieure de Microsoft Windows à Microsoft Windows Vista, vous devez désinstaller tous les logiciels National Instruments avant de réaliser cette mise à niveau. Une fois celle-ci terminée, vous pourrez réinstaller vos logiciels National Instruments.
    Cordialement,
    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 ...

Maybe you are looking for

  • Working with movie clips

    I'm making an animation with movie clips inside the stage but if i put action in the end of these for go to another frame in the stage, dosnt let me because AS3.0 does'nt alow script inside buttons and MC's. Wath can i do for this issue. The new code

  • New tabs created with + not useable or closing. Google toolbar interaction!

    Using FF25.0 If I create a new tab by middle clicking on a link on a displayed page it works fine. but if I click on the + at the end of the tab bar then select it and type an URL in: Nothing! And the tab then sometimes has no closing cross, even if

  • DM_Mappings.csv which maps logical names to relational names is blank

    Hi, I have created a data model (both logical and relational) using OSDM 3.1.4.710. I am trying to generate a csv report (go to File -> Export -> To CSV option in OSDM) which maps the logical names to physical names (physical names are abbreviated as

  • Create Customer XD01 in Personas

    In Personas under XD01 Create Customer I have merged the tabs like the awesome tutorial said and I have used this method for Change and Display Customer just perfectly, but under Create it seems some of the blocks only show up if you enter the info a

  • Virt-install does not take kickstart option when specified

    Hi, I'm trying to create HVM using virt-install and I'm trying to specify -x ks option for the kickstart, but during install it still prompts me for input. Looks like the kickstart file is not being used: Here's my command: virt-install -n test2 -r 3