Date: Wed, 29 Apr 1998 20:47:53 +0200 From: Maltey UPS Message-Id: <199804291847.UAA10444@audrey.enst-bretagne.fr> To: ecole@ecole.eu.org, ghislain.picard@berlin.snafu.de Subject: logiciels pedagogiques : suite Bonjour, [à tous...] Je poste ici un (début) d'article dont le but est de donner envie aux profs de sciences (au sens large : physique, technologie, chimie...) d'utiliser linux pour faire des mesures sur PC... Le but est donc 1/ DE DONNER ENVIE DE FAIRE 2/ D'EVITER LES DECOURAGEMENTS (si c'est pas tout à fait plug en play) Pour cela j'attends (en petit comité sur cette liste) vos commentaires et vos idées... n'étant pas prof de sciences (mais de maths) je suis peut etre un peu à côté de la plaque Le but est (sur ce schéma) de proposer quelques TP plus ou moins clef en main. Voila le début de ma prose : un peu longuet... pas trop ennuyeux j'espère. Il manque les listes des programmes (à commenter) quelques renseignements précis, (sur les branchement) les sources de renseignement : la liste des howto et fcol les controleurs marchant bien... (ref. et prix) d'autres idées... (au secours ! les collègues) < En fait je préfère retirer de ce mail la version provisoire et mettre > < la version finale, même si elle n'a pas été directement envoyée dans > < la liste (son URL à été donné). > < > < Olivier Ricou > =========================================================================== Un système de mesure totalement libre Une application possible à des travaux pratiques de sciences physiques ============================================================================ I - la chaîne de mesure II - règlage de la liaison série 1/ controleur 2/ connection 3/ configuration côté PC 4/ lecture 5/ écriture 6/ des remarques en vrac III - exploitation des mesures 1/ en perl 2/ utilisation de gnuplot IV - autres expériences possibles V - renseignements pratiques 1/ les controleurs 2/ documentation sur les ports séries 3/ documentation sur perl 4/ documentation sur gnuplot ============================================================================ par François Maltey, à titre personnel en mai 1998 mel : francois.maltey@enst-bretagne.fr ============================================================================ Cet article décrit un exemple de système automatisé de mesure. Il a été appliqué à la mesure des capacités des accumulateurs et piles. Plus précisément a. Les données sont mesurées sous forme d'une tension à l'aide d'un controleur numérique, b. transmise du controleur à un PC à l'aide d'une liaison RS-232 c. puis traitée en temps réel sous l'environnement linux/x11 Cet article a pour but d'exposer la mise en place de la chaîne de mesure en justifiant les choix retenus et expliquant les difficultés rencontrées plus que de de décrire les conclusions de l'auteur sur les mérites de tels ou tels accumulateurs ou piles. L'originalité de cet article met en valeur les solutions de l'informatique libre : cette manipulation n'utilise ni cartes propriétaires ni logiciels commerciaux. La manipulation exposée est volontairement simple pour mettre en évidence le principe de telles mesures, décrire sans difficulté superflue les principales étapes et pouvoir s'adapter à une large gamme d'expériences. L'auteur détaille en premier la chaîne de mesure, explique après le système d'acquisition des mesures puis l'exploitation de celles-ci. Il donne ensuite des exemples variés de travaux pratiques utilisant le même matériel ; cet article se termine sur quelques renseignements pratiques. I - la chaîne de mesure ----------------------- La partie centrale de la manipulation consiste à mesurer régulièrement une tension puis à traiter automatiquement ces données. Cette manipulation n'utilise que des programmes et des interfaces libres : a. Un controleur muni d'une sortie RS232 mesure une tension b. la valeur est transmise par une liaison RS232 au PC puis c. celui-ci traite en temps réel sous l'environnement linux/x11. Par rapport aux cartes de mesure dédiée la méthode choisie à l'avantage a. d'être plus simple à mettre en oeuvre, b. de n'utiliser aucun protocole de communication privé c. et ainsi de ne lier les mesures à aucun logiciel propriétaire, d. d'utiliser le controleur sur n'importe quel port série et e. de vérifier sur le controleur le bon foncitonnement de la manipulation. Ainsi le matériel de mesure peut se brancher sur n'importe quel ordinateur avec n'importe quel système d'exploitation sans obliger à l'utilisation de tel ou tel programme. Le principal inconvénient est une faible vitesse de mesure : au maximum une mesure par seconde. Enfin il est plus simple d'utiliser le port série de n'importe quel ordinateur que d'utiliser une carte d'acquisition dédiée car celle-ci nécessite un modèle de machine bien précis, un règlage des interruptions, des zones mémoires... De plus les modes de programmation de telles cartes d'acquisition ne sont pas toujours difusés par le constructeur qui contraint alors l'acheteur à acheter ses programmes pour étendre le fonctionnement de sa carte d'acquisition. Au contraire les controleurs à prise série sont de relativement grande diffusion... plusieurs modèles sont disponibles dans les magasins d'informatique et le protocole de communication est normalisé, donc utilisable par tout un chacun. Enfin, l'usage de logiciels libres permet d'adapter les programmes utilisés à chaque expérience (en plus ou moins grand nombre) sans se soucier du nombre de licence ni du nombre de copies. Par ailleurs le programme de saisie décrit ci-dessous tourne sous linux (avec ou sans X11) et ne possède aucune autre contrainte que de disposer d'un port série de disponible. Les ressources consommées sur la machine sont très faibles ; la seule incompatibilité est un léger blocage du port série associé (cua0 et cua2, ou cua1 et cua3) ; ce blocage n'a lieu que pendant une fraction de seconde à chaque lecture et est à peine perceptible lors de l'utilisation de la souris. Sur la machine de l'auteur les ports séries sont distribués ainsi a. cua0 (cad COM1: pour MS/DOS) à la souris b. cua1 (cad COM2: " " ) au modem c. cua2 (cad COM3: " " ) au controleur L'usage des trois périphériques simultanément est effectivement possible : l'auteur l'a essayé. linux montre ici toute sa puissance de vrai système multitâches. En conclusion la méthode retenue possède comme caractéristique a. Tous les programmes utilisés sont des logiciels libres. b. Les protocoles de liaison sont normalisés (enfin, presque) et publiques. c. Le matériel employé est commun et ne dépend pas d'un seul fabricant. d. Tous les ordinateurs conviennent, même bas de gamme (i386 par exemple). e. Le programme tourne en tache de fond sans consommer beaucoup de ressources. f. Le matériel employé est connu pour sa fiabilité. II - règlage de la liaison série -------------------------------- Ceci est la partie la plus technique car de nombreux paramètres interviennent. Elle fut pour l'auteur la plus délicate car celui-ci ne connaissait rien au protocole des prises séries et aux signaux annexes de la liaison. 1/ controleur ------------- Le controleur employé pour mesurer les tensions dispose d'un port série RS232 ; la majorité des marques de contrôleur possèdent au moins un modèle de ce type (cf. V) Lors de l'achat il est nécessaire de bien vérifier a. Que le protocole de transmission des données est publié. b. Que les vitesses de transmission et de parité sont compatibles avec l'ordinateur employé (la plage de règlage des PC est cependant très large). c. De vérifier éventuellement son bon fonctionnement avant l'achat avec un court programme en basic ou un émulateur de terminal. Le point a. est de loin le plus important - des publicités expliquant qu'une disquette contient tous les programmes nécessaires est sans grand intérêt. L'utilisateur est alors prisonnier du programme livré prévu pour tel modèle d'ordinateur, avec tel système d'exploitation. De plus de tels programmes ne permettent pas toujours d'automatiser les mesures car ils sont prévu pour tel type de fonctionnement et ne peuvent être adaptés. A titre indicatif le controleur de l'auteur fut livré avec a. un programme en basic au fonctionnement erratique, b. un mode d'emploi donnant quelques lignes de basic décrivant un petit programme de saisie marchant correctement (testé au magasin sur le PC du vendeur), c. un cable de liaison controleur/PC, d. un plan de cablage de la prise série et du controleur (en partie faux), e. et une description du protocole de transmission (juste). 2/ connection ------------- Une fois trouvée une prise série de disponnible sur l'ordinateur, éventuellement en rajoutant une carte pour 1 ou 2 ports série (cua2 et cua3) et un aussi un adapteur 9/25 broches le raccordement électrique est fait. En général ceci suffit ; le controleur acheté par l'auteur ayant une interface série fort exotique je détaille ici toutes les difficultés rencontrées. L'auteur pense que ce controleur est particulièrement délicat à faire marcher. Un émulateur de terminal (par exemple minicom) configuré aux bonnes vitesses (1200 baud) et autres paramètres (7 bits de données, 2 de stop, avec ou sans controle du signal - rts/cts...) ne marchait pas ; même si le programme basic de saisie marchait au magasin sur le PC du vendeur... L'auteur a donc interposé sur la liaison un boitier de test des ports séries (fabrication maison pour 40 francs) et connecté uniquement les trois contacts importants d'une liaison série (TX ou émission, contact 2 sur les prises séries à 21 broches, RX ou réception contact 3, et masse contact 7 ; les termes émission et réception étant vu du côté PC) Le montage ne marchait pas mieux ! l'auteur précise que ceci est très rare. Deux diodes electroluminescentes (LED) branchées tête-bêche (pour visualiser le signe + ou - du signal, en série avec une résistance de 1 kOhm) restaient éteintes. L'auteur analysa alors le plan de montage du controleur et compris que la liaison série du controleur était alimentée par un signal de la liaison série elle-même, côté PC ; plus précisément la broche 20 (signal DTR sortant du PC) alimentait le photo-transistor d'émission des données (côté controleur). Une fois cablé ce signal (qui sur le PC reste toujours positif) les leds clignotaient au rythme de l'émission des données. Le câblage trouvé (broches 2, 3, 7 et 20) fut définitivement cablé dans un petit boitier prévu pour deux prises séries 25 broches ; depuis il marche bien. L'auteur avoue que la principale difficulté fut d'éviter les faux contacts lors des cablages "avec des trombonnes" ; il remarque aussi que la prise série du PC a résisté sans faillir à quelques court-circuits... Pour ces raisons l'auteur recommencera la manipulation avec du matériel mieux adapté... 3/ configuration côté PC ------------------------- Pour pouvoir utiliser de n'importe quel compte le port série sous linux il peut être nécessaire de changer les droits des utilisateurs par chmod 666 /dev/cua2 chmod 666 /dev/ttyS2 La vérification se fait ensuite par ls -l /dev/cua* /dev/ttyS* qui renvoie sur la machine de l'auteur crw-rw-rw- 1 root dialout 5, 64 May 11 1997 /dev/cua0 crw-rw-rw- 1 root dialout 5, 65 Apr 28 20:46 /dev/cua1 crw-rw-rw- 1 root dialout 5, 66 Apr 28 21:08 /dev/cua2 crw-rw-rw- 1 root dialout 5, 67 May 11 1997 /dev/cua3 crw-rw-rw- 1 root dialout 4, 64 Apr 28 21:00 /dev/ttyS0 crw-rw-rw- 1 root dialout 4, 65 Jan 18 1997 /dev/ttyS1 crw-rw-rw- 1 root dialout 4, 66 Jan 18 1997 /dev/ttyS2 crw-rw-rw- 1 root dialout 4, 67 Jan 18 1997 /dev/ttyS3 Sous tout unix la configuration d'un port série se fait alors par la commande stty "des paramètres" < "le périphérique" Cette configuration consiste d'abord à fixer la vitesse et le protocole du port série (cua2 pour l'auteur, l'équivalent de COM3 sous MS/DOS) Dans le cas de ce controleur le protocole est 1200 bauds, 7 bits de données, 2 de stop sans controle de parité La commande stty est donc stty 1200 cs7 cstopb -parenb -parodd < /dev/cua2 | | | =============== | vitesse | 2 bits de stop | | 7 bits de données | | ni controle de parité remarquer le sens de la redirection ni controle d'imparité qui correspond plus à une convention qu'à la logique D'autres arguments peuvent être précisés, éventuellement précédé du signe - crtscts cread clocal mais l'auteur avoue ne pas bien comprendre leur fonctionnement, même après lecture du manuel en ligne (man stty) et des HOWTO de linux. Certaines commandes stty se bloquent ; dans tous les cas un ^C tapé au clavier les débloque sans conséquences ; la souris est aussi parfois immobilisée ou se déplace de façon saccadée. 4/ lecture ---------- Si la configuration est correcte (les points II-2 et II-3 sont les plus délicats) les données envoyées par le controleur sont reçues sur le PC. La commande cat /dev/cua2 fait défiler sur l'écran la suite des mesures envoyées sur la liaison série. DC 1.199 V DC 1.199 V DC 1.199 V DC 1.199 V DC 1.199 V DC 1.198 V DC 1.199 V ... Il est possible d'interrompre le défilement par l'appui sur ^C. Si cela ne marche pas ; il faut revenir au II-3 (ou voir II-6 ci-dessous) Sinon la lecture d'une seule donnée peut se faire par le script suivant (cat /dev/cua2 & numprocess=$! sleep 1 kill $numprocess)|grep "^DC *[0-9]*\.[0-9]* *V *$"|head -n 1 Ce qui est entre parenthèse correspond à un bloc de commande. Le signe "&" fait effectuer la commande cat en tâche de fond et le terme "numprocess=$!" met dans la variable "numprocess" le numéro du processus associé à la commande "cat". Le delai est de 1 seconde puis la commande "cat" est tuée. La sortie standard reçoit les mesures : 1 2 ou 3, et la première et la dernière peuvent être incomplètes car le controleur n'est pas synchronisé avec cette lecture. la commande "grep" ensuite ne retient que les lignes bien formées, commençant selon les données envoyées par le controleur par DC et se terminant par V ; enfin la commande "head" ne retient que la première ligne de mesures complètes. En cas de mauvais branchement ou de lecture impossible ce script ne renvoie rien mais se termine de toute façon au bout d'une seconde sans bloquer aucun port série. 5/ écriture ----------- Le controleur de l'auteur possède une autre fonctionnalité : envoyer les mesures après avoir reçu sur le port série la commande correspondante. (la lettre "D") Cette possibilité a été testée avec succès par l'émulateur de terminal "minicom" mais n'a pas été prise en compte par la suite. Il est plus facile de lire uniquement une mesure à un moment donné que d'envoyer une commande puis de lire le résultat. 6/ des remarques en vrac ------------------------ Comment controler le fonctionnement de la prise série ? Avec un boitier permettant d'ouvrir ou de fermer chaque signal (par exemple à l'aide d'un petit cavalier) et de controler avec deux dels (en série avec une résistance de 1 kOhm) le signe du signal par rapport à la masse de la liaison. Les données circulent de façon symétrisée par rapport à cette référence, donc les deux led doivent clignoter lors de l'emission d'un signal. Il est important de comprendre quels sont les signaux "emis par le PC" et "lu par le controleur" et réciproquement... Enfin le test d'une liaison série peut se faire sur d'autres matériels (calculatrice, organiseur, modem...) Comment configurer le port série ? Normalement par la commande stty ; il est parfois plus facile de faire les tests avec des programmes d'émulation de terminal (minicom, kermit...) Le programme statserial montre l'état de la prise vu par le PC. La lecture de l'état de la liaison série peut se faire par stty -a < /dev/cua2 qui renvoie l'état de tous les paramètres de la liaison série. La lecture de l'état complet de la liaison série peut se faire par stty -g < /dev/cua2 qui renvoie une chaine de caractère "humainement pas clair du tout" qui décrit complètement la prise série. L'avantage de cette commande est de pouvoir être passée en paramètre tel-quel. L'intérêt de la manipulation est évident après que la liaison série ait été déréglée par les programmes minicom ou kermit... même si la commande stty -g ne permet pas de trouver l'erreur. Sur la machine de l'auteur la configuration de la liaison est 500:5:80000ca9:8a3b:3:1c:7f:15:4:0:1:0:11:13:1a:0:12:f:17:16:0:0:73 Comment lire les données sur le port série ? La commande cat peut être remplacée par dd if=/dev/cua2 ... Comment envoyer des données sur le port série ? La commande echo le permet : le paramètre -n évite le retour de chariot automatique en fin de ligne. La redirection vers le port série se fait comme toujours par "> /dev/cua2" III - exploitation des mesures ------------------------------ 1/ en perl ---------- La création d'un fichier de mesure est fait en perl ; ce langage a l'avantage d'être interprèté et d'être conçu pour manipuler des nombres, des chaînes de caractères... 2/ utilisation de gnuplot ------------------------- gnuplot est très pratique pour tracer des courbes à partir de fichiers de mesure. La syntaxe est bien expliquée dans l'aide en ligne, les paramètres par défaut sont judicieux et aussi les possibilités de paramètrer l'affichage sont presque infinies. Enfin gnuplot permet de sauvegarder les courbes sous différents formats. IV - autres expériences possibles --------------------------------- Les mesures effectuées pour cette étude consistent à décharger (jusqu'à un certain seuil) des accumulateurs à travers une résistance qualibrée. La mesure de la tension permet donc la mesure de l'intensité de décharge de l'accumulateur ; l'intégration de ces mesures donne alors la capacité de l'accumulateur. Enfin, pour éviter la déterlioration des accumulateurs un relais interrompt cette décharge en dessous d'une tension seuil. Cette chaîne de mesure peut en effet s'adapter à la mesure de n'importe quelle évolution de tension de l'instant que le phénomène est relativement lent (évolution de seconde en seconde). Par exemple étude de la charge et la décharge de condensateurs (1000 micro-farad dans 100 k0hm possède un temps de demi-charge de l'ordre de 100 secondes, et 100 kOhm est négligeable vis-à-vis de la résistance interne du contrôleur). Après un étalonage la partie ohmètre du controleur permet de mesurer avec un capteur ad-hoc une température, une luminosité, un pH, un couple d'oxydo/réduction... Des montages électroniques très simples permettent aussi de suivre des niveaux sonores, des fréquences... La manipulation décrite ici est une manipulation ne faisant intervenir aucun montage entre l'instrument de mesure et le PC, ce qui est source de fiabilité. Un PC possède de plus d'autres possibilités de mesure et d'aservissement : le port pour les manettes de jeu, le port parallèle d'imprimante, le port série. La liaison pour manette de jeux contient quatre ports de lecture analogique sur 256 points, ainsi que plusieurs ports de lecture tout-ou-rien. Les temps de réponse sont assez rapides. Le port d'imprimante parallèle permet par un jeu de résistances d'écrire une donnée analogique (de 256 points), et aussi de lire plusieurs ports tout-ou-rien. Enfin le port série peut être branché de façon à lire et écrire à l'aide des signaux annexes deux ou trois signaux tout-ou-rien. Dans tous ces cas les temps de réponses sont rapides. Dans de tels TP l'élève lance le programme d'acquisition et visualise le phénomène étudier (avec gnuplot). Pour chaque type de menipulation il est nécessaire d'écrire un programme (par exemple en perl) qui enregistre les données dans un fichier de mesure ; à titre d'exemple le programme de l'auteur fait une cinquantaine de lignes. V - renseignements pratiques ---------------------------- 1/ les controleurs ------------------ Les controleurs avec port série sont commercialisés dans les magasins d'électroniques. Les caractérisitiques et prix sont variées : de 2000 à 40000 points et de 500 à 2000 francs. Le catalogue de vente par correspondance CONRAD en propose aussi. Celui de l'auteur est de marque "metex". 2/ documentation sur les ports séries ------------------------------------- L'auteur a utilisé les différents HOWTO de linux traduits ; en particulier Modems-HOWTO (et aussi Serial-HOWTO et Serial-Programming-HOWTO). Ce montage a été pour l'auteur l'occasion de découvrir les subtilités des prises séries ; pas si terrible que ça donc pour un premier montage ! 3/ documentation sur perl ------------------------- Bien que ne connaissant pas-grand-chose au langage perl l'auteur à choisi celui-ci pour piloter le programme de saisie des données car perl est d'une certaine façon le successeur du basic des premiers ordinateurs personnels. Ce langage est équilibré dans le sens qu'il est facile d'accès et assez structuré pour permettre toutes les structures des langages modernes. En plus il possède des primitives puissantes sur la manipulation des chaînes de caractères et calcule corectement sur les nombres. L'utilisateur a travaillé avec la FAQ sur perl et le livre O'Reilly sur ce langage. 4/ documentation sur gnuplot ---------------------------- Pour tracer (puis imprimer) les graphes le programme gnuplot est bien adapté. Par défaut les paramètres choisis par ce programme donne des graphes "exploitables" ; pour affiner les résultats le paramètrage de ce programme permet à peu près tout. Le programme gnuplot est livré avec un mode d'emploi complet, qu'il suffit d'imprimer. ============== FIN DU DOCUMENT ======vous=avez=lu=jusqu'ici=!=b=r=a=v=o===== ===============vous=pouvez=envoyer=remarques=ou=questions=à=l'auteur.=======