Retour à la table des matières

ACQUISITION DE DONNEES PAR LE PORT SERIE SOUS LINUX

---------------
DISCLAIMER: USE OF THIS WORK IS AT YOUR OWN RISK, I MAKE NO CLAIMS AS TO IT'S RELIABILITY. THESE SOFTWARES, ACCOMPANYING FILES AND/OR DOCUMENTATIONS ARE RELEASED "AS IS" AND WITHOUT WARRANTIES AS TO PERFORMANCE OR MERCHANTABILITY OR ANY OTHER WARRANTIES WHETHER EXPRESSED OR IMPLIED. NO WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE IS OFFERED.
----------------

CE DOCUMENT EST FOURNI « TEL QUEL » ET IL N'EST DONNÉ AUCUNE GARANTIE, IMPLICITE OU EXPLICITE, QUANT À SON UTILISATION COMMERCIALE, PROFESSIONNELLE OU AUTRE. L'AUTEUR NE PEUT EN AUCUN CAS ÊTRE TENU POUR RESPONSABLE DE QUELQUE DOMMAGE OU PRÉJUDICE DIRECT, INDIRECT, SECONDAIRE OU ACCESSOIRE (Y COMPRIS LES PERTES FINANCIÈRES DUES AU MANQUE À GAGNER, À L'INTERRUPTION D'ACTIVITÉS, OU LA PERTE D'INFORMATIONS ET AUTRES) DÉCOULANT DE L'UTILISATION DE LA DOCUMENTATION OU DE L'IMPOSSIBILITÉ D'UTILISER CELLE-CI, ET DONT L'UTILISATEUR ACCEPTE L'ENTIÈRE RESPONSABILITÉ.


Un exercice de découverte

De nombreux appareils de laboratoire peuvent communiquer par l'intermédiaire d'un port série ("RS-232")
Cet article décrit une manière (rustique et sans application pratique immédiate) de récupérer des données provenant d'un appareil de laboratoire dans un PC fonctionnant avec tomsrtbt, une mini-distribution de Linux qui tient sur une seule disquette. Cette méthode n'a été testé avec succès pour l'instant qu'avec un CELL-DYN 3200 ABBOTT.

Matériel nécessaire:

Un PC, avec 8 Mo de Ram minimum.
Un cable "null-modem"
Un appareil de laboratoire correspondant par liaison unidirectionnelle par l'intermédiaire d'un port série.

Préparation d'une mini-distribution

Préparez une disquette contenant une minidistribution de Linux: je conseille tomsrtbt (http://www.toms.net/rb/) parce qu'on peut la paramétrer facilement avec un clavier français.
Vous aurez besoin de déchiffrer le mode d'emploi en d'anglais pour préparer votre disquette.
Bien entendu vous pouvez aussi utiliser un PC sur lequel une distribution "normale" de Linux est installée.

Mode d'emploi résumé de la préparation d'une disquette tomsrtbt, sous Windows:

Essai de Boot

Booter votre PC avec cette disquette
Si tout votre matériel est reconnu, vous êtes sous linux (en fait une version spéciale et aux possibilités limitées, mais sous linux quand même).
Tomsrtbt s'éxécute en mémoire vive, et votre disque dur est totalement court-circuité (vos données habituelles ne risquent absolument rien - rien ne sera modifié sur ce PC sauf si vous utilisez vraiment à tord et à travers les autres utilitaires présents sur la disquette ! - mais les risques de faire une telle fausse manoeuvre par hasard sont infimes).

Loggez vous, c'est à dire à l'invite:
tty1 tomsrtbt login:
tappez "root"
ensuite tapper le mot de passe: par défaut avec tomsrtbt: "xxxx"
Password: xxxx
vous êtes au prompt de root
(si à ce stade ceci est du vraiment peu clair pour vous, c'est par manque de connaissances de base sur Unix. Pour en savoir plus, jetez un coup d'oeil à mes "conseils à ceux qui veulent débuter l'étude de Linux")

Mise en route

Reliez (d'ailleurs, faites ceci avant toute chose, appareil et PC éteints) votre appareil de labo à la prise série de votre PC par un cable "null modem" (dit aussi cable de liaison série - la seule confusion possible à ma connaissance serait avec des cables de rallonge série)

En général, il faudra inhibiber le mode "canonique" qui est un paramétrage par défaut du port série
Pour cela:
# stty -icanon < /dev/ttyS0
ou bien
# stty raw < /dev/ttyS0

# cat /dev/ttyS0 (ce peut être aussi cat /dev/ttyS1 si votre PC à plusieurs ports séries)
Votre PC est en attente de réception de donnée sur son port série.
Faites envoyer des données par votre appareil
En principe les données en question s'affiche sur le terminal du PC.

Debugging:
si ça ne marche pas:

# Ctrl-c (interrompt le programme cat)
# stty < /dev/ttyS0
speed 9600 baud; line = 0;
-brkint -imaxbel
/donne des indications sur le paramétrage du port série
voire
# stty -a < /dev/ttyS0
/donne des indications beaucoup plus complètes. 
Pour en savoir plus:
# man stty

Comparez le paramétrage du port série avec ce que vous pouvez trouver dans la documentation de votre appareil de laboratoire.

( en général, on a
9600 bd
Aucune parité
start bit = 1
word length = 8
stop bit= 1)

Récupération des données dans un fichier

Les données s'affichent sur votre écran. Très bien. Vous voudriez maintenant les récupérer dans un fichier pour les exploiter:
# Ctrl-c (interrompt le programme cat) 
# cat /dev/ttyS1 > fic1 

Faites envoyer des données par votre appareil (on ne voit rien, mais les données reçues sont écrites dans "fic1")
(Avec une version de linux plus normale, on pourrait diriger le flux de données en provenance du port série à la fois vers l'écran et vers le fichier, par:

# cat /dev/ttyS1 | tee fic1 
Malheureusement ça ne marche pas avec le tee de tomrstbt qui est différent du tee GNU)
# Ctrl-c (interrompt le programme cat)
Introduisez une disquette formaté (win95/98)
# mount -t vfat /dev/fd0 /mnt
# cp fic1 /mnt
# umount /mnt
Récupérer votre disquette
Vous pouver lire votre fichier "fic1" avec un éditeur de texte.
Attention, les terminaisons de lignes sont de type Unix (LF sans CR). Ceci explique la drôle d'allure dans une application Windows.

Comment exploiter ce fichier ?

Ceci fera l'objet de prochains articles ! Sachez seulement que les manières d'exploiter et de traiter un tel fichier sous linux sont nombreuses et variées, grace à l'architecture et à la philosophie d'Unix.
Un exemple pour un CELL-DYN 3200est donné un peu plus bas.

Allez plus loin

Vous aurez constaté que la récupération du fichier sur disquette est assez "pénible":
Il est possible de simplifier toutes ces étapes en fabriquant une version personnalisée de tomsrtbt. --------------------

Exemple de personnalisation de tomsrtbt:

description du but à atteindre

Un automate d'hématologie est relié à un PC sous windows.
Ce PC fait partie d'un réseau qui comprend un ordinateur sous Linux.
Le but:
booter le PC windows avec une disquette tomsrtbt personnalisée:
A la fin du boot, et après login, le PC est:

Description:
il faut éditer conformément à la doc tomsrtbt.FAQ les fichiers: settings.s

IPADDR= votre adresse ip (ex: 192.168.10.5)
NETWORK=adresse en rapport (ex: 192.168.10.0)
NETMASK= en rapport (ex: 255.255.255.0)
PASSWD= le  mettre vide, se sera toujours ça de moins à tapper en se loggant
c'est tout
et le fichier rc.custom (après expansion: gzip -d rc.custom.gz):
dans la section cat>profile<<'X'
après stty sane
tappez:
stty raw < /dev/ttyS0
stty raw < /dev/ttyS1
cat /dev/ttyS0 > /mnt/fic1  # ou ttyS1

plus loin, après route add -net 127.0.0.0 lo
tappez
mount -t nfs ADRESSE_IP_DE_VOTRE_ORDI_LINUX_DISTANT:/repertoireNFS/exporté /mnt
# ex: mount -t nfs 192.168.10.2:/home/celldyn /mnt # vous devez avoir configuré votre machine 192.168.10.2 pour qu'elle exporte le système de fichier /home/celldyn par NFS.
plus loin, après:
Select keyboard, ENTER for default (15 seconds): " J/dev/tty1
[ "$J" ]&&loadkeys $J.map
rm P
X
tappez
loadkeys 7.map  # charge automatiquement le clavier français
sorter de votre éditeur. Reste à faire:
gzip rc.custom
umount /mnt (ou Ctrl-Alt-Sup)
C'est fini, votre disquette est prète.

Une autre méthode de personnalisation de tomsrtbt, un peu plus complexe, mais qui permet de supprimer l'étape de login - password est décrite sur mon site de documentation Linux.

Quelques essais

CELL-DYN 3200

Il s'agit d'un automate à numérations-formules sanguines distribué en France par Abbott.
La procédure fonctionne relativement bien, à conditions de transmettre les numérations une par une, et pas trop vite.
Parfois (transmissions trop rapprochées?), la transmission se bloque.
Il faut alors réinitialiser la connexion (menu sur l'écran tactile: CONFIGURATION - AUTRES CONFIG - CONFIG ORDINATEUR - ARRET TRANSMISSION - CONFIRMER ARRET)
Un échantillon de programme en PERL permettant d'exploiter les données d'un CELL-DYN se trouve .

VES-MATIC 20:

Il s'agit d'un petit automate à mesurer les vitesses de sédimentation.
Le site officiel: chercher sur Google.
Cet appareil est pourvu à l'arrière d'une interface série RS232.
Le connecteur est un connecteur à 25 broches décrit comme "standard" dans le manuel.
On observe 4 broches fonctionnelles sur ce connecteur:
Une PIN 2 (TX d'après le manuel)
PIN 3 (RX)
PIN 4 (non mentionnée dans le manuel)
PIN 7 (signal ground)

En pratique, la connection d'un cable null-modem même sur un PC éteint bloque totalement la mise en route du VES-MATIC:
Après contact téléphonique avec le service technique de l'importateur, j'ai appris ceci:
Les seules broches utiles seraient la broche d'envoi des données (TX) qui ne serait pas la PIN2 comme mentionnée dans le manuel, mais la PIN3, et la PIN 7.
J'ai donc bricolé avec 2 connecteurs à souder DB25 femelles un cable adh'oc.
En réalité la connexion PIN 7 VES-MATIC - PIN 7 PC (même PC éteint) bloque tout démarrage du VES-MATIC ( à la mise sous tension).
Je ne sais pas si il s'agit d'un défaut de MON VES-MATIC ou d'un défaut général.
Merci d'avance à ceux qui auraient des informations supplémentaires de me mettre au courant.

Trucs et astuces en vrac:

Si votre appareil est déjà relié à un PC, il est possible avec un cable null-modem "bifide" d'envoyer simultanément les données sur 2 PC (tout au moins je l'ai déjà fait avec un CELL DYN 3000 Abbott.
Si vous rater le choix du clavier français à la fin de la séquence de boot de tomsrtbt, vous pouvez rattraper les choses graces à la commande:
# loadkeys 7.map
Si vous voulez réaliser la récupération de données directement sous Windows, vous pouvez utiliser le programme "Hyperterminal", avec le paramétrage de COM(1) ad'hoc,
ou mieux encore le freeware d'origine coréenne cité dans les liens.

Bibliographie:

en Français:
Un article de Pierre Ficheux:
http://pficheux.free.fr/articles/lmf/serial/
en Anglais:
Serial programming guide for POSIX operating systems:
http://www.easyw.com/~mike/serial/
Retour à la table des matières
12 mars 2005 (suppression liens casses)
rev 1.3
adresse mail