NI-DAQmx, Python et Microsoft Visual Studio 2017

Introduction

NIDaqmx, Python et Visual Studio 2017. Ah la belle brochette ! NI vient (enfin) de mettre à jour son propre driver NI-Daqmx pour Python sur GitHub. Voici une méthode pour utiliser ce dernier dans l’excellent Visual Studio 2017. On en profitera aussi pour faire un exemple un peu moins moche que ceux qui viennent par défaut avec la package.

Installation

  • Je suis sous Windows 10 dans une machine virtuelle Windows 10 sous VMWare Worksation Player 12
  • Installer NIDaqmx
  • Installer Visual Studio Preview 2017 (on est en Avril 2017)
    • Choisir le Workload Python
    • Laisser les paramètres par défaut (3.6, pas d’installation de Anaconda etc.)
  • Créer un nouveau projet Python
  • Dans l’explorateur de projet, cliquer alors sur « Environnements Python »
  • Clic droit sur « Python 3.6 (64-bit) »
  • Choisir « Installer le package Python… »
  • Taper « daqmx »
  • Choisir « Installer nidaqmx » dans la liste (ne PAS choisir pidaqmx)
  • En profiter pour installer de la même manière le package « numplot »
  • Sortir de Visual Studio (sans l’éteindre) et lancer NI Max
  • Créer un device simulé
    • Dans « Périphériques et interfaces »
    • Clic droit puis « Créer un nouvel objet »
    • Choisir « Périphérique NI-DAQmx simulé » puis choisir une carte d’acquisition quelconque 62xx par exemple.

Premier test

  • Revenir dans Visual Studio, saisir le code suivant dans l’éditeur
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import pprint
import nidaqmx
 
pp = pprint.PrettyPrinter(indent = 2)
 
with nidaqmx.Task() as task:
     
    print('1 Channel & 1 Sample Read : ')
    task.ai_channels.add_ai_voltage_chan("Dev1/ai0")
    data = task.read()
    pp.pprint(data)
 
    print('\n1 Channel & 1 Sample Read : ')
    data = task.read(number_of_samples_per_channel=1)
    pp.pprint(data)
 
    print('\n1 Channel & 10 Samples Read : ')
    data = task.read(number_of_samples_per_channel=10)
    pp.pprint(data)
 
    print('\n4 Channels [0..3] & 1 Sample Read : ')
    task.ai_channels.add_ai_voltage_chan("Dev1/ai1:3")
    data = task.read()
    pp.pprint(data)
 
    print('\n4 Channels & 5 Samples Read per channel : ')
    data = task.read(number_of_samples_per_channel=5)
    pp.pprint(data)
  • Lancer le code. Voilà par exemple ce que j’obtiens :

 Remarques :

  • Je ne comprends pas pourquoi mais ça prend 2H avant d’afficher quoique ce soit et ce, que l’on soit en mode « Debug » ou en mode « Release ».
  • Ceci dit, si on lance le code Python à partir d’une console tout se passe normalement.

Notes :

  • Un des nombreux avantages à travailler avec Visual Studio c’est sans doute IntelliSense
  • Par exemple, si à la suite du code précédent on commence à taper « task. » alors, dès qu’on a tapé le point « . », la liste des fonctions membres et les propriétés de l’objet courant apparaît. Cerise sur le gâteau on a aussi l’aide…
  • Ensuite, c’est relativement intuitif, si on commence à saisir les lettres qui composent le nom de la fonction, la liste box est mise à jour etc.
  • À la fin, on a l’aide qui ne concerne que le ou les paramètres apparaît aussi dans l’environnement

Second test

  • Saisir le code suivant dans l’éditeur
1
2
3
4
5
6
7
8
9
10
11
12
import nidaqmx
from matplotlib.pyplot import *
from numpy import *
 
with nidaqmx.Task() as task:
    task.ai_channels.add_ai_voltage_chan("Dev1/ai0")  
    data = task.read(number_of_samples_per_channel=1000)
  
t1 = arange(0.0, 1000.0, 1)  
plot(t1, data, 'r.')
grid(True)
show()
  • Voilà ce que j’obtiens

Troisième test

  • Saisir le code source suivant dans l’éditeur
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import nidaqmx as daqmx
import matplotlib.pyplot as plt
import numpy as np
 
with daqmx.Task() as task:
    task.ai_channels.add_ai_voltage_chan("Dev1/ai0:1"
    task.timing.cfg_samp_clk_timing(1000)
    data = task.read(number_of_samples_per_channel=1000)
  
t = np.arange(0.0, 1000.0, 1)  
plt.plot(t, data[0], 'r')
plt.plot(t, data[1], 'b')
plt.grid(True)
plt.show()
  • Bien voir la ligne 7 où on spécifie la vitesse d’acquisition (1000 pts/s)
  • La raison pour laquelle j’affiche les 2 courbes en utilisant 2 lignes de code c’est que si je pose un point d’arrêt dans la marge de la ligne 10, quand le débogueur s’arrête dessus, voilà ce que je peux voir dans mon environnement
  • Dans le bas de la fenêtre on voit bien que data est un tableau de deux lignes et de 1000 colonnes (je fais donc un plot(data[0]..) puis un plot(data[1]…). Il y a sans doute plus efficace.)
  • Pour finir, voilà ce que j’obtiens à l’écran :
NIDaqmx, Python et Visual Studio 2017

La suite au prochain épisode…

Share this...

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

  

  

  

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.