le 06-30-2010 08:13 AM
Bonjour,
Je programme actuellement sous l'environnement CVI. Et je possède une 6363 qui est sensé pouvoir mesuré sur 16 canaux en différentiel, avec une fréquence d'échantillonnage de 1M/S par canal.
Or avec ma carte, on est obligé de diviser la fréquence d'échantillonnage max par le nombre de canaux que l'on souhaite mesurer.
De quel façon je peux procéder pour ne pas etre obligé de divisé la fréquence d'échantillonnage? sachant que dans les spec de cette carte, on peut faire des mesures 1M/s par canaux
voila le code ;
//string_channel ="Dev1/ai0,Dev1/ai1,Dev1/ai2,Dev1/ai3,Dev1/ai4,Dev1/ai5,Dev1/ai6,Dev1/ai7"
//rate =fréquence d'échantillionnage
DAQmxErrChk (DAQmxCreateTask("",&taskHandle));
DAQmxErrChk (DAQmxCreateAIVoltageChan(taskHandle,string_channel,"",DAQmx_Val_Diff,min,max,DAQmx_Val_Volts,NULL));
DAQmxErrChk (DAQmxCfgSampClkTiming(taskHandle,"",rate,DAQmx_Val_Rising,DAQmx_Val_FiniteSamps,sampsPerChan));
DAQmxErrChk (DAQmxGetTaskAttribute(taskHandle,DAQmx_Task_NumChans,&numChannels));
if( (data=malloc(sampsPerChan*numChannels*sizeof(float64)))==NULL )
{
MessagePopup("Error","Not enough memory");
goto Error;
}
/*********************************************/
// DAQmx Start Code
/*********************************************/
DAQmxErrChk (DAQmxStartTask(taskHandle));
SetCtrlAttribute(panel,PANEL_ACQUIRE,ATTR_DIMMED,1);
ProcessDrawEvents();
/*********************************************/
// DAQmx Read Code
/*********************************************/
DAQmxErrChk (DAQmxReadAnalogF64(taskHandle,sampsPerChan,10.0,DAQmx_Val_GroupByChannel,data,sampsPerChan*numChannels,&numRead,NULL));
Je vous remercie d'avance
le 07-19-2010 07:38 AM
Bonjour Bob,
Cette limite est liée à la structure de la carte elle même. La carte est munie d'un convertisseur pour l'ensemble des voies, qui sont multiplexées. Si vous avez besoin d'un échantillonnage à 1Méch/s pour plusieurs voies, il faut opter pour une carte à échantillonnage simultanée. Ce type de carte dispose d'un convertisseur par voie. Il n'y a alors plus besoin de multiplexer les échantillons, et vous pouvez alors soutenir une fréquence d'échantillonnage de 1Méch/s pour chacune des 16 voies que vous souhaitez acquérir.
Les cartes PXIe-6366 et PXIe-6368 présentent cette topologie. Les cartes de la série S sont également capables de gérer un échantillonnage simultané, mais ne comportent généralement que quatre voies (PCI-6120).
Cordialement,
le 07-19-2010 09:16 AM
Merci pour votre réponse,
J'avais oublié de précisé que cette carte '6363' était capable de mesurer en simultanée à 1M/s , et je n'arrive pas à la configurer pour.
le 07-19-2010 10:06 AM
"Or avec ma carte, on est obligé de diviser la fréquence d'échantillonnage max par le nombre de canaux que l'on souhaite mesurer.
De quel façon je peux procéder pour ne pas etre obligé de divisé la fréquence d'échantillonnage? sachant que dans les spec de cette carte, on peut faire des mesures 1M/s par canaux"
Mon post précédent donne les raison de cet échantillonnage à 1Méch/s agrégé, c'est à dire, 1Méch/s partagé entre les différentes voies acquises simultanément. Ceci est du au multiplexage des voies analogique de la carte. Je vous invite à vous référer aux spécifications de la carte 6363, qui reprends ces éléments (1MS/s multichannel aggregate), et à les comparer avec les spécifications des cartes 6366/6368 par exemple.
Voici la topologie typique d'une carte multiplexée:
Si vous demandez 16 voies en acquisition analogique à une telle fréquence d'échantillonnage, vous devriez avoir un message d'erreur ou à minima une mise en garde lors de l'exécution. Qu'en est-il? Est-ce qu'une erreur apparaît? A quelle ligne? Quel code d'erreur?
Cordialement,
07-20-2010 02:21 AM - modifié 07-20-2010 02:23 AM
en forçant l'acquisition sur 16 voies à 1M/S:
à cette ligne là:
DAQmxReadAnalogF64(taskHandle,sampsPerChan,10.0,DAQmx_Val_GroupByChannel,data,sampsPerChan*numChannels,&numRead,NULL)
j'obtiens comme message d'erreur:
NON-FATAL RUN-TIME ERROR:
"Acq-IntClk.c", line 209, col 9, thread id 0x000009F8:
Function DAQmxReadAnalogF64: (return value == -200019 [0xfffcf2ad]).
ADC conversion attempted before the prior conversion was complete.
Increase the period between ADC conversions.
If you are using an external clock, check your signal for the presence of noise or glitches.
Property: DAQmx_Read_RelativeTo Requested Value: DAQmx_Val_CurrReadPos
Property: DAQmx_Read_Offset Requested Value: 0 Task Name: _unnamedTask<0>
Status Code: -200019
Merci en tout cas.
07-20-2010 02:45 AM - modifié 07-20-2010 02:47 AM
Bob,
Ceci n'est matériellement pas possible, la carte 6363 n'est pas capable d'échantillonner 16 voies à 1Méch./s.
En français dans le texte, l'erreur donne:
Une tentative de conversion analogique vers numérique a eu lieu avant que la conversion précédente ne soit achevée.
Augmentez la période entre les conversions. Si vous utilisez une horloge externe, vérifiez qu'il n'y a pas de bruit ni de parasites dans votre signal.
La période de conversion analogique numérique est directement liée à la période d'échantillonnage, il faut donc réduire la fréquence d'échantillonnage. National Instruments vous garantie un bon fonctionnement à une fréquence d'échantillonnage de 1Méch./s divisée par le nombre de voie, soit dans votre cas 62,5kéch./s sur 16 voies.
Au delà, le driver va vous renvoyer la mise en garde 200011:
La fréquence d'horloge spécifiée est tellement élevée qu'elle ne respecte pas les exigences liées au temps nécessaire à la stabilisation pour l'acquisition. Réduisez la fréquence d'horloge ou la précision de la mesure pourrait être compromise.
...puis des erreurs telle celle que vous rencontrez, expliquant que la carte n'a pas le temps d'échantillonner vu les contraintes de temps imposées (fréquence d'échantillonnage trop élevée).
Cordialement,
le 07-20-2010 03:04 AM
En fait je suis bien embeté... On nous avait conseillé cette carte 6363, vu qu'elle était normalement capable de faire du 1M/s par canal, et la doc ne semble pas démentir cette caracteristique.
Mais probablement que vous avez raison.
merci pour votre réponse,
le 07-20-2010 04:43 AM
Je confirme que vous aviez raison,
je vous remercie de votre réponse