[JAVA] [API Javax Comm] Lire Port COM
Fermé
goddet
Messages postés
6
Date d'inscription
lundi 12 mars 2007
Statut
Membre
Dernière intervention
5 novembre 2007
-
24 avril 2007 à 09:27
amoun - 2 mars 2009 à 20:13
amoun - 2 mars 2009 à 20:13
A voir également:
- Waptric java
- Waptrick java football - Télécharger - Jeux vidéo
- Waptric com - Télécharger - Divers TV & Vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
2 réponses
Salut!
Il me semble que ton approche n'est pas la bonne, en fait ça m'étonne déjà que t'arrives à récupérer des trames comme ça.
Si j'ai bien suivi ça donne ça :
- tu crées ton objet testCOM
- tu lances la méthode ModeEvenement() de cet objet qui initialise le port et lui ajoute un listener, cette méthode se termine avec succès et après tu comptes sur l'objet lui-même pour gérer la suite par l'intermédiaire de sa méthode serialEvent.
- si tu reçois des données sur le port, serialEvent appelle la méthode ReadSerialPort() qui lit 7 trames puis ferme le port
En partant de là, je vois plusieurs soucis :
T'as aucun contrôle sur ce qui se passe, ton objet testCOM continue à recevoir des event qui t'intéressent ou pas, et ça tant qu'il n'est pas détruit, mais en plus t'as fermé le port entre temps...
Ensuite, cette façon de lire sept trames à la suite, c'est pas l'idéal, pourquoi tu continues pas d'utiliser serialEvent pour gérer trame par trame?
Bref, moi ce que j'en dis c'est :
- tu devrais vraiment, vraiment commencer par faire un thread de cette classe (comme préconisé à la fin du tuto dont tu parles, pour la gestion du lecteur de codes barres)!
En fait reprends carrément le code du tuto tel quel et changes juste la condition d'arrêt.
tu rajoutes comme variables globales à ta classe :
et au lieu de mettre dans le run(), while(running) comme dans le tuto, tu mets
- et puis pour les trames, lis trame par trame et pas les sept d'un coup:
Dans le main tu lances juste ton thread en appelant la méthode start() (attention, pas run()directement!), si tout vas bien, le thread s'arrête de lui même une fois les sept trames reçues et le port
est fermé, plus de problème!
Enfin ça c'est si tout va bien, même comme ça si t'as pas tes sept trames, ton thread va rester bloqué indéfiniment dans le while, il faudra arranger ça, mais c'est déjà un début.
Voilà, après j'ai pas bien compris, tu fais ça pour chaque port série? Qu'est ce que tu fais si tu reçois rien sur un port? T'attends indéfiniment qu'il y ait des données qui arrivent?
Un truc encore, les méthodes commencent par une minuscule en java et les classes par une majuscule, là t'as fait exactement l'inverse! c'est plus facile de se repérer si tu suis ces conventions d'écriture.
Voilà ce n'est que mon avis sur la question, j'éspère que ça pourra t'aider un peu!
bye!
Il me semble que ton approche n'est pas la bonne, en fait ça m'étonne déjà que t'arrives à récupérer des trames comme ça.
Si j'ai bien suivi ça donne ça :
- tu crées ton objet testCOM
- tu lances la méthode ModeEvenement() de cet objet qui initialise le port et lui ajoute un listener, cette méthode se termine avec succès et après tu comptes sur l'objet lui-même pour gérer la suite par l'intermédiaire de sa méthode serialEvent.
- si tu reçois des données sur le port, serialEvent appelle la méthode ReadSerialPort() qui lit 7 trames puis ferme le port
En partant de là, je vois plusieurs soucis :
T'as aucun contrôle sur ce qui se passe, ton objet testCOM continue à recevoir des event qui t'intéressent ou pas, et ça tant qu'il n'est pas détruit, mais en plus t'as fermé le port entre temps...
Ensuite, cette façon de lire sept trames à la suite, c'est pas l'idéal, pourquoi tu continues pas d'utiliser serialEvent pour gérer trame par trame?
Bref, moi ce que j'en dis c'est :
- tu devrais vraiment, vraiment commencer par faire un thread de cette classe (comme préconisé à la fin du tuto dont tu parles, pour la gestion du lecteur de codes barres)!
En fait reprends carrément le code du tuto tel quel et changes juste la condition d'arrêt.
tu rajoutes comme variables globales à ta classe :
private int nbreTramesLues = 0; private final int NBRE_TRAMES_A_LIRE = 7;
et au lieu de mettre dans le run(), while(running) comme dans le tuto, tu mets
while(this.nbreTramesLues < this.NBRE_TRAMES_A_LIRE)
- et puis pour les trames, lis trame par trame et pas les sept d'un coup:
public void serialEvent(SerialPortEvent event) { //gestion des événements sur le port : //on ne fait rien sauf quand les données sont disponibles switch (event.getEventType()) { case SerialPortEvent.DATA_AVAILABLE : try{ System.out.println("On lit sur le port COM\n"); reponse = (String) fluxLecture.readLine(); System.out.println(reponse); this.nbreTramesLues++; }catch(IOException e){ } break; default: break;//on ne fait rien pour les autres evenements } }
Dans le main tu lances juste ton thread en appelant la méthode start() (attention, pas run()directement!), si tout vas bien, le thread s'arrête de lui même une fois les sept trames reçues et le port
est fermé, plus de problème!
Enfin ça c'est si tout va bien, même comme ça si t'as pas tes sept trames, ton thread va rester bloqué indéfiniment dans le while, il faudra arranger ça, mais c'est déjà un début.
Voilà, après j'ai pas bien compris, tu fais ça pour chaque port série? Qu'est ce que tu fais si tu reçois rien sur un port? T'attends indéfiniment qu'il y ait des données qui arrivent?
Un truc encore, les méthodes commencent par une minuscule en java et les classes par une majuscule, là t'as fait exactement l'inverse! c'est plus facile de se repérer si tu suis ces conventions d'écriture.
Voilà ce n'est que mon avis sur la question, j'éspère que ça pourra t'aider un peu!
bye!
je m'adresse en fait a goddet,je suis entrain de developper une application qui permet la navigation gps sur un pocket pc,comme première étape j'ai besoin de capter les trames nmea provenant du gps sur un port série,j'ai essayé de faire sa avec l'hyperterminal,et je vois que votre code va bien avec mon application?
est ce que vous avez trouvé solution à votre problème?
pouvez vous m'aidez?
est ce que vous avez trouvé solution à votre problème?
pouvez vous m'aidez?
Modifié par KX le 21/08/2016 à 13:31
lorsque j'envois ces commandes rien ne se passe (pas de résultat)
mais lorsque je ferme ou je j'ouvre le clavier des caractéres bizaares et des carreaux s'affiches et mot locked ou un locked détirées. je croix que mon portable ne recoit pas ces commandes .
si vous avez recontre ce prob contacte moi sur msn [supprimé par la modération] j e vraiment besoin de ton aide,je suis mnt de réaliser ce truc com mon pfe et il y on ad'autres proble......
voici ce code et j'attends vos idées sur mon hotmail :
/*Most projects that deal with hardware and devices, needs to communicate with them using the COM port of the PC or Server. For example if there is a modem that is connected to a server via its COM port and the Java program has to read the output of the modem then the Java program has to read the COM port for any incoming data.
This sample Java program can be used to Read from a COM port for incoming data and process it. Note that you will need to change the Port number to COM1 or COM2 or any other ports as required.
Also if you are using unix based machines then you will have to uncomment the /dev/term/a instead of COM.*/