Canalblog
Editer l'article Suivre ce blog Administration + Créer mon blog
Publicité
Les astuces et guides de Gillou
14 septembre 2012

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

 

Publicité
Publicité
Commentaires
Publicité