Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

port serie et commande read

18 réponses
Avatar
Christophe Maquaire
Bonjour,

j'ai un onduleur qui utilise le protocole de communication par liaison
série décrit ici:

http://eu1.networkupstools.org/protocols/megatec.html

Je voudrais bien récupérer la réponse de l'onduleur à la question Q1 de
son statut dans un script.

je paramètre le port série comme ceci:

nomade:/home/christophe# stty -F /dev/ttyS0 -icanon -parenb -cstopb cs8
2400 -ocrnl icrnl

Ca fonctionne:

christophe@nomade:~$ cat /dev/ttyS0 > rep_serie &

christophe@nomade:~$ echo -ne Q1$'\r' > /dev/ttyS0
christophe@nomade:~$ echo -ne Q1$'\r' > /dev/ttyS0
christophe@nomade:~$ echo -ne Q1$'\r' > /dev/ttyS0

christophe@nomade:~$ cat rep_serie
(237.3 237.3 234.8 016 50.1 13.6 25.0 00001001
(239.3 239.3 235.5 016 50.1 13.6 25.0 00001001
(239.2 239.2 236.2 016 50.1 13.6 25.0 00001001

et je peux faire autant de demande avec un délai aussi variable que je le
souhaite, les lignes de réponse restent sans défaut.

Je me dis donc qu'un read devrait faire l'affaire et là les choses se
compliquent:

christophe@nomade:~$ echo -ne Q1$'\r' > /dev/ttyS0 ; read reponse < /\
dev/ttyS0 ; echo $reponse
(237.1 237.1 234.5 016 50.1 13.6 25.0 00001001
christophe@nomade:~$ echo -ne Q1$'\r' > /dev/ttyS0 ; read reponse < /\
dev/ttyS0 ; echo $reponse

^C (faut bien en sortir...)
Et encore la première réponse est exceptionnelle, en général aucune
réponse n'est récupérée par read.

Je lis la page man de read (qui est même pas sur ma debian...) et
j'essaie

echo -ne Q1$'\r' > /dev/ttyS0 ; read -n 46 reponse < /dev/ttyS0 ; echo \
$reponse
%��� ���r����r������r���r���r���������j

je vous passe la répétition de la commande pour laisser les sorties:

���r����r����r������r���r���r���������j
(237.1 237.1 234.5 015 50.0 13.6 25.0 00001001
J��� ���r����r������r���r���r���������j
237.0 237.1 234.5 015 50.1 13.6 25.0 00001001
���r����r����r������r���r���r���������j
I��r����r����r������r���r���r���������j
���� ���r����r������r���r���r���������j
I��r����r����r������r���r���r���������j
(237.1 237.1 234.6 016 50.0 13.6 25.0 00001001
���r����r����r������r���r���r���������j
����)���r����r������r���r���r���������j
���r����r����r������r���r���r���������j
J���)���r����r������r���r���r���������j

Bon, j'imagine donc que la lecture du port série par read "rate"
aléatoirement quelques bits en début de ligne (je crois), ce qui décale
la lecture et modifie les caractères reçus. Donc pas de <NL> (icrnl
modifie le CR reçu en NL ) en fin de lecture, donc pas de fin de
lecture...

Et là je bloque aussi, comme read...

J'aimerais bien récupérer la ligne entière à coup sûr.

Je suis donc preneur de toute idée nouvelle!

Christophe

8 réponses

1 2
Avatar
Christophe Maquaire
Le Mon, 17 Nov 2008 19:27:37 +0100, Fabien LE LEZ a écrit:

Tu sais, le shell est un langage particulièrement vicieux et illisible.



Je partage entièrement ton avis, les subtilités étranges de sa syntaxe
sont pour moi la source d'une grande perplexité et de longs essais sont
presque toujours nécessaires pour produire les quelques lignes dont j'ai
occasionnellement besoin. En plus ma pratique discontinue provoque
l'oubli quasi systématique des dites subtilités (et je ne parle pas des
expressions dites régulières qui ne sont d'ailleurs pas si régulières que
çà)

Bien des langages de programmation sont plus faciles à comprendre.



J'imagine.

Cependant lesquels peuvent être comparés à un "couteau suisse" comme peut
l'être le shell associé à sed/awk?

En bref, dans quel language me conseillerais-tu d'investir mon "temps de
cerveau disponible" ?

Christophe
Avatar
Fabien LE LEZ
On 18 Nov 2008 10:54:26 GMT, Christophe Maquaire
:

(et je ne parle pas des
expressions dites régulières



Pour le coup, ça, tu vas devoir t'y coller. Les langages sans support
des regex doivent se compter sur les doigts de la main d'un lombric.

qui ne sont d'ailleurs pas si régulières que
çà)



Ça se comprend : "expressions régulières" est un anglicisme.
L'expression "regular expressions" se traduit par "expressions
rationnelles". (Mais comme personne ne comprend cette écriture, je me
contente de "regex", plus court et universellement compris.)
Avatar
Fabien LE LEZ
On 18 Nov 2008 10:54:26 GMT, Christophe Maquaire
:

Cependant lesquels peuvent être comparés à un "couteau suisse" comme peut
l'être le shell associé à sed/awk?



Je ne suis pas sûr de comprendre ta question.
À peu près tous les langages sont capables de faire ce que bash fait.
Sauf que si tu veux travailler sur des chaînes de caractères, C est
probablement un très mauvais choix.

En bref, dans quel language



Tiens, encore un anglicisme.

me conseillerais-tu d'investir mon "temps de
cerveau disponible" ?



Question délicate.

Le langage "canonique" des unixiens est Perl. Je ne l'ai jamais
vraiment regardé, je ne saurais donc le juger.

J'ai appris PHP un peu par hasard (J'avais un site à bricoler en
2001), et comme il est suffisant pour des petits scripts, je le garde.
Mais je ne conseillerais certes pas l'apprentissage de ce langage --
trop mal fagotté et trop instable.

Typiquement, en 2008, quand un débutant demande quoi choisir comme
premier langage, on lui conseille soit Python, soit Ruby.
Vu la vigueur des trolls "Ruby vs Python", j'imagine que les deux se
valent à peu près.

Pour ma part, je programme beaucoup en C++, mais ce n'est ni un
langage de script, ni un langage conseillé aux débutants.
Avatar
Marc Boyer
On 2008-11-18, Fabien LE LEZ wrote:
On 18 Nov 2008 10:54:26 GMT, Christophe Maquaire
:
qui ne sont d'ailleurs pas si régulières que
çà)



Ça se comprend : "expressions régulières" est un anglicisme.
L'expression "regular expressions" se traduit par "expressions
rationnelles". (Mais comme personne ne comprend cette écriture, je me
contente de "regex", plus court et universellement compris.)



Non, non, pas exactement. A la base, il y a les langages
rationnels, qui sont les langages reconnaissables par
les automates, et les expressions régulières, qui sont
les expressions avec séquence, choix, * et peut être complément
(je sais plus).
On montre que (court de base d'info théo) que ce sont
les mêmes langages, et ensuite, on fait l'amalgame entre
les deux...

Marc Boyer
--
En France, un habitant sur 1000 est en prison.
Aux USA, 7 habitants sur 1000 sont en prison.
Est-ce que les USA sont 7 fois plus sûrs ?
Avatar
Thumain Th.
Le Tue, 18 Nov 2008 11:54:26 +0100, Christophe Maquaire
a écrit:

Le Mon, 17 Nov 2008 19:27:37 +0100, Fabien LE LEZ a écrit:

Tu sais, le shell est un langage particulièrement vicieux et illisible.



Je partage entièrement ton avis, les subtilités étranges de sa syntaxe
sont pour moi la source d'une grande perplexité et de longs essais sont
presque toujours nécessaires pour produire les quelques lignes dont j'ai
occasionnellement besoin. En plus ma pratique discontinue provoque
l'oubli quasi systématique des dites subtilités (et je ne parle pas des
expressions dites régulières qui ne sont d'ailleurs pas si régulières que
çà)

Bien des langages de programmation sont plus faciles à comprendre.



J'imagine.

Cependant lesquels peuvent être comparés à un "couteau suisse" comme peut
l'être le shell associé à sed/awk?

En bref, dans quel language me conseillerais-tu d'investir mon "temps de
cerveau disponible" ?

Christophe




Perl ?

--
TT
Avatar
Luc.Habert.00__arjf
Marc Boyer :

Non, non, pas exactement. A la base, il y a les langages
rationnels, qui sont les langages reconnaissables par
les automates, et les expressions régulières, qui sont
les expressions avec séquence, choix, * et peut être complément
(je sais plus).
On montre que (court de base d'info théo) que ce sont
les mêmes langages, et ensuite, on fait l'amalgame entre
les deux...



D'ailleurs, l'équivalence ne tient plus si on travaille sur d'autres
monoides que le monoide libre. Ça justifie de garder les deux termes
régulier et rationel, même quand ils sont équivalents.
Avatar
Christophe Maquaire
Le Tue, 18 Nov 2008 12:48:07 +0100, Fabien LE LEZ a écrit:

Je ne suis pas sûr de comprendre ta question. À peu près tous les
langages sont capables de faire ce que bash fait. Sauf que si tu veux
travailler sur des chaînes de caractères, C est probablement un très
mauvais choix.



Aujourd'hui, j'utilise ce genre de chose pour diverses petites tâches
d'automatisation: sauvegardes des postes familiaux, classement (et
parfois réorganisation des classements) des archives
(sauvegardes,musiques,photos), tentative d'automatisation du processus de
vidage des appareils photos (pas encore au point...) ou d'autres micro-
projets personnels: dernier en date, l'enregistrement des coupures de
courant de courte durée (nut les ratait) via un onduleur, ce qui a initié
cette discussion.
Au total rien de bien ambitieux ni extraordinaire, juste des petits
"tiens, et si..." que j'essaie d'adapter à mes connaissances.

En bref, dans quel language



Tiens, encore un anglicisme.



Moui, l'orthographe d'usage n'a jamais été mon fort et beaucoup des
documentations (parfois bien hermétiques) que j'ai été amené à consulter
ces temps-ci étaient en anglais.

me conseillerais-tu d'investir mon "temps de cerveau disponible" ?



Question délicate.

Le langage "canonique" des unixiens est Perl. Je ne l'ai jamais vraiment
regardé, je ne saurais donc le juger.



La distribution que j'utilise fourmille effectivement de scripts Perl
(comme les autres, je suppose); par bonheur je n'ai jamais eu besoin de
m'y plonger très profondément.

J'ai appris PHP un peu par hasard (J'avais un site à bricoler en 2001),
et comme il est suffisant pour des petits scripts, je le garde. Mais je
ne conseillerais certes pas l'apprentissage de ce langage -- trop mal
fagotté et trop instable.



Je n'ai pas encore eu de projet "avancé" en relation avec un site.

Typiquement, en 2008, quand un débutant demande quoi choisir comme
premier langage, on lui conseille soit Python, soit Ruby. Vu la vigueur
des trolls "Ruby vs Python", j'imagine que les deux se valent à peu
près.

Pour ma part, je programme beaucoup en C++, mais ce n'est ni un langage
de script, ni un langage conseillé aux débutants.



J'ai vu pas mal de choses estampillées "Python"; le niveau du résultat me
semblait bien au-delà des mes capacités. Ruby est évoqué à la fin de ma
"bible" sur les scripts et je crois que je n'ai jamais lu ce chapitre que
d'un oeil distrait, en digérant ce qui précédait.

Dès que j'aurais plus de temps devant moi, je me documenterai sur ces
deux langages. Je crois que je m'y intéresserais de plus près encore si
la syntaxe (et aussi la logique) de l'un des deux me semble assez facile
à retenir, j'ai dépassé l'âge où l'on retient facilement tout ce qu'on
lit.

Christophe
Avatar
Fabien LE LEZ
On 18 Nov 2008 15:33:24 GMT, Christophe Maquaire
:

J'ai vu pas mal de choses estampillées "Python"; le niveau du résultat me
semblait bien au-delà des mes capacités.



Sans doute. Mais même si tu n'arrives jamais à faire de gros
programmes en Python, tu pourras probablement faire des petits scripts
assez simples, bien plus facilement qu'en bash+sed+awk, et avec un
résultat bien plus lisible.
1 2