DataLogging: lxi-tools avec multimètre SIGLENT SDM30xx

Bonjour à tous,

LXI est l'acronyme utilisé pour LAN eXtensions for Instrumentation , une norme qui permet de piloter des instruments de tests et d'effectuer des mesures par l'intermédiaire du réseau Ethernet.

Source: lxistandard.org

Le cas pratique

Pour les besoins du projet SuperPi, j'ai besoin de faire un relevé des valeurs du courant durant la phase de boot des 13 Raspberry-Pis présent sur le Rack. 

Rack de Raspberry-Pi

Il est bien entendu possible de réaliser cette opération à la main avec un calepin, un  chronomètre mais il en résulterait des relevés relativement approximatifs... sans compter toutes ces distractions qui imposerait une nouvelle série de mesure.

Si SIGLENT propose le logiciel EasyDMM pour contrôler le Multimètre depuis un PC, ce dernier n'existe que pour Windows! 
Je ne peux donc pas l'utiliser avec Linux (voir la section ressources pour Wine).

Mesure manuelle du courant d'alimentation du Rack (en Ampères)
SIGLENT SDM3045x (siglent.eu)

L'idéal serait d'automatiser la prise de relevé sur Linux à l'aide de mon multimètre SIGLENT SDM3045x... c'est ce que propose cet article!

Interfaces de communication du SIGLENT

Il y a plusieurs interfaces de communication sur le SIGLENT SDM3045x dont le commun port USB et un port Ethernet. 


Ce port Ethernet permet donc d'échanger des information avec le SDM3045x via le réseau, ce que fait le logiciel EasyDMM mais aussi LXI-tools qui est un outil multiplateforme.

A propos de LXI

LXI est l'acronyme utilisé pour LAN eXtensions for Instrumentation , un digne descendant du célèbre GPIB (General Purpose Interface Bus) mais via le réseau Ethernet filaire ou Ethernet sans-fil (WiFi). 

Reposant sur la norme Ethernet, LXI permet de piloter un instrument de test et d'effectuer des mesures. LXI définit une implémentation LAN interopérable entre les appareils de test et mesure des différents acteurs du marché.

LXI permet d'envoyer des commandes SCPI (Standard Commands for Programmable Instrument) et de réceptionner la réponse. LXI permet aussi de réaliser une capture d'image de l'appareil de test.

LXI prend également en charge  un protocole temporel de précision (dit PTP, IEEE1588) permettant aux différents appareils de test de synchroniser leur horloges internes.

LXI permet également de mettre en place un système de Trigger (déclencheur) à huit canaux.

LXI est donc un standard et ses spécifications sont prises en charge par le consortium LXI (www.lxistandard.org).

Voir www.lxistandard.org pour plus d'informations.

LXI-Tools

Source: dépôt GitHub

LXI-Tools est un projet open-source offrant des outils permettant d'interagir avec des instruments supportant LXI (comme le SIGLENT SDM).

Le projet offre un outil multi-plateforme en ligne de commande ainsi qu'une interface utilisateur. Il peut donc s'installer sur Windows, Mac, Linux.

Interface de lxi-tools.lxi-gui

Outre les fonctionnalités d'envoi de commande SCPI et la capture d'écran, 

LXI-Tools dispose d'un interpréteur de script LUA et des fonctions d'API LUA.
Il est donc possible d'écrire des scripts LUA d'automatisation pour:

  • commander divers appareils avec des commandes SCPI, 
  • collecter des données, 
  • sauver des fichiers CSV, 
  • réaliser des graphiques, 
  • etc.  

Plus d'information sur le dépôt du projet

Installer LXI-tools sur Linux

Je dispose d'un système Linux Mint (donc dérivé d'Ubuntu, donc une Debian).
Le dépôt du projet contient une section Installation.

Il y a une chose importante à savoir:

  1. Une installation snap de lxi-tools inclus l'interface graphique
  2. L'installation du seul paquet lxi-tools pour l'outil en ligne de commande.
Je recommande vivement l'installation snap car l'interface graphique est très pratique pour tester ses premières commandes SCPI sur un périphérique LXI.

Pour installer le snap de lxi-tools:

$ sudo apt install snapd
$ snap install lxi-tools
$ # Demarrer l'interface graphique
$ lxi-tools.lxi-gui

Au premier démarrage, l'interface graphique se présente comme ci-dessous

Interface lxi-gui

Premier test

Avant de commencer:
  1. Brancher le SIGLENT SDM sur le réseau
  2. Mettre sous-tension
  3. Vérifier la configuration d'adresse IP dans le SIGLENT SDM.
    Le SigLent doit être sur le même sous réseau que votre Ordinateur.
    Voir le manuel Siglent pour accéder à la configuration réseau.
  4. L'icône réseau doit apparaître sur l'affichage du multimètre

Mise en réseau du Siglent

Démarrer le programme interactif avec la commande terminal

$ # Demarrer l'interface graphique
$ lxi-tools.lxi-gui

Et presser sur le bouton Search en haut a gauche. Un nouveau volet apparaît avec  les appareils découverts.
Celui-ci reprend le Siglent SDM3045.

Découverte des appareil LXI présent sur le réseau

Sélectionnez simplement l'appareil dans la liste puis revenir dans le volet SCPI.

Enfin saisir la commande READ? et presser le bouton Send pour obtenir la valeur mesurée sur le SigLent.

Envoi d'une commande SCPI

La valeur retournée en notation scientifique correspond au 1.51 mV mesuré sur le SIGLEN SDM3045. 
 
La commande *IDN? retourne les informations d'identification du periphérique distant.
Le resultat retourné par *IDN? est:
[192.168.0.220] Siglent Technologies,SDM3045X,SDM34FBC5R0155,5.01.01.05

Il y a bien d'autres commandes SCPI à explorer. Voici quelques ressources en attendant un prochain article: (1) SCPI sur Wikipedia (2) SDM3045X Remote Manual sur Scribd (3) how to transition tsp code to SCPI (Tektronik, plein d'exemples)

Script LUA

Ce qui est particulièrement intéressant avec lxi-tools.lxi-gui c'est de pouvoir executer des scripts pour capturer les données et exporter ceux-cis sous forme de fichiers CSV (pour tableur).

Bien que n'ayant aucune connaissance concernant LUA script, je dois avouer que cela fût assez facile. 

Le script basic.lua m'a permit de me familliariser rapidement avec LUA.

A partir de là, l'exploration fût assez simple grâce aux différents exemples combinés avec la description de l'API lua .

Se connecter sur le SDM

En connaissant l'adresse IP du multimètre, la connexion s'établit à l'aide de lxi_connect()

dsm = lxi_connect("192.168.0.220", nil, nil, 6000, "VXI11") -- Siglent DSM

lxi_disconnect( dsm )
Un point important concernant lxi_connect() est qu'un paramétrage incorrect provoque un plantage total de l'interpréteur LUA et du programme lxi-tools.lxi-gui dans la foulée.

Utiliser un timer/clock

L'horloge (clock) créé avec la fonction lxi_clock_new() permet d'avoir un horodatage en secondes depuis le premier appel à lxi_clock_read().

La fonction lxi_clock_read() retourne une valeur décimal de sorte que la précision est inférieure à la seconde.

dsm = lxi_connect("192.168.0.220", nil, nil, 6000, "VXI11") -- Siglent DSM
clock0 = lxi_clock_new()



clk = lxi_clock_read( clock0 )
current = lxi_scpi( dsm, "READ?" )
print( clk .. " , " .. current )


lxi_clock_free( clock0 )
lxi_disconnect( dsm )

Le script ci-dessus effectue la lecture du courant (puisque le SDM3045 est configuré en mesure de courant). Cette mesure est accompagnée de son horodatage. 

Le tout est affiché à l'écran avec la fonction print().

Capture dans un fichier CSV

L'exemple ci-dessous utilise lxi_log_new() pour créer un enregistreur de données. Par la suite lxi_log_add() est utilisé pour ajouter des données dans le log.
Enfin, lxi_log_save_csv() permet de sauver le fichier de donnée sur le disque.

Le script ci-dessous réalise une capture suivit d'une pause de 100ms (donc approximativement 7 à 10 fois par secondes) et cela pendant LOG_MIN minutes. Donc une minute dans le cas présent.

dsm = lxi_connect("192.168.0.220", nil, nil, 6000, "VXI11") -- Siglent DSM
clock0 = lxi_clock_new()
log0 = lxi_log_new()

LOG_MIN = 1
FILENAME = "capture-current.csv"

i = 0
repeat
	clk = lxi_clock_read( clock0 )
	current = lxi_scpi( dsm, "READ?" )
	-- print( clk .. " , " .. current )
	lxi_log_add( log0, clk, current )
	i = i+1
	if ( (i % 10)==0 )
	then
		print( "Percent " .. ((clk * 100) / (LOG_MIN*60)) )
	end
	lxi_msleep( 100 )
until( clk > (LOG_MIN*60) )
lxi_log_save_csv(log0, FILENAME )
print( "file " .. FILENAME .. " saved!" )
print( "Done!" )

lxi_log_free( log0 )
lxi_clock_free( clock0 )
lxi_disconnect( dsm )

Il n'y a pas d'indicateur d'exécution du script ou de fin d'exécution.
Le script inclus donc quelques fonctions print() indiquant la progression du script.

L'instruction if ( (i % 10)==0 ) permet d'exécuter le contenu toutes les 10 itérations. Cela permet d'afficher un message de progression toute les secondes. 

L'expression (clk * 100) / (LOG_MIN*60) permet de calculer le pourcentage d'avancement du script.

Voici une partie du fichier CSV généré:

0.0,+2.36087612E-03
0.10354275582358,+2.36699427E-03
0.3091177130118,+2.34610304E-03
0.51395878614858,+2.35714555E-03
0.71548150898889,+2.34774450E-03
0.91347223706543,+2.35569062E-03
1.118680964224,+2.33629163E-03
1.3169437209144,+2.34114138E-03

Conclusion

LXI est un excellent outil multi-plateforme qui me permettra d'atteindre assez facilement mon but initial (à savoir faire un Log du courant de démarrage.

La mise en oeuvre est relativement simple et l'option de scripting LUA offre de nombreuses opportunités. 

C'est une très bonne pioche.

En poursuivant mes lectures, j'ai appris que le mode DUAL (affichage double) du SDM3045 me permettrait de mesurer à la fois la tension et le courant!
C'est un point que je vais approfondir rapidement.

Ressources

Aucun commentaire