Les projets‎ > ‎Scilab-Xcos‎ > ‎

Acquisition de données


Introduction

Suite à l’article d’Armel BAGUET sur le site de l’UPSTI faisant référence à l’acquisition de données sous Scilab via les boîtiers 6008/6009 de National Instruments, nous nous sommes intéressés au développement d’une interface d’acquisition complète qui pourrait :

  • être utilisée sur certains matériels du laboratoire pour implanter des capteurs complémentaires (accéléromètre par exemple) ou pour palier à des acquisitions perfectibles (échantillonnage insuffisant, mesures trop filtrées, etc.)

  • être développée et implantée par les étudiants dans le cadre des TIPE pour développer des protocoles d’acquisition complets et maîtrisés totalement

Dans la version stable 5.3.3 actuelle, la démarche présentée dans ce qui suit est encore un peu difficile, mais les versions ultérieures – dont la 5.4 à venir très prochainement, probablement avant février 2012 – vont inclure de nombreux points développés pour ce projet, ce qui rendra fort certainement l’installation et surtout l’exploitation beaucoup plus facile.

La procédure présentée fonctionne aussi bien pour un boîtier 6008 que pour un boîtier 6009 et devrait pouvoir être facilement adaptée pour les autres boîtiers de la marque. Les différences entre les deux boîtiers impliquent quelques modifications dans les programmes : celles-ci sont indiquées clairement dans la suite de ce document.

Installation de l'interface National Instrument

Il est conseillé de commencer par installer l'interface National Instrument avant toute autre installation afin que le boîtier soit immédiatement reconnu à la connexion.

Télécharger, sur le site de National Instrument, le programme NI-DAQmx (la version complète – 9.4 à la date de rédaction – est conseillée même s'il semble que la version « Base » fonctionne également) : ce programme se trouve, à la date de rédaction de ce document, à l'adresse :

http://joule.ni.com/nidu/cds/view/p/id/2604/lang/fr

Le téléchargement se fait après une inscription gratuite et se réalise de manière directe ou via un gestionnaire : vue la taille du programme à télécharger, cette deuxième méthode est très conseillée – et est d'ailleurs proposée par défaut – si la connexion Internet a des fluctuations, ce qui est assez souvent le cas. Le téléchargement (1,3 Go !) commence alors immédiatement :

Quand le téléchargement est terminé, il reste alors à installer le logiciel.


L'installation étant faite, il reste alors à redémarrer le système (sous Windows) ou fermer / ouvrir la session (sous Linux) pour que le programme soit pleinement utilisable.

Il est alors possible de brancher un boîtier 6008/6009 qui est alors immédiatement reconnu.

Après installation, lancer le programme pour repérer le numéro Dev (comme « device ») : ce numéro est « Dev1 » si c'est le premier boîtier branché sur l'ordinateur mais il peut être « Dev2 » ou beaucoup plus si plusieurs boîtiers ont été branchés successivement. 

En effet, chaque boîtier ayant son propre identifiant, le programme incrémente la numérotation des boîtiers depuis le numéro 1.

Noter le numéro 'Dev' du boîtier : il sera utile pour la suite.

Développement d'une interface de mesure simple sous Scilab

La différence entre les deux boîtiers d’acquisition NI 6008 et NI 6009 est minime mais suffisante pour qu’il soit nécessaire d’en tenir compte dans le programme développé.

E effet, le boîtier 6008 permet une mesure jusqu’à 10000 échantillons par seconde alors que le 6009 en propose jusqu’à 47000, à répartir bien entendu dans les deux cas sur l’ensemble des voies à mesurer. Pour ce qui est des connexions, les deux boitiers sont équivalents et les voies sont donc nommées de la même façon.

Une fonction de haut niveau a été développée par l’équipe Démosciences pour simplifier la réalisation d’une mesure via un boîtier initialement connecté (la première voie utilisée est nécessairement la voie AI0).

Cette fonction peut être adaptée selon les besoins spécifiques d'une mesure, le développement ayant été fait ici sur le système Maxpid ré-instrumenté et testé, avec succès, sur le pilote automatique de bateau avec le boîtier National Instrument fourni par CREA technologie.

Dans la version à venir de Scilab 5.4, la procédure suivante ne sera pas nécessaire pour appeler la fonction : depuis la console de départ sur Scilab, cliquer sur 'Fichier' puis 'Exécuter' et sélectionner le fichier appelé 'readNIdata.sce' disponible en fin de page.


Le logiciel indique ensuite que l'exécution a été réalisée, directement dans la console : pour le moment, le logiciel a chargé la routine en mémoire et attend la commande de début de mesure pour acquérir les données sur le boîtier connecté.

Pour comprendre ce qu'il y a dans ce programme et éventuellement le faire évoluer ou l'adapter aux mesures attendues (par exemple pour le TIPE d'un étudiant), il suffit d'ouvrir le fichier avec l'application intégrée SciNotes, accessible par le menu 'Applications' => 'SciNotes' => 'Ouvrir' et choisir enfin le fichier 'readNIdata.sce'.

Le programme ayant été largement commenté en français par l'équipe Démosciences, il nous semble qu'il sera facilement adaptable.

Une mesure est réalisée en tapant la commande suivante dans la console Scilab :

--> [data,temps]=readNIdata(nodevice, nb_voies, duree, nb_pts, type_boitier)

Dans ce code :

  • 'nodevice' correspond au numéro du boitier spécifié précédemment et identifié par le logiciel National Instrument (voir 2.a)

  • nb_voies’ fait référence au nombre de voies successives connectées sur le boitier NI (exemple : AI0, AI2, …, AI5 = 6 voies). Il est impératif de commencer en connectant la voie AI0 puis les voies successives.

  • duree’ est le nombre spécifiant la durée de mesure, en secondes (exemple : ‘3’)

  • nb_pts’ indique le nombre d’échantillons souhaité par voie d’acquisition : si le nombre excède une certaine valeur fonction du boitier, un message d’erreur est affiché et la mesure ne se fait pas.

  • type_boitier’ prend la valeur '6008' ou '6009' (vous pouvez mettre ou non les 'quotes')

On peut donc taper dans la console, par exemple, la commande suivante pour acquérir 7 voies (AI0 à AI6) sur un boîtier 6009 déclaré en Dev1 sur 5 s et 2500 points par voie :

--> [data,temps]=readNIdata(1, 7, 5, 2500, '6009')

Après avoir exécuté ce code, on peut lancer la mesure sur le système (par exemple le Maxpid pendant la présentation Démosciences) et l'acquisition se fait au fur et à mesure sur la durée spécifiée par la variable ‘duree’.

Les grandeurs renvoyées doivent être notées entre crochets [data,temps] (les noms des variables utilisées sont quelconques, tout autre nom convient bien entendu). La variable data est une matrice contenant autant de colonnes que de voies (nb_voies) et autant de lignes que de points d'échantillonnage demandés (nb_pts). La variable temps contient les différents pics temporels. Pour éviter d'avoir à construire, le vecteur temps, le programme renvoit simplement un vecteur construit à partir des données entrées :

--> temps = [0 : duree/nb_pts : duree-duree/nb_pts]

Cette commande signifie qu'on construit un vecteur comportant tous les pas de temps entre l'instant intial 'ti=0' et l'instant final 'tf=duree – duree/nb_pts' par pas de temps de durée égale à 'duree/nb_pts'. On s'arrête à l'avant dernier point pour avoir un vecteur de taille égale au nombre de points !

On propose dans cette partie les codes permettant de traiter les données directement par les commandes Scilab, qui sont finalement assez simples et efficaces, surtout pour une mesure ponctuelle telle qu'on en fait en TIPE.

L’appel d’une colonne se fait en tapant dans la console :

--> data(:,i)

où i est le numéro de la voie. (Attention la voie AI0 correspond à data(:,1) car les indices des vecteurs ou matrices commencent à 1 sous Scilab).

Pour tracer directement les voies, il est possible d’utiliser les commandes de tracé de Scilab :

  • pour tracer une voie uniquement

--> plot(temps,data(i,:))

  • pour tracer plusieurs courbes sur une même figure avec les mêmes axes :

    --> plot(temps,[data(2,:);data(3,:)])

  • pour tracer plusieurs courbes sur une même figure avec des axes différents (exemple : 6 sous-figures réparties sous la forme d’un tableau 3 lignes, 2 colonnes) :

--> subplot(3,2,i)

--> plot(temps,data(4,:)) (pour tracer la courbe de la voie 4 dans la fenêtre i parmi les 6 disponibles. On recommence l'appel subplot suivi de plot en faisant varier l'indice i de 1 à 6)

Après chaque tracé, il est possible de spécifier un label pour l’échelle des abscisses, des ordonnées, de donner un titre à la figure avec la simple commande :

--> xtitle("titre", "axe x", "axe y")

Un très bon tutoriel complet est disponible à l'adresse suivante : http://fr.wikibooks.org/wiki/Découvrir_Scilab/Graphiques_et_sons

ċ
acquisition_simple.sce
(1k)
David Violeau,
4 juin 2012 à 06:14
ċ
readNIdata.sce
(6k)
David Violeau,
4 juin 2012 à 06:15
Comments