11-16-2008 12:09 PM
Bonjour,
Je travaille avec une carte de la série M en PXI.
Je viens d'apprendre à mes dépends, que les valeurs lues à l'aide des fonctions NiDaqMx type DAQmxReadBinaryI16() ne tiennent pas compte des facteurs de calibration.
Je l'ai découvert en faisant des mesures à l'aide de ces fonctions (qui n'étaient pas bonnes) : je ne trouvais pas les mêmes valeurs (apès mise à l'échelle en volt) que les fonctions de lecture traditionnelles avec récupérations des valeurs en volt directement.
J'ai besoin d'avoir des valeurs au format i16 (sans mise à l'échelle en volts) correctes, car ces valeurs sont enregistrées dans des fichiers puis relues ultèrieurement par un autre logiciel
Comme il s'agit d'un portage d'un gros logiciel, je dois respecter celà.
Personnellement, je ne vois pas à quoi servent ces fonctions type DAQmxReadBinaryI16(), si les valeurs qu'on récupère ne sont pas bonnes.
En conséquence, avez-vous une solution rapide pour convertir une fois acquises mes valeurs i16 non calibrées en valeur i16 calibrées ???
Eddy
11-17-2008 07:59 AM
Bonjour,
En effet, les valeurs retournées par la " DAQmxReadBinaryI16() " ne sont pas mises à l'échelle.
Pour retrouver les valeurs en volt à partir des valeurs retournées par " DAQmxReadBinaryI16() " il faut faire une mise à l'échelle.
Les fonctions à utiliser sont:
DAQmxGetChanAttribute()
DAQmxGetScaleAttribute()
DAQmx_AI_DevScalingCoe()
Cette dernière fonction permet de récupérer les coefficients d'une équation polynomiale à l'aide de laquelle on pourra passer de la valeur binaire à la valeur en volt.
Par exemple, si l'élement situé à l'index 2 du tableau est 4, le 3ème terme de l'équation sera 4x10^2.
Sincères salutations,
11-17-2008 08:23 AM
Bonjour,
effectivement, mais ce n'est pas ce que je demande : je voudrais avoir les valeurs au format binaire (i16) calibrées (et non pas les valeurs en volts), et ceci sans que celà me prenne trop de temps.
11-17-2008 10:11 AM
Bonjour,
En effet, la fonction DAQmxBinaryReadI16() renvoit une valeur non mise à l'échelle (unscaled) . Pour les matériels supportant une calibration software, ces valeurs non mises à l'échelle ne sont pas calibrées.
Afin que je puisse mieux comprendre votre problématique, pourriez vous m'indiquer quel matériel vous utilisez et pourquoi vous ne souhaitez pas utiliser la fonction "haut niveau" qui renvoit une valeur en volt sur 64 bits.
Si c'est pour une question d'espace mémoire, une possibilité serait d'acquérir la valeur en 64 bits puis de la convertir en 16 bits (cast) avant de la stoquer.
Sincères salutations,
11-17-2008 10:28 AM
J'utilise une carte PXI-6225.
C'est à la fois pour des questions de performances et d'espace mémoire.
Je fais des traitements sur les buffers que j'acquiert (pendant l'acquisition) (notamment trigger soft) et je dois enregistrer les valeurs au format i16 après acquisition dans un fichier.
Sinon, comment convertir les valeurs lues en volts en i16 ?
11-17-2008 11:13 AM
Pour convertir une valeur float64 en I16, on procédera de la manière suivante:
titi=(short int)toto;
titi sera alors une valeur entière.
Avant de faire ce cast, il faudra donc multiplier la valeur float64 par une constante afin de garder un maximum de précision.
Cordialement,
11-17-2008 12:50 PM
Non, ce n'est pas ce que je veux avoir : je veux avoir la valeur sous forme i16 telle que j'aurais du l'avoir à la sortie de la fonction de lecture de données brutes avec prise en compte des facteurs de calibration
=> ex : valeur lue 5V avec calibre +- 10V => valeur i16 : (i16) 32767/2
11-18-2008 10:18 AM
Bonjour,
Je comprends ce que vous voulez faire, mais ceci est impossible avec le driver.
En effet, les données de calibration sont combinées avec les données de gamme (voir http://digital.ni.com/public.nsf/allkb/0FAD8D1DC10142FB482570DE00334AFB )
Ainsi, on ne pourra pas obtenir de données binaires prenant en compte la calibration mais pas la gamme de mesure.
Le meilleur choix sera à mon avis de faire une lecture classique (en volt) et de convertir les données acquises en binaire par programmation avant de les stocker.
Une autre option serait d'utiliser une carte série E (la 6225 est une série M). En effet, les cartes série E pratiquent une calibration hardware et donc les données renvoyées par la lecture binaire sont déja calibrées.
Cordialement,
11-18-2008 10:30 AM
Merci, mais vous avouerez que ce n'est franchement pas terrible !!!
Surtout que NI recommande de partout ses cartes série M à la place des séries E !!!!!
11-18-2008 10:46 AM
Merci de ce retour.
Je vous propose de remonter cette information via notre "product suggestion center".
( http://digital.ni.com/applications/psc.nsf/default?OpenForm&temp1=&node= )
Cela permettra d'informer notre R&D des attentes des clients dans le but de faire évoluer au mieux nos produits.
Cordialement,