Récupération de données RS232 par USB
Modérateur : Francois
Récupération de données RS232 par USB
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
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
-
- 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
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
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
Re: Récupération de données RS232 par USB
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.
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.
-
- 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
Bonjour,
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.
-) ll /dev/tty*
-) dmesg (très bavard)
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
Comme je l’ai déjà indiqué dans un autre topic, nous avons tous été des débutantsLe_Marius a écrit :Merci pour ces infos
Etant donné que je débute mes questions sont assez nombreuses.
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.
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):Le_Marius a écrit :1) Savez vous comment connaître le nom du port USB ?
-) ll /dev/tty*
-) dmesg (très bavard)
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 :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 )?
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 :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)?
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).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 ?
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
Re: Récupération de données RS232 par USB
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
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
-
- 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
Bonsoir,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
Çà 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
Re: Récupération de données RS232 par USB
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.
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.
Re: Récupération de données RS232 par USB
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éé .
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éé .
-
- 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
Bjr,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é.
.
Il suffit d'ajouter une ligne avec un cat, avant la boucle.
Sylvain
Re: Récupération de données RS232 par USB
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
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