Utiliser un Yokogawa WT230 sous linux
On peut trouver relativement facilement des programmes pour acquérir les données du wattmètre pour matlab (sous windows notamment, ils doivent aussi fonctionner sous linux en modifiant les ports, mais je ne me suis pas penché sur cette adaptation).
Je vous propose un petit script qui vous permet de communiquer avec l'appareil qui ne requiert que des programmes libres.
On utilise le port série. Il faut noter que le câble à utiliser est spécial. Dans mon cas, je me suis fait un câble série 25 broches vers 9 broches (voir le schéma de câble à la fin de ce message), puis utilisé un adapteur série vers USB (donc le port utilisé est /dev/ttyUSB0). Pour une raison obscure, je n'arrive pas à configurer correctement la connexion avec la commande stty; en revanche l'excellent programme gtkterm permet de configurer simplement la connexion, et est aussi utile pour corriger les bugs.
Voici un petit script bash (à utiliser en root) sans prétention mais qui fonctionne assez bien.
#!/bin/bash
kill $(pidof gtkterm)
sleep 0.2
gtkterm -d 100 -p /dev/ttyUSB0 -s 9600 -b 8 -t 1 &
sleep 1
# stty -F /dev/ttyUSB0 >/dev/ttyUSB0
PATH_Save=$(pwd)
PATH_Device=/dev/ttyUSB0
nb_key=1
aide="************************************************\n
e: quitter le programme\n
i: requete d'identification (non sauvegardée)\n
s: sauvegarder toutes les mesures dans le fichier (y compris calibres)\n
u: sauvegarder toutes les mesures dans le fichier (calibres NON compris)\n
d: afficher la date\n
m: ordre des mesures données par MEASURE:VALUE? (sauvegarde dans log_config)\n
c: vider les fichiers log et log_config (sauvegarde automatique)\n
r: afficher la configuration totale actuelle (sauvegarde dans log_config)
h: afficher l'aide (ce message)\n
************************************************\n"
echo -e $aide
while true ; do
pressed_key=$(dd bs=1 count=$nb_key 2> /dev/null)
case "$pressed_key" in
i)
echo *IDN?
echo *IDN? >$PATH_Device
;;
s)
echo -n "date : " >>$PATH_Save/log
date +"%D %T" |tee -a $PATH_Save/log
echo CONFIGURE:VOLTAGE? |tee -a $PATH_Device
head -n 1 $PATH_Device |tee -a $PATH_Save/log
echo CONFIGURE:CURRENT? |tee -a $PATH_Device
head -n 1 $PATH_Device |tee -a $PATH_Save/log
echo MEASure:VALue? |tee -a $PATH_Device
head -n 1 $PATH_Device |tee -a $PATH_Save/log
;;
u)
echo -n "date : " >>$PATH_Save/log
date +"%D %T" |tee -a $PATH_Save/log
echo MEASure:VALue? |tee -a $PATH_Device
head -n 1 $PATH_Device |tee -a $PATH_Save/log
;;
m)
echo -n "date : " >>$PATH_Save/log_config
date +"%D %T" |tee -a $PATH_Save/log_config
echo MEASure? |tee -a $PATH_Device
head -n 1 $PATH_Device |tee -a $PATH_Save/log_config
;;
e)
echo "exit"
break;
;;
c)
echo "effacement des fichiers log et log_config, leur sauvegarde est automatique dans les fichiers log.bak et log_config.bak"
mv $PATH_Save/log $PATH_Save/log.bak
>$PATH_Save/log
mv $PATH_Save/log_config $PATH_Save/log_config.bak
>$PATH_Save/log_config
;;
d)
date +"%D %T" |tee -a $PATH_Save/log $PATH_Save/log_config
;;
h)
echo -e $aide
;;
r)
echo -n "date : " >>$PATH_Save/log_config
date +"%D %T" |tee -a $PATH_Save/log_config
echo CONFIGURE? |tee -a $PATH_Device
head -n 1 $PATH_Device |tee -a $PATH_Save/log_config
;;
a)
echo -n "date : " >>$PATH_Save/log_config
date +"%D %T" |tee -a $PATH_Save/log_config
echo AVERAGING? |tee -a $PATH_Device
head -n 1 $PATH_Device |tee -a $PATH_Save/log_config
read -p "ON OFF; LINEAR ou EXPONENT; coeff 8 16 32 64 séparé par un espace" state type coeff
if [[ $state == ON ]]
then
echo AVERAGING:TYPE $type,$coeff |tee -a $PATH_Device
fi
echo AVERAGING:STATE $state |tee -a $PATH_Device
echo AVERAGING? |tee -a $PATH_Device
head -n 1 $PATH_Device |tee -a $PATH_Save/log_config
;;
esac
done
#
kill $(pidof gtkterm)
chmod 777 $PATH_Save/log
chmod 777 $PATH_Save/log_config
Le script est très simple. Il permet de sauvegarder diverses informations dans deux fichiers selon leur teneur. Ensuite un second petit script (python) permet de sélectionner les lignes intéressantes (données) :
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
pwd = os.getcwd()
n = pwd[-1]
m = pwd[-2]
print n
test1 = open("test"+m+n,"w")
with open("log") as file:
for line in file:
if str.isdigit(line[0]):
test1.write(line)
test1.close()
(après chaque mesure, je déplace le fichier log dans un dossier sous la forme "testmn" où m et n sont deux chiffres, et je copie le fichier dans le dossier correspondant avant de le lancer).
Câblage 25/9 broches (les x correspondent à des broches non utilisées, il faut évidemment connecter les deux lettres correspondantes) :
x x x x x x A x x x x x
x D E C B F G x x x x x x
x C B A
G F E D x