Réception donnée hexadécimale sur port serie avec Bash

Réception donnée hexadécimale sur port serie avec Bash - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 06-07-2012 à 23:17:41    

Bonjour à tous,
 
J'ai quelques petits soucis avec la réception des données sur un port série.
 
Alors je cherche à piloter du matériel via le port RS232 (une régie panasonix AG-HMX100).
 
La connection se fait via un adaptateur USB -> Série (/dev/ttyUSB0).
 
Les commandes sont du type STX Commande:parametre ETX un petit exemple : 0x02VDK:33010x03
 
donc en bash j'envoie la commande comme ca et ca marche : echo -ne "\\x02VDK:3301\\x03" > /dev/ttyUSB0 (apres avoir rajouté mon utilisateur au groupe dialout).
Le matériel réagit correctement donc la commande est bonne.
 
En retour la régie est censé renvoyer un ACK ou NAK.
 
avec cutecom (terminal serie graphique) je vois parfaitement ce retour mais je n'arrive pas à le faire en bash.
 
cat /dev/ttyUSB0, meme chose pour dd et tail.
 
Quelqu'un peut-il m'aider?
 
Merci d'avance

Reply

Marsh Posté le 06-07-2012 à 23:17:41   

Reply

Marsh Posté le 07-07-2012 à 10:58:40    

Problème "connu", il faut que ton noyau est été compilé avec les options nécessaires pour pouvoir lire directement depuis le port série virtuel (ce qui, tu remarqueras, est très pratique pour de l'adaptateur USB-série [:the geddons] )
Plutôt que de recompiler, initialise ta sortie ttyUSB0 avec stty pour pouvoir le faire (directement copié depuis un script pour Arduino)

Citation :

stty -F /dev/ttyUSB0 cs8 ispeed 38400 ospeed 38400  ignbrk -brkint -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts


Regardes la page du manuel pour les options de stty :jap:  
Pour ton script au complet, inspires toi de ça :D


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
Reply

Marsh Posté le 07-07-2012 à 13:42:18    

Merci pour ta réponse.
 
J'ai obtenu un résultat très mineur avec la méthode suivante.
 
j'ai de temps à autre un saut de ligne, mais cela ne se produit pas à chaque commande envoyée.
 

Code :
  1. #!/bin/bash
  2. stty -F /dev/ttyUSB0 9600 cs8 -parenb -parodd -cstopb -ixon cread clocal -crtscts -icanon // config du matériel a piloter : 8 bit de donnée, pas de parité, 1 bit de stop, pas de controle de flux
  3. while true
  4. do
  5.    inputline=""
  6.    inputline=$(head -c 1 < /dev/ttyUSB0)
  7.    echo "$inputline"
  8. done


 
Somebody help?


Message édité par Twister le 07-07-2012 à 13:42:33
Reply

Marsh Posté le 07-07-2012 à 14:06:52    

J'avance doucement!!!
 
avec la commande suivante je reçois des 06 (ACK) et des 15 (NAK) mais de manière étrange pas à chaque commande......
 

Code :
  1. od -x < /dev/ttyUSB0


 
Peut-etre est ce un probleme de synchronisation avec la reception des donnée?
 
De plus les données ne sont affiché que lorsqu'une ligne est rempli. Est-il possible de voir les données en direct?
 
Merci d'avance


Message édité par Twister le 07-07-2012 à 14:22:42
Reply

Marsh Posté le 07-07-2012 à 22:45:39    

En lançant ton script d'un côté, et dans un terminal avoir un  

Citation :

tail -f monfichier.ext |xargs -IX printf "$(date -u)\t%s\n" X


En mettant en sortie des commandes une redirection vers monfichier.ext ? (c'est vraiment pas propre :o )
 
Quand à stty, j'ajouterais -iexten -echok [:spamatounet]


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
Reply

Marsh Posté le 13-07-2012 à 15:50:21    

Bon alors ca marche avec un CAT finalement j'ai juste redémarrer le server....

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed