Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

port série rs232

35 views
Skip to first unread message

Hubert

unread,
Apr 23, 2007, 11:37:49 AM4/23/07
to

bonjour

je me perds dans la configuration et la mise en oeuvre d'un script pour
communiquer avec un appareil de mesure branché sur le com1 de mon pc sous
linux.
voici mon plan:
ouvrir le port avec la commande open
le configurer avec fconfigure
et après, je souhaite lui envoyer une question et là je planche...read,
puts close...comment savoir s'il reçoit mon message...
Pourriez vous m'aider ?

Hubert

--
Ce message vient de http://wfr.tcl.tk/fclt/

Vincent Verdon

unread,
Apr 23, 2007, 3:08:03 PM4/23/07
to
Bonjour,

Hubert a écrit :


> bonjour
>
> je me perds dans la configuration et la mise en oeuvre d'un script pour
> communiquer avec un appareil de mesure branché sur le com1 de mon pc sous
> linux.
> voici mon plan:
> ouvrir le port avec la commande open
> le configurer avec fconfigure
> et après, je souhaite lui envoyer une question et là je planche...read,
> puts close...comment savoir s'il reçoit mon message...
> Pourriez vous m'aider ?

Heu, pour lui envoyer des données : puts canal_de com données_a_envoyer
pour lire : gets canal_de_com données
ou encore set donnees [read canal de com]

Il faudrait connaître en premier lieu le protocole de communication
utilisé par l'appareil afin de savoir comment lui envoyer des données et
comment en recevoir.

>
> Hubert
>

Amicalement, Vincent Verdon

Hubert

unread,
Apr 24, 2007, 11:22:08 AM4/24/07
to
Vincent Verdon a écrit :
j'utilise du RS232 (3fils rd td et masse), je peux paramétrer mon appareil
pour qu'il utilise le CTS/DTS ou le Xon/Xoff ou alors je choisi l'absence
de protocole, ce que j'ai fait.
D'après la doc, la structure d'un message de commande est:
COMMANDE1;COMMANDE2;.....;COMMANDEn et le terminateur est obligatoirement
un <LF>

Hubert

>
>
> >
> > Hubert
> >
>
> Amicalement, Vincent Verdon

Vincent Verdon

unread,
Apr 24, 2007, 4:12:04 PM4/24/07
to
Bonsoir,

Hubert a écrit :


> Vincent Verdon a écrit :
>> Bonjour,
>>
>> Hubert a écrit :
>>> bonjour
>>>
>>> je me perds dans la configuration et la mise en oeuvre d'un script pour
>>> communiquer avec un appareil de mesure branché sur le com1 de mon pc sous
>>> linux.
>>> voici mon plan:
>>> ouvrir le port avec la commande open

set com [open com1 rw]

> j'utilise du RS232 (3fils rd td et masse), je peux paramétrer mon appareil
> pour qu'il utilise le CTS/DTS ou le Xon/Xoff ou alors je choisi l'absence
> de protocole, ce que j'ai fait.
> D'après la doc, la structure d'un message de commande est:
> COMMANDE1;COMMANDE2;.....;COMMANDEn et le terminateur est obligatoirement
> un <LF>

Donc configurer le com avec fconfigure :
fconfigure $com -mode les_bonnes_options_serie -translation lf
puts $com commande
gets $com resultat

C'est fort simple en fait, non ?
Les spécialistes corrigeront mes âneries, je n'ai jamais utilisé de port
série, mais cela doit fortement ressembler à un socket

Amicalement, Vincent Verdon

Hubert

unread,
Apr 25, 2007, 6:13:34 AM4/25/07
to
Bonjour,

je n'arrivais à rien avec mon appareil, j'ai décidé de changer de machine
(après avoir changé de câble sans résultats).
Afin d'être sur de mon coup, j'ai suivi la doc permettant à partir d'un pc
équipé d'hyper terminal (genre XP) d'obtenir la communication et ça marche
très bien. Par contre, avec mon premier appareil, j'ai rien, comme quoi ya
un problème plus hard.

Avec ma nouvelle machine, j'essai un scrip Tcl.
L'avantage de cet appareil, c'est qu'il fonctionne en maître en envoyant
régulièrement des infos sur son état. Celà cesse dès qu'il reçoit un ordre.

Donc, après avoir ouvert mon port
set f [open /dev/ttyS° r+]

et après l'avoir configurer,
fconfigure $f -mode 9600,n,8,1 -translation lf -encoding binary -blocking
0 -buffering none

je fais un gets $f et chouette,il m'envoie l'état de ses canaux.
Avec read $f, j'ai le même résultat.

J'envoie alors ma commande en suivant la doc
puts $f "#000IDN"
et rien ne se passe,

or il devrait passer en mode distant avec un p'tit signe en face avant.

Je fais un gets $f et rien, même résultat avec read.

Je fais un flush $f (alors que j'ai -buffering none) puis un gets $f et
là, il me renvoie ma commande soit #000IDN

Je fais tout de suite un eof $f et il me renvoie 0 puis je fais gets $f et
j'ai rien mais eof $f donne toujours 0 (il devrait me renvoyer 1 non ?)

voilà oùj'en suis.

Hubert

Vincent Verdon a écrit :

--

Hubert

unread,
Apr 25, 2007, 8:05:17 AM4/25/07
to
Re bonjour,

un début de soucis en moins, j'arrive à mettre en mode distant l'appareil.

set port [open /dev/ttyS0 r+]
fconfigure $port -blocking 0
puts $port "#000IDN" # là je choisis IDN ou LOC pour local
flush $port

ça avance, ça avance...

Hubert a écrit :

hubert

unread,
Apr 26, 2007, 3:16:23 PM4/26/07
to
Pour conclure cette histoire de ports série, un bon conseil:

- vérifier si votre appareil délivre bien une tension sur vos TD/RD...avec
un voltmètre.

ça vous évitera de passer des heures à vous gratter la tête sur votre
capacité

Hubert

Hubert a écrit :

Vincent Verdon

unread,
Apr 26, 2007, 3:28:36 PM4/26/07
to
Bonsoir,

hubert a écrit :


> Pour conclure cette histoire de ports série, un bon conseil:
>
> - vérifier si votre appareil délivre bien une tension sur vos TD/RD...avec
> un voltmètre.
>
> ça vous évitera de passer des heures à vous gratter la tête sur votre
> capacité
>
> Hubert
>

J'en conclus donc que cela fonctionne maintenant : de toute façon la
panne ne pouvait pas venir de Tcl !!!

Amicalement, Vincent Verdon

hubert

unread,
May 2, 2007, 4:48:56 AM5/2/07
to

Bonjour,

encore un souci que je n'arrive pas à isoler.

j'ai réussi à initialiser une liaison par port série avec un appareil de
mesure de pression, et ce, sous linux.

J'utilise un autre pc sur lequel j'ai installé la même version linux et le
même tcl. Et là, chose étrange, lorsque je tape

fconfigure $f -mode 9600,n,8,1

il me répond

bad option "-mode": should be one of -blocking, -buffering, -buffersize,
-encodi ng, -eofchar, or -translation

j'ai du mal à comprendre le problème.
Auriez vous une idée ?

Hubert


Vincent Verdon a écrit :
>

--

Xavier Garreau

unread,
May 2, 2007, 4:59:40 AM5/2/07
to
hubert a écrit :

> fconfigure $f -mode 9600,n,8,1
>
> il me répond
>
> bad option "-mode": should be one of -blocking, -buffering, -buffersize,
> -encodi ng, -eofchar, or -translation
>
> j'ai du mal à comprendre le problème.

J'ai eu aussi et pareil, pas compris.

> Auriez vous une idée ?

Oui. J'avais réglé mon problème en configurant le port avec stty.

a+
--
Xavier Garreau
http://www.xgarreau.org/

David Zolli

unread,
May 2, 2007, 7:41:21 AM5/2/07
to
> hubert a écrit :
> > fconfigure $f -mode 9600,n,8,1
> >
> > il me répond
> >
> > bad option "-mode": should be one of -blocking, -buffering,
> > -buffersize, -encoding, -eofchar, or -translation

> >
> > j'ai du mal à comprendre le problème.

Tu dois utiliser Tcl 8.3 car -mode a été ajouté à partir de Tcl 8.4 :

http://www.tcl.tk/cgi-bin/tct/tip/35

Eric Hassold

unread,
May 2, 2007, 9:10:46 AM5/2/07
to
David Zolli a écrit :

>> hubert a écrit :
>>> fconfigure $f -mode 9600,n,8,1
>>>
>>> il me répond
>>>
>>> bad option "-mode": should be one of -blocking, -buffering,
>>> -buffersize, -encoding, -eofchar, or -translation
>>>
>>> j'ai du mal à comprendre le problème.
>
> Tu dois utiliser Tcl 8.3 car -mode a été ajouté à partir de Tcl 8.4 :
>
> http://www.tcl.tk/cgi-bin/tct/tip/35
>

Ca remonte a bien plus loin que ca, a la version 8.0 en 1997 (pour Win32
et Unix). Ce qui est plus recent, dans 8.4, ce sont les options
etendues (-handshake, -xchar, -ttystatus, etc...).

Le "bad option" signifie ici probablement que Tcl n'a pas identifie le
fichier ouvert comme un terminal (TTY). En interne (TclUnixChan.c), ce
choix est fait en appelant la fonction isatty(fd) (et que le fichier
ouvert ne s'appelle pas /dev/tty). Eventuellement, verifier donc sur la
machine qui pose probleme, avec un autre programme (e.g. stty), que le
device en question se signale bien comme tel.

Eric

-----
Eric Hassold
Evolane - http://www.evolane.com/

hubert

unread,
May 2, 2007, 11:36:37 AM5/2/07
to
les versions Tcl sont identiques (8.4)

la commande stty me donne la même chose sur les deux pc.
J'ai monté la même version Ubuntu Dapper.

j'ai configuré la vitesse du port série avec
stty speed 9600
et aussi enlevé le protocole Xon/Xoff avec
stty -ixon

Par défaut il n'y a pas de bits de parité et le nombre de caractères de
stop est égal à un. Le codage se fait sur 8 bits.

Ces vérifications faites, et après avoir fait

fconfigure $f -buffering none -blocking 0 -encoding binary

et

puts $f #000idn

j'ai le message suivant

error writing "file 5" : I/O error

hum hum je planche...

Eric Hassold a écrit :

--

hubert

unread,
May 4, 2007, 9:54:16 AM5/4/07
to
bonjour

j'ai l'impression d'y voir de moins en moins clair dans cette histoire!

Sur la machine défectueuse, quand je fais
stty -F /dev/ttyS0
j'obtiens
Erreur d'entrée/sortie

sur la bonne machine j'obtiens
speed 9600 baud; line = 0;
-brkint -imaxbel

que puis je en conclure?

un ls -l /dev/ttyS0 me donne la même config sur les deux machines.

Eric me propose d'utiliser isatty, c'est une commande qui n'est pas
reconnue, alors que faire ?

Hubert

hubert a écrit :

David Zolli

unread,
May 4, 2007, 10:33:23 AM5/4/07
to
hubert a écrit :

> Eric me propose d'utiliser isatty, c'est une commande qui n'est pas
> reconnue, alors que faire ?

Tu fais comme moi chaque fois que j'ai besoin d'un port série fiable : tu
achètes un cable USB-série avec une puce Prolific PL2303. C'est pas cher,
c'est plus rapide et surtout ça marche tout le temps, sous linux, Mac et
Windows.

Eric Hassold

unread,
May 4, 2007, 4:33:51 PM5/4/07
to
hubert a écrit :

> bonjour
>
> j'ai l'impression d'y voir de moins en moins clair dans cette histoire!
>
> Sur la machine défectueuse, quand je fais
> stty -F /dev/ttyS0
> j'obtiens
> Erreur d'entrée/sortie
>

Et bien, au moins, on sait que le probleme vient de la machine, pas de
Tcl. Probleme d'interruptions? A mon humble avis, si tu n'as pas envie
d'y perdre ton latin et ton temps, je suivrais, au moins dans un premier
temps, le conseil de David

> sur la bonne machine j'obtiens
> speed 9600 baud; line = 0;
> -brkint -imaxbel
>
> que puis je en conclure?
>
> un ls -l /dev/ttyS0 me donne la même config sur les deux machines.
>
> Eric me propose d'utiliser isatty, c'est une commande qui n'est pas
> reconnue, alors que faire ?

C'est une fonction de la libc, appelee par Tcl sur le fd d'un 'channel'
pour determiner s'il faut activer les options de fconfigure specifiques
aux terminaux. Ce n'est donc pas une commande systeme a lancer en ligne
de commande, juste une explication sur pourquoi l'option "-mode" manquait.

Eric

hubert

unread,
May 7, 2007, 5:09:34 AM5/7/07
to
Bonjour

mon sujet commence à sortir vraiment du cadre de ce forum.
Je vous remercie d'y avoir prêté attention et,
je vous prie d'accepter mes excuses pour ce dérangement car je viens de
comprendre le soucis que j'ai!

Les deux ports séries de la machine défectueuse étaient déclarés disabled
dans le bios!!!!

Tout est ok maintenant et je peux retourner à la réalisation du programme
Tcl/Tk

Merci à vous

Hubert

Eric Hassold a écrit :

--

David Zolli

unread,
May 7, 2007, 1:00:48 PM5/7/07
to
hubert a écrit :
>
> .../... je viens de comprendre le soucis que j'ai!

>
> Les deux ports séries de la machine défectueuse étaient déclarés
> disabled dans le bios!!!!

C'est pour ça que j'utilise ces fameux cables USB-série ;^)

Vincent Verdon

unread,
May 7, 2007, 3:04:21 PM5/7/07
to
Bonsoir,

hubert a écrit :


> Bonjour
>
> mon sujet commence à sortir vraiment du cadre de ce forum.
> Je vous remercie d'y avoir prêté attention et,
> je vous prie d'accepter mes excuses pour ce dérangement car je viens de
> comprendre le soucis que j'ai!
>
> Les deux ports séries de la machine défectueuse étaient déclarés disabled
> dans le bios!!!!

Tiens, c'est ce que je me préparais à suggérer !!! (cela m'est déjà
arrivé avec l'usb)

>
> Tout est ok maintenant et je peux retourner à la réalisation du programme
> Tcl/Tk
>

Je me disais que cela ne pouvait pas venir de Tcl !

Amicalement, Vincent Verdon

0 new messages