Récupération de données RS232 par USB

Vous souhaitez piloter votre framboise à partir d'une page web ? Ou mieux encore à partir d'un smartphone ou d'une tablette Android ? Venez donc visiter cette rubrique...

Modérateur : Francois

Le_Marius
Messages : 39
Enregistré le : jeu. 14 avr. 2016 15:37

Récupération de données RS232 par USB

Message par Le_Marius » jeu. 14 avr. 2016 15:49

Bonjour

Je cherche a récupérer des données venant du port USB (où un câble UBS/RS232 est connecté) afin de les stocker dans un fichier texte.
Etant donné que je débute sur Raspberry et en programmation, si quelqu'un a déjà eu à faire ça, je suis preneur :)

Par la suite j'aimerai créer une interface permettant à l'utilisateur de taper par exemple une date précise ou un problème précis afin d'aller chercher dans le fichier de donnée la bonne ligne sans à avoir à relire tout le fichier texte.
Est-ce faisable ?
Existe t-il des logiciels sur raspberry permettant de créer facilement ce genre d'applications?

Sincères salutations

spourre
Raspinaute
Messages : 735
Enregistré le : lun. 22 déc. 2014 16:50
Localisation : 67380 LINGOLSHEIM

Re: Récupération de données RS232 par USB

Message par spourre » ven. 15 avr. 2016 01:17

Bonsoir,

C'est assez basique sous les systèmes UNIX (LINUX s'en inspire fortement).
Cela repose sur la redirection des entrées/sorties.
Un périphérique est un fichier (presque) comme un autre et peut se lire:
cat /dev/ttyUSB0 va afficher ce qui sort sur le port USB (par défaut, affichage sur la console).
cat /dev/ttyUSB0 > sortie.txt va écrire dans le fichier sortie.txt qui pourra être consulter avec les commandes cat, more, less, vi ...
Le fichier sortie sera écrasé à chaque lancement de la commande.
Pour garder l'ensemble des traces, il faut remplacer le signe > par un double >>, ceci ajoute la sortie à la fin du fichier, sans écraser le contenu précédent.
Enfin, pour reprendre la main tout de suite après la commande, sans devoir faire un Ctrl c, il suffit d'ajouter & en fin de ligne, avant de taper la touche entrée (return):
cat /dev/ttyUSB0 >> sortie.txt &

Points à vérifier selon ton système:
-) nom du port USB
-) droits (de lecture) sur ce port USB.


Sylvain

Le_Marius
Messages : 39
Enregistré le : jeu. 14 avr. 2016 15:37

Re: Récupération de données RS232 par USB

Message par Le_Marius » ven. 15 avr. 2016 10:30

Merci pour ces infos :)
Etant donné que je débute mes questions sont assez nombreuses.

1) Savez vous comment connaitre le nom du port USB ?

2) Est-ce que je dois placer la commande (script ?) cat/dev/ttyUSB>>sortie.txt dans un fichier texte sur le bureau de la raspberry ou est-ce une commande à entrer dans le terminal qui permettra par la suite de rediriger les données dans un fichier .txt (que je dois surement créer sur le bureau )?

3) Est-il possible d'enregistrer ces données de façon à pouvoir les lire si besoin dans un fichier non modifiable (histoire d'éviter de tout supprimer par erreur)?

4) Est-ce qu'il est possible de créer une interface (simple d'utilisation, interface homme machine pour la supervision) permettant d'envoyer des commandes sur le port RS232 et aussi de proposer une recherche avancée grâce à un champ de saisie afin de pouvoir trouver la bonne ligne dans le fichier récupérant l'ensemble des données ?

Sincères salutations.

spourre
Raspinaute
Messages : 735
Enregistré le : lun. 22 déc. 2014 16:50
Localisation : 67380 LINGOLSHEIM

Re: Récupération de données RS232 par USB

Message par spourre » ven. 15 avr. 2016 14:17

Bonjour,
Le_Marius a écrit :Merci pour ces infos :)
Etant donné que je débute mes questions sont assez nombreuses.
Comme je l’ai déjà indiqué dans un autre topic, nous avons tous été des débutants ;-)
Vos questions sont pertinentes mais ne concernent pas spécifiquement le Raspberry. Elle trouveront certainement leurs réponses dans la lecture 'un livre (un vrai, en papier, dont on tourne les pages) dédié à la prise en main de Linux (UNIX), voire sur un site dédié. Il ne me sera pas possible de donner un cours en ligne. Peut-être qu'un autre contributeur pourra vous donner des liens.
Le_Marius a écrit :1) Savez vous comment connaître le nom du port USB ?
Comme souvent sous Linux, il y a plusieurs solutions pour arriver à un résultat. en voici au moins 2, accessibles depuis le mode console (ligne de commande):
-) ll /dev/tty*
-) dmesg (très bavard)
Le_Marius a écrit :2) Est-ce que je dois placer la commande (script ?) cat/dev/ttyUSB>>sortie.txt dans un fichier texte sur le bureau de la raspberry ou est-ce une commande à entrer dans le terminal qui permettra par la suite de rediriger les données dans un fichier .txt (que je dois sûrement créer sur le bureau )?
Les 2 solutions sont possibles. Soit passer la commande dans une console (le terminal), soit éditer un fichier, commande.txt par exemple, y mettre la commande et rendre ce fichier exécutable (chmod +x commande.txt). normalement, le bureau n'est pas un lieu de stockage.
Le_Marius a écrit :3) Est-il possible d'enregistrer ces données de façon à pouvoir les lire si besoin dans un fichier non modifiable (histoire d'éviter de tout supprimer par erreur)?
Si vous lancez le vidage du port USB depuis votre compte, vous serez bien obligé de mettre le fichier en écriture. Sinon, il faut séparer et faire le vidage en étant super utilisateur et la lecture en étant un utilisateur normal. Il faut alors jouer sur les droits du fichier (chercher la commande chmod).
Le_Marius a écrit :4) Est-ce qu'il est possible de créer une interface (simple d'utilisation, interface homme machine pour la supervision) permettant d'envoyer des commandes sur le port RS232 et aussi de proposer une recherche avancée grâce à un champ de saisie afin de pouvoir trouver la bonne ligne dans le fichier récupérant l'ensemble des données ?
S'il faut dialoguer en mode inter-actif sur le port USB, il y a de nombreux outils en mode console. Personnellement, j'utilise minicom (qu'il faudra peut-être installer).
Sinon, comme toujours, on peut utiliser une redirection mais, cette fois-ci, vers le port USB. Les mêmes remarques que précédemment s'appliquent:
echo "la commande" > /dev/ttyUSB0

Sylvain

Le_Marius
Messages : 39
Enregistré le : jeu. 14 avr. 2016 15:37

Re: Récupération de données RS232 par USB

Message par Le_Marius » mar. 19 avr. 2016 09:58

Bonjour,
Encore merci pour ces réponses :)
la récupération et transmission dans un fichier .txt -> fait
la boucle infinie avec temps de pause de 10ms -> fait (sans pause, la carte a planté en 10 secondes ^^ )
l'interface -> à faire :(

du coups maintenant que j'ai une récupération toute les 10ms, j'aimerai voir la fiabilité afin de voir s'il n'y a aucune perte d'information, je vois que ça tourne, mais je suis pas sure à 100% qu'il y a 0 perte, si encore une fois vous avez une solution, je suis encore preneur.

du coups pour ceux qui veulent des détails:
N'ayant pas encore le consignateur d'état sur lequel je dois récupérer les informations, j'ai pris une clé USB et créé un fichier .txt contenant le type d'information qui sera reçu sur le port USB
afin de pouvoir récupérer les informations h24 j'ai fait une boucle while à l'infini avec un sleep.
du coups ça donne ça :
while :
> do
> cat /media/pi/USB\ DISK/ECP80.txt >> /home/pi/Desktop/Mardi_19_test.txt & (redirection du fichier texte ECP80.txt venant du port USB dans un fichier texte sur le bureau nommé Mardi_19_test.txt)
> sleep 0.001 ( pause de 10ms)
> done

ce programme doit vous paraître peut être un peu manouche ^^
encore une fois si vous connaissez un meilleur moyen j'en prendrai note, si je peux en apprendre plus en prog, je dis pas non :)

spourre
Raspinaute
Messages : 735
Enregistré le : lun. 22 déc. 2014 16:50
Localisation : 67380 LINGOLSHEIM

Re: Récupération de données RS232 par USB

Message par spourre » mer. 20 avr. 2016 00:13

Le_Marius a écrit :Bonjour,
Encore merci pour ces réponses :)
la récupération et transmission dans un fichier .txt -> fait
la boucle infinie avec temps de pause de 10ms -> fait (sans pause, la carte a planté en 10 secondes ^^ )
l'interface -> à faire :(

du coups maintenant que j'ai une récupération toute les 10ms, j'aimerai voir la fiabilité afin de voir s'il n'y a aucune perte d'information, je vois que ça tourne, mais je suis pas sure à 100% qu'il y a 0 perte, si encore une fois vous avez une solution, je suis encore preneur.

du coups pour ceux qui veulent des détails:
N'ayant pas encore le consignateur d'état sur lequel je dois récupérer les informations, j'ai pris une clé USB et créé un fichier .txt contenant le type d'information qui sera reçu sur le port USB
afin de pouvoir récupérer les informations h24 j'ai fait une boucle while à l'infini avec un sleep.
du coups ça donne ça :
while :
> do
> cat /media/pi/USB\ DISK/ECP80.txt >> /home/pi/Desktop/Mardi_19_test.txt & (redirection du fichier texte ECP80.txt venant du port USB dans un fichier texte sur le bureau nommé Mardi_19_test.txt)
> sleep 0.001 ( pause de 10ms)
> done

ce programme doit vous paraître peut être un peu manouche ^^
encore une fois si vous connaissez un meilleur moyen j'en prendrai note, si je peux en apprendre plus en prog, je dis pas non :)
Bonsoir,

Çà avance ;-)
Le shell est un langage interprété qui autorise beaucoup de chose quand on en maîtrise les subtilités. Ce n'est pas le plus efficace ni le plus rapide mais on peut vite tester et obtenir un premier résultat.

Le petit "défaut" que je vois à votre programme est que, toutes les 10 secondes, vous faites une copie de USB vers le fichier sur le bureau. Celui-ci va comporter de très nombreuses lignes en doublon ou plus. Il est certes possible de filtrer ces lignes, plus tard, avec une commande grep mais on peut aussi faire une autre lecture du fichier USB, avec la commande tail -f au lieu du simple cat.
Le tail -f prend la queue du fichier (donc la partie la plus récente (l'option -f réactualise la commande). Comme tout programme UNIX, la commande tail affiche sur la sortie standard qui peut être redirigée avec le >> que vous connaissez maintenant.

Cdl
Sylvain

Le_Marius
Messages : 39
Enregistré le : jeu. 14 avr. 2016 15:37

Re: Récupération de données RS232 par USB

Message par Le_Marius » jeu. 21 avr. 2016 13:28

Bonjour,

Après avoir essayé le tail -f, j'ai remarqué qu'il posait problème car au lancement il ne réécrit pas les lignes du fichier.txt demandé.
Il y a redondance pour ces tests car le fichier qui est copié reste toujours identique, mais quand le Consignateur d'état sera connecté, normalement la redondance disparaîtra (je l'espère).
Pour cette partie je vais attendre le test sur machine.

Sinon, concernant l'avancement, afin d'assurer un stockage "fiable" des données, ces dernières sont stockés en parallèle sur 2 clés USB.
Pour faire simple, j'ai mis le script vu précédemment dans un fichier exécutable. J'ai créé un double menant à un autre stockage et pour lancer les 2 en même temps j'ai fais un fichier exécutable qui lance les 2 scripts. (./lancementdesscripts.sh)

maintenant l'objectif est de faire un archivage journalier des données afin d'éviter de faire un fichier texte de X lignes long à relire.

Le_Marius
Messages : 39
Enregistré le : jeu. 14 avr. 2016 15:37

Re: Récupération de données RS232 par USB

Message par Le_Marius » jeu. 21 avr. 2016 16:35

comme dit auparavant c'est bidon si on veut pas se casser la tête mais impossible si on cherche compliqué
pour faire un archivage journalier on nomme le ficher par la date : $(date +%d_%m_%Y).txt
et hop a minuit pile, un nouveau fichier se recréé .

spourre
Raspinaute
Messages : 735
Enregistré le : lun. 22 déc. 2014 16:50
Localisation : 67380 LINGOLSHEIM

Re: Récupération de données RS232 par USB

Message par spourre » jeu. 21 avr. 2016 19:28

Le_Marius a écrit :Bonjour,

Après avoir essayé le tail -f, j'ai remarqué qu'il posait problème car au lancement il ne réécrit pas les lignes du fichier.txt demandé.
.
Bjr,

Il suffit d'ajouter une ligne avec un cat, avant la boucle.

Sylvain

Le_Marius
Messages : 39
Enregistré le : jeu. 14 avr. 2016 15:37

Re: Récupération de données RS232 par USB

Message par Le_Marius » ven. 22 avr. 2016 10:54

bonjour,

donc avant la boucle je place la même ligne mais en cat ?

cat /media/pi/USB/Tame.txt >> /home/pi/Desktop/Reception.txt
while :
do
tail -f /media/pi/USB/Tame.txt >> /home/pi/Desktop/Reception.txt
sleep 0.001
done


de ce genre ?

Maintenant il me reste à faire l'interface graphique, pour ça j'ai choisi Tkinter .
Est-ce le bon choix ?
vu que je doit depuis l'interface :
- lancer des scripts ( sauvegardé dans fichier .sh)
- lancer des commandes (en saisie manuel de d'utilisateur ) exemple : utilisateur saisi " @HE " et l'interface envoi sur le port USB " echo @HE "
- lire en temps réel les données reçus ( lire en temps réel le .txt sauvegardé)

Merci pour votre aide :)

Répondre

Retourner vers « Des interfaces pour le Raspberry Pi »